aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2013-08-06 16:19:34 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2013-08-06 16:20:45 -0700
commit52c5cdb04e6c574f897c948e45084bf9343bf57c (patch)
tree302e55a4da51340264302a1c848b9a726159caa2
parentb1be9cfaef10f907e3439d4fa91b63b3402b233f (diff)
downloadpandoc-52c5cdb04e6c574f897c948e45084bf9343bf57c.tar.gz
Biblio: Capitalize citation note only if it has a prefix.
So, author names or titles that aren't capitalized will stay uncapitalized.
-rw-r--r--changelog1
-rw-r--r--src/Text/Pandoc/Biblio.hs17
2 files changed, 11 insertions, 7 deletions
diff --git a/changelog b/changelog
index 3166ff017..9e46155fd 100644
--- a/changelog
+++ b/changelog
@@ -76,6 +76,7 @@
+ Don't interfere with Notes that aren't citation notes.
This fixes a bug in which notes not generated from citations were
being altered (e.g. first letter capitalized) (#898).
+ + Only capitalize footnote citations when they have a prefix.
+ Changes in suffix parsing. A suffix beginning with a digit gets 'p'
inserted before it before passing to citeproc-hs, so that bare numbers
are treated as page numbers by default. A suffix not beginning with
diff --git a/src/Text/Pandoc/Biblio.hs b/src/Text/Pandoc/Biblio.hs
index d0db35ae7..755c779ea 100644
--- a/src/Text/Pandoc/Biblio.hs
+++ b/src/Text/Pandoc/Biblio.hs
@@ -84,11 +84,6 @@ mvPunct (Space : x : ys) | isNote x, startWithPunct ys =
mvPunct (Space : x : ys) | isNote x = x : ys
mvPunct xs = xs
-sanitize :: [Inline] -> [Inline]
-sanitize xs | endWithPunct xs = toCapital xs
- | otherwise = toCapital (xs ++ [Str "."])
-
-
-- A replacement for citeproc-hs's endWithPunct, which wrongly treats
-- a sentence ending in '.)' as not ending with punctuation, leading
-- to an extra period.
@@ -103,8 +98,8 @@ endWithPunct xs@(_:_) = case reverse (stringify [last xs]) of
deNote :: Pandoc -> Pandoc
deNote = topDown go
- where go (Cite cs [Note [Para xs]]) =
- Cite cs [Note $ bottomUp go' [Para $ sanitize xs]]
+ where go (Cite (c:cs) [Note xs]) =
+ Cite (c:cs) [Note $ bottomUp go' $ sanitize c xs]
go (Note xs) = Note $ bottomUp go' xs
go x = x
go' (Note [Para xs]:ys) =
@@ -112,6 +107,14 @@ deNote = topDown go
then initInline xs ++ ys
else xs ++ ys
go' xs = xs
+ sanitize :: Citation -> [Block] -> [Block]
+ sanitize Citation{citationPrefix = pref} [Para xs] =
+ case (null pref, endWithPunct xs) of
+ (True, False) -> [Para $ xs ++ [Str "."]]
+ (True, True) -> [Para xs]
+ (False, False) -> [Para $ toCapital $ xs ++ [Str "."]]
+ (False, True) -> [Para $ toCapital xs]
+ sanitize _ bs = bs
isTextualCitation :: [Citation] -> Bool
isTextualCitation (c:_) = citationMode c == AuthorInText