@@ -35,7 +35,7 @@ import Data.List ( transpose, sortBy, intersperse, intercalate, elemIndex)
35import qualified Data.Map as M
35import qualified Data.Map as M
36import Data.Scientific (coefficient, base10Exponent)
36import Data.Scientific (coefficient, base10Exponent)
37import Data.Ord ( comparing )
37import Data.Ord ( comparing )
38−import Data.Char ( isAlphaNum, toLower )
38+import Data.Char ( isSpace, isAlphaNum, toLower )
39import Data.Maybe
39import Data.Maybe
40import Text.Pandoc.Definition
40import Text.Pandoc.Definition
41import qualified Data.Text as T
41import qualified Data.Text as T
@@ -281,13 +281,18 @@ ignorable t = T.pack "_" `T.isSuffixOf` t
282toMetaValue :: ReaderOptions -> Text -> MetaValue
282toMetaValue :: ReaderOptions -> Text -> MetaValue
283toMetaValue opts x =
283toMetaValue opts x =
284− case readMarkdown opts (T.unpack x) of
284+ case readMarkdown opts' (T.unpack x) of
285 Pandoc _ [Plain xs] -> MetaInlines xs
285 Pandoc _ [Plain xs] -> MetaInlines xs
286 Pandoc _ [Para xs]
286 Pandoc _ [Para xs]
287 | endsWithNewline x -> MetaBlocks [Para xs]
287 | endsWithNewline x -> MetaBlocks [Para xs]
288 | otherwise -> MetaInlines xs
288 | otherwise -> MetaInlines xs
289 Pandoc _ bs -> MetaBlocks bs
289 Pandoc _ bs -> MetaBlocks bs
290 where endsWithNewline t = T.pack "\n" `T.isSuffixOf` t
290 where endsWithNewline t = T.pack "\n" `T.isSuffixOf` t
291+ opts' = opts{readerExtensions=readerExtensions opts `Set.difference` meta_exts}
292+ meta_exts = Set.fromList [ Ext_pandoc_title_block
293+ , Ext_mmd_title_block
294+ , Ext_yaml_metadata_block
292yamlToMeta :: ReaderOptions -> Yaml.Value -> MetaValue
297yamlToMeta :: ReaderOptions -> Yaml.Value -> MetaValue
293yamlToMeta opts (Yaml.String t) = toMetaValue opts t
298yamlToMeta opts (Yaml.String t) = toMetaValue opts t
@@ -321,11 +326,15 @@ mmdTitleBlock = try $ do
321kvPair :: MarkdownParser (String, MetaValue)
326kvPair :: MarkdownParser (String, MetaValue)
322kvPair = try $ do
327kvPair = try $ do
323 key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')
328 key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')
329+ skipMany1 spaceNoNewline
324 val <- manyTill anyChar
330 val <- manyTill anyChar
325 (try $ newline >> lookAhead (blankline <|> nonspaceChar))
331 (try $ newline >> lookAhead (blankline <|> nonspaceChar))
332+ guard $ not . null . trim $ val
326 let key' = concat $ words $ map toLower key
333 let key' = concat $ words $ map toLower key
327 let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ trim val
334 let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ trim val
328 return (key',val')
335 return (key',val')
337+ spaceNoNewline = satisfy (\x -> isSpace x && (x/='\n') && (x/='\r'))
330parseMarkdown :: MarkdownParser Pandoc
339parseMarkdown :: MarkdownParser Pandoc
331parseMarkdown = do
340parseMarkdown = do