git.iko.soy/typeable/pandoc
on master help sign in
Markdown parser: avoid backtracking when closing `</div>` not found.
commita208a972c318c1cb37551d9662a61b7c7ab35510 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 26 Feb 2014, 22:46 (13 years ago) parent581075a
1 file changed+13−6
src/Text/Pandoc/Readers/Markdown.hs+13−6
src/Text/Pandoc/Readers/Markdown.hs+13−6
@@ -1738,12 +1738,19 @@ spanHtml = try $ do
17381738divHtml :: MarkdownParser (F Blocks)
17391739divHtml = try $ do
17401740 guardEnabled Ext_markdown_in_html_blocks
1741− (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "div" [])
1742− contents <- mconcat <$> manyTill block (htmlTag (~== TagClose "div"))
1743− let ident = fromMaybe "" $ lookup "id" attrs
1744− let classes = maybe [] words $ lookup "class" attrs
1745− let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1746− return $ B.divWith (ident, classes, keyvals) <$> contents
1741+ (TagOpen _ attrs, rawtag) <- htmlTag (~== TagOpen "div" [])
1742+ bls <- option "" (blankline >> option "" blanklines)
1743+ contents <- mconcat <$>
1744+ many (notFollowedBy' (htmlTag (~== TagClose "div")) >> block)
1745+ closed <- option False (True <$ htmlTag (~== TagClose "div"))
1746+ if closed
1747+ then do
1748+ let ident = fromMaybe "" $ lookup "id" attrs
1749+ let classes = maybe [] words $ lookup "class" attrs
1750+ let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1751+ return $ B.divWith (ident, classes, keyvals) <$> contents
1752+ else -- avoid backtracing
1753+ return $ return (B.rawBlock "html" (rawtag <> bls)) <> contents
17471754
17481755rawHtmlInline :: MarkdownParser (F Inlines)
17491756rawHtmlInline = do