@@ -487,9 +487,15 @@ block = do
487487header :: MarkdownParser (F Blocks)
488488header = setextHeader <|> atxHeader <?> "header"
489489
490+atxChar :: MarkdownParser Char
491+atxChar = do
492+ exts <- getOption readerExtensions
493+ return $ if Set.member Ext_literate_haskell exts
494+ then '=' else '#'
495+
490496atxHeader :: MarkdownParser (F Blocks)
491497atxHeader = try $ do
492− level <- many1 (char '#') >>= return . length
498+ level <- atxChar >>= many1 . char >>= return . length
493499 notFollowedBy $ guardEnabled Ext_fancy_lists >>
494500 (char '.' <|> char ')') -- this would be a list
495501 skipSpaces
@@ -502,7 +508,7 @@ atxClosing :: MarkdownParser Attr
502508atxClosing = try $ do
503509 attr' <- option nullAttr
504510 (guardEnabled Ext_mmd_header_identifiers >> mmdHeaderIdentifier)
505− skipMany (char '#')
511+ skipMany . char =<< atxChar
506512 skipSpaces
507513 attr <- option attr'
508514 (guardEnabled Ext_header_attributes >> attributes)
@@ -1614,7 +1620,7 @@ endline = try $ do
16141620 when (stateParserContext st == ListItemState) $ notFollowedBy listStart
16151621 guardDisabled Ext_lists_without_preceding_blankline <|> notFollowedBy listStart
16161622 guardEnabled Ext_blank_before_blockquote <|> notFollowedBy emailBlockQuoteStart
1617− guardEnabled Ext_blank_before_header <|> notFollowedBy (char '#') -- atx header
1623+ guardEnabled Ext_blank_before_header <|> (notFollowedBy . char =<< atxChar) -- atx header
16181624 guardDisabled Ext_backtick_code_blocks <|>
16191625 notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))
16201626 notFollowedByHtmlCloser