git.iko.soy/typeable/pandoc
on master help sign in
Escape MetaString values (as added with --metadata flag).

Previously they would be transmitted to the template without any escaping. Note that `--M title='*foo*'` yields a different result from --- title: *foo* --- In the latter case, we have emphasis; in the former case, just a string with literal asterisks (which will be escaped in formats, like Markdown, that require it). Closes #3792.

commitbe9957bddc1e1edac2375b6b945ab4d07f6198d2 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 12 Aug 2017, 20:25 (9 years ago) parent0ab8670
2 files changed+21−6
src/Text/Pandoc/Writers/Shared.hs+8−6 test/command/3792.md+13
src/Text/Pandoc/Writers/Shared.hs+8−6
@@ -42,7 +42,7 @@ module Text.Pandoc.Writers.Shared (
4242 , gridTable
4343 )
4444where
45−import Control.Monad (liftM, zipWithM)
45+import Control.Monad (zipWithM)
4646import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
4747 encode, fromJSON)
4848import qualified Data.HashMap.Strict as H
@@ -51,6 +51,7 @@ import qualified Data.Map as M
5151import Data.Maybe (isJust)
5252import qualified Data.Text as T
5353import qualified Data.Traversable as Traversable
54+import qualified Text.Pandoc.Builder as Builder
5455import Text.Pandoc.Definition
5556import Text.Pandoc.Options
5657import Text.Pandoc.Pretty
@@ -103,14 +104,15 @@ metaValueToJSON :: (Monad m, ToJSON a)
103104 -> ([Inline] -> m a)
104105 -> MetaValue
105106 -> m Value
106−metaValueToJSON blockWriter inlineWriter (MetaMap metamap) = liftM toJSON $
107+metaValueToJSON blockWriter inlineWriter (MetaMap metamap) = toJSON <$>
107108 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) metamap
108−metaValueToJSON blockWriter inlineWriter (MetaList xs) = liftM toJSON $
109+metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
109110 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
110111metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
111−metaValueToJSON _ _ (MetaString s) = return $ toJSON s
112−metaValueToJSON blockWriter _ (MetaBlocks bs) = liftM toJSON $ blockWriter bs
113−metaValueToJSON _ inlineWriter (MetaInlines bs) = liftM toJSON $ inlineWriter bs
112+metaValueToJSON _ inlineWriter (MetaString s) = toJSON <$>
113+ inlineWriter (Builder.toList (Builder.text s))
114+metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
115+metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
114116
115117-- | Retrieve a field value from a JSON object.
116118getField :: FromJSON a
test/command/3792.mdnew file+13
@@ -0,0 +1,13 @@
1+Make sure metadata values are treated as strings,
2+and properly escaped.
3+
4+```
5+% pandoc -t markdown -s -M title="<this> *that*"
6+ok
7+^D
8+---
9+title: '\<this\> \*that\*'
10+---
11+
12+ok
13+```