@@ -499,6 +499,7 @@ block = do
499499 , header
500500 , lhsCodeBlock
501501 , divHtml
502+ , divFenced
502503 , htmlBlock
503504 , table
504505 , codeBlockIndented
@@ -1686,6 +1687,9 @@ endline = try $ do
16861687 guardEnabled Ext_blank_before_header <|> (notFollowedBy . char =<< atxChar) -- atx header
16871688 guardDisabled Ext_backtick_code_blocks <|>
16881689 notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))
1690+ guardDisabled Ext_fenced_divs <|>
1691+ do divLevel <- stateFencedDivLevel <$> getState
1692+ guard (divLevel < 1) <|> notFollowedBy fenceEnd
16891693 notFollowedByHtmlCloser
16901694 (eof >> return mempty)
16911695 <|> (guardEnabled Ext_hard_line_breaks >> return (return B.linebreak))
@@ -1930,6 +1934,30 @@ divHtml = try $ do
19301934 else -- avoid backtracing
19311935 return $ return (B.rawBlock "html" (rawtag <> bls)) <> contents
19321936
1937+divFenced :: PandocMonad m => MarkdownParser m (F Blocks)
1938+divFenced = try $ do
1939+ guardEnabled Ext_fenced_divs
1940+ nonindentSpaces
1941+ string ":::"
1942+ skipMany (char ':')
1943+ skipMany spaceChar
1944+ attribs <- attributes <|> ((\x -> ("",[x],[])) <$> many1 nonspaceChar)
1945+ skipMany spaceChar
1946+ skipMany (char ':')
1947+ blankline
1948+ updateState $ \st -> st{ stateFencedDivLevel = stateFencedDivLevel st + 1 }
1949+ bs <- mconcat <$> manyTill block fenceEnd
1950+ updateState $ \st -> st{ stateFencedDivLevel = stateFencedDivLevel st - 1 }
1951+ return $ B.divWith attribs <$> bs
1952+
1953+fenceEnd :: PandocMonad m => MarkdownParser m ()
1954+fenceEnd = try $ do
1955+ nonindentSpaces
1956+ string ":::"
1957+ skipMany (char ':')
1958+ blanklines
1959+ return ()
1960+
19331961rawHtmlInline :: PandocMonad m => MarkdownParser m (F Inlines)
19341962rawHtmlInline = do
19351963 guardEnabled Ext_raw_html