git.iko.soy/typeable/pandoc
on master help sign in
3 files changed+113−16
since splitsnapshots
unifiedsplit
src/Text/Pandoc/Citeproc.hs+22−15 src/Text/Pandoc/Writers/HTML.hs+6−1 test/command/7394.md+85
src/Text/Pandoc/Citeproc.hs+22−15
@@ -99,7 +99,7 @@ processCitations (Pandoc meta bs) = do
9999 let metanocites = lookupMeta "nocite" meta
100100 let Pandoc meta'' bs' =
101101 maybe id (setMeta "nocite") metanocites .
102− walk (map capitalizeNoteCitation . mvPunct moveNotes locale) .
102+ walk (mvPunct moveNotes locale) .
103103 (if styleIsNoteStyle sopts
104104 then walk addNote . walk deNote
105105 else id) .
@@ -564,27 +564,28 @@ extractText (FancyVal x) = toText x
564564extractText (NumVal n) = T.pack (show n)
565565extractText _ = mempty
566566
567−capitalizeNoteCitation :: Inline -> Inline
568−capitalizeNoteCitation (Cite cs [Note [Para ils]]) =
569− Cite cs
570− [Note [Para $ B.toList $ addTextCase Nothing CapitalizeFirst
571− $ B.fromList ils]]
572−capitalizeNoteCitation x = x
573−
567+-- Here we take the Spans with class csl-note that are left
568+-- after deNote has removed nested ones, and convert them
569+-- into real notes.
574570addNote :: Inline -> Inline
575−addNote (Span ("",["csl-note"],[]) ils) = Note [Para ils]
571+addNote (Span ("",["csl-note"],[]) ils) =
572+ Note [Para $
573+ B.toList . addTextCase Nothing CapitalizeFirst . B.fromList $ ils]
576574addNote x = x
577575
578−deNote :: [Inline] -> [Inline]
579−deNote [] = []
580−deNote (Note bs:rest) =
576+-- Here we handle citation notes that occur inside footnotes
577+-- or other citation notes, in a note style. We don't want
578+-- notes inside notes, so we convert these to parenthesized
579+-- or comma-separated citations.
580+deNote :: Inline -> Inline
581+deNote (Note bs) =
581582 case bs of
582583 [Para (cit@(Cite (c:_) _) : ils)]
583584 | citationMode c /= AuthorInText ->
584585 -- if citation is first in note, no need to parenthesize.
585586 Note [Para (walk removeNotes $ cit : walk addParens ils)]
586− : deNote rest
587− _ -> Note (walk removeNotes . walk addParens $ bs) : deNote rest
587+ _ -> Note (walk removeNotes . walk addParens $ bs)
588+
588589 where
589590 addParens [] = []
590591 addParens (Cite (c:cs) ils : zs)
@@ -594,25 +595,31 @@ deNote (Note bs:rest) =
594595 | otherwise
595596 = Cite (c:cs) (concatMap noteInParens ils) : addParens zs
596597 addParens (x:xs) = x : addParens xs
598+
597599 removeNotes (Span ("",["csl-note"],[]) ils) = Span ("",[],[]) ils
598600 removeNotes x = x
601+
599602 needsPeriod [] = True
600603 needsPeriod (Str t:_) = case T.uncons t of
601604 Nothing -> False
602605 Just (c,_) -> isUpper c
603606 needsPeriod (Space:zs) = needsPeriod zs
604607 needsPeriod _ = False
608+
605609 noteInParens (Span ("",["csl-note"],[]) ils)
606610 = Space : Str "(" :
607611 removeFinalPeriod ils ++ [Str ")"]
608612 noteInParens x = [x]
613+
609614 noteAfterComma needsPer (Span ("",["csl-note"],[]) ils)
615+ | not (null ils)
610616 = Str "," : Space :
611617 if needsPer
612618 then ils
613619 else removeFinalPeriod ils
614620 noteAfterComma _ x = [x]
615−deNote (x:xs) = x : deNote xs
621+
622+deNote x = x
616623
617624-- Note: we can't use dropTextWhileEnd indiscriminately,
618625-- because this would remove the final period on abbreviations like Ibid.
src/Text/Pandoc/Writers/HTML.hs+6−1
@@ -26,8 +26,13 @@ module Text.Pandoc.Writers.HTML (
2626 writeSlideous,
2727 writeDZSlides,
2828 writeRevealJs,
29− tagWithAttributes
29+ tagWithAttributes,
30+ inlineToHtml,
31+ blockToHtml,
32+ WriterState(..),
33+ defaultWriterState
3034 ) where
35+
3136import Control.Monad.State.Strict
3237import Data.Char (ord)
3338import Data.List (intercalate, intersperse, partition, delete, (\\), foldl')
test/command/7394.mdnew file+85
@@ -0,0 +1,85 @@
1+```
2+% pandoc -f markdown -t plain --citeproc
3+---
4+csl: command/chicago-fullnote-bibliography.csl
5+references:
6+- author:
7+ - family: Wandt
8+ given: Manfred
9+ edition: 6
10+ id: wandt2014ges-sv
11+ issued: 2014
12+ publisher: Franz Vahlen
13+ publisher-place: München
14+ title: Gesetzliche schuldverhältnisse
15+ title-short: Gesetzl SV
16+ type: book
17+- author:
18+ - family: Smith
19+ given: Zenda
20+ edition: 6
21+ id: smith2015
22+ issued: 2015
23+ publisher: Macmillan
24+ publisher-place: New York
25+ title: A verb and a noun
26+ type: book
27+---
28+
29+Hi^[@wandt2014ges-sv.].
30+
31+Hi^[[@wandt2014ges-sv].].
32+
33+Hi^[[See also @wandt2014ges-sv].].
34+
35+Hi^[See also @wandt2014ges-sv.].
36+
37+Hi^[@wandt2014ges-sv [@smith2015].].
38+
39+Hi^[[@wandt2014ges-sv; @smith2015].].
40+
41+Hi [@wandt2014ges-sv].
42+
43+Hi [see also @wandt2014ges-sv].
44+
45+^D
46+Hi[1].
47+
48+Hi[2].
49+
50+Hi[3].
51+
52+Hi[4].
53+
54+Hi[5].
55+
56+Hi[6].
57+
58+Hi.[7]
59+
60+Hi.[8]
61+
62+Smith, Zenda. A Verb and a Noun. 6th ed. New York: Macmillan, 2015.
63+
64+Wandt, Manfred. Gesetzliche Schuldverhältnisse. 6th ed. München: Franz
65+Vahlen, 2014.
66+
67+[1] Manfred Wandt, Gesetzliche Schuldverhältnisse, 6th ed. (München:
68+Franz Vahlen, 2014).
69+
70+[2] Wandt.
71+
72+[3] See also Wandt.
73+
74+[4] See also Wandt.
75+
76+[5] Wandt, Zenda Smith, A Verb and a Noun, 6th ed. (New York: Macmillan,
77+2015).
78+
79+[6] Wandt, Gesetzl SV; Smith, A Verb and a Noun.
80+
81+[7] Wandt, Gesetzl SV.
82+
83+[8] See also Wandt.
84+```
85+