packages feed

pandoc-citeproc 0.14 → 0.14.1

raw patch · 7 files changed

+261/−15 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

changelog view
@@ -1,3 +1,16 @@+pandoc-citeproc (0.14.1)++  * More robust handling of boolean metadata values.+  * Keep position of citations with prefixes when sorting (behavior+    change, #292).  If citations with prefixes are moved around,+    gibberish can result.  E.g.:+    `A fascinating research tidbit [@Zanadu1999, p. 35; see+    for comparison @Aalto2005]` can become+    "A fascinating research tidbit (see for comparison Aalto, 2005;+    Zanadu, 1999: 35)" with a sorting style like sage-harvard.csl.+    This change causes sorting to be applied only to subgroups of citations+    that lack prefixes.+ pandoc-citeproc (0.14)    * Fix non-numerical season parsing in RefDate (#316).
pandoc-citeproc.cabal view
@@ -1,5 +1,5 @@ name:               pandoc-citeproc-version:            0.14+version:            0.14.1 cabal-version:      >= 1.12 synopsis:           Supports using pandoc with citeproc 
src/Text/CSL/Pandoc.hs view
@@ -57,9 +57,8 @@                         map (map (toCslCite locMap)) grps)       cits_map      = tr' "cits_map" $ M.fromList $ zip grps (citations result)       biblioList    = map (renderPandoc' style) $ zip (bibliography result) (citationIds result)-      moveNotes     = case lookupMeta "notes-after-punctuation" m1 of-                           Just (MetaBool False) -> False-                           _                     -> True+      moveNotes     = maybe True truish $+                        lookupMeta "notes-after-punctuation" m1       Pandoc m3 bs  = walk (mvPunct moveNotes style) . deNote .                         walk (processCite style cits_map) $ Pandoc m2 b2       m             = case metanocites of@@ -109,19 +108,26 @@  isRefRemove :: Meta -> Bool isRefRemove meta =-  case lookupMeta "suppress-bibliography" meta of-    Just (MetaBool True) -> True-    _                    -> False+  maybe False truish $ lookupMeta "suppress-bibliography" meta  isLinkCitations :: Meta -> Bool isLinkCitations meta =-  case lookupMeta "link-citations" meta of-    Just (MetaBool True)   -> True-    Just (MetaString s)    -> map toLower s `elem` yesValues-    Just (MetaInlines ils) -> map toLower (stringify ils) `elem` yesValues-    _                      -> False-  where yesValues = ["true", "yes", "on"]+  maybe False truish $ lookupMeta "link-citations" meta +truish :: MetaValue -> Bool+truish (MetaBool t) = t+truish (MetaString s) = isYesValue (map toLower s)+truish (MetaInlines ils) = isYesValue (map toLower (stringify ils))+truish (MetaBlocks [Plain ils]) = isYesValue (map toLower (stringify ils))+truish _ = False++isYesValue :: String -> Bool+isYesValue "t" = True+isYesValue "true" = True+isYesValue "yes" = True+isYesValue "on" = True+isYesValue _ = False+ -- if the 'nocite' Meta field contains a citation with id = '*', -- create a cite with to all the references. mkNociteWildcards :: [Reference] -> [[Citation]] -> [[Citation]]@@ -194,7 +200,7 @@   let idpred = if "*" `Set.member` citids                   then const True                   else (`Set.member` citids)-  bibRefs <- getBibRefs idpred $ Data.Maybe.fromMaybe (MetaList [])+  bibRefs <- getBibRefs idpred $ fromMaybe (MetaList [])                                $ lookupMeta "bibliography" meta   let refs = inlineRefs ++ bibRefs   let cslAbbrevFile = lookupMeta "citation-abbreviations" meta >>= toPath
src/Text/CSL/Proc.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE FlexibleContexts  #-} {-# LANGUAGE PatternGuards     #-} ----------------------------------------------------------------------------- -- |@@ -19,6 +20,7 @@  import           Control.Applicative    ((<|>)) import           Control.Arrow          (second, (&&&), (>>>))+import           Control.Monad.State    (execState, modify) import           Data.Aeson import           Data.Char              (isDigit, isLetter, toLower) import           Data.List@@ -304,7 +306,19 @@       format (c,r) = (c,  evalLayout (citLayout ct) (EvalCite c) False l ms opts' as r)       sort_  (c,r) = evalSorting (EvalSorting c) l ms opts' (citSort ct) as r       process      = map (second (flip Output emptyFormatting) . format &&& sort_)-      result       = sortItems $ process cr+      result       = concatMap sortItems $ toChunks $ process cr+      -- toChunks splits the citations up into groups, such that+      -- a citation with a non-null prefix is by itself in its+      -- group, otherwise preserving the order (see #292 for+      -- motivation; we don't want to move prefixed citations+      -- around)+      toChunks  xs = reverse $ execState (toChunks' xs) []+      toChunks' xs = do+        case break hasPrefix xs of+                ([], [])   -> return ()+                ([], y:ys) -> modify ([y]:) >> toChunks' ys+                (zs, ys)   -> modify (zs:) >> toChunks' ys+      hasPrefix ((c,_),_) = citePrefix c /= mempty  formatBiblioLayout :: Formatting -> Delimiter -> [Output] -> [Output] formatBiblioLayout  f d = appendOutput f . addDelim d
+ tests/issue292.expected.native view
@@ -0,0 +1,9 @@+Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/sage-harvard.csl"]),("references",MetaList [MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Doe"])])),("id",MetaInlines [Str "doe"]),("issued",MetaMap (fromList [("year",MetaString "2007")])),("type",MetaInlines [Str "article"])]),MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Zoe"])])),("id",MetaInlines [Str "zoe"]),("issued",MetaList [MetaMap (fromList [("year",MetaString "2009")])]),("type",MetaInlines [Str "article"])]),MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Roe"])])),("id",MetaInlines [Str "roe"]),("issued",MetaList [MetaMap (fromList [("year",MetaString "2007")])]),("type",MetaInlines [Str "article"])])])]})+[Para [Cite [Citation {citationId = "zoe", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1},Citation {citationId = "roe", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2},Citation {citationId = "doe", citationPrefix = [Str "see",Space,Str "for",Space,Str "comparison"], citationSuffix = [Str ",",Space,Str "p.\160\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Str "(Roe,",Space,Str "2007;",Space,Str "Zoe,",Space,Str "2009;",Space,Str "see",Space,Str "for",Space,Str "comparison",Space,Str "Doe,",Space,Str "2007:",Space,Str "3)"]]+,Div ("refs",["references"],[])+ [Div ("ref-doe",[],[])+  [Para [Str "Doe",Space,Str "(2007)."]]+ ,Div ("ref-roe",[],[])+  [Para [Str "Roe",Space,Str "(2007)."]]+ ,Div ("ref-zoe",[],[])+  [Para [Str "Zoe",Space,Str "(2009)."]]]]
+ tests/issue292.in.native view
@@ -0,0 +1,2 @@+Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/sage-harvard.csl"]),("references",MetaList [MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Doe"])])),("id",MetaInlines [Str "doe"]),("issued",MetaMap (fromList [("year",MetaString "2007")])),("type",MetaInlines [Str "article"])]),MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Zoe"])])),("id",MetaInlines [Str "zoe"]),("issued",MetaList [MetaMap (fromList [("year",MetaString "2009")])]),("type",MetaInlines [Str "article"])]),MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Roe"])])),("id",MetaInlines [Str "roe"]),("issued",MetaList [MetaMap (fromList [("year",MetaString "2007")])]),("type",MetaInlines [Str "article"])])])]})+[Para [Cite [Citation {citationId = "zoe", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "roe", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "doe", citationPrefix = [Str "see",Space,Str "for",Space,Str "comparison"], citationSuffix = [Str ",",Space,Str "p.\160\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@zoe;",Space,Str "@roe;",Space,Str "see",Space,Str "for",Space,Str "comparison",Space,Str "@doe,",Space,Str "p.",Space,Str "3]"]]]
+ tests/sage-harvard.csl view
@@ -0,0 +1,202 @@+<?xml version="1.0" encoding="utf-8"?>+<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" default-locale="en-GB">+  <info>+    <title>SAGE - Harvard</title>+    <id>http://www.zotero.org/styles/sage-harvard</id>+    <link href="http://www.zotero.org/styles/sage-harvard" rel="self"/>+    <link href="http://www.zotero.org/styles/the-open-university-harvard" rel="template"/>+    <link href="http://www.uk.sagepub.com/repository/binaries/pdf/SAGE_Harvard_reference_style.pdf" rel="documentation"/>+    <author>+      <name>Joseph Reagle</name>+    </author>+    <category citation-format="author-date"/>+    <category field="generic-base"/>+    <summary>The SAGE Harvard author-date style</summary>+    <updated>2012-09-27T22:06:38+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-GB">+    <terms>+      <term name="editor" form="short">+        <single>ed.</single>+        <multiple>eds</multiple>+      </term>+    </terms>+  </locale>+  <macro name="editor">+    <names variable="editor" delimiter=", ">+      <name and="text" initialize-with="" delimiter=", " sort-separator=" " name-as-sort-order="all"/>+      <label form="short" prefix=" (" suffix=")"/>+    </names>+  </macro>+  <macro name="author">+    <names variable="author">+      <name initialize-with="" name-as-sort-order="all" and="text" sort-separator=" " delimiter=", " delimiter-precedes-last="never" form="long"/>+      <label form="short" prefix=" (" suffix=")"/>+      <substitute>+        <names variable="editor"/>+        <names variable="translator"/>+        <text variable="container-title" font-style="italic"/>+        <text macro="title"/>+      </substitute>+    </names>+  </macro>+  <macro name="author-count">+    <names variable="author">+      <name form="count"/>+      <substitute>+        <names variable="editor"/>+      </substitute>+    </names>+  </macro>+  <macro name="author-short">+    <names variable="author">+      <name form="short" and="text" delimiter=", " delimiter-precedes-last="never" initialize-with=""/>+      <substitute>+        <names variable="editor"/>+        <names variable="translator"/>+        <text variable="container-title" font-style="italic"/>+        <text macro="title"/>+      </substitute>+    </names>+  </macro>+  <macro name="access">+    <choose>+      <if variable="URL">+        <text value="Available from: "/>+        <text variable="URL"/>+        <group prefix=" (" delimiter=" " suffix=")">+          <text term="accessed"/>+          <date variable="accessed">+            <date-part name="day" suffix=" "/>+            <date-part name="month" suffix=" "/>+            <date-part name="year"/>+          </date>+        </group>+      </if>+    </choose>+  </macro>+  <macro name="title">+    <choose>+      <if type="bill book graphic legal_case motion_picture report song" match="any">+        <text variable="title" font-style="italic"/>+      </if>+      <else>+        <text variable="title"/>+      </else>+    </choose>+  </macro>+  <macro name="publisher">+    <group delimiter=": ">+      <text variable="publisher-place"/>+      <text variable="publisher"/>+    </group>+  </macro>+  <macro name="year-date">+    <choose>+      <if variable="issued">+        <date variable="issued">+          <date-part name="year"/>+        </date>+      </if>+      <else>+        <text term="no date" form="short"/>+      </else>+    </choose>+  </macro>+  <macro name="locator">+    <choose>+      <if type="article-journal">+        <text variable="volume"/>+        <text variable="issue" prefix="(" suffix=")"/>+      </if>+    </choose>+  </macro>+  <macro name="published-date">+    <choose>+      <if type="article-newspaper">+        <date variable="issued">+          <date-part name="day" form="ordinal" suffix=" "/>+          <date-part name="month" form="long"/>+        </date>+      </if>+    </choose>+  </macro>+  <macro name="pages">+    <choose>+      <if type="chapter paper-conference" match="any">+        <group delimiter=" " prefix=", ">+          <label variable="page" form="short" suffix=" "/>+          <text variable="page"/>+        </group>+      </if>+      <else-if type="article-journal">+        <text variable="page" prefix=": "/>+      </else-if>+    </choose>+  </macro>+  <macro name="edition">+    <choose>+      <if is-numeric="edition">+        <group delimiter=" ">+          <number variable="edition" form="ordinal"/>+          <text term="edition" form="short"/>+        </group>+      </if>+      <else>+        <text variable="edition" suffix="."/>+      </else>+    </choose>+  </macro>+  <macro name="container-prefix">+    <choose>+      <if type="chapter paper-conference" match="any">+        <text term="in" text-case="capitalize-first" suffix=": "/>+      </if>+    </choose>+  </macro>+  <citation et-al-min="3" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" collapse="year">+    <sort>+      <key macro="author-short"/>+      <key macro="year-date"/>+    </sort>+    <layout prefix="(" suffix=")" delimiter="; ">+      <group delimiter=": ">+        <group delimiter=", ">+          <text macro="author-short"/>+          <text macro="year-date"/>+        </group>+        <text variable="locator"/>+      </group>+    </layout>+  </citation>+  <bibliography hanging-indent="true" et-al-min="4" et-al-use-first="3">+    <sort>+      <key macro="author" names-min="1" names-use-first="1"/>+      <key macro="author-count" names-min="3" names-use-first="3"/>+      <key macro="author" names-min="3" names-use-first="1"/>+      <key macro="year-date"/>+      <key variable="title"/>+    </sort>+    <layout suffix=".">+      <group delimiter=" ">+        <text macro="author"/>+        <text macro="year-date" prefix="(" suffix=")"/>+        <text macro="title" suffix="."/>+        <text macro="edition"/>+        <text macro="container-prefix"/>+        <group delimiter=", ">+          <text macro="editor"/>+          <text variable="container-title" font-style="italic"/>+          <text variable="collection-title"/>+          <text variable="genre"/>+          <text macro="publisher"/>+          <text macro="published-date"/>+        </group>+        <text macro="locator"/>+      </group>+      <text macro="pages"/>+      <text macro="access" prefix=". "/>+    </layout>+  </bibliography>+</style>