@@ -446,6 +446,7 @@ block = choice [ mempty <$ blanklines
446446 , header
447447 , lhsCodeBlock
448448 , rawTeXBlock
449+ , divHtml
449450 , htmlBlock
450451 , table
451452 , lineBlock
@@ -1355,6 +1356,7 @@ inline = choice [ whitespace
13551356 , superscript
13561357 , inlineNote -- after superscript because of ^[link](/foo)^
13571358 , autoLink
1359+ , spanHtml
13581360 , rawHtmlInline
13591361 , escapedChar
13601362 , rawLaTeXInline'
@@ -1755,6 +1757,26 @@ inBrackets parser = do
17551757 char ']'
17561758 return $ "[" ++ contents ++ "]"
17571759
1760+spanHtml :: MarkdownParser (F Inlines)
1761+spanHtml = try $ do
1762+ guardEnabled Ext_markdown_in_html_blocks
1763+ (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "span" [])
1764+ contents <- mconcat <$> manyTill inline (htmlTag (~== TagClose "span"))
1765+ let ident = maybe "" id $ lookup "id" attrs
1766+ let classes = maybe [] words $ lookup "class" attrs
1767+ let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1768+ return $ B.spanWith (ident, classes, keyvals) <$> contents
1769+
1770+divHtml :: MarkdownParser (F Blocks)
1771+divHtml = try $ do
1772+ guardEnabled Ext_markdown_in_html_blocks
1773+ (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "div" [])
1774+ contents <- mconcat <$> manyTill block (htmlTag (~== TagClose "div"))
1775+ let ident = maybe "" id $ lookup "id" attrs
1776+ let classes = maybe [] words $ lookup "class" attrs
1777+ let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1778+ return $ B.divWith (ident, classes, keyvals) <$> contents
1779+
17581780rawHtmlInline :: MarkdownParser (F Inlines)
17591781rawHtmlInline = do
17601782 guardEnabled Ext_raw_html