diff options
author | John MacFarlane <jgm@berkeley.edu> | 2018-08-07 09:26:11 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2018-08-07 09:26:58 -0700 |
commit | b76203ccf11c44dcea3837d1e06c8a2969be52bc (patch) | |
tree | 357a59479024179d251af7355cc5955df2ddca79 | |
parent | 030e8969c766446f498a478c142c200946b63089 (diff) | |
download | pandoc-b76203ccf11c44dcea3837d1e06c8a2969be52bc.tar.gz |
Markdown reader: Properly handle boolean values in YAML metadata.
This fixes a regression in 2.2.3, which cause boolean values to
be parsed as MetaInlines instead of MetaBool.
Note also an undocumented (but desirable) change in 2.2.3:
numbers are now parsed as MetaInlines rather than MetaString.
Closes #4819.
-rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 13 | ||||
-rw-r--r-- | test/command/4819.md | 50 |
2 files changed, 62 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 3965392d6..c4e8a6524 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -301,6 +301,14 @@ toMetaValue x = -- not end in a newline, but a "block" set off with -- `|` or `>` will. +checkBoolean :: Text -> Maybe Bool +checkBoolean t = + if t == T.pack "true" || t == T.pack "True" || t == T.pack "TRUE" + then Just True + else if t == T.pack "false" || t == T.pack "False" || t == T.pack "FALSE" + then Just False + else Nothing + yamlToMeta :: PandocMonad m => YAML.Node -> MarkdownParser m (F MetaValue) yamlToMeta (YAML.Scalar x) = @@ -309,7 +317,10 @@ yamlToMeta (YAML.Scalar x) = YAML.SBool b -> return $ return $ MetaBool b YAML.SFloat d -> return $ return $ MetaString (show d) YAML.SInt i -> return $ return $ MetaString (show i) - YAML.SUnknown _ t -> toMetaValue t + YAML.SUnknown _ t -> + case checkBoolean t of + Just b -> return $ return $ MetaBool b + Nothing -> toMetaValue t YAML.SNull -> return $ return $ MetaString "" yamlToMeta (YAML.Sequence _ xs) = do xs' <- mapM yamlToMeta xs diff --git a/test/command/4819.md b/test/command/4819.md new file mode 100644 index 000000000..548583387 --- /dev/null +++ b/test/command/4819.md @@ -0,0 +1,50 @@ +``` +% pandoc -f markdown -t native -s +--- +foo: 42 +... +^D +Pandoc (Meta {unMeta = fromList [("foo",MetaInlines [Str "42"])]}) +[] +``` + +``` +% pandoc -f markdown -t native -s +--- +foo: true +... +^D +Pandoc (Meta {unMeta = fromList [("foo",MetaBool True)]}) +[] +``` + +``` +% pandoc -f markdown -t native -s +--- +foo: True +... +^D +Pandoc (Meta {unMeta = fromList [("foo",MetaBool True)]}) +[] +``` + +``` +% pandoc -f markdown -t native -s +--- +foo: FALSE +... +^D +Pandoc (Meta {unMeta = fromList [("foo",MetaBool False)]}) +[] +``` + +``` +% pandoc -f markdown -t native -s +--- +foo: no +... +^D +Pandoc (Meta {unMeta = fromList [("foo",MetaInlines [Str "no"])]}) +[] +``` + |