Simplify/fix reading of --metadata
values on command line.
Previously we used HsYAML's decodeStrict to recognize boolean values (treating everything else as a string). This caused problems relating to hvr/HsYAML#7. We now just check for the recognized boolean values `true|True|TRUE|false|False|FALSE`, and avoid using HsYAML. Closes #5177.
This commit is contained in:
parent
c8b79b0a04
commit
ffc2192caf
2 changed files with 20 additions and 7 deletions
|
@ -55,7 +55,6 @@ import qualified Data.Text.Lazy as TL
|
|||
import qualified Data.Text.Lazy.Encoding as TE
|
||||
import qualified Data.Text.Encoding.Error as TE
|
||||
import qualified Data.Text.Encoding.Error as TSE
|
||||
import qualified Data.YAML as YAML
|
||||
import Network.URI (URI (..), parseURI)
|
||||
import System.Directory (getAppUserDataDirectory)
|
||||
import System.Exit (exitSuccess)
|
||||
|
@ -332,12 +331,14 @@ removeMetaKeys :: [(String,String)] -> Pandoc -> Pandoc
|
|||
removeMetaKeys kvs pdc = foldr (deleteMeta . fst) pdc kvs
|
||||
|
||||
readMetaValue :: String -> MetaValue
|
||||
readMetaValue s = case YAML.decodeStrict (UTF8.fromString s) of
|
||||
Right [YAML.Scalar (YAML.SStr t)]
|
||||
-> MetaString $ T.unpack t
|
||||
Right [YAML.Scalar (YAML.SBool b)]
|
||||
-> MetaBool b
|
||||
_ -> MetaString s
|
||||
readMetaValue s
|
||||
| s == "true" = MetaBool True
|
||||
| s == "True" = MetaBool True
|
||||
| s == "TRUE" = MetaBool True
|
||||
| s == "false" = MetaBool False
|
||||
| s == "False" = MetaBool False
|
||||
| s == "FALSE" = MetaBool False
|
||||
| otherwise = MetaString s
|
||||
|
||||
-- Transformations of a Pandoc document post-parsing:
|
||||
|
||||
|
|
12
test/command/5177.md
Normal file
12
test/command/5177.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
This should not give a "Prelude.read: no parse" error:
|
||||
|
||||
```
|
||||
% pandoc -M foo=1e -s -t markdown
|
||||
hi
|
||||
^D
|
||||
---
|
||||
foo: 1e
|
||||
---
|
||||
|
||||
hi
|
||||
```
|
Loading…
Reference in a new issue