Automatically include URI-encoded jats.csl for jats output.

This way people can do

    pandoc -s -t jats --filter pandoc-citeproc

and it will just work.  If they want to specify a stylesheet,
they still can.
This commit is contained in:
John MacFarlane 2017-03-30 16:43:17 +02:00
parent 2f19b5daac
commit 6ad486c3c3
4 changed files with 223 additions and 2 deletions

View file

@ -110,3 +110,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------
The template pandoc.jats is Copyright 2013--15 Martin Fenner,
released under GPL version 2 or later.
The file data/jats.csl is derived from a csl file by Martin Fenner,
revised by Martin Paul Eve and then John MacFarlane.
"This work is licensed under a Creative Commons Attribution-ShareAlike 3.0
License. Originally by Martin Fenner."

208
data/jats.csl Normal file
View file

@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" default-locale="en-US">
<info>
<title>Journal Article Tag Suite</title>
<title-short>JATS</title-short>
<id>http://www.zotero.org/styles/journal-article-tag-suite</id>
<link href="https://github.com/MartinPaulEve/JATS-CSL/blob/master/jats.csl" rel="self"/>
<link rel="documentation" href="http://jats.nlm.nih.gov/archiving/tag-library/1.0/index.html"/>
<author>
<name>Martin Paul Eve</name>
<email>martin@martineve.com</email>
</author>
<category citation-format="numeric"/>
<category field="medicine"/>
<category field="biology"/>
<summary>Use this style to generate bibliographic data in Journal Article Tagging Suite (JATS) 1.0 XML format</summary>
<updated>2014-06-21T17:41:26+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. Originally by Martin Fenner.</rights>
</info>
<locale xml:lang="en">
<terms>
<term name="et-al">{{jats}}&lt;etal/&gt;{{/jats}}</term>
</terms>
</locale>
<macro name="citation-number">
<text variable="citation-number" prefix="{{jats}}id=&quot;ref-{{/jats}}" suffix="{{jats}}&quot;&gt;{{/jats}}"/>
</macro>
<macro name="author">
<names variable="author">
<name prefix="{{jats}}&lt;name&gt;{{/jats}}" suffix="{{jats}}&lt;/name&gt;{{/jats}}" name-as-sort-order="all" sort-separator="">
<name-part name="family" text-case="capitalize-first" prefix="{{jats}}&lt;surname&gt;{{/jats}}" suffix="{{jats}}&lt;/surname&gt;{{/jats}}"/>
<name-part name="given" text-case="capitalize-first" prefix="{{jats}}&lt;given-names&gt;{{/jats}}" suffix="{{jats}}&lt;/given-names&gt;{{/jats}}"/>
</name>
<substitute>
<names variable="editor"/>
</substitute>
</names>
</macro>
<macro name="editor">
<names variable="editor" prefix="{{jats}}&lt;person-group person-group-type=&quot;editor&quot;&gt;{{/jats}}" suffix="{{jats}}&lt;/person-group&gt;{{/jats}}">
<name prefix="{{jats}}&lt;name&gt;{{/jats}}" suffix="{{jats}}&lt;/name&gt;{{/jats}}" name-as-sort-order="all" sort-separator="">
<name-part name="family" text-case="capitalize-first" prefix="{{jats}}&lt;surname&gt;{{/jats}}" suffix="{{jats}}&lt;/surname&gt;{{/jats}}"/>
<name-part name="given" text-case="capitalize-first" prefix="{{jats}}&lt;given-names&gt;{{/jats}}" suffix="{{jats}}&lt;/given-names&gt;{{/jats}}"/>
</name>
<substitute>
<names variable="editor"/>
</substitute>
</names>
</macro>
<macro name="editor">
<group delimiter=": ">
<names variable="editor">
<name prefix="{{jats}}&lt;name&gt;{{/jats}}" suffix="{{jats}}&lt;/name&gt;{{/jats}}" name-as-sort-order="all" sort-separator="">
<name-part name="family" text-case="capitalize-first" prefix="{{jats}}&lt;surname&gt;{{/jats}}" suffix="{{jats}}&lt;/surname&gt;{{/jats}}"/>
<name-part name="given" text-case="capitalize-first" prefix="{{jats}}&lt;given-names&gt;{{/jats}}" suffix="{{jats}}&lt;given-names&gt;{{/jats}}"/>
</name>
</names>
</group>
</macro>
<macro name="title">
<choose>
<if type="book" match="any">
<group prefix="{{jats}}&lt;source&gt;{{/jats}}" suffix="{{jats}}&lt;/source&gt;{{/jats}}">
<text variable="title"/>
</group>
</if>
<else>
<group prefix="{{jats}}&lt;article-title&gt;{{/jats}}" suffix="{{jats}}&lt;/article-title&gt;{{/jats}}">
<text variable="title"/>
</group>
</else>
</choose>
</macro>
<macro name="container-title">
<text variable="container-title" form="short" prefix="{{jats}}&lt;source&gt;{{/jats}}" suffix="{{jats}}&lt;/source&gt;{{/jats}}"/>
</macro>
<macro name="publisher">
<text variable="publisher" prefix="{{jats}}&lt;publisher-name&gt;{{/jats}}" suffix="{{jats}}&lt;/publisher-name&gt;{{/jats}}"/>
<text variable="publisher-place" prefix="{{jats}}&lt;publisher-loc&gt;{{/jats}}" suffix="{{jats}}&lt;/publisher-loc&gt;{{/jats}}"/>
</macro>
<macro name="link">
<choose>
<if match="any" variable="DOI">
<group prefix="{{jats}}&lt;pub-id pub-id-type=&quot;doi&quot;&gt;{{/jats}}" suffix="{{jats}}&lt;/pub-id&gt;{{/jats}}">
<text variable="DOI"/>
</group>
</if>
</choose>
<choose>
<if match="any" variable="PMID">
<group prefix="{{jats}}&lt;ext-link ext-link-type=&quot;pmid&quot; {{/jats}}" suffix="{{jats}}&lt;/ext-link&gt;{{/jats}}">
<text variable="PMID" prefix="{{jats}}xlink:href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/{{/jats}}" suffix="{{jats}}&quot; xlink:type=&quot;simple&quot;&gt;{{/jats}}"/>
<text variable="PMID"/>
</group>
</if>
</choose>
<choose>
<if variable="URL" match="any">
<group prefix="{{jats}}&lt;ext-link ext-link-type=&quot;uri&quot; {{/jats}}" suffix="{{jats}}&lt;/ext-link&gt;{{/jats}}">
<text variable="URL" prefix="{{jats}}xlink:href=&quot;{{/jats}}" suffix="{{jats}}&quot; xlink:type=&quot;simple&quot;&gt;{{/jats}}"/>
<text variable="URL"/>
</group>
</if>
</choose>
</macro>
<macro name="date">
<choose>
<if type="article-journal article-magazine article-newspaper report patent book" match="any">
<group prefix="{{jats}}&lt;date&gt;{{/jats}}" suffix="{{jats}}&lt;/date&gt;{{/jats}}">
<date variable="issued">
<date-part name="day" form="numeric-leading-zeros" prefix="{{jats}}&lt;day&gt;{{/jats}}" suffix="{{jats}}&lt;/day&gt;{{/jats}}"/>
<date-part name="month" form="numeric-leading-zeros" prefix="{{jats}}&lt;month&gt;{{/jats}}" suffix="{{jats}}&lt;/month&gt;{{/jats}}"/>
<date-part name="year" prefix="{{jats}}&lt;year&gt;{{/jats}}" suffix="{{jats}}&lt;/year&gt;{{/jats}}"/>
</date>
</group>
</if>
<else>
<group prefix="{{jats}}&lt;date-in-citation content-type=&quot;access-date&quot;{{/jats}}" suffix="{{jats}}&lt;/date-in-citation&gt;{{/jats}}">
<date variable="accessed" prefix="{{jats}} iso-8601-date=&quot;{{/jats}}" suffix="{{jats}}&quot;&gt;{{/jats}}">
<date-part name="year"/>
<date-part name="month" form="numeric-leading-zeros" prefix="{{jats}}-{{/jats}}"/>
<date-part name="day" form="numeric-leading-zeros" prefix="{{jats}}-{{/jats}}"/>
</date>
<date variable="accessed">
<date-part name="day" prefix="{{jats}}&lt;day&gt;{{/jats}}" suffix="{{jats}}&lt;/day&gt;{{/jats}}"/>
<date-part name="month" form="numeric-leading-zeros" prefix="{{jats}}&lt;month&gt;{{/jats}}" suffix="{{jats}}&lt;/month&gt;{{/jats}}"/>
<date-part name="year" prefix="{{jats}}&lt;year&gt;{{/jats}}" suffix="{{jats}}&lt;/year&gt;{{/jats}}"/>
</date>
</group>
</else>
</choose>
</macro>
<macro name="location">
<choose>
<if type="article-journal article-magazine" match="any">
<text variable="volume" prefix="{{jats}}&lt;volume&gt;{{/jats}}" suffix="{{jats}}&lt;/volume&gt;{{/jats}}"/>
<text variable="issue" prefix="{{jats}}&lt;issue&gt;{{/jats}}" suffix="{{jats}}&lt;/issue&gt;{{/jats}}"/>
</if>
</choose>
<choose>
<if type="article-journal article-magazine article-newspaper chapter" match="any">
<text variable="page-first" prefix="{{jats}}&lt;fpage&gt;{{/jats}}" suffix="{{jats}}&lt;/fpage&gt;{{/jats}}"/>
</if>
</choose>
</macro>
<macro name="publication-type">
<group prefix="{{jats}} publication-type=&quot;{{/jats}}" suffix="{{jats}}&quot;&gt;{{/jats}}">
<choose>
<if type="article-journal article-magazine article-newspaper" match="any">
<text value="journal"/>
</if>
<else-if type="book" match="any">
<text value="book"/>
</else-if>
<else-if type="chapter" match="any">
<text value="bookchapter"/>
</else-if>
<else-if type="dataset" match="any">
<text value="dataset"/>
</else-if>
<else-if type="patent" match="any">
<text value="patent"/>
</else-if>
<else-if type="report" match="any">
<text value="report"/>
</else-if>
<else-if type="review" match="any">
<text value="review"/>
</else-if>
<else>
<text value="standard"/>
</else>
</choose>
</group>
</macro>
<citation collapse="citation-number">
<sort>
<key variable="citation-number"/>
</sort>
<layout delimiter=",">
<group prefix="{{jats}}&lt;xref ref-type=&quot;bibr&quot; rid=&quot;{{/jats}}" suffix="{{jats}}&lt;/xref&gt;{{/jats}}">
<text variable="citation-number" prefix="{{jats}}ref-{{/jats}}" suffix="{{jats}}&quot;&gt;{{/jats}}"/>
<text variable="citation-number"/>
</group>
</layout>
</citation>
<bibliography sort-separator="">
<layout>
<group prefix="{{jats}}&lt;ref {{/jats}}" suffix="{{jats}}&lt;/ref&gt;{{/jats}}">
<text macro="citation-number"/>
<group prefix="{{jats}}&lt;element-citation{{/jats}}" suffix="{{jats}}&lt;/element-citation&gt;{{/jats}}">
<text macro="publication-type"/>
<text macro="author" prefix="{{jats}}&lt;person-group person-group-type=&quot;author&quot;&gt;{{/jats}}" suffix="{{jats}}&lt;/person-group&gt;{{/jats}}"/>
<text macro="title" />
<text macro="container-title"/>
<text macro="editor"/>
<text macro="publisher"/>
<text macro="date"/>
<text macro="location"/>
<text macro="link"/>
</group>
</group>
</layout>
</bibliography>
</style>

View file

@ -111,6 +111,8 @@ Data-Files:
data/pandoc.lua
-- bash completion template
data/bash_completion.tpl
-- jats csl
data/jats.csl
-- documentation
MANUAL.txt, COPYRIGHT
Extra-Source-Files:

View file

@ -73,7 +73,7 @@ import Text.Pandoc.Lua ( runLuaFilter )
import Text.Pandoc.MediaBag (MediaBag, extractMediaBag, mediaDirectory)
import Text.Pandoc.PDF (makePDF)
import Text.Pandoc.Process (pipeProcess)
import Text.Pandoc.SelfContained (makeSelfContained)
import Text.Pandoc.SelfContained (makeSelfContained, makeDataURI)
import Text.Pandoc.Shared (err, headerShift, openURL, readDataFile,
readDataFileUTF8, safeRead, tabFilter)
import qualified Text.Pandoc.UTF8 as UTF8
@ -386,10 +386,16 @@ convertWithOpts opts = do
withMediaBag . r readerOpts) sources
return (mconcat (map fst pairs), mconcat (map snd pairs))
jatsCSL <- readDataFile datadir "jats.csl"
let jatsEncoded = makeDataURI ("application/xml", jatsCSL)
let metadata = if format == "jats"
then ("csl", jatsEncoded) : optMetadata opts
else optMetadata opts
runIO' $ do
(doc, media) <- sourceToDoc sources
doc' <- (maybe return (extractMedia media) (optExtractMedia opts) >=>
return . flip (foldr addMetadata) (optMetadata opts) >=>
return . flip (foldr addMetadata) metadata >=>
applyTransforms transforms >=>
applyLuaFilters datadir (optLuaFilters opts) [format] >=>
applyFilters datadir filters' [format]) doc