pandoc-citeproc 0.7.0.2 → 0.7.1
raw patch · 7 files changed
+301/−238 lines, 7 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Text.CSL.Proc.Collapse: groupConsecWith :: (a -> Int) -> [a] -> [[a]]
Files
- LICENSE +2/−1
- changelog +15/−0
- pandoc-citeproc.cabal +1/−1
- src/Text/CSL/Proc.hs +17/−12
- src/Text/CSL/Proc/Collapse.hs +28/−23
- tests/ieee.csl +225/−188
- tests/ieee.expected.native +13/−13
LICENSE view
@@ -1,4 +1,5 @@-Copyright (c) 2013, Andrea Rossato, John MacFarlane+Copyright (c) 2008-2013, Andrea Rossato+Copyright (c) 2013-2015, John MacFarlane All rights reserved. Redistribution and use in source and binary forms, with or without modification,
changelog view
@@ -1,3 +1,18 @@+pandoc-citeproc (0.7.1)++ * Improvements to numerical styles:+ + Space is now inserted after the reference number in the+ bibliography when `second-field-align` is `margin` or `flush`.+ + Author-in-text citations are now treated just like other citations+ in numerical styles. So, brackets are used, and the term+ "Reference" is not added: instead of `Reference 1 says...`+ we have `[1] says...`. This seems to accord better with e.g.+ IEEE practice.+ + Improved citation collapsing. Now both the new and the old versions+ of `ieee.csl` work properly. Previously brackets were dropped with+ the new version (#55).+ + Use new `ieee.csl` for testing.+ pandoc-citeproc (0.7.0.2) * Bump version bound for xml-conduit.
pandoc-citeproc.cabal view
@@ -1,5 +1,5 @@ name: pandoc-citeproc-version: 0.7.0.2+version: 0.7.1 cabal-version: >= 1.12 synopsis: Supports using pandoc with citeproc
src/Text/CSL/Proc.hs view
@@ -22,7 +22,7 @@ import Data.Ord ( comparing ) import Data.Maybe ( mapMaybe ) import Text.CSL.Eval-import Text.CSL.Util ( capitalize, proc, proc', query, uncamelize, tr' )+import Text.CSL.Util ( proc, proc', query, uncamelize, tr' ) import Text.CSL.Proc.Collapse import Text.CSL.Proc.Disamb import Text.CSL.Reference@@ -100,11 +100,11 @@ proc (updateYearSuffixes yearS) . map addYearSuffix) $ procBiblio (bibOpts ops) s biblioRefs else map formatOutputList $+ tr' "citeproc:after procBiblio" $ procBiblio (bibOpts ops) s biblioRefs- citsAndRefs = tr' "citeproc:citsAndRefs" $ processCites biblioRefs cs+ citsAndRefs = processCites biblioRefs cs (yearS,citG) = disambCitations s biblioRefs cs $ map (procGroup s) citsAndRefs- citsOutput = tr' "citeproc:after formatCitLayout" .- map (formatCitLayout s) .+ citsOutput = map (formatCitLayout s) . tr' "citeproc:collapsed" . collapseCitGroups s . (if styleClass s == "in-text" then proc addLink else id) .@@ -151,8 +151,19 @@ procBiblio :: BibOpts -> Style -> [Reference] -> [[Output]] procBiblio bos (Style {biblio = mb, csMacros = ms , styleLocale = l, styleAbbrevs = as, csOptions = opts}) rs- = maybe [] process mb+ = map addSpaceAfterCitNum $ maybe [] process mb where+ -- handle second-field-align (sort of)+ addSpaceAfterCitNum [Output (OCitNum n f : xs) f']+ | secondFieldAlign == Just "flush" =+ [Output (OCitNum n f : OSpace : xs) f']+ | secondFieldAlign == Just "margin" =+ [Output (OCitNum n f : OSpace : xs) f']+ | otherwise = [Output (OCitNum n f : xs) f']+ addSpaceAfterCitNum xs = xs++ secondFieldAlign = lookup "second-field-align" $ maybe [] bibOptions mb+ process :: Bibliography -> [[Output]] process b = map (formatBiblioLayout (layFormat $ bibLayout b) (layDelim $ bibLayout b)) $ render b @@ -399,8 +410,7 @@ contribOnly :: Style -> Output -> Output contribOnly s o | isNumStyle [o]- , OCitNum {} <- o = Output [ OStr (query getRefTerm s) emptyFormatting- , OSpace, o] emptyFormatting+ , OCitNum {} <- o = o | OContrib _ "author" _ _ _ <- o = o | OContrib _ "authorsub"@@ -410,8 +420,3 @@ , "ibid" <- filter (/= '.') (map toLower x) = o | otherwise = ONull- where- getRefTerm :: CslTerm -> String- getRefTerm t- | CT "reference" Long _ _ x _ _ <- t = capitalize x- | otherwise = []
src/Text/CSL/Proc/Collapse.hs view
@@ -16,10 +16,11 @@ module Text.CSL.Proc.Collapse where +import Data.Ord (comparing) import Data.Monoid (mempty, Any(..)) import Control.Arrow ( (&&&), (>>>), second ) import Data.Char-import Data.List ( groupBy, sort )+import Data.List ( groupBy, sortBy ) import Text.CSL.Util ( query, proc, proc', betterThan ) import Text.CSL.Eval import Text.CSL.Proc.Disamb@@ -44,27 +45,29 @@ = map snd . filter ((==) "collapse" . fst) . citOptions . citation collapseNumber :: CitationGroup -> CitationGroup-collapseNumber cg- | CG [a] f d os <- cg = mapCitationGroup process . CG [a] f d $ drop 1 os- | otherwise = mapCitationGroup process cg+collapseNumber (CG _ f d os) = mapCitationGroup process $ CG [] f d os+-- note: for numerical styles, we treat author-in-text citations just+-- like any others. where hasLocator = or . query hasLocator' hasLocator' o | OLoc _ _ <- o = [True] | otherwise = [False]- citNum o- | OCitNum i f <- o = [(i,f)]- | otherwise = []- numOf = foldr (\x _ -> x) (0,emptyFormatting) . query citNum- newNum = map numOf >>> (map fst >>> groupConsec) &&& map snd >>> uncurry zip- process xs = if hasLocator xs then xs else- flip concatMap (newNum xs) $- \(x,f) -> if length x > 2- then return $ Output [ OCitNum (head x) f- , OPan [Str "\x2013"]- , OCitNum (last x) f- ] emptyFormatting- else map (flip OCitNum f) x+ citNums (OCitNum i _) = [i]+ citNums (Output xs _) = concatMap citNums xs+ citNums _ = []+ numOf = foldr (\x _ -> x) 0 . citNums+ process xs = if hasLocator xs+ then xs+ else let ys = concat (groupConsecWith numOf xs)+ in if length ys > 2+ then [ Output [+ head ys+ , OPan [Str "\x2013"]+ , last ys+ ] emptyFormatting+ ]+ else ys groupCites :: [(Cite, Output)] -> [(Cite, Output)] groupCites [] = []@@ -215,10 +218,12 @@ -- -- > groupConsec [1,2,3,5,6,8,9] == [[1,2,3],[5,6],[8,9]] groupConsec :: [Int] -> [[Int]]-groupConsec = foldr go [] . sort- where go :: Int -> [[Int]] -> [[Int]]- go x [] = [[x]]- go x ((y:ys):gs) = if x + 1 == y- then ((x:y:ys):gs)- else ([x]:(y:ys):gs)+groupConsec = groupConsecWith id++groupConsecWith :: (a -> Int) -> [a] -> [[a]]+groupConsecWith f = foldr go [] . sortBy (comparing f)+ where go x [] = [[x]]+ go x ((y:ys):gs) = if (f x + 1) == (f y)+ then ((x:y:ys):gs)+ else ([x]:(y:ys):gs) go _ ([]:_) = error "groupConsec: head of list is empty"
tests/ieee.csl view
@@ -4,6 +4,8 @@ <title>IEEE</title> <id>http://www.zotero.org/styles/ieee</id> <link href="http://www.zotero.org/styles/ieee" rel="self"/>+ <link href="http://www.ieee.org/documents/style_manual.pdf" rel="documentation"/>+ <link href="http://www.ieee.org/documents/auinfo07.pdf" rel="documentation"/> <author> <name>Michael Berkowitz</name> <email>mberkowi@gmu.edu</email>@@ -23,170 +25,200 @@ <contributor> <name>Sebastian Karcher</name> </contributor>+ <category citation-format="numeric"/> <category field="engineering"/> <category field="generic-base"/>- <category citation-format="numeric"/>- <updated>2011-09-15T07:01:02+00:00</updated>- <rights>- This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License:- http://creativecommons.org/licenses/by-sa/3.0/- </rights>- <link href="http://www.ieee.org/portal/cms_docs_iportals/iportals/publications/authors/transjnl/stylemanual.pdf" rel="documentation"/>- <link href="http://www.ieee.org/documents/auinfo07.pdf" rel="documentation"/>+ <updated>2013-12-17T18:04:02+00:00</updated>+ <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights> </info>+ <locale xml:lang="en">+ <terms>+ <term name="chapter" form="short">ch.</term>+ <term name="presented at">presented at the</term>+ <term name="available at">available</term>+ </terms>+ </locale> <!-- Macros --> <macro name="edition"> <choose>- <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">- <choose>- <if is-numeric="edition">- <group delimiter=" ">- <number variable="edition" form="ordinal"/>- <text term="edition" form="short" suffix="." strip-periods="true"/>- </group>- </if>- <else>- <text variable="edition" text-case="capitalize-first" suffix="."/>- </else>- </choose>+ <if type="bill book chapter graphic legal_case legislation motion_picture paper-conference report song" match="any">+ <choose>+ <if is-numeric="edition">+ <group delimiter=" ">+ <number variable="edition" form="ordinal"/>+ <text term="edition" form="short"/>+ </group>+ </if>+ <else>+ <text variable="edition" text-case="capitalize-first" suffix="."/>+ </else>+ </choose> </if> </choose> </macro> <macro name="issued"> <choose> <if type="article-journal report" match="any">- <date variable="issued">- <date-part name="month" form="short" suffix=" "/>- <date-part name="year" form="long"/>- </date>+ <date variable="issued">+ <date-part name="month" form="short" suffix=" "/>+ <date-part name="year" form="long"/>+ </date> </if>- <else-if type="bill book graphic legal_case motion_picture song thesis chapter paper-conference" match="any">- <date variable="issued">- <date-part name="year" form="long"/>- </date>+ <else-if type=" bill book chapter graphic legal_case legislation motion_picture paper-conference song thesis" match="any">+ <date variable="issued">+ <date-part name="year" form="long"/>+ </date> </else-if> <else>- <date variable="issued">- <date-part name="day" form="numeric-leading-zeros" suffix="-"/>- <date-part name="month" form="short" suffix="-" strip-periods="true"/>- <date-part name="year" form="long"/>- </date>+ <date variable="issued">+ <date-part name="day" form="numeric-leading-zeros" suffix="-"/>+ <date-part name="month" form="short" suffix="-" strip-periods="true"/>+ <date-part name="year" form="long"/>+ </date> </else> </choose> </macro> <macro name="author"> <names variable="author"> <name initialize-with=". " delimiter=", " and="text"/>- <label form="short" prefix=", " text-case="capitalize-first" suffix="." strip-periods="true"/>+ <label form="short" prefix=", " text-case="capitalize-first"/> <substitute>- <names variable="editor"/>- <names variable="translator"/>+ <names variable="editor"/>+ <names variable="translator"/> </substitute> </names> </macro> <macro name="editor"> <names variable="editor"> <name initialize-with=". " delimiter=", " and="text"/>- <label form="short" prefix=", " text-case="capitalize-first" suffix="." strip-periods="true"/>+ <label form="short" prefix=", " text-case="capitalize-first"/> </names> </macro> <macro name="locators"> <group delimiter=", "> <text macro="edition"/> <group delimiter=" ">- <text term="volume" form="short" suffix="." strip-periods="true"/>- <number variable="volume" form="numeric"/>+ <text term="volume" form="short"/>+ <number variable="volume" form="numeric"/> </group> <group delimiter=" ">- <number variable="number-of-volumes" form="numeric"/>- <text term="volume" form="short" suffix="." plural="true" strip-periods="true"/>+ <number variable="number-of-volumes" form="numeric"/>+ <text term="volume" form="short" plural="true"/> </group> <group delimiter=" ">- <text term="issue" form="short" suffix="." strip-periods="true"/>- <number variable="issue" form="numeric"/>+ <text term="issue" form="short"/>+ <number variable="issue" form="numeric"/> </group> </group> </macro> <macro name="title"> <choose>- <if type="bill book graphic legal_case motion_picture song" match="any">- <text variable="title" font-style="italic"/>+ <if type="bill book graphic legal_case legislation motion_picture song" match="any">+ <text variable="title" font-style="italic"/> </if> <else>- <text variable="title" quotes="true"/>+ <text variable="title" quotes="true"/> </else> </choose> </macro> <macro name="publisher"> <choose>- <if type="bill book graphic legal_case motion_picture song chapter paper-conference" match="any">- <text variable="publisher-place" suffix=": "/>- <text variable="publisher"/>+ <if type=" bill book chapter graphic legal_case legislation motion_picture paper-conference song" match="any">+ <group delimiter=": ">+ <text variable="publisher-place"/>+ <text variable="publisher"/>+ </group> </if> <else>- <group delimiter=", ">- <text variable="publisher"/>- <text variable="publisher-place"/>- </group>+ <group delimiter=", ">+ <text variable="publisher"/>+ <text variable="publisher-place"/>+ </group> </else> </choose> </macro> <macro name="event"> <choose>- <if type="paper-conference">- <choose>- <!-- Published Conference Paper -->- <if variable="container-title">- <group delimiter=", ">- <text variable="container-title" prefix="in " font-style="italic"/>- <text variable="event-place"/>- </group>- </if>- <!-- Unpublished Conference Paper -->- <else>- <group delimiter=", ">- <text variable="event" prefix="presented at the "/>- <text variable="event-place"/>- </group>- </else>- </choose>+ <if type="paper-conference speech" match="any">+ <choose>+ <!-- Published Conference Paper -->+ <if variable="container-title">+ <group delimiter=", ">+ <group delimiter=" ">+ <text term="in"/>+ <text variable="container-title" font-style="italic"/>+ </group>+ <text variable="event-place"/>+ </group>+ </if>+ <!-- Unpublished Conference Paper -->+ <else>+ <group delimiter=", ">+ <group delimiter=" ">+ <text term="presented at"/>+ <text variable="event"/>+ </group>+ <text variable="event-place"/>+ </group>+ </else>+ </choose> </if> </choose> </macro> <macro name="access"> <choose> <if type="webpage">- <choose>- <if variable="URL">- <group delimiter=". ">- <text value="[Online]"/>- <text variable="URL" prefix="Available: "/>- <group prefix="[" suffix="]">- <date variable="accessed" prefix="Accessed: ">- <date-part name="day" form="numeric-leading-zeros" suffix="-"/>- <date-part name="month" form="short" suffix="-" strip-periods="true"/>- <date-part name="year" form="long"/>- </date>- </group>- </group>- </if>- </choose>+ <choose>+ <if variable="URL">+ <group delimiter=". ">+ <text term="online" prefix="[" suffix="]" text-case="capitalize-first"/>+ <group delimiter=": ">+ <text term="available at" text-case="capitalize-first"/>+ <text variable="URL"/>+ </group>+ <group prefix="[" suffix="]" delimiter=": ">+ <text term="accessed" text-case="capitalize-first"/>+ <date variable="accessed">+ <date-part name="day" form="numeric-leading-zeros" suffix="-"/>+ <date-part name="month" form="short" suffix="-" strip-periods="true"/>+ <date-part name="year" form="long"/>+ </date>+ </group>+ </group>+ </if>+ </choose> </if> </choose> </macro> <macro name="page"> <group>- <label variable="page" form="short" suffix=". " strip-periods="true"/>+ <label variable="page" form="short" suffix=" "/> <text variable="page"/> </group> </macro>+ <macro name="citation-locator">+ <group delimiter=" ">+ <choose>+ <if locator="page">+ <label variable="locator" form="short"/>+ </if>+ <else>+ <label variable="locator" form="short" text-case="capitalize-first"/>+ </else>+ </choose>+ <text variable="locator"/>+ </group>+ </macro> <!-- Citation -->- <citation collapse="citation-number">+ <citation collapse="citation-number"> <sort> <key variable="citation-number"/> </sort>- <layout prefix="[" suffix="]" delimiter="], [">- <text variable="citation-number"/>+ <layout delimiter=", ">+ <group prefix="[" suffix="]" delimiter=", ">+ <text variable="citation-number"/>+ <text macro="citation-locator"/>+ </group> </layout> </citation> <!-- Bibliography -->@@ -195,107 +227,112 @@ <!-- Citation Number --> <text variable="citation-number" prefix="[" suffix="]"/> <!-- Author(s) -->- <text macro="author" prefix=" " suffix=", "/>+ <text macro="author" suffix=", "/> <!-- Rest of Citation --> <choose>- <!-- Specific Formats -->- <if type="article-journal">- <group delimiter=", ">- <text macro="title"/>- <text variable="container-title" font-style="italic" form="short"/>- <text macro="locators"/>- <text macro="page"/>- <text macro="issued"/>- </group>- </if>- <else-if type="paper-conference">- <group delimiter=", ">- <text macro="title"/>- <text macro="event"/>- <text macro="issued"/>- <text macro="locators"/>- <text macro="page"/>- </group>- </else-if>- <else-if type="report">- <group delimiter=", "> - <text macro="title"/>- <text macro="publisher"/>- <group delimiter=" ">- <text variable="genre"/>- <text variable="number"/>- </group>- <text macro="issued"/>- </group>- </else-if>- <else-if type="thesis">- <group delimiter=", ">- <text macro="title"/>- <text variable="genre"/>- <text macro="publisher"/>- <text macro="issued"/>- </group>- </else-if>- <else-if type="webpage">- <group delimiter=", " suffix=". ">- <text macro="title"/>- <text variable="container-title" font-style="italic"/>- <text macro="issued"/>- </group>- <text macro="access"/>- </else-if>- <else-if type="patent">- <text macro="title" suffix=", "/>- <text variable="number" prefix="U.S. Patent "/>- <text macro="issued"/>- </else-if>- <!-- Generic/Fallback Formats -->- <else-if type="bill book graphic legal_case motion_picture report song" match="any">- <group delimiter=", " suffix=". ">- <text macro="title"/>- <text macro="locators"/>- </group>- <group delimiter=", ">- <text macro="publisher"/>- <text macro="issued"/>- <text macro="page"/>- </group>- </else-if>- <else-if type="article-magazine article-newspaper broadcast interview manuscript map patent personal_communication song speech thesis webpage" match="any">- <group delimiter=", ">- <text macro="title"/>- <text variable="container-title" font-style="italic"/>- <text macro="locators"/>- <text macro="publisher"/>- <text macro="page"/>- <text macro="issued"/>- </group>- </else-if>- <else-if type="chapter paper-conference" match="any">- <group delimiter=", " suffix=", ">- <text macro="title"/>- <text variable="container-title" prefix="in " font-style="italic"/>- <text macro="locators"/>- </group>- <text macro="editor" suffix=" "/>- <group delimiter=", ">- <text macro="publisher"/>- <text macro="issued"/>- <text macro="page"/>- </group>- </else-if>- <else>- <group delimiter=", " suffix=". ">- <text macro="title"/>- <text variable="container-title" font-style="italic"/>- <text macro="locators"/>- </group>- <group delimiter=", ">- <text macro="publisher"/>- <text macro="page"/>- <text macro="issued"/>- </group>- </else>+ <!-- Specific Formats -->+ <if type="article-journal">+ <group delimiter=", ">+ <text macro="title"/>+ <text variable="container-title" font-style="italic" form="short"/>+ <text macro="locators"/>+ <text macro="page"/>+ <text macro="issued"/>+ </group>+ </if>+ <else-if type="paper-conference speech" match="any">+ <group delimiter=", ">+ <text macro="title"/>+ <text macro="event"/>+ <text macro="issued"/>+ <text macro="locators"/>+ <text macro="page"/>+ </group>+ </else-if>+ <else-if type="report">+ <group delimiter=", ">+ <text macro="title"/>+ <text macro="publisher"/>+ <group delimiter=" ">+ <text variable="genre"/>+ <text variable="number"/>+ </group>+ <text macro="issued"/>+ </group>+ </else-if>+ <else-if type="thesis">+ <group delimiter=", ">+ <text macro="title"/>+ <text variable="genre"/>+ <text macro="publisher"/>+ <text macro="issued"/>+ </group>+ </else-if>+ <else-if type="webpage post-weblog" match="any">+ <group delimiter=", " suffix=". ">+ <text macro="title"/>+ <text variable="container-title" font-style="italic"/>+ <text macro="issued"/>+ </group>+ <text macro="access"/>+ </else-if>+ <else-if type="patent">+ <group delimiter=", ">+ <text macro="title"/>+ <text variable="number"/>+ <text macro="issued"/>+ </group>+ </else-if>+ <!-- Generic/Fallback Formats -->+ <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">+ <group delimiter=", " suffix=". ">+ <text macro="title"/>+ <text macro="locators"/>+ </group>+ <group delimiter=", ">+ <text macro="publisher"/>+ <text macro="issued"/>+ <text macro="page"/>+ </group>+ </else-if>+ <else-if type="article-magazine article-newspaper broadcast interview manuscript map patent personal_communication song speech thesis webpage" match="any">+ <group delimiter=", ">+ <text macro="title"/>+ <text variable="container-title" font-style="italic"/>+ <text macro="locators"/>+ <text macro="publisher"/>+ <text macro="page"/>+ <text macro="issued"/>+ </group>+ </else-if>+ <else-if type="chapter paper-conference" match="any">+ <group delimiter=", " suffix=", ">+ <text macro="title"/>+ <group delimiter=" ">+ <text term="in"/>+ <text variable="container-title" font-style="italic"/>+ </group>+ <text macro="locators"/>+ </group>+ <text macro="editor" suffix=" "/>+ <group delimiter=", ">+ <text macro="publisher"/>+ <text macro="issued"/>+ <text macro="page"/>+ </group>+ </else-if>+ <else>+ <group delimiter=", " suffix=". ">+ <text macro="title"/>+ <text variable="container-title" font-style="italic"/>+ <text macro="locators"/>+ </group>+ <group delimiter=", ">+ <text macro="publisher"/>+ <text macro="page"/>+ <text macro="issued"/>+ </group>+ </else> </choose> </layout> </bibliography>
tests/ieee.expected.native view
@@ -1,17 +1,17 @@ Pandoc (Meta {unMeta = fromList [("bibliography",MetaInlines [Str "tests/biblio.bib"]),("csl",MetaInlines [Str "tests/ieee.csl"])]}) [Header 1 ("pandoc-with-citeproc-hs",[],[]) [Str "Pandoc",Space,Str "with",Space,Str "citeproc-hs"]-,Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "[",Strong [Str "???"],Str "]"]]+,Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Span ("",["citeproc-no-output"],[]) [Strong [Str "???"]]]] ,Para [Strong [Str "???"]]-,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 3}] [Str "Reference",Space,Link [Str "1"] ("#ref-item1","")],Space,Str "says",Space,Str "blah."]-,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 4}] [Str "Reference",Space,Link [Str "1"] ("#ref-item1","")],Space,Str "says",Space,Str "blah."]-,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30,",Space,Str "with",Space,Str "suffix"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 5}] [Str "Reference",Space,Link [Str "1"] ("#ref-item1","")],Space,Str "says",Space,Str "blah."]-,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 6},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "30"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 7},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "see",Space,Str "also"], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "Reference",Space,Link [Str "1"] ("#ref-item1",""),Space,Str "[",Link [Str "3"] ("#ref-item2",""),Str "]"],Space,Str "says",Space,Str "blah."]-,Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 9}] [Str "Reference",Space,Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3","")],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 10}] [Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Str "."]]]-,Para [Str "A",Space,Str "citation",Space,Str "group",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 11},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 12}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "],",Space,Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Str "."]-,Para [Str "Another",Space,Str "one",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 13}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str "."]-,Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 14},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 15},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 16}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "\8211",Link [Str "3"] ("#ref-item1",""),Str "]"],Str "."]]]-,Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 17}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str "."]+,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 3}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Space,Str "says",Space,Str "blah."]+,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 4}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Space,Str "says",Space,Str "blah."]+,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30,",Space,Str "with",Space,Str "suffix"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 5}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Space,Str "says",Space,Str "blah."]+,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 6},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "30"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 7},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "see",Space,Str "also"], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]",Str ",",Space,Str "[",Link [Str "2"] ("#ref-item2",""),Str ",",Space,Str "p.",Space,Str "30",Str "]",Str ",",Space,Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Space,Str "says",Space,Str "blah."]+,Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 9}] [Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 10}] [Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Str "."]]]+,Para [Str "A",Space,Str "citation",Space,Str "group",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 11},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 12}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]",Str ",",Space,Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str ",",Space,Str "pp.",Space,Str "34\8211\&35",Str "]"],Str "."]+,Para [Str "Another",Space,Str "one",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 13}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str ",",Space,Str "pp.",Space,Str "34\8211\&35",Str "]"],Str "."]+,Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 14},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 15},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 16}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]",Str "\8211",Str "[",Link [Str "3"] ("#ref-\1087\1091\1085\1082\1090\&3",""),Str "]"],Str "."]]]+,Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 17}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str ",",Space,Str "pp.",Space,Str "33,",Space,Str "35\8211\&37",Str "]"],Str "."] ,Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 18}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str "."]-,Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 19}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 20}] [Str "[",Link [Str "2"] ("#ref-item2",""),Str "]"],Str "."]]]-,Para [Str "With",Space,Str "some",Space,Str "markup",Space,Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 21}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str "."]-,Div ("",["references"],[]) [Header 1 ("references",["unnumbered"],[]) [Str "References"],Div ("ref-item1",[],[]) [Para [Str "[1]",Space,Str "J.",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "book"],Str ".",Space,Str "Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press,",Space,Str "2005."]],Div ("ref-item2",[],[]) [Para [Str "[2]",Space,Str "J.",Space,Str "Doe,",Space,Str "\8220Article,\8221",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Str ",",Space,Str "vol.",Space,Str "6,",Space,Str "pp.",Space,Str "33\8211\&34,",Space,Str "2006."]],Div ("ref-\1087\1091\1085\1082\1090\&3",[],[]) [Para [Str "[3]",Space,Str "J.",Space,Str "Doe",Space,Str "and",Space,Str "J.",Space,Str "Roe,",Space,Str "\8220Why",Space,Str "water",Space,Str "is",Space,Str "wet,\8221",Space,Str "in",Space,Emph [Str "Third",Space,Str "book"],Str ",",Space,Str "S.",Space,Str "Smith,",Space,Str "Ed.",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press,",Space,Str "2007."]]]]+,Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 19}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str "]"],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 20}] [Str "[",Link [Str "2"] ("#ref-item2",""),Str ",",Space,Str "p.",Space,Str "44",Str "]"],Str "."]]]+,Para [Str "With",Space,Str "some",Space,Str "markup",Space,Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 21}] [Str "[",Link [Str "1"] ("#ref-item1",""),Str ",",Space,Str "p.",Space,Str "32",Str "]"],Str "."]+,Div ("",["references"],[]) [Header 1 ("references",["unnumbered"],[]) [Str "References"],Div ("ref-item1",[],[]) [Para [Str "[",Str "1",Str "]",Space,Str "J",Str ".",Space,Str "Doe",Str ",",Space,Emph [Str "First",Space,Str "book"],Str ".",Space,Str "Cambridge",Str ":",Space,Str "Cambridge",Space,Str "University",Space,Str "Press",Str ",",Space,Str "2005",Str "."]],Div ("ref-item2",[],[]) [Para [Str "[",Str "2",Str "]",Space,Str "J",Str ".",Space,Str "Doe",Str ",",Space,Str "\8220",Str "Article",Str ",",Str "\8221",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Str ",",Space,Str "vol.",Space,Str "6",Str ",",Space,Str "pp.",Space,Str "33\8211\&34",Str ",",Space,Str "2006",Str "."]],Div ("ref-\1087\1091\1085\1082\1090\&3",[],[]) [Para [Str "[",Str "3",Str "]",Space,Str "J",Str ".",Space,Str "Doe",Space,Str "and",Space,Str "J",Str ".",Space,Str "Roe",Str ",",Space,Str "\8220",Str "Why",Space,Str "water",Space,Str "is",Space,Str "wet",Str ",",Str "\8221",Space,Str "in",Space,Emph [Str "Third",Space,Str "book"],Str ",",Space,Str "S",Str ".",Space,Str "Smith",Str ",",Space,Str "Ed.",Space,Str "Oxford",Str ":",Space,Str "Oxford",Space,Str "University",Space,Str "Press",Str ",",Space,Str "2007",Str "."]]]]