aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Writers')
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index cddc57850..24e50f0f7 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -179,19 +179,26 @@ valToYaml (SimpleVal x)
| otherwise =
if hasNewlines x
then hang 0 ("|" <> cr) x
- else if any hasPunct x
+ else if fst $ foldr needsDoubleQuotes (False, True) x
then "\"" <> fmap escapeInDoubleQuotes x <> "\""
else x
where
+ needsDoubleQuotes t (positive, isFirst)
+ = if T.any isBadAnywhere t ||
+ (isFirst && T.any isYamlPunct (T.take 1 t))
+ then (True, False)
+ else (positive, False)
+ isBadAnywhere '#' = True
+ isBadAnywhere ':' = True
+ isBadAnywhere '`' = False
+ isBadAnywhere _ = False
hasNewlines NewLine = True
hasNewlines BlankLines{} = True
hasNewlines CarriageReturn = True
hasNewlines (Concat w z) = hasNewlines w || hasNewlines z
hasNewlines _ = False
- hasPunct = T.any isYamlPunct
isYamlPunct = (`elem` ['-','?',':',',','[',']','{','}',
- '#','&','*','!','|','>','\'','"',
- '%','@','`',',','[',']','{','}'])
+ '#','&','*','!','|','>','\'','"', '%','@','`'])
escapeInDoubleQuotes = T.replace "\"" "\\\"" . T.replace "\\" "\\\\"
valToYaml _ = empty