aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2021-04-25 10:31:33 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2021-04-25 10:31:33 -0700
commit547bc2cdf83b8be926de55521674c0e8fab12db5 (patch)
tree85a937460cbdbae248d3621f2b22c0fed54a6b34
parent7f4850c9de086a2f6df072bf15357cd05335cffd (diff)
downloadpandoc-547bc2cdf83b8be926de55521674c0e8fab12db5.tar.gz
Add quotes properly in markdown YAML metadata fields.
This fixes a bug, which caused the writer to look at the LAST rather than the FIRST character in determining whether quotes were needed. So we got spurious quotes in some cases and didn't get necessary quotes in others. Closes #7245. Updated a number of test cases accordingly.
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs11
-rw-r--r--test/command/1279.md2
-rw-r--r--test/command/biblatex-inproceedings.md2
-rw-r--r--test/command/biblatex-jaffe.md4
-rw-r--r--test/command/biblatex-moraux.md2
-rw-r--r--test/command/biblatex-quotes.md2
-rw-r--r--test/command/biblatex-spiegelberg.md4
-rw-r--r--test/command/biblatex-test-case-conversion.md4
-rw-r--r--test/command/biblatex-textnormal.md2
9 files changed, 16 insertions, 17 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index daf45ed53..3295d9e6c 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -26,7 +26,7 @@ import Data.Default
import Data.List (intersperse, sortOn, transpose)
import Data.List.NonEmpty (nonEmpty, NonEmpty(..))
import qualified Data.Map as M
-import Data.Maybe (fromMaybe, mapMaybe)
+import Data.Maybe (fromMaybe, mapMaybe, isNothing)
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text as T
@@ -142,18 +142,17 @@ valToYaml (SimpleVal x)
| otherwise =
if hasNewlines x
then hang 0 ("|" <> cr) x
- else if fst $ foldr needsDoubleQuotes (False, True) x
+ else if isNothing $ foldM needsDoubleQuotes True x
then "\"" <> fmap escapeInDoubleQuotes x <> "\""
else x
where
- needsDoubleQuotes t (positive, isFirst)
+ needsDoubleQuotes isFirst t
= if T.any isBadAnywhere t ||
(isFirst && T.any isYamlPunct (T.take 1 t))
- then (True, False)
- else (positive, False)
+ then Nothing
+ else Just False
isBadAnywhere '#' = True
isBadAnywhere ':' = True
- isBadAnywhere '`' = False
isBadAnywhere _ = False
hasNewlines NewLine = True
hasNewlines BlankLines{} = True
diff --git a/test/command/1279.md b/test/command/1279.md
index acad6859e..d3572f245 100644
--- a/test/command/1279.md
+++ b/test/command/1279.md
@@ -9,7 +9,7 @@ title: My Article
[^1]: Dept. of This and That
^D
---
-author: "John Doe[^1]"
+author: John Doe[^1]
date: 2014
title: My Article
---
diff --git a/test/command/biblatex-inproceedings.md b/test/command/biblatex-inproceedings.md
index 29a1e0298..76b584800 100644
--- a/test/command/biblatex-inproceedings.md
+++ b/test/command/biblatex-inproceedings.md
@@ -63,7 +63,7 @@ references:
publisher-place: Cambridge
title: "Le *De Anima* dans la tradition grècque: Quelques aspects de
l'interpretation du traité, de Theophraste à Themistius"
- title-short: *De Anima* dans la tradition grècque
+ title-short: "*De Anima* dans la tradition grècque"
type: paper-conference
- author:
- family: Salam
diff --git a/test/command/biblatex-jaffe.md b/test/command/biblatex-jaffe.md
index f172c6ae7..e0381772b 100644
--- a/test/command/biblatex-jaffe.md
+++ b/test/command/biblatex-jaffe.md
@@ -72,8 +72,8 @@ references:
language: la
number-of-volumes: 2
publisher-place: Leipzig
- title: "Regesta Pontificum Romanorum ab condita ecclesia ad annum post
- Christum natum [mcxcviii]{.smallcaps}"
+ title: Regesta Pontificum Romanorum ab condita ecclesia ad annum post
+ Christum natum [mcxcviii]{.smallcaps}
title-short: Regesta Pontificum Romanorum
type: book
---
diff --git a/test/command/biblatex-moraux.md b/test/command/biblatex-moraux.md
index 8a1b084f8..1624ad960 100644
--- a/test/command/biblatex-moraux.md
+++ b/test/command/biblatex-moraux.md
@@ -86,7 +86,7 @@ references:
publisher-place: Cambridge
title: "Le *De Anima* dans la tradition grècque: Quelques aspects de
l'interpretation du traité, de Theophraste à Themistius"
- title-short: *De Anima* dans la tradition grècque
+ title-short: "*De Anima* dans la tradition grècque"
type: paper-conference
---
diff --git a/test/command/biblatex-quotes.md b/test/command/biblatex-quotes.md
index 9d868cb76..50055316f 100644
--- a/test/command/biblatex-quotes.md
+++ b/test/command/biblatex-quotes.md
@@ -36,7 +36,7 @@ references:
language: en-US
publisher: Princeton University Press
publisher-place: Princeton
- title: "Aristotle's \"De Motu Animalium\""
+ title: Aristotle's "De Motu Animalium"
type: book
---
diff --git a/test/command/biblatex-spiegelberg.md b/test/command/biblatex-spiegelberg.md
index 59d651958..59338ae88 100644
--- a/test/command/biblatex-spiegelberg.md
+++ b/test/command/biblatex-spiegelberg.md
@@ -63,8 +63,8 @@ references:
issued: 1969
language: de-DE
page: 189-216
- title: "Intention" und "Intentionalität" in der Scholastik, bei
- Brentano und Husserl
+ title: "\"Intention\" und \"Intentionalität\" in der Scholastik, bei
+ Brentano und Husserl"
title-short: Intention und Intentionalität
type: article-journal
volume: 29
diff --git a/test/command/biblatex-test-case-conversion.md b/test/command/biblatex-test-case-conversion.md
index aa30767ec..e69cb9336 100644
--- a/test/command/biblatex-test-case-conversion.md
+++ b/test/command/biblatex-test-case-conversion.md
@@ -63,9 +63,9 @@ references:
id: item1
issued: 2013
language: en-US
- title: "A title, in English, with a Proper Name and an ACRONYM and a
+ title: A title, in English, with a Proper Name and an ACRONYM and a
[camelCase]{.nocase} word and some units, 400 [nm]{.nocase},
- 3 [cm]{.nocase}, and a quote, *Alea [iacta est]{.nocase}*"
+ 3 [cm]{.nocase}, and a quote, *Alea [iacta est]{.nocase}*
type: article-journal
---
diff --git a/test/command/biblatex-textnormal.md b/test/command/biblatex-textnormal.md
index 0aa5550c3..a4e6107ec 100644
--- a/test/command/biblatex-textnormal.md
+++ b/test/command/biblatex-textnormal.md
@@ -9,7 +9,7 @@
nocite: "[@*]"
references:
- id: item1
- title: "The title [of this book]{.nodecor}"
+ title: The title [of this book]{.nodecor}
type: book
---