Removed dependency on citeproc-hs.
Going forward we'll use pandoc-citeproc, as an external filter. The `--bibliography`, `--csl`, and `--citation-abbreviation` fields have been removed. Instead one must include `bibliography`, `csl`, or `csl-abbrevs` fields in the document's YAML metadata. The filter can then be used as follows: pandoc --filter pandoc-citeproc The `Text.Pandoc.Biblio` module has been removed. Henceforth, `Text.CSL.Pandoc` from pandoc-citations can be used by library users. The Markdown and LaTeX readers now longer format bibliographies and citations. That must be done using `processCites` or `processCites'` from Text.CSL.Pandoc. All bibliography-related fields have been removed from `ReaderOptions` and `WriterOptions`: `writerBiblioFiles`, `readerReferences`, `readerCitationStyle`. API change.
This commit is contained in:
parent
74250b6c35
commit
deb59b6235
10 changed files with 49 additions and 842 deletions
103
README
103
README
|
@ -598,54 +598,6 @@ Options affecting specific writers
|
|||
Citation rendering
|
||||
------------------
|
||||
|
||||
`--bibliography=`*FILE*
|
||||
: Specify bibliography database to be used in resolving
|
||||
citations. The database type will be determined from the
|
||||
extension of *FILE*, which may be `.mods` (MODS format),
|
||||
`.bib` (BibLaTeX format, which will normally work for BibTeX
|
||||
files as well), `.bibtex` (BibTeX format),
|
||||
`.ris` (RIS format), `.enl` (EndNote format),
|
||||
`.xml` (EndNote XML format), `.wos` (ISI format),
|
||||
`.medline` (MEDLINE format), `.copac` (Copac format),
|
||||
or `.json` (citeproc JSON). If you want to use multiple
|
||||
bibliographies, just use this option repeatedly.
|
||||
|
||||
`--csl=`*FILE*
|
||||
: Specify [CSL] style to be used in formatting citations and
|
||||
the bibliography. If *FILE* is not found, pandoc will look
|
||||
for it in
|
||||
|
||||
$HOME/.csl
|
||||
|
||||
in unix,
|
||||
|
||||
C:\Documents And Settings\USERNAME\Application Data\csl
|
||||
|
||||
in Windows XP, and
|
||||
|
||||
C:\Users\USERNAME\AppData\Roaming\csl
|
||||
|
||||
in Windows 7. If the `--csl` option is not specified, pandoc
|
||||
will use a default style: either `default.csl` in the
|
||||
user data directory (see `--data-dir`), or, if that is
|
||||
not present, the Chicago author-date style.
|
||||
|
||||
`--citation-abbreviations=`*FILE*
|
||||
: Specify a file containing abbreviations for journal titles and
|
||||
other bibliographic fields (indicated by setting `form="short"`
|
||||
in the CSL node for the field). The format is described at
|
||||
<http://citationstylist.org/2011/10/19/abbreviations-for-zotero-test-release/>.
|
||||
Here is a short example:
|
||||
|
||||
{ "default": {
|
||||
"container-title": {
|
||||
"Lloyd's Law Reports": "Lloyd's Rep",
|
||||
"Estates Gazette": "EG",
|
||||
"Scots Law Times": "SLT"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
`--natbib`
|
||||
: Use natbib for citations in LaTeX output.
|
||||
|
||||
|
@ -2378,9 +2330,14 @@ Citations
|
|||
|
||||
**Extension: `citations`**
|
||||
|
||||
Pandoc can automatically generate citations and a bibliography in a number of
|
||||
styles (using Andrea Rossato's `hs-citeproc`). In order to use this feature,
|
||||
you will need a bibliographic database in one of the following formats:
|
||||
Using an external filter, `pandoc-citeproc`, pandoc can automatically generate
|
||||
citations and a bibliography in a number of styles. Basic usage is
|
||||
|
||||
pandoc --filter pandoc-citeproc myinput.txt
|
||||
|
||||
In order to use this feature, you will need to specify a bibliography file
|
||||
using the `bibliography` metadata field in a YAML metadata section.
|
||||
The bibliography may have any of these formats:
|
||||
|
||||
Format File extension
|
||||
------------ --------------
|
||||
|
@ -2398,18 +2355,40 @@ you will need a bibliographic database in one of the following formats:
|
|||
Note that `.bib` can generally be used with both BibTeX and BibLaTeX
|
||||
files, but you can use `.bibtex` to force BibTeX.
|
||||
|
||||
You will need to specify the bibliography file using the `--bibliography`
|
||||
command-line option (which may be repeated if you have several
|
||||
bibliographies).
|
||||
Alternatively you can use a `references` field in the document's YAML
|
||||
metadata. This should include an array of YAML-encoded references,
|
||||
for example:
|
||||
|
||||
By default, pandoc will use a Chicago author-date format for citations
|
||||
and references. To use another style, you will need to use the
|
||||
`--csl` option to specify a [CSL] 1.0 style file. A primer on
|
||||
creating and modifying CSL styles can be found at
|
||||
<http://citationstyles.org/downloads/primer.html>.
|
||||
A repository of CSL styles can be found at
|
||||
<https://github.com/citation-style-language/styles>.
|
||||
See also <http://zotero.org/styles> for easy browsing.
|
||||
---
|
||||
references:
|
||||
- id: fenner2012a
|
||||
title: One-click science marketing
|
||||
author:
|
||||
- family: Fenner
|
||||
given: Martin
|
||||
container-title: Nature Materials
|
||||
volume: 11
|
||||
URL: 'http://dx.doi.org/10.1038/nmat3283'
|
||||
DOI: 10.1038/nmat3283
|
||||
issue: 4
|
||||
publisher: Nature Publishing Group
|
||||
page: 261-263
|
||||
type: article-journal
|
||||
issued:
|
||||
year: 2012
|
||||
month: 3
|
||||
...
|
||||
|
||||
(The program `mods2yaml`, which comes with `pandoc-citeproc`, can help produce
|
||||
these from a MODS reference collection.)
|
||||
|
||||
By default, `pandoc-citeproc` will use a Chicago author-date format for
|
||||
citations and references. To use another style, you will need to specify
|
||||
a [CSL] 1.0 style file in the `csl` metadata field. A primer on creating and
|
||||
modifying CSL styles can be found at
|
||||
<http://citationstyles.org/downloads/primer.html>. A repository of CSL styles
|
||||
can be found at <https://github.com/citation-style-language/styles>. See also
|
||||
<http://zotero.org/styles> for easy browsing.
|
||||
|
||||
Citations go inside square brackets and are separated by semicolons.
|
||||
Each citation must have a key, composed of '@' + the citation
|
||||
|
|
458
data/default.csl
458
data/default.csl
|
@ -1,458 +0,0 @@
|
|||
<?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">
|
||||
<info>
|
||||
<title>Chicago Manual of Style (author-date)</title>
|
||||
<id>http://www.zotero.org/styles/chicago-author-date</id>
|
||||
<link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>
|
||||
<link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>
|
||||
<author>
|
||||
<name>Julian Onions</name>
|
||||
<email>julian.onions@gmail.com</email>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>Sebastian Karcher</name>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Richard Karnesky</name>
|
||||
<email>karnesky+zotero@gmail.com</email>
|
||||
<uri>http://arc.nucapt.northwestern.edu/Richard_Karnesky</uri>
|
||||
</contributor>
|
||||
<category citation-format="author-date"/>
|
||||
<category field="generic-base"/>
|
||||
<summary>The author-date variant of the Chicago style</summary>
|
||||
<updated>2013-03-28T05:37:10+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>
|
||||
<terms>
|
||||
<term name="editor" form="verb-short">ed.</term>
|
||||
<term name="container-author" form="verb">by</term>
|
||||
<term name="translator" form="verb-short">trans.</term>
|
||||
<term name="translator" form="short">trans.</term>
|
||||
</terms>
|
||||
</locale>
|
||||
<macro name="secondary-contributors">
|
||||
<choose>
|
||||
<if type="chapter paper-conference" match="none">
|
||||
<group delimiter=". ">
|
||||
<names variable="editor translator">
|
||||
<label form="verb" text-case="capitalize-first" suffix=" " plural="never"/>
|
||||
<name and="text" delimiter=", "/>
|
||||
</names>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="container-contributors">
|
||||
<choose>
|
||||
<if type="chapter paper-conference" match="any">
|
||||
<group prefix=", " delimiter=", ">
|
||||
<names variable="container-author editor" delimiter=", ">
|
||||
<label form="verb" suffix=" " plural="never"/>
|
||||
<name and="text" delimiter=", "/>
|
||||
</names>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="editor">
|
||||
<names variable="editor">
|
||||
<name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
|
||||
<label form="short" prefix=", "/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="translator">
|
||||
<names variable="translator">
|
||||
<name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
|
||||
<label form="short" prefix=", " plural="never"/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="recipient">
|
||||
<choose>
|
||||
<if type="personal_communication">
|
||||
<choose>
|
||||
<if variable="genre">
|
||||
<text variable="genre" text-case="capitalize-first"/>
|
||||
</if>
|
||||
<else>
|
||||
<text term="letter" text-case="capitalize-first"/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
<names variable="recipient" delimiter=", ">
|
||||
<label form="verb" prefix=" " text-case="lowercase" suffix=" "/>
|
||||
<name and="text" delimiter=", "/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="contributors">
|
||||
<names variable="author">
|
||||
<name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
|
||||
<label form="short" plural="never" prefix=", "/>
|
||||
<substitute>
|
||||
<names variable="editor"/>
|
||||
<names variable="translator"/>
|
||||
<text macro="title"/>
|
||||
</substitute>
|
||||
</names>
|
||||
<text macro="recipient"/>
|
||||
</macro>
|
||||
<macro name="contributors-short">
|
||||
<names variable="author">
|
||||
<name form="short" and="text" delimiter=", " initialize-with=". "/>
|
||||
<substitute>
|
||||
<names variable="editor"/>
|
||||
<names variable="translator"/>
|
||||
<text macro="title"/>
|
||||
</substitute>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="interviewer">
|
||||
<names variable="interviewer" delimiter=", ">
|
||||
<label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>
|
||||
<name and="text" delimiter=", "/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="archive">
|
||||
<group delimiter=". ">
|
||||
<text variable="archive_location" text-case="capitalize-first"/>
|
||||
<text variable="archive"/>
|
||||
<text variable="archive-place"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="access">
|
||||
<group delimiter=". ">
|
||||
<choose>
|
||||
<if type="graphic report" match="any">
|
||||
<text macro="archive"/>
|
||||
</if>
|
||||
<else-if type="article-magazine article-newspaper bill book chapter graphic legal_case legislation motion_picture paper-conference report song thesis" match="none">
|
||||
<text macro="archive"/>
|
||||
</else-if>
|
||||
</choose>
|
||||
<text variable="DOI" prefix="doi:"/>
|
||||
<choose>
|
||||
<if variable="DOI issued" match="none">
|
||||
<choose>
|
||||
<if variable="URL accessed" match="all">
|
||||
<group delimiter=" ">
|
||||
<text term="accessed" text-case="capitalize-first"/>
|
||||
<date variable="accessed" delimiter=" ">
|
||||
<date-part name="month"/>
|
||||
<date-part name="day"/>
|
||||
</date>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
<else-if type="webpage">
|
||||
<date variable="issued" delimiter=" ">
|
||||
<date-part name="month"/>
|
||||
<date-part name="day"/>
|
||||
</date>
|
||||
</else-if>
|
||||
</choose>
|
||||
<choose>
|
||||
<if type="legal_case" match="none">
|
||||
<text variable="URL"/>
|
||||
</if>
|
||||
</choose>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="title">
|
||||
<choose>
|
||||
<if variable="title" match="none">
|
||||
<choose>
|
||||
<if type="personal_communication" match="none">
|
||||
<text variable="genre" text-case="capitalize-first"/>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
<else-if type="bill book graphic legal_case legislation motion_picture song" match="any">
|
||||
<text variable="title" text-case="title" font-style="italic"/>
|
||||
</else-if>
|
||||
<else>
|
||||
<text variable="title" text-case="title" quotes="true"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="edition">
|
||||
<choose>
|
||||
<if type="bill book graphic legal_case legislation motion_picture report song" match="any">
|
||||
<choose>
|
||||
<if is-numeric="edition">
|
||||
<group delimiter=" " prefix=". ">
|
||||
<number variable="edition" form="ordinal"/>
|
||||
<text term="edition" form="short" strip-periods="true"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="edition" prefix=". "/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
<else-if type="chapter paper-conference" match="any">
|
||||
<choose>
|
||||
<if is-numeric="edition">
|
||||
<group delimiter=" " prefix=", ">
|
||||
<number variable="edition" form="ordinal"/>
|
||||
<text term="edition" form="short"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="edition" prefix=", "/>
|
||||
</else>
|
||||
</choose>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="locators">
|
||||
<choose>
|
||||
<if type="article-journal">
|
||||
<text variable="volume" prefix=" "/>
|
||||
<text variable="issue" prefix=" (" suffix=")"/>
|
||||
</if>
|
||||
<else-if type="legal_case">
|
||||
<text variable="volume" prefix=", "/>
|
||||
<text variable="container-title" prefix=" "/>
|
||||
<text variable="page" prefix=" "/>
|
||||
</else-if>
|
||||
<else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
|
||||
<group prefix=". " delimiter=". ">
|
||||
<group>
|
||||
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
|
||||
<number variable="volume" form="numeric"/>
|
||||
</group>
|
||||
<group>
|
||||
<number variable="number-of-volumes" form="numeric"/>
|
||||
<text term="volume" form="short" prefix=" " plural="true"/>
|
||||
</group>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="chapter paper-conference" match="any">
|
||||
<choose>
|
||||
<if variable="page" match="none">
|
||||
<group prefix=". ">
|
||||
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
|
||||
<number variable="volume" form="numeric"/>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="locators-chapter">
|
||||
<choose>
|
||||
<if type="chapter paper-conference" match="any">
|
||||
<choose>
|
||||
<if variable="page">
|
||||
<group prefix=", ">
|
||||
<text variable="volume" suffix=":"/>
|
||||
<text variable="page"/>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="locators-article">
|
||||
<choose>
|
||||
<if type="article-newspaper">
|
||||
<group prefix=", " delimiter=", ">
|
||||
<group>
|
||||
<text variable="edition" suffix=" "/>
|
||||
<text term="edition" prefix=" "/>
|
||||
</group>
|
||||
<group>
|
||||
<text term="section" form="short" suffix=" "/>
|
||||
<text variable="section"/>
|
||||
</group>
|
||||
</group>
|
||||
</if>
|
||||
<else-if type="article-journal">
|
||||
<text variable="page" prefix=": "/>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="point-locators">
|
||||
<choose>
|
||||
<if variable="locator">
|
||||
<choose>
|
||||
<if locator="page" match="none">
|
||||
<choose>
|
||||
<if type="bill book graphic legal_case legislation motion_picture report song" match="any">
|
||||
<choose>
|
||||
<if variable="volume">
|
||||
<group>
|
||||
<text term="volume" form="short" suffix=" "/>
|
||||
<number variable="volume" form="numeric"/>
|
||||
<label variable="locator" form="short" prefix=", " suffix=" "/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<label variable="locator" form="short" suffix=" "/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
<else>
|
||||
<label variable="locator" form="short" suffix=" "/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
<else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
|
||||
<number variable="volume" form="numeric" suffix=":"/>
|
||||
</else-if>
|
||||
</choose>
|
||||
<text variable="locator"/>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="container-prefix">
|
||||
<text term="in" text-case="capitalize-first"/>
|
||||
</macro>
|
||||
<macro name="container-title">
|
||||
<choose>
|
||||
<if type="chapter paper-conference" match="any">
|
||||
<text macro="container-prefix" suffix=" "/>
|
||||
</if>
|
||||
</choose>
|
||||
<choose>
|
||||
<if type="legal_case" match="none">
|
||||
<text variable="container-title" text-case="title" font-style="italic"/>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="publisher">
|
||||
<group delimiter=": ">
|
||||
<text variable="publisher-place"/>
|
||||
<text variable="publisher"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="date">
|
||||
<choose>
|
||||
<if variable="issued">
|
||||
<date variable="issued">
|
||||
<date-part name="year"/>
|
||||
</date>
|
||||
</if>
|
||||
<else-if variable="accessed">
|
||||
<date variable="accessed">
|
||||
<date-part name="year"/>
|
||||
</date>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="day-month">
|
||||
<date variable="issued">
|
||||
<date-part name="month"/>
|
||||
<date-part name="day" prefix=" "/>
|
||||
</date>
|
||||
</macro>
|
||||
<macro name="collection-title">
|
||||
<text variable="collection-title" text-case="title"/>
|
||||
<text variable="collection-number" prefix=" "/>
|
||||
</macro>
|
||||
<macro name="event">
|
||||
<group>
|
||||
<text term="presented at" suffix=" "/>
|
||||
<text variable="event"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="description">
|
||||
<choose>
|
||||
<if type="interview">
|
||||
<group delimiter=". ">
|
||||
<text macro="interviewer"/>
|
||||
<text variable="medium" text-case="capitalize-first"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="medium" text-case="capitalize-first" prefix=". "/>
|
||||
</else>
|
||||
</choose>
|
||||
<choose>
|
||||
<if variable="title" match="none"/>
|
||||
<else-if type="thesis"/>
|
||||
<else>
|
||||
<group delimiter=" " prefix=". ">
|
||||
<text variable="genre" text-case="capitalize-first"/>
|
||||
<choose>
|
||||
<if type="report">
|
||||
<text variable="number"/>
|
||||
</if>
|
||||
</choose>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
<!--This is for computer programs only. Localization new to 1.0.1, so may be missing in many locales-->
|
||||
<group delimiter=" " prefix=" (" suffix=")">
|
||||
<text term="version"/>
|
||||
<text variable="version"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="issue">
|
||||
<choose>
|
||||
<if type="article-journal">
|
||||
<text macro="day-month" prefix=" (" suffix=")"/>
|
||||
</if>
|
||||
<else-if type="legal_case">
|
||||
<text variable="authority" prefix=". "/>
|
||||
</else-if>
|
||||
<else-if type="speech">
|
||||
<group prefix=" " delimiter=", ">
|
||||
<text macro="event"/>
|
||||
<text macro="day-month"/>
|
||||
<text variable="event-place"/>
|
||||
</group>
|
||||
</else-if>
|
||||
<else-if type="article-newspaper article-magazine" match="any">
|
||||
<text macro="day-month" prefix=", "/>
|
||||
</else-if>
|
||||
<else>
|
||||
<group prefix=". " delimiter=", ">
|
||||
<choose>
|
||||
<if type="thesis">
|
||||
<text variable="genre" text-case="capitalize-first"/>
|
||||
</if>
|
||||
</choose>
|
||||
<text macro="publisher"/>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">
|
||||
<layout prefix="(" suffix=")" delimiter="; ">
|
||||
<group delimiter=", ">
|
||||
<group delimiter=" ">
|
||||
<text macro="contributors-short"/>
|
||||
<text macro="date"/>
|
||||
</group>
|
||||
<text macro="point-locators"/>
|
||||
</group>
|
||||
</layout>
|
||||
</citation>
|
||||
<bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="———" entry-spacing="0">
|
||||
<sort>
|
||||
<key macro="contributors"/>
|
||||
<key variable="issued"/>
|
||||
</sort>
|
||||
<layout suffix=".">
|
||||
<group delimiter=". ">
|
||||
<text macro="contributors"/>
|
||||
<text macro="date"/>
|
||||
<text macro="title"/>
|
||||
</group>
|
||||
<text macro="description"/>
|
||||
<text macro="secondary-contributors" prefix=". "/>
|
||||
<text macro="container-title" prefix=". "/>
|
||||
<text macro="container-contributors"/>
|
||||
<text macro="edition"/>
|
||||
<text macro="locators-chapter"/>
|
||||
<text macro="locators"/>
|
||||
<text macro="collection-title" prefix=". "/>
|
||||
<text macro="issue"/>
|
||||
<text macro="locators-article"/>
|
||||
<text macro="access" prefix=". "/>
|
||||
</layout>
|
||||
</bibliography>
|
||||
</style>
|
|
@ -99,8 +99,6 @@ Data-Files:
|
|||
data/slideous/slideous.js,
|
||||
-- data for dzslides writer
|
||||
data/dzslides/template.html,
|
||||
-- data for citeproc
|
||||
data/default.csl,
|
||||
-- sample lua custom writer
|
||||
data/sample.lua
|
||||
-- documentation
|
||||
|
@ -250,7 +248,6 @@ Library
|
|||
xml >= 1.3.12 && < 1.4,
|
||||
random >= 1 && < 1.1,
|
||||
extensible-exceptions >= 0.1 && < 0.2,
|
||||
citeproc-hs >= 0.3.7 && < 0.4,
|
||||
pandoc-types >= 1.12 && < 1.13,
|
||||
aeson >= 0.6 && < 0.7,
|
||||
tagsoup >= 0.12.5 && < 0.14,
|
||||
|
@ -323,7 +320,6 @@ Library
|
|||
Text.Pandoc.UTF8,
|
||||
Text.Pandoc.Templates,
|
||||
Text.Pandoc.XML,
|
||||
Text.Pandoc.Biblio,
|
||||
Text.Pandoc.SelfContained,
|
||||
Text.Pandoc.Process
|
||||
Other-Modules: Text.Pandoc.Readers.Haddock.Lex,
|
||||
|
@ -353,8 +349,7 @@ Executable pandoc
|
|||
extensible-exceptions >= 0.1 && < 0.2,
|
||||
highlighting-kate >= 0.5.5 && < 0.6,
|
||||
aeson >= 0.6 && < 0.7,
|
||||
HTTP >= 4000.0.5 && < 4000.3,
|
||||
citeproc-hs >= 0.3.7 && < 0.4
|
||||
HTTP >= 4000.0.5 && < 4000.3
|
||||
Ghc-Options: -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind
|
||||
Ghc-Prof-Options: -auto-all -caf-all -rtsopts -with-rtsopts=-K16m
|
||||
if os(windows)
|
||||
|
|
68
pandoc.hs
68
pandoc.hs
|
@ -35,7 +35,7 @@ import Text.Pandoc.PDF (makePDF)
|
|||
import Text.Pandoc.Readers.LaTeX (handleIncludes)
|
||||
import Text.Pandoc.Shared ( tabFilter, readDataFileUTF8, readDataFile,
|
||||
safeRead, headerShift, normalize, err, warn )
|
||||
import Text.Pandoc.XML ( toEntities, fromEntities )
|
||||
import Text.Pandoc.XML ( toEntities )
|
||||
import Text.Pandoc.SelfContained ( makeSelfContained )
|
||||
import Text.Pandoc.Process (pipeProcess)
|
||||
import Text.Highlighting.Kate ( languages, Style, tango, pygments,
|
||||
|
@ -46,20 +46,18 @@ import System.FilePath
|
|||
import System.Console.GetOpt
|
||||
import Data.Char ( toLower )
|
||||
import Data.List ( intercalate, isPrefixOf, sort )
|
||||
import System.Directory ( getAppUserDataDirectory, doesFileExist, findExecutable )
|
||||
import System.Directory ( getAppUserDataDirectory, findExecutable )
|
||||
import System.IO ( stdout, stderr )
|
||||
import System.IO.Error ( isDoesNotExistError )
|
||||
import qualified Control.Exception as E
|
||||
import Control.Exception.Extensible ( throwIO )
|
||||
import qualified Text.Pandoc.UTF8 as UTF8
|
||||
import qualified Text.CSL as CSL
|
||||
import Control.Monad (when, unless, liftM)
|
||||
import Data.Foldable (foldrM)
|
||||
import Network.HTTP (simpleHTTP, mkRequest, getResponseBody, RequestMethod(..))
|
||||
import Network.URI (parseURI, isURI, URI(..))
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import qualified Data.ByteString as BS
|
||||
import Text.CSL.Reference (Reference(..))
|
||||
import Data.Aeson (eitherDecode', encode)
|
||||
|
||||
copyrightMessage :: String
|
||||
|
@ -70,7 +68,7 @@ copyrightMessage = "\nCopyright (C) 2006-2013 John MacFarlane\n" ++
|
|||
|
||||
compileInfo :: String
|
||||
compileInfo =
|
||||
"\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ ", texmath " ++
|
||||
"\nCompiled with texmath " ++
|
||||
VERSION_texmath ++ ", highlighting-kate " ++ VERSION_highlighting_kate ++
|
||||
".\nSyntax highlighting is supported for the following languages:\n " ++
|
||||
wrapWords 4 78
|
||||
|
@ -146,9 +144,6 @@ data Opt = Opt
|
|||
, optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks
|
||||
, optDataDir :: Maybe FilePath
|
||||
, optCiteMethod :: CiteMethod -- ^ Method to output cites
|
||||
, optBibliography :: [String]
|
||||
, optCslFile :: Maybe FilePath
|
||||
, optAbbrevsFile :: Maybe FilePath
|
||||
, optListings :: Bool -- ^ Use listings package for code blocks
|
||||
, optLaTeXEngine :: String -- ^ Program to use for latex -> pdf
|
||||
, optSlideLevel :: Maybe Int -- ^ Header level that creates slides
|
||||
|
@ -203,9 +198,6 @@ defaultOpts = Opt
|
|||
, optIndentedCodeClasses = []
|
||||
, optDataDir = Nothing
|
||||
, optCiteMethod = Citeproc
|
||||
, optBibliography = []
|
||||
, optCslFile = Nothing
|
||||
, optAbbrevsFile = Nothing
|
||||
, optListings = False
|
||||
, optLaTeXEngine = "pdflatex"
|
||||
, optSlideLevel = Nothing
|
||||
|
@ -650,24 +642,6 @@ options =
|
|||
"PROGRAM")
|
||||
"" -- "Name of latex program to use in generating PDF"
|
||||
|
||||
, Option "" ["bibliography"]
|
||||
(ReqArg
|
||||
(\arg opt -> return opt { optBibliography = (optBibliography opt) ++ [arg] })
|
||||
"FILENAME")
|
||||
""
|
||||
|
||||
, Option "" ["csl"]
|
||||
(ReqArg
|
||||
(\arg opt -> return opt { optCslFile = Just arg })
|
||||
"FILENAME")
|
||||
""
|
||||
|
||||
, Option "" ["citation-abbreviations"]
|
||||
(ReqArg
|
||||
(\arg opt -> return opt { optAbbrevsFile = Just arg })
|
||||
"FILENAME")
|
||||
""
|
||||
|
||||
, Option "" ["natbib"]
|
||||
(NoArg
|
||||
(\opt -> return opt { optCiteMethod = Natbib }))
|
||||
|
@ -904,9 +878,6 @@ main = do
|
|||
, optIdentifierPrefix = idPrefix
|
||||
, optIndentedCodeClasses = codeBlockClasses
|
||||
, optDataDir = mbDataDir
|
||||
, optBibliography = reffiles
|
||||
, optCslFile = mbCsl
|
||||
, optAbbrevsFile = cslabbrevs
|
||||
, optCiteMethod = citeMethod
|
||||
, optListings = listings
|
||||
, optLaTeXEngine = latexEngine
|
||||
|
@ -1007,36 +978,6 @@ main = do
|
|||
$ lines dztempl
|
||||
return $ ("dzslides-core", dzcore) : variables'
|
||||
else return variables'
|
||||
|
||||
-- unescape reference ids, which may contain XML entities, so
|
||||
-- that we can do lookups with regular string equality
|
||||
let unescapeRefId ref = ref{ refId = fromEntities (refId ref) }
|
||||
|
||||
refs <- mapM (\f -> E.catch (CSL.readBiblioFile f)
|
||||
(\e -> let _ = (e :: E.SomeException)
|
||||
in err 23 $ "Error reading bibliography `" ++ f ++
|
||||
"'" ++ "\n" ++ show e))
|
||||
reffiles >>=
|
||||
return . map unescapeRefId . concat
|
||||
|
||||
mbsty <- if citeMethod == Citeproc && not (null refs)
|
||||
then do
|
||||
csl <- CSL.parseCSL =<<
|
||||
case mbCsl of
|
||||
Nothing -> readDataFileUTF8 datadir
|
||||
"default.csl"
|
||||
Just cslfile -> do
|
||||
exists <- doesFileExist cslfile
|
||||
if exists
|
||||
then UTF8.readFile cslfile
|
||||
else do
|
||||
csldir <- getAppUserDataDirectory "csl"
|
||||
readDataFileUTF8 (Just csldir)
|
||||
(replaceExtension cslfile "csl")
|
||||
abbrevs <- maybe (return []) CSL.readJsonAbbrevFile cslabbrevs
|
||||
return $ Just csl { CSL.styleAbbrevs = abbrevs }
|
||||
else return Nothing
|
||||
|
||||
let sourceURL = case sources of
|
||||
[] -> Nothing
|
||||
(x:_) -> case parseURI x of
|
||||
|
@ -1054,8 +995,6 @@ main = do
|
|||
, readerColumns = columns
|
||||
, readerTabStop = tabStop
|
||||
, readerOldDashes = oldDashes
|
||||
, readerReferences = refs
|
||||
, readerCitationStyle = mbsty
|
||||
, readerIndentedCodeClasses = codeBlockClasses
|
||||
, readerApplyMacros = not laTeXOutput
|
||||
, readerDefaultImageExtension = defaultImageExtension
|
||||
|
@ -1069,7 +1008,6 @@ main = do
|
|||
writerHTMLMathMethod = mathMethod,
|
||||
writerIncremental = incremental,
|
||||
writerCiteMethod = citeMethod,
|
||||
writerBiblioFiles = reffiles,
|
||||
writerIgnoreNotes = False,
|
||||
writerNumberSections = numberSections,
|
||||
writerNumberOffset = numberFrom,
|
||||
|
|
|
@ -1,216 +0,0 @@
|
|||
{-# LANGUAGE PatternGuards #-}
|
||||
{-
|
||||
Copyright (C) 2008 Andrea Rossato <andrea.rossato@ing.unitn.it>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
-}
|
||||
|
||||
{- |
|
||||
Module : Text.Pandoc.Biblio
|
||||
Copyright : Copyright (C) 2008-2010 Andrea Rossato
|
||||
License : GNU GPL, version 2 or above
|
||||
|
||||
Maintainer : Andrea Rossato <andrea.rossato@unitn.it>
|
||||
Stability : alpha
|
||||
Portability : portable
|
||||
-}
|
||||
|
||||
module Text.Pandoc.Biblio ( processBiblio ) where
|
||||
|
||||
import Data.List
|
||||
import Data.Char ( isDigit, isPunctuation )
|
||||
import qualified Data.Map as M
|
||||
import Text.CSL hiding ( Cite(..), Citation(..), endWithPunct )
|
||||
import qualified Text.CSL as CSL ( Cite(..) )
|
||||
import Text.Pandoc.Definition
|
||||
import Text.Pandoc.Generic
|
||||
import Text.Pandoc.Walk
|
||||
import Text.Pandoc.Shared (stringify)
|
||||
import Text.Parsec hiding (State)
|
||||
import Control.Monad
|
||||
import Control.Monad.State
|
||||
|
||||
-- | Process a 'Pandoc' document by adding citations formatted
|
||||
-- according to a CSL style, using 'citeproc' from citeproc-hs.
|
||||
processBiblio :: Maybe Style -> [Reference] -> Pandoc -> Pandoc
|
||||
processBiblio Nothing _ p = p
|
||||
processBiblio _ [] p = p
|
||||
processBiblio (Just style) r p =
|
||||
let p' = evalState (bottomUpM setHash p) 1
|
||||
grps = query getCitation p'
|
||||
result = citeproc procOpts style r (setNearNote style $
|
||||
map (map toCslCite) grps)
|
||||
cits_map = M.fromList $ zip grps (citations result)
|
||||
biblioList = map (renderPandoc' style) (bibliography result)
|
||||
Pandoc m b = bottomUp mvPunct . deNote . topDown (processCite style cits_map) $ p'
|
||||
(bs, lastb) = case reverse b of
|
||||
x@(Header _ _ _) : xs -> (reverse xs, [x])
|
||||
_ -> (b, [])
|
||||
in Pandoc m $ bs ++ [Div ("",["references"],[]) (lastb ++ biblioList)]
|
||||
|
||||
-- | Substitute 'Cite' elements with formatted citations.
|
||||
processCite :: Style -> M.Map [Citation] [FormattedOutput] -> Inline -> Inline
|
||||
processCite s cs (Cite t _) =
|
||||
case M.lookup t cs of
|
||||
Just (x:xs)
|
||||
| isTextualCitation t && not (null xs) ->
|
||||
let xs' = renderPandoc s xs
|
||||
in if styleClass s == "note"
|
||||
then Cite t (renderPandoc s [x] ++ [Note [Para xs']])
|
||||
else Cite t (renderPandoc s [x] ++ [Space | not (startWithPunct xs')] ++ xs')
|
||||
| otherwise -> if styleClass s == "note"
|
||||
then Cite t [Note [Para $ renderPandoc s (x:xs)]]
|
||||
else Cite t (renderPandoc s (x:xs))
|
||||
_ -> Strong [Str "???"] -- TODO raise error instead?
|
||||
processCite _ _ x = x
|
||||
|
||||
isNote :: Inline -> Bool
|
||||
isNote (Note _) = True
|
||||
isNote (Cite _ [Note _]) = True
|
||||
isNote _ = False
|
||||
|
||||
mvPunct :: [Inline] -> [Inline]
|
||||
mvPunct (Space : Space : xs) = Space : xs
|
||||
mvPunct (Space : x : ys) | isNote x, startWithPunct ys =
|
||||
Str (headInline ys) : x : tailFirstInlineStr ys
|
||||
mvPunct (Space : x : ys) | isNote x = x : ys
|
||||
mvPunct xs = xs
|
||||
|
||||
-- A replacement for citeproc-hs's endWithPunct, which wrongly treats
|
||||
-- a sentence ending in '.)' as not ending with punctuation, leading
|
||||
-- to an extra period.
|
||||
endWithPunct :: [Inline] -> Bool
|
||||
endWithPunct [] = True
|
||||
endWithPunct xs@(_:_) = case reverse (stringify [last xs]) of
|
||||
[] -> True
|
||||
(')':c:_) | isEndPunct c -> True
|
||||
(c:_) | isEndPunct c -> True
|
||||
| otherwise -> False
|
||||
where isEndPunct c = c `elem` ".,;:!?"
|
||||
|
||||
deNote :: Pandoc -> Pandoc
|
||||
deNote = topDown go
|
||||
where go (Cite (c:cs) [Note xs]) =
|
||||
Cite (c:cs) [Note $ bottomUp go' $ sanitize c xs]
|
||||
go (Note xs) = Note $ bottomUp go' xs
|
||||
go x = x
|
||||
go' (Note [Para xs]:ys) =
|
||||
if startWithPunct ys && endWithPunct xs
|
||||
then initInline xs ++ ys
|
||||
else xs ++ ys
|
||||
go' xs = xs
|
||||
sanitize :: Citation -> [Block] -> [Block]
|
||||
sanitize Citation{citationPrefix = pref} [Para xs] =
|
||||
case (null pref, endWithPunct xs) of
|
||||
(True, False) -> [Para $ xs ++ [Str "."]]
|
||||
(True, True) -> [Para xs]
|
||||
(False, False) -> [Para $ toCapital $ xs ++ [Str "."]]
|
||||
(False, True) -> [Para $ toCapital xs]
|
||||
sanitize _ bs = bs
|
||||
|
||||
isTextualCitation :: [Citation] -> Bool
|
||||
isTextualCitation (c:_) = citationMode c == AuthorInText
|
||||
isTextualCitation _ = False
|
||||
|
||||
-- | Retrieve all citations from a 'Pandoc' docuument. To be used with
|
||||
-- 'query'.
|
||||
getCitation :: Inline -> [[Citation]]
|
||||
getCitation i | Cite t _ <- i = [t]
|
||||
| otherwise = []
|
||||
|
||||
setHash :: Citation -> State Int Citation
|
||||
setHash c = do
|
||||
ident <- get
|
||||
put $ ident + 1
|
||||
return c{ citationHash = ident }
|
||||
|
||||
toCslCite :: Citation -> CSL.Cite
|
||||
toCslCite c
|
||||
= let (l, s) = locatorWords $ citationSuffix c
|
||||
(la,lo) = parseLocator l
|
||||
s' = case (l,s) of
|
||||
-- treat a bare locator as if it begins with space
|
||||
-- so @item1 [blah] is like [@item1, blah]
|
||||
("",(x:_))
|
||||
| not (isPunct x) -> [Space] ++ s
|
||||
_ -> s
|
||||
isPunct (Str (x:_)) = isPunctuation x
|
||||
isPunct _ = False
|
||||
citMode = case citationMode c of
|
||||
AuthorInText -> (True, False)
|
||||
SuppressAuthor -> (False,True )
|
||||
NormalCitation -> (False,False)
|
||||
in emptyCite { CSL.citeId = citationId c
|
||||
, CSL.citePrefix = PandocText $ citationPrefix c
|
||||
, CSL.citeSuffix = PandocText s'
|
||||
, CSL.citeLabel = la
|
||||
, CSL.citeLocator = lo
|
||||
, CSL.citeNoteNumber = show $ citationNoteNum c
|
||||
, CSL.authorInText = fst citMode
|
||||
, CSL.suppressAuthor = snd citMode
|
||||
, CSL.citeHash = citationHash c
|
||||
}
|
||||
|
||||
locatorWords :: [Inline] -> (String, [Inline])
|
||||
locatorWords inp =
|
||||
case parse pLocatorWords "suffix" $ breakup inp of
|
||||
Right r -> r
|
||||
Left _ -> ("",inp)
|
||||
where breakup [] = []
|
||||
breakup (Str x : xs) = map Str (splitup x) ++ breakup xs
|
||||
breakup (x : xs) = x : breakup xs
|
||||
splitup = groupBy (\x y -> x /= '\160' && y /= '\160')
|
||||
|
||||
pLocatorWords :: Parsec [Inline] st (String, [Inline])
|
||||
pLocatorWords = do
|
||||
l <- pLocator
|
||||
s <- getInput -- rest is suffix
|
||||
if length l > 0 && last l == ','
|
||||
then return (init l, Str "," : s)
|
||||
else return (l, s)
|
||||
|
||||
pMatch :: (Inline -> Bool) -> Parsec [Inline] st Inline
|
||||
pMatch condition = try $ do
|
||||
t <- anyToken
|
||||
guard $ condition t
|
||||
return t
|
||||
|
||||
pSpace :: Parsec [Inline] st Inline
|
||||
pSpace = pMatch (\t -> t == Space || t == Str "\160")
|
||||
|
||||
pLocator :: Parsec [Inline] st String
|
||||
pLocator = try $ do
|
||||
optional $ pMatch (== Str ",")
|
||||
optional pSpace
|
||||
f <- (guardFollowingDigit >> return [Str "p"]) -- "page" the default
|
||||
<|> many1 (notFollowedBy pSpace >> anyToken)
|
||||
gs <- many1 pWordWithDigits
|
||||
return $ stringify f ++ (' ' : unwords gs)
|
||||
|
||||
guardFollowingDigit :: Parsec [Inline] st ()
|
||||
guardFollowingDigit = do
|
||||
t <- lookAhead anyToken
|
||||
case t of
|
||||
Str (d:_) | isDigit d -> return ()
|
||||
_ -> mzero
|
||||
|
||||
pWordWithDigits :: Parsec [Inline] st String
|
||||
pWordWithDigits = try $ do
|
||||
optional pSpace
|
||||
r <- many1 (notFollowedBy pSpace >> anyToken)
|
||||
let s = stringify r
|
||||
guard $ any isDigit s
|
||||
return s
|
||||
|
|
@ -48,7 +48,6 @@ import Data.Set (Set)
|
|||
import qualified Data.Set as Set
|
||||
import Data.Default
|
||||
import Text.Pandoc.Highlighting (Style, pygments)
|
||||
import qualified Text.CSL as CSL
|
||||
|
||||
-- | Individually selectable syntax extensions.
|
||||
data Extension =
|
||||
|
@ -205,8 +204,6 @@ data ReaderOptions = ReaderOptions{
|
|||
, readerOldDashes :: Bool -- ^ Use pandoc <= 1.8.2.1 behavior
|
||||
-- in parsing dashes; -- is em-dash;
|
||||
-- - before numerial is en-dash
|
||||
, readerReferences :: [CSL.Reference] -- ^ Bibliographic references
|
||||
, readerCitationStyle :: Maybe CSL.Style -- ^ Citation style
|
||||
, readerApplyMacros :: Bool -- ^ Apply macros to TeX math
|
||||
, readerIndentedCodeClasses :: [String] -- ^ Default classes for
|
||||
-- indented code blocks
|
||||
|
@ -223,8 +220,6 @@ instance Default ReaderOptions
|
|||
, readerColumns = 80
|
||||
, readerTabStop = 4
|
||||
, readerOldDashes = False
|
||||
, readerReferences = []
|
||||
, readerCitationStyle = Nothing
|
||||
, readerApplyMacros = True
|
||||
, readerIndentedCodeClasses = []
|
||||
, readerDefaultImageExtension = ""
|
||||
|
@ -289,7 +284,6 @@ data WriterOptions = WriterOptions
|
|||
, writerSourceURL :: Maybe String -- ^ Absolute URL + directory of 1st source file
|
||||
, writerUserDataDir :: Maybe FilePath -- ^ Path of user data directory
|
||||
, writerCiteMethod :: CiteMethod -- ^ How to print cites
|
||||
, writerBiblioFiles :: [FilePath] -- ^ Biblio files to use for citations
|
||||
, writerHtml5 :: Bool -- ^ Produce HTML5
|
||||
, writerHtmlQTags :: Bool -- ^ Use @<q>@ tags for quotes in HTML
|
||||
, writerBeamer :: Bool -- ^ Produce beamer LaTeX slide show
|
||||
|
@ -332,7 +326,6 @@ instance Default WriterOptions where
|
|||
, writerSourceURL = Nothing
|
||||
, writerUserDataDir = Nothing
|
||||
, writerCiteMethod = Citeproc
|
||||
, writerBiblioFiles = []
|
||||
, writerHtml5 = False
|
||||
, writerHtmlQTags = False
|
||||
, writerBeamer = False
|
||||
|
|
|
@ -38,7 +38,6 @@ import Text.Pandoc.Definition
|
|||
import Text.Pandoc.Walk
|
||||
import Text.Pandoc.Shared
|
||||
import Text.Pandoc.Options
|
||||
import Text.Pandoc.Biblio (processBiblio)
|
||||
import Text.Pandoc.Parsing hiding ((<|>), many, optional, space)
|
||||
import qualified Text.Pandoc.UTF8 as UTF8
|
||||
import Data.Char ( chr, ord )
|
||||
|
@ -67,9 +66,7 @@ parseLaTeX = do
|
|||
eof
|
||||
st <- getState
|
||||
let meta = stateMeta st
|
||||
refs <- getOption readerReferences
|
||||
mbsty <- getOption readerCitationStyle
|
||||
let (Pandoc _ bs') = processBiblio mbsty refs $ doc bs
|
||||
let (Pandoc _ bs') = doc bs
|
||||
return $ Pandoc meta bs'
|
||||
|
||||
type LP = Parser [Char] ParserState
|
||||
|
|
|
@ -54,7 +54,6 @@ import Text.Pandoc.Parsing hiding (tableWith)
|
|||
import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
|
||||
import Text.Pandoc.Readers.HTML ( htmlTag, htmlInBalanced, isInlineTag, isBlockTag,
|
||||
isTextTag, isCommentTag )
|
||||
import Text.Pandoc.Biblio (processBiblio)
|
||||
import Data.Monoid (mconcat, mempty)
|
||||
import Control.Applicative ((<$>), (<*), (*>), (<$))
|
||||
import Control.Monad
|
||||
|
@ -327,9 +326,7 @@ parseMarkdown = do
|
|||
st <- getState
|
||||
let meta = runF (stateMeta' st) st
|
||||
let Pandoc _ bs = B.doc $ runF blocks st
|
||||
mbsty <- getOption readerCitationStyle
|
||||
refs <- getOption readerReferences
|
||||
return $ processBiblio mbsty refs $ Pandoc meta bs
|
||||
return $ Pandoc meta bs
|
||||
|
||||
addWarning :: Maybe SourcePos -> String -> MarkdownParser ()
|
||||
addWarning mbpos msg =
|
||||
|
|
|
@ -43,7 +43,6 @@ import Data.Char ( toLower, isPunctuation )
|
|||
import Control.Applicative ((<|>))
|
||||
import Control.Monad.State
|
||||
import Text.Pandoc.Pretty
|
||||
import System.FilePath (dropExtension)
|
||||
import Text.Pandoc.Slides
|
||||
import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
|
||||
formatLaTeXInline, formatLaTeXBlock,
|
||||
|
@ -120,7 +119,6 @@ pandocToLaTeX options (Pandoc meta blocks) = do
|
|||
(biblioTitle :: String) <- liftM (render colwidth) $ inlineListToLaTeX lastHeader
|
||||
let main = render colwidth $ vsep body
|
||||
st <- get
|
||||
let biblioFiles = intercalate "," $ map dropExtension $ writerBiblioFiles options
|
||||
let context = defField "toc" (writerTableOfContents options) $
|
||||
defField "toc-depth" (show (writerTOCDepth options -
|
||||
if writerChapters options
|
||||
|
@ -152,11 +150,9 @@ pandocToLaTeX options (Pandoc meta blocks) = do
|
|||
$ writerHighlightStyle options )
|
||||
else id) $
|
||||
(case writerCiteMethod options of
|
||||
Natbib -> defField "biblio-files" biblioFiles .
|
||||
defField "biblio-title" biblioTitle .
|
||||
Natbib -> defField "biblio-title" biblioTitle .
|
||||
defField "natbib" True
|
||||
Biblatex -> defField "biblio-files" biblioFiles .
|
||||
defField "biblio-title" biblioTitle .
|
||||
Biblatex -> defField "biblio-title" biblioTitle .
|
||||
defField "biblatex" True
|
||||
_ -> id) $
|
||||
metadata
|
||||
|
|
|
@ -63,7 +63,6 @@ tests = [ testGroup "markdown"
|
|||
"markdown-reader-more.txt" "markdown-reader-more.native"
|
||||
, lhsReaderTest "markdown+lhs"
|
||||
]
|
||||
, testGroup "citations" markdownCitationTests
|
||||
]
|
||||
, testGroup "rst"
|
||||
[ testGroup "writer" (writerTests "rst" ++ lhsWriterTests "rst")
|
||||
|
@ -190,19 +189,6 @@ fb2WriterTest title opts inputfile normfile =
|
|||
ignoreBinary = unlines . filter (not . startsWith "<binary ") . lines
|
||||
startsWith tag str = all (uncurry (==)) $ zip tag str
|
||||
|
||||
markdownCitationTests :: [Test]
|
||||
markdownCitationTests
|
||||
= map styleToTest ["chicago-author-date","ieee","mhra"]
|
||||
++ [test "natbib" wopts "markdown-citations.txt"
|
||||
"markdown-citations.txt"]
|
||||
where
|
||||
ropts = ["-r", "markdown", "-w", "markdown-citations", "--bibliography",
|
||||
"biblio.bib", "--no-wrap"]
|
||||
wopts = ["-r", "markdown", "-w", "markdown", "--no-wrap", "--natbib"]
|
||||
styleToTest style = test style (ropts ++ ["--csl", style ++ ".csl"])
|
||||
"markdown-citations.txt"
|
||||
("markdown-citations." ++ style ++ ".txt")
|
||||
|
||||
-- | Run a test without normalize function, return True if test passed.
|
||||
test :: String -- ^ Title of test
|
||||
-> [String] -- ^ Options to pass to pandoc
|
||||
|
|
Loading…
Add table
Reference in a new issue