@@ -503,9 +503,15 @@ block = do
503503header :: MarkdownParser (F Blocks)
504504header = setextHeader <|> atxHeader <?> "header"
505505
506+atxChar :: MarkdownParser Char
507+atxChar = do
508+ exts <- getOption readerExtensions
509+ return $ if Set.member Ext_literate_haskell exts
510+ then '=' else '#'
511+
506512atxHeader :: MarkdownParser (F Blocks)
507513atxHeader = try $ do
508− level <- many1 (char '#') >>= return . length
514+ level <- atxChar >>= many1 . char >>= return . length
509515 notFollowedBy $ guardEnabled Ext_fancy_lists >>
510516 (char '.' <|> char ')') -- this would be a list
511517 skipSpaces
@@ -521,7 +527,7 @@ atxClosing :: MarkdownParser Attr
521527atxClosing = try $ do
522528 attr' <- option nullAttr
523529 (guardEnabled Ext_mmd_header_identifiers >> mmdHeaderIdentifier)
524− skipMany (char '#')
530+ skipMany . char =<< atxChar
525531 skipSpaces
526532 attr <- option attr'
527533 (guardEnabled Ext_header_attributes >> attributes)
@@ -1649,7 +1655,7 @@ endline = try $ do
16491655 notFollowedBy (inList >> listStart)
16501656 guardDisabled Ext_lists_without_preceding_blankline <|> notFollowedBy listStart
16511657 guardEnabled Ext_blank_before_blockquote <|> notFollowedBy emailBlockQuoteStart
1652− guardEnabled Ext_blank_before_header <|> notFollowedBy (char '#') -- atx header
1658+ guardEnabled Ext_blank_before_header <|> (notFollowedBy . char =<< atxChar) -- atx header
16531659 guardDisabled Ext_backtick_code_blocks <|>
16541660 notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))
16551661 notFollowedByHtmlCloser