@@ -54,19 +54,27 @@ processBiblio cf r p
5454 result = citeproc csl r (setNearNote csl $ map (map toCslCite) grps)
5555 cits_map = zip grps (citations result)
5656 biblioList = map (renderPandoc' csl) (bibliography result)
57− Pandoc m b = processWith (processCite csl cits_map) p'
57+ Pandoc m b = processWith (procInlines $ processCite csl cits_map) p'
5858 return . generateNotes nts . Pandoc m $ b ++ biblioList
5959
6060-- | Substitute 'Cite' elements with formatted citations.
61−processCite :: Style -> [([Citation],[FormattedOutput])] -> Inline -> Inline
62−processCite s cs il
63− | Cite t _ <- il = Cite t (process t)
64− | otherwise = il
61+processCite :: Style -> [([Citation],[FormattedOutput])] -> [Inline] -> [Inline]
62+processCite _ _ [] = []
63+processCite s cs (i:is)
64+ | Cite t _ <- i = process t ++ processCite s cs is
65+ | otherwise = i : processCite s cs is
6566 where
6667 process t = case lookup t cs of
67− Just i -> renderPandoc s i
68+ Just x -> if isTextualCitation t && x /= []
69+ then renderPandoc s [head x] ++ [Space] ++
70+ [Cite t $ renderPandoc s $ tail x]
71+ else [Cite t $ renderPandoc s x]
6872 Nothing -> [Str ("Error processing " ++ show t)]
6973
74+isTextualCitation :: [Citation] -> Bool
75+isTextualCitation (c:_) = citationMode c == AuthorInText
76+isTextualCitation _ = False
77+
7078-- | Retrieve all citations from a 'Pandoc' docuument. To be used with
7179-- 'queryWith'.
7280getCitation :: Inline -> [[Citation]]
@@ -109,22 +117,22 @@ mvCiteInNote is = procInlines mvCite
109117 mvCite :: [Inline] -> [Inline]
110118 mvCite inls
111119 | x:i:xs <- inls, startWithPunct xs
112− , x == Space, i `elem_` is = split i xs ++ mvCite (tailFirstInlineStr xs)
120+ , x == Space, i `elem_` is = switch i xs ++ mvCite (tailFirstInlineStr xs)
113121 | x:i:xs <- inls
114− , x == Space, i `elem_` is = mvInNote i : mvCite xs
122+ , x == Space, i `elem_` is = mvInNote i : mvCite xs
115123 | i:xs <- inls, i `elem_` is
116− , startWithPunct xs = split i xs ++ mvCite (tailFirstInlineStr xs)
117− | i:xs <- inls, Note _ <- i = checkNt i : mvCite xs
118− | i:xs <- inls = i : mvCite xs
124+ , startWithPunct xs = switch i xs ++ mvCite (tailFirstInlineStr xs)
125+ | i:xs <- inls, Note _ <- i = checkNt i : mvCite xs
126+ | i:xs <- inls = i : mvCite xs
119127 | otherwise = []
120− elem_ x xs = case x of Cite cs _ -> (Cite cs []) `elem` xs; _ -> False
121− split i xs = Str (headInline xs) : mvInNote i : []
128+ elem_ x xs = case x of Cite cs _ -> (Cite cs []) `elem` xs; _ -> False
129+ switch i xs = Str (headInline xs) : mvInNote i : []
122130 mvInNote i
123131 | Cite t o <- i = Note [Para [Cite t $ sanitize o]]
124132 | otherwise = Note [Para [i ]]
125133 sanitize i
126− | endWithPunct i = toCapital i
127− | otherwise = toCapital (i ++ [Str "."])
134+ | endWithPunct i = toCapital i
135+ | otherwise = toCapital (i ++ [Str "."])
128136
129137 checkPt i
130138 | Cite c o : xs <- i
@@ -142,10 +150,10 @@ setCitationNoteNum :: Int -> [Citation] -> [Citation]
142150setCitationNoteNum i = map $ \c -> c { citationNoteNum = i}
143151
144152toCslCite :: Citation -> CSL.Cite
145−toCslCite (Citation i p l cm nn _)
153+toCslCite (Citation i p l cm nn h)
146154 = let (la,lo) = parseLocator l
147155 citMode = case cm of
148− AuthorOnly -> (True, False)
156+ AuthorInText -> (True, False)
149157 SuppressAuthor -> (False,True )
150158 NormalCitation -> (False,False)
151159 in emptyCite { CSL.citeId = i
@@ -153,6 +161,7 @@ toCslCite (Citation i p l cm nn _)
153161 , CSL.citeLabel = la
154162 , CSL.citeLocator = lo
155163 , CSL.citeNoteNumber = show nn
156− , CSL.authorOnly = fst citMode
164+ , CSL.authorInText = fst citMode
157165 , CSL.suppressAuthor = snd citMode
166+ , CSL.citeHash = h
158167 }