From 48c88d566d19683a7d5b63f88c8b4487234e3712 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 20 Mar 2017 21:51:29 +0100 Subject: Add `space_in_atx_header` extension. This is enabled by default in pandoc and GitHub markdown but not the other flavors. This requirse a space between the opening #'s and the header text in ATX headers (as CommonMark does but many other implementations do not). This is desirable to avoid falsely capturing things ilke #hashtag or #5 Closes #3512. --- src/Text/Pandoc/Extensions.hs | 3 +++ src/Text/Pandoc/Readers/Markdown.hs | 1 + 2 files changed, 4 insertions(+) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Extensions.hs b/src/Text/Pandoc/Extensions.hs index b543d489f..54f38f4a0 100644 --- a/src/Text/Pandoc/Extensions.hs +++ b/src/Text/Pandoc/Extensions.hs @@ -112,6 +112,7 @@ data Extension = | Ext_intraword_underscores -- ^ Treat underscore inside word as literal | Ext_blank_before_blockquote -- ^ Require blank line before a blockquote | Ext_blank_before_header -- ^ Require blank line before a header + | Ext_space_in_atx_header -- ^ Require space between # and header text | Ext_strikeout -- ^ Strikeout using ~~this~~ syntax | Ext_superscript -- ^ Superscript using ^this^ syntax | Ext_subscript -- ^ Subscript using ~this~ syntax @@ -168,6 +169,7 @@ pandocExtensions = extensionsFromList , Ext_intraword_underscores , Ext_blank_before_blockquote , Ext_blank_before_header + , Ext_space_in_atx_header , Ext_strikeout , Ext_superscript , Ext_subscript @@ -223,6 +225,7 @@ githubMarkdownExtensions = extensionsFromList , Ext_ascii_identifiers , Ext_backtick_code_blocks , Ext_autolink_bare_uris + , Ext_space_in_atx_header , Ext_intraword_underscores , Ext_strikeout , Ext_hard_line_breaks diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 169872391..0cc10c1d4 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -534,6 +534,7 @@ atxHeader = try $ do level <- atxChar >>= many1 . char >>= return . length notFollowedBy $ guardEnabled Ext_fancy_lists >> (char '.' <|> char ')') -- this would be a list + guardDisabled Ext_space_in_atx_header <|> notFollowedBy nonspaceChar skipSpaces (text, raw) <- withRaw $ trimInlinesF . mconcat <$> many (notFollowedBy atxClosing >> inline) -- cgit v1.2.3