Skip to content

Commit 7427de3

Browse files
authored
Merge pull request #80 from tomidery/fix-pandoc-metadata-check
2 parents 9146420 + 8f18d2a commit 7427de3

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/hastyscribepkg/markdown.nim

+19-13
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ const
112112

113113
## High Level API
114114

115-
import strutils
115+
import
116+
strutils,
117+
pegs
116118

117119
const
118120
DefaultFlags = MKD_TOC or MKD_1_COMPAT or MKD_EXTRA_FOOTNOTE or MKD_DLEXTRA or MKD_FENCEDCODE or MKD_GITHUBTAGS or MKD_HTML5ANCHOR or MKD_LATEX
@@ -145,19 +147,23 @@ proc md*(s: string, f = 0, data: var TMDMetadata): string =
145147
flags = DefaultFlags
146148
else:
147149
flags = uint32(f)
148-
# Check if metadata is present
149-
var lns = s.splitLines
150+
# Check if Pandoc style metadata is present
150151
var valid_metadata = false
151-
var offset = 0
152-
if (lns[0][0] == '%') and (lns[1][0] == '%') and (lns[2][0] == '%'):
153-
valid_metadata = true
154-
else:
155-
valid_metadata = false
156-
if lns[0][0] == '%':
157-
offset = 2
158-
if lns[1][0] == '%':
159-
offset = 3
160-
var str = cstring(lns[offset..lns.len-1].join("\n"))
152+
var contents = s
153+
let peg_pandoc = peg"""
154+
definition <- ^{line} {line}? {line}?
155+
line <- '\%' @ \n
156+
"""
157+
var matches: array[0..2, string]
158+
let (s, e) = contents.findBounds(peg_pandoc, matches)
159+
# the pattern must start at the beginning of the file
160+
if s == 0:
161+
if matches[0] != "" and matches[1] != "" and matches[2] != "":
162+
valid_metadata = true
163+
else:
164+
# incomplete metadata, remove the whole pandoc section to not confuse discount
165+
contents = contents[e-1 .. ^1]
166+
var str = cstring(contents)
161167
var mmiot = mkd_string(str, cint(str.len-1), flags)
162168
if valid_metadata:
163169
data.title = $mkd_doc_title(mmiot)

0 commit comments

Comments
 (0)