diff options
author | John MacFarlane <jgm@berkeley.edu> | 2015-10-26 21:34:06 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2015-10-26 22:06:34 -0700 |
commit | 3ea444666a89ab62af673843cca096e8241d76ab (patch) | |
tree | c471f8e6f1acc56ca3cad6ed1fe30677846ea045 /src/Text/Pandoc/Readers | |
parent | 2c08913c782d88e7da89dededc94364b17e193a3 (diff) | |
download | pandoc-3ea444666a89ab62af673843cca096e8241d76ab.tar.gz |
Markdown reader: improved parser for `mmd_title_block`.
We now allow blank metadata fields. These were explicitly
disallowed before.
For background see #2026. The issue in #2026 has since
been fixed in another way, so there is no need to forbid
blank metadata fields.
Diffstat (limited to 'src/Text/Pandoc/Readers')
-rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index f2b0872bb..e0b43d7f0 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -326,23 +326,22 @@ stopLine = try $ (string "---" <|> string "...") >> blankline >> return () mmdTitleBlock :: MarkdownParser () mmdTitleBlock = try $ do guardEnabled Ext_mmd_title_block - kvPairs <- many1 kvPair + firstPair <- kvPair False + restPairs <- many (kvPair True) + let kvPairs = firstPair : restPairs blanklines updateState $ \st -> st{ stateMeta' = stateMeta' st <> return (Meta $ M.fromList kvPairs) } -kvPair :: MarkdownParser (String, MetaValue) -kvPair = try $ do +kvPair :: Bool -> MarkdownParser (String, MetaValue) +kvPair allowEmpty = try $ do key <- many1Till (alphaNum <|> oneOf "_- ") (char ':') - skipMany1 spaceNoNewline - val <- manyTill anyChar + val <- trim <$> manyTill anyChar (try $ newline >> lookAhead (blankline <|> nonspaceChar)) - guard $ not . null . trim $ val + guard $ allowEmpty || not (null val) let key' = concat $ words $ map toLower key - let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ trim val + let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ val return (key',val') - where - spaceNoNewline = satisfy (\x -> isSpace x && (x/='\n') && (x/='\r')) parseMarkdown :: MarkdownParser Pandoc parseMarkdown = do |