@@ -326,23 +326,22 @@ stopLine = try $ (string "---" <|> string "...") >> blankline >> return ()
326326mmdTitleBlock :: MarkdownParser ()
327327mmdTitleBlock = try $ do
328328 guardEnabled Ext_mmd_title_block
329− kvPairs <- many1 kvPair
329+ firstPair <- kvPair False
330+ restPairs <- many (kvPair True)
331+ let kvPairs = firstPair : restPairs
330332 blanklines
331333 updateState $ \st -> st{ stateMeta' = stateMeta' st <>
332334 return (Meta $ M.fromList kvPairs) }
333335
334−kvPair :: MarkdownParser (String, MetaValue)
335−kvPair = try $ do
336+kvPair :: Bool -> MarkdownParser (String, MetaValue)
337+kvPair allowEmpty = try $ do
336338 key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')
337− skipMany1 spaceNoNewline
338− val <- manyTill anyChar
339+ val <- trim <$> manyTill anyChar
339340 (try $ newline >> lookAhead (blankline <|> nonspaceChar))
340− guard $ not . null . trim $ val
341+ guard $ allowEmpty || not (null val)
341342 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
343344 return (key',val')
344− where
345− spaceNoNewline = satisfy (\x -> isSpace x && (x/='\n') && (x/='\r'))
346345
347346parseMarkdown :: MarkdownParser Pandoc
348347parseMarkdown = do