git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: improved parser for `mmd_title_block`.
3ea4446John MacFarlane
src/Text/Pandoc/Readers/Markdown.hs+8−9
@@ -326,23 +326,22 @@ stopLine = try $ (string "---" <|> string "...") >> blankline >> return ()
326mmdTitleBlock :: MarkdownParser ()
326mmdTitleBlock :: MarkdownParser ()
327mmdTitleBlock = try $ do
327mmdTitleBlock = try $ do
328 guardEnabled Ext_mmd_title_block
328 guardEnabled Ext_mmd_title_block
329− kvPairs <- many1 kvPair
329+ firstPair <- kvPair False
330+ restPairs <- many (kvPair True)
331+ let kvPairs = firstPair : restPairs
330 blanklines
332 blanklines
331 updateState $ \st -> st{ stateMeta' = stateMeta' st <>
333 updateState $ \st -> st{ stateMeta' = stateMeta' st <>
332 return (Meta $ M.fromList kvPairs) }
334 return (Meta $ M.fromList kvPairs) }
333
335
334−kvPair :: MarkdownParser (String, MetaValue)
336+kvPair :: Bool -> MarkdownParser (String, MetaValue)
335−kvPair = try $ do
337+kvPair allowEmpty = try $ do
336 key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')
338 key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')
337− skipMany1 spaceNoNewline
338− val <- manyTill anyChar
339+ val <- trim <$> manyTill anyChar
339 (try $ newline >> lookAhead (blankline <|> nonspaceChar))
340 (try $ newline >> lookAhead (blankline <|> nonspaceChar))
340− guard $ not . null . trim $ val
341+ guard $ allowEmpty || not (null val)
341 let key' = concat $ words $ map toLower key
342 let key' = concat $ words $ map toLower key
342− let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ trim val
343+ let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ val
343 return (key',val')
344 return (key',val')
344− where
345− spaceNoNewline = satisfy (\x -> isSpace x && (x/='\n') && (x/='\r'))
346
345
347parseMarkdown :: MarkdownParser Pandoc
346parseMarkdown :: MarkdownParser Pandoc
348parseMarkdown = do
347parseMarkdown = do