git.iko.soy/typeable/pandoc
on master help sign in
.circleci/config.yml+1−1
since splitsnapshots
unifiedsplit
@@ -2,7 +2,7 @@ version: "2.1"
2jobs:
2jobs:
3 build:
3 build:
4 macos:
4 macos:
5− xcode: 9.4.1
5+ xcode: 11.1.0
6 environment:
6 environment:
7 HOMEBREW_NO_AUTO_UPDATE: 1
7 HOMEBREW_NO_AUTO_UPDATE: 1
8 steps:
8 steps:
.github/ISSUE_TEMPLATEdeleted−11
@@ -1,11 +0,0 @@
1−Asking a question?
2−Please use the pandoc-discuss mailing list instead:
3−https://groups.google.com/forum/#!forum/pandoc-discuss
4−This tracker is for bug reports and enhancement requests.
5−
6−Reporting a bug?
7−Please include your pandoc version and an example that allows us
8−to reproduce the problem (complete input, exact command line
9−used, expected and actual output). The smaller the example, the
10−better.
11−
.github/ISSUE_TEMPLATE/bug_report.mdnew file+25
@@ -0,0 +1,25 @@
1+---
2+name: Bug report
3+about: Create a report to help us improve
4+title: ''
5+labels: 'bug'
6+assignees: ''
7+
8+---
9+
10+<!--
11+Thank you for reporting an issue! Before you continue, please make sure that you have
12+
13+- searched the issue tracker for similar issues (including closed issues): https://github.com/jgm/pandoc/issues
14+- searched the pandoc-discuss mailing list for solutions: https://groups.google.com/forum/#!forum/pandoc-discuss
15+- reproduced your issue on the latest release of pandoc, or on https://pandoc.org/try
16+
17+Note that this bug tracker is for reporting bugs, not asking questions. For questions, use the pandoc-discuss mailing list.
18+-->
19+
20+**Explain the problem.**
21+Include the exact command line you used and all inputs necessary to reproduce the issue. Please create as minimal an example as possible, to help the maintainers isolate the problem. Explain the output you received and how it differs from what you expected.
22+
23+**Pandoc version?**
24+What version of pandoc are you using, on what OS?
25+
.github/ISSUE_TEMPLATE/config.ymlnew file+9
@@ -0,0 +1,9 @@
1+blank_issues_enabled: false
2+contact_links:
3+ - name: Ask a question
4+ url: https://groups.google.com/forum/#!forum/pandoc-discuss
5+ about: "Discussion forum for pandoc (may be used as an email list)"
6+ - name: Contributing Guidelines
7+ url: https://pandoc.org/CONTRIBUTING.html
8+ about: "Guidelines for submitting bug reports and code improvements"
9+
.github/ISSUE_TEMPLATE/feature_request.mdnew file+21
@@ -0,0 +1,21 @@
1+---
2+name: Feature request
3+about: Suggest an idea for this project
4+title: ''
5+labels: 'enhancement'
6+assignees: ''
7+
8+---
9+
10+<!--
11+Thank you for suggesting a feature! Before you continue, please make sure that you have
12+
13+- read the contributing guidelines: https://pandoc.org/CONTRIBUTING.html
14+- searched the issue tracker for similar issues (including closed issues): https://github.com/jgm/pandoc/issues
15+- searched the pandoc-discuss mailing list for relevant discussions: https://groups.google.com/forum/#!forum/pandoc-discuss
16+-->
17+
18+**Describe your proposed improvement and the problem it solves.**
19+
20+**Describe alternatives you've considered.**
21+
.github/workflows/ci.yml+6−1
@@ -68,11 +68,16 @@ jobs:
68 prefix: ''
68 prefix: ''
69 cabalopts: ''
69 cabalopts: ''
70 testopts: '--test-option=--hide-successes'
70 testopts: '--test-option=--hide-successes'
71− - ghc: '8.10.2'
71+ - ghc: '8.10.4'
72 cabal: '3.2'
72 cabal: '3.2'
73 prefix: ''
73 prefix: ''
74 cabalopts: '-ftrypandoc'
74 cabalopts: '-ftrypandoc'
75 testopts: '--test-option=--hide-successes'
75 testopts: '--test-option=--hide-successes'
76+ - ghc: '9.0.1'
77+ cabal: '3.4'
78+ prefix: ''
79+ cabalopts: ''
80+ testopts: '--test-option=--hide-successes'
76 steps:
81 steps:
77 - uses: actions/checkout@v2
82 - uses: actions/checkout@v2
78
83
AUTHORS.md+11
@@ -20,6 +20,7 @@
20- Andreas Lööw
20- Andreas Lööw
21- Andrew Dunning
21- Andrew Dunning
22- Andy Morris
22- Andy Morris
23+- Anti-Distinctlyminty
23- Antoine Latter
24- Antoine Latter
24- Antonio Terceiro
25- Antonio Terceiro
25- Arata Mizuki
26- Arata Mizuki
@@ -46,6 +47,7 @@
46- Carlos Sosa
47- Carlos Sosa
47- Cécile Chemin
48- Cécile Chemin
48- Cédric Couralet
49- Cédric Couralet
50+- Charanjit Singh
49- Chris Black
51- Chris Black
50- Christian Conkle
52- Christian Conkle
51- Christian Despres
53- Christian Despres
@@ -76,6 +78,7 @@
76- Eigil Rischel
78- Eigil Rischel
77- Emanuel Evans
79- Emanuel Evans
78- Emerson Harkin
80- Emerson Harkin
81+- Emily Bourke
79- Emily Eisenberg
82- Emily Eisenberg
80- Eric Kow
83- Eric Kow
81- Erik Rask
84- Erik Rask
@@ -149,6 +152,7 @@
149- Josef Svenningsson
152- Josef Svenningsson
150- Joseph C. Sible
153- Joseph C. Sible
151- Julien Cretel
154- Julien Cretel
155+- Julien Dutant
152- Juliette Fourcot
156- Juliette Fourcot
153- Juliusz Gonera
157- Juliusz Gonera
154- Justin Bogner
158- Justin Bogner
@@ -231,6 +235,7 @@
231- Raymond Ehlers
235- Raymond Ehlers
232- Recai Oktaş
236- Recai Oktaş
233- Roland Hieber
237- Roland Hieber
238+- Roman Beránek
234- RyanGlScott
239- RyanGlScott
235- Salim B
240- Salim B
236- Sascha Wilde
241- Sascha Wilde
@@ -248,6 +253,7 @@
248- Stefan Dresselhaus
253- Stefan Dresselhaus
249- Sumit Sahrawat
254- Sumit Sahrawat
250- Tarik Graba
255- Tarik Graba
256+- Tatiana Porras
251- Thenaesh Elango
257- Thenaesh Elango
252- Thomas Hodgson
258- Thomas Hodgson
253- Thomas Weißschuh
259- Thomas Weißschuh
@@ -281,6 +287,7 @@
281- a-vrma
287- a-vrma
282- andrebauer
288- andrebauer
283- argent0
289- argent0
290+- badumont
284- blmage
291- blmage
285- bucklereed
292- bucklereed
286- bumper314
293- bumper314
@@ -296,8 +303,11 @@
296- kaizshang91
303- kaizshang91
297- lux-lth
304- lux-lth
298- lwolfsonkin
305- lwolfsonkin
306+- mbrackeantidot
299- nkalvi
307- nkalvi
300- niszet
308- niszet
309+- nuew
310+- obcat
301- oltolm
311- oltolm
302- oquechy
312- oquechy
303- quasicomputational
313- quasicomputational
@@ -309,6 +319,7 @@
309- shreevatsa.public
319- shreevatsa.public
310- takahashim
320- takahashim
311- taotieren
321- taotieren
322+- tecosaur
312- TEC
323- TEC
313- tgkokk
324- tgkokk
314- the-solipsist
325- the-solipsist
CONTRIBUTING.md+6−5
@@ -406,11 +406,11 @@ The library is structured as follows:
406 tree automatically.
406 tree automatically.
407 - `Text.Pandoc.Readers.*` are the readers, and `Text.Pandoc.Writers.*`
407 - `Text.Pandoc.Readers.*` are the readers, and `Text.Pandoc.Writers.*`
408 are the writers.
408 are the writers.
409− - `Text.Pandoc.Biblio` is a utility module for formatting citations
409+ - `Text.Pandoc.Citeproc.*` contain the code for citation handling,
410− using citeproc-hs.
410+ including an interface to the [citeproc] library.
411 - `Text.Pandoc.Data` is used to embed data files when the `embed_data_files`
411 - `Text.Pandoc.Data` is used to embed data files when the `embed_data_files`
412− cabal flag is used. It is generated from `src/Text/Pandoc/Data.hsb` using
412+ cabal flag is used.
413− the preprocessor [hsb2hs].
413+ - `Text.Pandoc.Emoji` is a thin wrapper around [emojis].
414 - `Text.Pandoc.Highlighting` contains the interface to the
414 - `Text.Pandoc.Highlighting` contains the interface to the
415 skylighting library, which is used for code syntax highlighting.
415 skylighting library, which is used for code syntax highlighting.
416 - `Text.Pandoc.ImageSize` is a utility module containing functions for
416 - `Text.Pandoc.ImageSize` is a utility module containing functions for
@@ -421,7 +421,6 @@ The library is structured as follows:
421 - `Text.Pandoc.PDF` contains functions for producing a PDF from a
421 - `Text.Pandoc.PDF` contains functions for producing a PDF from a
422 LaTeX source.
422 LaTeX source.
423 - `Text.Pandoc.Parsing` contains parsing functions used in multiple readers.
423 - `Text.Pandoc.Parsing` contains parsing functions used in multiple readers.
424− - `Text.Pandoc.Pretty` is a pretty-printing library specialized to
425 the needs of pandoc.
424 the needs of pandoc.
426 - `Text.Pandoc.SelfContained` contains functions for making an HTML
425 - `Text.Pandoc.SelfContained` contains functions for making an HTML
427 file "self-contained," by importing remotely linked images, CSS,
426 file "self-contained," by importing remotely linked images, CSS,
@@ -456,6 +455,8 @@ you may want to consider submitting a pull request to the
456[EditorConfig]: https://editorconfig.org/
455[EditorConfig]: https://editorconfig.org/
457[Haskell platform]: https://www.haskell.org/platform/
456[Haskell platform]: https://www.haskell.org/platform/
458[hlint]: https://hackage.haskell.org/package/hlint
457[hlint]: https://hackage.haskell.org/package/hlint
458+[citeproc]: https://hackage.haskell.org/package/citeproc
459+[emojis]: https://hackage.haskell.org/package/emojis
459[hsb2hs]: https://hackage.haskell.org/package/hsb2hs
460[hsb2hs]: https://hackage.haskell.org/package/hsb2hs
460[pre-commit hook]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
461[pre-commit hook]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
461[GitHub labels]: https://github.com/jgm/pandoc/labels
462[GitHub labels]: https://github.com/jgm/pandoc/labels
MANUAL.txt+57−18
@@ -1,7 +1,7 @@
1---
1---
2title: Pandoc User's Guide
2title: Pandoc User's Guide
3author: John MacFarlane
3author: John MacFarlane
4−date: May 21, 2021
4+date: June 20, 2021
5---
5---
6
6
7# Synopsis
7# Synopsis
@@ -675,12 +675,12 @@ header when requesting a document from a URL:
675: Extract images and other media contained in or linked from
675: Extract images and other media contained in or linked from
676 the source document to the path *DIR*, creating it if
676 the source document to the path *DIR*, creating it if
677 necessary, and adjust the images references in the document
677 necessary, and adjust the images references in the document
678− so they point to the extracted files. If the source format is
678+ so they point to the extracted files. Media are downloaded,
679− a binary container (docx, epub, or odt), the media is
679+ read from the file system, or extracted from a binary
680− extracted from the container and the original
680+ container (e.g. docx), as needed. The original file paths
681− filenames are used. Otherwise the media is read from the
681+ are used if they are relative paths not containing `..`.
682− file system or downloaded, and new filenames are constructed
682+ Otherwise filenames are constructed from the SHA1 hash of
683− based on SHA1 hashes of the contents.
683+ the contents.
684
684
685`--abbreviations=`*FILE*
685`--abbreviations=`*FILE*
686
686
@@ -1415,13 +1415,12 @@ results only for basic math, usually you will want to use
1415`--gladtex`
1415`--gladtex`
1416
1416
1417: Enclose TeX math in `<eq>` tags in HTML output. The resulting HTML
1417: Enclose TeX math in `<eq>` tags in HTML output. The resulting HTML
1418− can then be processed by [GladTeX] to produce images of the typeset
1418+ can then be processed by [GladTeX] to produce SVG images of the typeset
1419− formulas and an HTML file with links to these images.
1419+ formulas and an HTML file with these images embedded.
1420− So, the procedure is:
1421
1420
1422 pandoc -s --gladtex input.md -o myfile.htex
1421 pandoc -s --gladtex input.md -o myfile.htex
1423− gladtex -d myfile-images myfile.htex
1422+ gladtex -d image_dir myfile.htex
1424− # produces myfile.html and images in myfile-images
1423+ # produces myfile.html and images in image_dir
1425
1424
1426[MathML]: https://www.w3.org/Math/
1425[MathML]: https://www.w3.org/Math/
1427[MathJax]: https://www.mathjax.org
1426[MathJax]: https://www.mathjax.org
@@ -3755,7 +3754,7 @@ definition:
3755Note that space between items in a definition list is required.
3754Note that space between items in a definition list is required.
3756(A variant that loosens this requirement, but disallows "lazy"
3755(A variant that loosens this requirement, but disallows "lazy"
3757hard wrapping, can be activated with `compact_definition_lists`: see
3756hard wrapping, can be activated with `compact_definition_lists`: see
3758−[Non-pandoc extensions], below.)
3757+[Non-default extensions], below.)
3759
3758
3760[^3]: I have been influenced by the suggestions of [David
3759[^3]: I have been influenced by the suggestions of [David
3761 Wheeler](https://justatheory.com/2009/02/modest-markdown-proposal/).
3760 Wheeler](https://justatheory.com/2009/02/modest-markdown-proposal/).
@@ -4199,6 +4198,12 @@ or block-level formatting:
4199 It consists of two paragraphs.
4198 It consists of two paragraphs.
4200 ...
4199 ...
4201
4200
4201+The literal block after the `|` must be indented relative to the
4202+line containing the `|`. If it is not, the YAML will be invalid
4203+and pandoc will not interpret it as metadata. For an overview
4204+of the complex rules governing YAML, see the [Wikipedia entry on
4205+YAML syntax].
4206+
4202Template variables will be set automatically from the metadata. Thus, for
4207Template variables will be set automatically from the metadata. Thus, for
4203example, in writing HTML, the variable `abstract` will be set to the HTML
4208example, in writing HTML, the variable `abstract` will be set to the HTML
4204equivalent of the Markdown in the `abstract` field:
4209equivalent of the Markdown in the `abstract` field:
@@ -4261,6 +4266,7 @@ following restrictions apply:
4261 if the link definition is somewhere else in the document.
4266 if the link definition is somewhere else in the document.
4262
4267
4263[YAML escape sequence]: https://yaml.org/spec/1.2/spec.html#id2776092
4268[YAML escape sequence]: https://yaml.org/spec/1.2/spec.html#id2776092
4269+[Wikipedia entry on YAML syntax]: https://en.m.wikipedia.org/wiki/YAML#Syntax
4264
4270
4265## Backslash escapes
4271## Backslash escapes
4266
4272
@@ -5010,10 +5016,12 @@ terms can be written in either singular or plural forms, as
5010locator term is used, "page" is assumed.
5016locator term is used, "page" is assumed.
5011
5017
5012In complex cases, you can force something to be treated as
5018In complex cases, you can force something to be treated as
5013−a locator by enclosing it in curly braces:
5019+a locator by enclosing it in curly braces or prevent parsing
5020+the suffix as locator by prepending curly braces:
5014
5021
5015 [@smith{ii, A, D-Z}, with a suffix]
5022 [@smith{ii, A, D-Z}, with a suffix]
5016 [@smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]
5023 [@smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]
5024+ [@smith{}, 99 years later]
5017
5025
5018A minus sign (`-`) before the `@` will suppress mention of
5026A minus sign (`-`) before the `@` will suppress mention of
5019the author in the citation. This can be useful when the
5027the author in the citation. This can be useful when the
@@ -5049,13 +5057,44 @@ author-in-text style inside notes when using a note style.
5049[finding and editing styles]: https://citationstyles.org/authors/
5057[finding and editing styles]: https://citationstyles.org/authors/
5050[CSL locale files]: https://github.com/citation-style-language/locales
5058[CSL locale files]: https://github.com/citation-style-language/locales
5051
5059
5052−## Non-pandoc extensions
5060+## Non-default extensions
5053
5061
5054The following Markdown syntax extensions are not enabled by default
5062The following Markdown syntax extensions are not enabled by default
5055in pandoc, but may be enabled by adding `+EXTENSION` to the format
5063in pandoc, but may be enabled by adding `+EXTENSION` to the format
5056name, where `EXTENSION` is the name of the extension. Thus, for
5064name, where `EXTENSION` is the name of the extension. Thus, for
5057example, `markdown+hard_line_breaks` is Markdown with hard line breaks.
5065example, `markdown+hard_line_breaks` is Markdown with hard line breaks.
5058
5066
5067+#### Extension: `rebase_relative_paths` ####
5068+
5069+Rewrite relative paths for Markdown links and images, depending
5070+on the path of the file containing the link or image link. For
5071+each link or image, pandoc will compute the directory of the
5072+containing file, relative to the working directory, and prepend
5073+the resulting path to the link or image path.
5074+
5075+The use of this extension is best understood by example.
5076+Suppose you have a a subdirectory for each chapter of a book,
5077+`chap1`, `chap2`, `chap3`. Each contains a file `text.md` and a
5078+number of images used in the chapter. You would like to have
5079+`![image](spider.jpg)` in `chap1/text.md` refer to
5080+`chap1/spider.jpg` and `![image](spider.jpg)` in `chap2/text.md`
5081+refer to `chap2/spider.jpg`. To do this, use
5082+
5083+ pandoc chap*/*.md -f markdown+rebase_relative_paths
5084+
5085+Without this extension, you would have to use
5086+`![image](chap1/spider.jpg)` in `chap1/text.md` and
5087+`![image](chap2/spider.jpg)` in `chap2/text.md`. Links with
5088+relative paths will be rewritten in the same way as images.
5089+
5090+Absolute paths and URLs are not changed. Neither are empty
5091+paths or paths consisting entirely of a fragment, e.g., `#foo`.
5092+
5093+Note that relative paths in reference links and images will
5094+be rewritten relative to the file containing the link
5095+reference definition, not the file containing the reference link
5096+or image itself, if these differ.
5097+
5059#### Extension: `attributes` ####
5098#### Extension: `attributes` ####
5060
5099
5061Allows attributes to be attached to any inline or block-level
5100Allows attributes to be attached to any inline or block-level
@@ -6465,9 +6504,9 @@ application, here are some things to keep in mind:
64654. The HTML generated by pandoc is not guaranteed to be safe.
65044. The HTML generated by pandoc is not guaranteed to be safe.
6466 If `raw_html` is enabled for the Markdown input, users can
6505 If `raw_html` is enabled for the Markdown input, users can
6467 inject arbitrary HTML. Even if `raw_html` is disabled,
6506 inject arbitrary HTML. Even if `raw_html` is disabled,
6468− users can include dangerous content in attributes for
6507+ users can include dangerous content in URLs and attributes.
6469− headings, spans, and code blocks. To be safe, you should
6470− run all the generated HTML through an HTML sanitizer.
6508+ To be safe, you should run all the generated HTML through
6509+ an HTML sanitizer.
6471
6510
6472# Authors
6511# Authors
6473
6512
SECURITY.mdnew file+12
@@ -0,0 +1,12 @@
1+# Security Policy
2+
3+## Supported Versions
4+
5+Only the most recent version of pandoc is supported with security updates.
6+
7+## Reporting a Vulnerability
8+
9+To report a vulnerability, email the maintainer, jgm@berkeley.edu.
10+But first please read the section of the manual entitled
11+[A note on security](https://pandoc.org/MANUAL.html#a-note-on-security),
12+which describes some security guarantees pandoc does NOT make.
cabal.project+9
@@ -2,3 +2,12 @@ packages: pandoc.cabal
2tests: True
2tests: True
3flags: +embed_data_files
3flags: +embed_data_files
4
4
5+source-repository-package
6+ type: git
7+ location: https://github.com/jgm/doctemplates
8+ tag: 428c26d5303cf7a2b1051fe1ffd9aafe9ba71c81
9+
10+source-repository-package
11+ type: git
12+ location: https://github.com/jgm/citeproc
13+ tag: 4ce0501cd6f9c86eee087afcf878c256e49b9615
changelog.md+265−27
@@ -1,6 +1,174 @@
1# Revision history for pandoc
1# Revision history for pandoc
2
2
3−## pandoc 2.14 (PROVISIONAL)
3+## pandoc 2.14.0.3 (2021-06-22)
4+
5+ * Text.Pandoc.MediaBag `insertMediaBag`: ensure we get a sane mediaPath
6+ for URLs (#7391). In earlier 2.14.x versions, we'd get
7+ incorrect paths for resources downloaded from URLs when the
8+ media are extracted (including in PDF production).
9+ * Text.Pandoc.Parsing: improve `emailAddress` (#7398).
10+ Previously the parser would accept characters in domains
11+ that are illegal in domains, and this sometimes caused it
12+ to gobble bits of the following text.
13+ * txt2tags reader: modify the email address parser so
14+ it still includes form parameters, even after the change to
15+ `emailAddress` in Text.Pandoc.Parsing.
16+ * Text.Pandoc.Readers.Metadata: Fix regression with comment-only YAML
17+ metadata blocks (#7400).
18+ * reveal.js writer and template: better handling of options. Previously
19+ it was impossible to specify false values for options that default to
20+ true (e.g. `center`); setting the option to false just caused the portion
21+ of the template setting the option to be omitted. Now we prepopulate
22+ all the variables with their default values, including them all
23+ unconditionally and allowing them to be overridden.
24+ * Markdown writer: Fix regression in code blocks with attributes (#7397).
25+ Code blocks with a single class but nonempty attributes
26+ were having attributes drop as a result of #7242.
27+ * LaTeX writer:
28+ + Add strut at end of minipage if it contains line breaks.
29+ Without them, the last line is not as tall as it should be in
30+ some cases.
31+ + Always use a minipage for cells with line breaks, when
32+ width information is available (#7393). Otherwise the way we treat them
33+ can lead to content that overflows a cell.
34+ + Use `\strut` instead of `~` before `\\` in empty line.
35+ * Use lts-18.0 stack resolver.
36+ * Require skylighting 0.10.5.2 (adding support for Swift).
37+ * Require commonmark 0.2.1.
38+ * Rephrase section on unsafe HTML in manual.
39+ * Create SECURITY.md
40+
41+## pandoc 2.14.0.2 (2021-06-13)
42+
43+ * Fix MediaBag regressions (#7345). iIn the 2.14 release `--extract-media`
44+ stopped working as before; there could be mismatches between the
45+ paths in the rendered document and the extracted media.
46+ This patch makes several changes that restore the earlier behavior
47+ (while keeping the same API). The `mediaPath` in 2.14 was always
48+ constructed from the SHA1 hash of the media contents. Now, we
49+ preserve the original path unless it's an absolute path or contains
50+ `..` segments (in that case we use a path based on the SHA1 hash of
51+ the contents).
52+
53+ In Text.Pandoc.MediaBag, `mediaDirectory` and `mediaItems` now use the
54+ `mediaPath`, rather than the mediabag key, for the first component of the
55+ tuple. This makes more sense, I think, and fits with the documentation of
56+ these functions; eventually, though, we should rework the API so that
57+ `mediaItems` returns both the keys and the MediaItems.
58+
59+ In Text.Pandoc.Class.IO, rewriting of source paths in `extractMedia` has
60+ been fixed.
61+
62+ In Text.Pandoc.Class.PandocMonad, `fillMediaBag` has been modified so that
63+ it doesn't modify image paths (that was part of the problem in #7345).
64+
65+ We now do path normalization (e.g. `\` separators on Windows) in
66+ writing the media.
67+
68+ * Text.Pandoc.PDF:
69+
70+ + Text.Pandoc.PDF: Fix regression in 2.14 for generation of PDFs with
71+ SVGs (#7344).
72+ + Only print relevant part of environment on `--verbose`. Since
73+ `--verbose` output might be put in an issue, we want to avoid
74+ spilling out secrets in environment variables.
75+
76+ * Markdown reader: fix pipe table regression in 2.11.4 (#7343).
77+ Previously pipe tables with empty headers (that is, a header
78+ line with all empty cells) would be rendered as headerless
79+ tables. This broke in 2.11.4. The fix here is to produce an
80+ AST with an empty table head when a pipe table has all empty
81+ header cells.
82+
83+ * LaTeX reader: don't allow optional `*` on symbol control sequences
84+ (#7340). Generally we allow optional starred variants of LaTeX commands
85+ (since many allow them, and if we don't accept these explicitly,
86+ ignoring the star usually gives acceptable results). But we
87+ don't want to do this for `\(*\)` and similar cases.
88+
89+ * Docx reader: handle absolute URIs in Relationship Target (#7374).
90+
91+ * Docx writer: fix handling of empty table headers (Albert Krewinkel,
92+ #7369). A table header which does not contain any cells is now treated as
93+ an empty header.
94+
95+ * LaTeX writer: Fix regression in table header position (#7347).
96+ In recent versions the table headers were no longer bottom-aligned
97+ (if more than one line). This patch fixes that by using minipages
98+ for table headers in non-simple tables.
99+
100+ * CommonMark writer:
101+
102+ + Do not use simple class for fenced-divs (Jan Tojnar, amends #7242.)
103+ + Do not throw away attributes when `Ext_attributes` is enabled.
104+ `Ext_attributes` covers at least the following:
105+ `Ext_fenced_code_attributes`, `Ext_header_attributes`,
106+ `Ext_inline_code_attributes`, `Ext_link_attributes`.
107+
108+ * Markdown writer:
109+
110+ + Allow `pipe_tables` to be disabled for commonmark formats
111+ (`commonmark_x`, `gfm`) (#7375).
112+ + Re-use functions from Text.Pandoc.Markdown.Inline (Jan Tojnar).
113+
114+ * DocBook writer: Remove non-existent admonitions (Jan Tojnar).
115+ `attention`, `error` and `hint` are reStructuredText specific.
116+
117+ * HTML writer: Don't omit width attribute on div (#7342).
118+
119+ * Text.Pandoc.MIME, `extensionFromMimeType`: add a few special cases.
120+ When we do a reverse lookup in the MIME table, we just get the
121+ last match, so when the same mime type is associated with several
122+ different extensions, we sometimes got weird results, e.g. `.vs`
123+ for `text/plain`. These special cases help us get the most standard
124+ extensions for mime types like `text/plain`.
125+
126+ * Lua utils: fix handling of table headers in `from_simple_table` (Albert
127+ Krewinkel, #7369). Passing an empty list of header cells now results
128+ in an empty table header.
129+
130+ * Text.Pandoc.Citeproc:
131+
132+ + Avoid duplicate classes and attributes on references div.
133+ + Fix regression in citeproc processing (#7376). If inline
134+ references are used (in the metadata `references` field), we
135+ should still only include in the bibliography items that are
136+ actually cited (unless `nocite` is used).
137+
138+ * Require citeproc 0.4.0.1. This fixes a bug which led to doubled
139+ "et al." in some (rare) circumstances.
140+
141+ * MANUAL.txt:
142+
143+ + Mention GladTeX for EPUB export (Sebastian Humenda).
144+ This updates the manual and the web site about the GladTeX usage.
145+ + More details and a useful link for YAML syntax.
146+
147+ * CONTRIBUTING.md: update modules overview (Albert Krewinkel).
148+
149+ * using-the-pandoc-api.md: switch from String to Text (Albert Krewinkel).
150+
151+
152+## pandoc 2.14.0.1 (2021-06-01)
153+
154+ * Commonmark reader: Fix regression in 2.14 with YAML metdata block parsing,
155+ which could cause the document body to be omitted after metadata (#7339).
156+
157+ * HTML reader: fix column width regression in 2.14 (#7334).
158+ Column widths specified with a style attribute were off by a factor of 100.
159+
160+ * Markdown reader: in `rebasePaths`, check for both Windows and Posix
161+ absolute paths. Previously Windows pandoc was treating
162+ `/foo/bar.jpg` as non-absolute.
163+
164+ * Text.Pandoc.Logging: In rendering `LoadedResource`, use relative paths.
165+
166+ * Docx writer: fix regression on captions (#7328). The "Table Caption"
167+ style was no longer getting applied. (It was overwritten by "Compact.")
168+
169+ * Use commonmark-extensions 0.2.1.2
170+
171+## pandoc 2.14 (2021-05-28)
4
172
5 * Change reader types, allowing better tracking of source positions
173 * Change reader types, allowing better tracking of source positions
6 [API change]. Previously, when multiple file arguments were provided,
174 [API change]. Previously, when multiple file arguments were provided,
@@ -12,6 +180,14 @@
12 we couldn't resolve resource paths relative to the files containing them
180 we couldn't resolve resource paths relative to the files containing them
13 (see e.g. #5501, #6632, #6384, #3752).
181 (see e.g. #5501, #6632, #6384, #3752).
14
182
183+ * Add `rebase_relative_paths` extension (#3752). When enabled, this
184+ extension rewrites relative image and link paths by prepending
185+ the (relative) directory of the containing file. This
186+ behavior is useful when your input sources are split
187+ into multiple files, across several directories, with files
188+ referring to images stored in the same directory. The
189+ extension can be enabled for all markdown and commonmark-based formats.
190+
15 * Add Text.Pandoc.Sources (exported module), with a `Sources` type and a
191 * Add Text.Pandoc.Sources (exported module), with a `Sources` type and a
16 `ToSources` class. A `Sources` wraps a list of `(SourcePos, Text)` pairs
192 `ToSources` class. A `Sources` wraps a list of `(SourcePos, Text)` pairs
17 [API change]. A parsec `Stream` instance is provided for `Sources`. The
193 [API change]. A parsec `Stream` instance is provided for `Sources`. The
@@ -48,15 +224,13 @@
48
224
49 * Markdown reader:
225 * Markdown reader:
50
226
51− + Use MetaInlines not MetaBlocks for multimarkdown
227+ + Use MetaInlines not MetaBlocks for multimarkdown metadata fields.
52− metadata fields. This gives better results in converting to e.g.
228+ This gives better results in converting to e.g. pandoc markdown.
53− pandoc markdown.
54 + Implement curly-brace syntax for Markdown citation keys (#6026).
229 + Implement curly-brace syntax for Markdown citation keys (#6026).
55 The change provides a way to use citation keys that contain
230 The change provides a way to use citation keys that contain
56− special characters not usable with the standard citation
231+ special characters not usable with the standard citation key syntax.
57− key syntax. Example: `@{foo_bar{x}'}` for the key `foo_bar{x}`.
232+ Example: `@{foo_bar{x}'}` for the key `foo_bar{x}`. It also allows
58− It also allows separating citation keys from immediately
233+ separating citation keys from immediately following text, e.g. `@{foo}A`.
59− following text, e.g. `@{foo}A`.
60
234
61 * RST reader:
235 * RST reader:
62
236
@@ -70,12 +244,21 @@
70
244
71 * ODT reader: Treat tabs as spaces (#7185, niszet).
245 * ODT reader: Treat tabs as spaces (#7185, niszet).
72
246
247+ * Docx reader:
248+
73− * Docx reader: Add handling of vml image objects (#7257, mbrackeantidot).
249+ + Add handling of vml image objects (#7257, mbrackeantidot).
250+ + Support new table features (Emily Bourke, #6316): column
251+ spans, row spans, multiple header rows, table description
252+ (parsed as a simple caption), captions, column widths.
74
253
75 * LaTeX reader:
254 * LaTeX reader:
76
255
77 + Improved siunitx support (#6658, #6620).
256 + Improved siunitx support (#6658, #6620).
78 + Better support for `\xspace` (#7299).
257 + Better support for `\xspace` (#7299).
258+ + Improve parsing of `\def` macros. We previously set "verbatim mode"
259+ even for parsing the initial `\def`; this caused problems
260+ for `\def` nested inside another `\def`.
261+ + Implement `\newif`.
79
262
80 * ConTeXt writer: improve ordered lists (#5016, Denis Maier).
263 * ConTeXt writer: improve ordered lists (#5016, Denis Maier).
81 Change ordered list from itemize to enumerate. Add new
264 Change ordered list from itemize to enumerate. Add new
@@ -92,6 +275,8 @@
92 this can lead to loss of information, the heading is now always
275 this can lead to loss of information, the heading is now always
93 retained. Use `--shift-heading-level-by=-1` to turn the `<h1>`
276 retained. Use `--shift-heading-level-by=-1` to turn the `<h1>`
94 into the document title, or a filter to restore the previous behavior.
277 into the document title, or a filter to restore the previous behavior.
278+ + Handle relative lengths (e.g. `2*`) in HTML column widths (#4063).
279+ See <https://www.w3.org/TR/html4/types.html#h-6.6>.
95
280
96 * DocBook/JATS readers:
281 * DocBook/JATS readers:
97
282
@@ -100,13 +285,22 @@
100
285
101 * DocBook reader: ensure that first and last names are separated (#6541).
286 * DocBook reader: ensure that first and last names are separated (#6541).
102
287
288+ * Jira reader (Albert Krewinkel, #7218):
289+
290+ + Support "smart" links: `[alias|https://example.com|smart-card]` syntax.
291+ + Allow spaces and most unicode characters in attachment links.
292+ + No longer require a newline character after `{noformat}`.
293+ + Only allow URI path segment characters in bare links.
294+ + The `file:` schema is no longer allowed in bare links; these
295+ rarely make sense.
296+
103 * Plain writer: handle superscript unicode minus (#7276).
297 * Plain writer: handle superscript unicode minus (#7276).
104
298
105 * LaTeX writer:
299 * LaTeX writer:
106
300
107 + Better handling of line breaks in simple tables (#7272).
301 + Better handling of line breaks in simple tables (#7272).
108− Now we also handle the case where they're embedded in other
302+ Now we also handle the case where they're embedded in other elements,
109− elements, e.g. spans.
303+ e.g. spans.
110 + For beamer output, support `exampleblock` and `alertblock` (#7278).
304 + For beamer output, support `exampleblock` and `alertblock` (#7278).
111 A block will be rendered as an `exampleblock` if the heading
305 A block will be rendered as an `exampleblock` if the heading
112 has class `example` and an `alertblock` if it has class `alert`.
306 has class `example` and an `alertblock` if it has class `alert`.
@@ -179,6 +373,9 @@
179 rewritten by writing the offending characters as `Uxxxx`,
373 rewritten by writing the offending characters as `Uxxxx`,
180 where `xxxx` is the character's hex code.
374 where `xxxx` is the character's hex code.
181
375
376+ * Jira writer: use `{color}` when span has a color attribute
377+ (Albert Krewinkel, tarleb/jira-wiki-markup#10).
378+
182 * Docx writer:
379 * Docx writer:
183
380
184 + Autoset table width if no column has an explicit width (Albert
381 + Autoset table width if no column has an explicit width (Albert
@@ -199,8 +396,8 @@
199 `savePreviewPicture`, `mathPr`, `themeFontLang`, `decimalSymbol`,
396 `savePreviewPicture`, `mathPr`, `themeFontLang`, `decimalSymbol`,
200 `listSeparator`, `autoHyphenation`, `compat`.
397 `listSeparator`, `autoHyphenation`, `compat`.
201 + Set zoom to 100% by default in settings.xml.
398 + Set zoom to 100% by default in settings.xml.
202− + Align math options more with current Word defaults (e.g.
399+ + Align math options more with current Word defaults (e.g. Cambria Math
203− Cambria Math font).
400+ font).
204 + Remove `rsid`s from default settings.xml. Word will add these
401 + Remove `rsid`s from default settings.xml. Word will add these
205 when revisions are made.
402 when revisions are made.
206
403
@@ -254,8 +451,10 @@
254 (#6639, Albert Krewinkel). The zero-width non-joiner character
451 (#6639, Albert Krewinkel). The zero-width non-joiner character
255 is used to avoid ligatures (e.g. in German).
452 is used to avoid ligatures (e.g. in German).
256
453
454+ * ConTeXt template:
455+
456+ + Define `enumerate` itemgroup (#5016, Denis Maier).
257− * ConTeXt template: List of figures before list of tables (#7235,
457+ + List of figures before list of tables (#7235, Julien Dutant).
258− Julien Dutant).
259
458
260 * reveal.js template:
459 * reveal.js template:
261
460
@@ -265,15 +464,36 @@
265 * HTML-based slide shows: add support for `institute` (#7289, Thomas
464 * HTML-based slide shows: add support for `institute` (#7289, Thomas
266 Hodgson).
465 Hodgson).
267
466
467+ * Text.Pandoc.Extensions: Add constructor `Ext_rebase_relative_paths` to
468+ `Extensions` [API change].
469+
268 * Text.Pandoc.XML.Light: add Eq, Ord instances for Content,
470 * Text.Pandoc.XML.Light: add Eq, Ord instances for Content,
269 Element, Attr, CDataKind [API change].
471 Element, Attr, CDataKind [API change].
270
472
473+ * Text.Pandoc.MediaBag:
474+
271− * Text.Pandoc.MediaBag: change type to use a Text key instead of
475+ + Change type to use a `Text` key instead of `[FilePath]`.
272− `[FilePath]`. We normalize the path and use `/` separators for
476+ We normalize the path and use `/` separators for consistency.
273− consistency.
477+ + Export `MediaItem` type [API change].
478+ + Change `MediaBag` type to a map from Text to MediaItem [API change].
479+ + `lookupMedia` now returns a `MediaItem` [API change].
480+ + Change `insertMedia` so it sets the `mediaPath` to a filename based on
481+ the SHA1 hash of the contents. This will be used when contents
482+ are extracted.
483+
484+ * Text.Pandoc.Class.PandocMonad:
485+
486+ + Remove `fetchMediaResource` [API change]. Use `fetchItem` to get
487+ resources in `fillMediaBag`.
488+ + Add informational message in `downloadOrRead` indicating what path
489+ local resources have been loaded from.
490+
491+ * Text.Pandoc.Logging:
274
492
275− * Text.Pandoc.Class.PandocMonad: Use `fetchItem` instead of `downloadOrRead`
493+ + Remove single quotes around paths in messages.
276− in `fetchMediaResource`.
494+ + Add LoadedResource constructor to LogMessage [API change].
495+ This is for INFO-level messages telling where image data has been
496+ loaded from. (This can vary because of the resource path.)
277
497
278 * Text.Pandoc.Asciify: simplify code and export `toAsciiText` [API change].
498 * Text.Pandoc.Asciify: simplify code and export `toAsciiText` [API change].
279 Instead of encoding a giant (and incomplete) map, we now
499 Instead of encoding a giant (and incomplete) map, we now
@@ -296,15 +516,19 @@
296
516
297 * Text.Pandoc.Citeproc:
517 * Text.Pandoc.Citeproc:
298
518
299− + Ensure that CSL-related attributes are passed on to a Div
519+ + Ensure that CSL-related attributes are passed on to a Div with id
300− with id 'refs'. Otherwise things like `entry-spacing`
520+ 'refs'. Otherwise things like `entry-spacing` won't work when
301− won't work when such Divs are used.
521+ such Divs are used.
302 + Use metadata's `lang` for the lang parameter of citeproc, overriding
522 + Use metadata's `lang` for the lang parameter of citeproc, overriding
303 `localeLanguage`.
523 `localeLanguage`.
524+ + Recognize locators spelled with a capital letter (#7323).
525+ + Add a comma and a space in front of the suffix if it doesn't start
526+ with space or punctuation (#7324).
527+ + Don't detect math elements as locators (#7321).
304
528
305− * Remove Text.Pandoc.BCP47 module [API change].
529+ * Remove Text.Pandoc.BCP47 module [API change]. Use types and functions
306− Use types and functions from UnicodeCollation.Lang instead.
307− This is a richer implementation of BCP 47.
530+ from UnicodeCollation.Lang instead. This is a richer implementation
531+ of BCP 47.
308
532
309 * Text.Pandoc.Shared:
533 * Text.Pandoc.Shared:
310
534
@@ -322,16 +546,24 @@
322
546
323 * Add text as build-depend for trypandoc (#7193, Roman Beránek).
547 * Add text as build-depend for trypandoc (#7193, Roman Beránek).
324
548
549+ * Bump upper-bounds for network-uri, time, attoparsec.
550+
325 * Use citeproc 0.4.
551 * Use citeproc 0.4.
326
552
327 * Use texmath 0.12.3.
553 * Use texmath 0.12.3.
328
554
329− * Allow attoparsec 0.14.x.
555+ * Use jira-wiki-markup 1.3.5 (Albert Krewinkel).
330
556
331 * Require latest skylighting (fixes a bug in XML syntax highlighting).
557 * Require latest skylighting (fixes a bug in XML syntax highlighting).
332
558
333 * Use latest xml-conduit.
559 * Use latest xml-conduit.
334
560
561+ * Use latest commonmark, commonmark-extensions, commonmark-pandoc.
562+
563+ * Use haddock-library-1.10.0 (Albert Krewinkel).
564+
565+ * Allow compilation with base 4.15 (Albert Krewinkel).
566+
335 * MANUAL:
567 * MANUAL:
336
568
337 + Add information about `lang` and bibliography sorting.
569 + Add information about `lang` and bibliography sorting.
@@ -339,6 +571,7 @@
339 Albert Krewinkel).
571 Albert Krewinkel).
340 + Note that `institute` variable works for HTML-based slides.
572 + Note that `institute` variable works for HTML-based slides.
341 + Update documentation on citation syntax.
573 + Update documentation on citation syntax.
574+ + Add citation example for locators and suffixes (Tristan Stenner)
342
575
343 * Updated and fixed typos in documentation (Charanjit Singh,
576 * Updated and fixed typos in documentation (Charanjit Singh,
344 Anti-Distinctlyminty, Tatiana Porras, obcat).
577 Anti-Distinctlyminty, Tatiana Porras, obcat).
@@ -351,6 +584,11 @@
351 * Remove `biblatex-nussbaum.md` test. It is basically the same
584 * Remove `biblatex-nussbaum.md` test. It is basically the same
352 as `biblaetx-quotes.md`.
585 as `biblaetx-quotes.md`.
353
586
587+ * Command tests: fail if a file contains no tests---and fix a
588+ test that failed in that way!
589+
590+ * Use smaller images in tests, reducing the size of the source tarball by 8 MB.
591+
354
592
355## pandoc 2.13 (2021-03-21)
593## pandoc 2.13 (2021-03-21)
356
594
data/templates/default.latex+29−29
@@ -36,35 +36,6 @@ $for(classoption)$
36 $classoption$$sep$,
36 $classoption$$sep$,
37$endfor$
37$endfor$
38]{$documentclass$}
38]{$documentclass$}
39−$if(title)$
40−\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
41−$endif$
42−$if(subtitle)$
43−$if(beamer)$
44−$else$
45−\usepackage{etoolbox}
46−\makeatletter
47−\providecommand{\subtitle}[1]{% add subtitle to \maketitle
48− \apptocmd{\@title}{\par {\large #1 \par}}{}{}
49−}
50−\makeatother
51−$endif$
52−\subtitle{$subtitle$}
53−$endif$
54−\author{$for(author)$$author$$sep$ \and $endfor$}
55−\date{$date$}
56−$if(beamer)$
57−$if(institute)$
58−\institute{$for(institute)$$institute$$sep$ \and $endfor$}
59−$endif$
60−$if(titlegraphic)$
61−\titlegraphic{\includegraphics{$titlegraphic$}}
62−$endif$
63−$if(logo)$
64−\logo{\includegraphics{$logo$}}
65−$endif$
66−$endif$
67−
68$if(beamer)$
39$if(beamer)$
69$if(background-image)$
40$if(background-image)$
70\usebackgroundtemplate{%
41\usebackgroundtemplate{%
@@ -452,6 +423,35 @@ $if(csquotes)$
452\usepackage{csquotes}
423\usepackage{csquotes}
453$endif$
424$endif$
454
425
426+$if(title)$
427+\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
428+$endif$
429+$if(subtitle)$
430+$if(beamer)$
431+$else$
432+\usepackage{etoolbox}
433+\makeatletter
434+\providecommand{\subtitle}[1]{% add subtitle to \maketitle
435+ \apptocmd{\@title}{\par {\large #1 \par}}{}{}
436+}
437+\makeatother
438+$endif$
439+\subtitle{$subtitle$}
440+$endif$
441+\author{$for(author)$$author$$sep$ \and $endfor$}
442+\date{$date$}
443+$if(beamer)$
444+$if(institute)$
445+\institute{$for(institute)$$institute$$sep$ \and $endfor$}
446+$endif$
447+$if(titlegraphic)$
448+\titlegraphic{\includegraphics{$titlegraphic$}}
449+$endif$
450+$if(logo)$
451+\logo{\includegraphics{$logo$}}
452+$endif$
453+$endif$
454+
455\begin{document}
455\begin{document}
456$if(has-frontmatter)$
456$if(has-frontmatter)$
457\frontmatter
457\frontmatter
data/templates/default.revealjs+70−128
@@ -90,256 +90,198 @@ $endif$
90 // Full list of configuration options available at:
90 // Full list of configuration options available at:
91 // https://revealjs.com/config/
91 // https://revealjs.com/config/
92 Reveal.initialize({
92 Reveal.initialize({
93−$if(center)$
94− // Determines whether slide content should be vertically centered
95− center: $center$,
96−$endif$
97−$if(controls)$
98 // Display controls in the bottom right corner
93 // Display controls in the bottom right corner
99 controls: $controls$,
94 controls: $controls$,
100−$endif$
95+
101−$if(controlsTutorial)$
102 // Help the user learn the controls by providing hints, for example by
96 // Help the user learn the controls by providing hints, for example by
103 // bouncing the down arrow when they first encounter a vertical slide
97 // bouncing the down arrow when they first encounter a vertical slide
104 controlsTutorial: $controlsTutorial$,
98 controlsTutorial: $controlsTutorial$,
105−$endif$
99+
106−$if(controlsLayout)$
107 // Determines where controls appear, "edges" or "bottom-right"
100 // Determines where controls appear, "edges" or "bottom-right"
108 controlsLayout: '$controlsLayout$',
101 controlsLayout: '$controlsLayout$',
109−$endif$
102+
110−$if(controlsBackArrows)$
111 // Visibility rule for backwards navigation arrows; "faded", "hidden"
103 // Visibility rule for backwards navigation arrows; "faded", "hidden"
112 // or "visible"
104 // or "visible"
113 controlsBackArrows: '$controlsBackArrows$',
105 controlsBackArrows: '$controlsBackArrows$',
114−$endif$
106+
115−$if(progress)$
116 // Display a presentation progress bar
107 // Display a presentation progress bar
117 progress: $progress$,
108 progress: $progress$,
118−$endif$
109+
119−$if(slideNumber)$
120 // Display the page number of the current slide
110 // Display the page number of the current slide
121 slideNumber: $slideNumber$,
111 slideNumber: $slideNumber$,
122−$endif$
112+
123−$if(showSlideNumber)$
124 // 'all', 'print', or 'speaker'
113 // 'all', 'print', or 'speaker'
125 showSlideNumber: '$showSlideNumber$',
114 showSlideNumber: '$showSlideNumber$',
126−$endif$
115+
127 // Add the current slide number to the URL hash so that reloading the
116 // Add the current slide number to the URL hash so that reloading the
128 // page/copying the URL will return you to the same slide
117 // page/copying the URL will return you to the same slide
129− hash: $if(hash)$$hash$$else$true$endif$,
118+ hash: $hash$,
130−$if(hashOneBasedIndex)$
119+
131 // Start with 1 for the hash rather than 0
120 // Start with 1 for the hash rather than 0
132 hashOneBasedIndex: $hashOneBasedIndex$,
121 hashOneBasedIndex: $hashOneBasedIndex$,
133−$endif$
122+
134−$if(history)$
123+ // Flags if we should monitor the hash and change slides accordingly
124+ respondToHashChanges: $respondToHashChanges$,
125+
135 // Push each slide change to the browser history
126 // Push each slide change to the browser history
136 history: $history$,
127 history: $history$,
137−$endif$
128+
138−$if(keyboard)$
139 // Enable keyboard shortcuts for navigation
129 // Enable keyboard shortcuts for navigation
140 keyboard: $keyboard$,
130 keyboard: $keyboard$,
141−$endif$
131+
142−$if(overview)$
143 // Enable the slide overview mode
132 // Enable the slide overview mode
144 overview: $overview$,
133 overview: $overview$,
145−$endif$
134+
146−$if(center)$
135+ // Disables the default reveal.js slide layout (scaling and centering)
136+ // so that you can use custom CSS layout
137+ disableLayout: false,
138+
147 // Vertical centering of slides
139 // Vertical centering of slides
148 center: $center$,
140 center: $center$,
149−$endif$
141+
150−$if(touch)$
151 // Enables touch navigation on devices with touch input
142 // Enables touch navigation on devices with touch input
152 touch: $touch$,
143 touch: $touch$,
153−$endif$
144+
154−$if(loop)$
155 // Loop the presentation
145 // Loop the presentation
156 loop: $loop$,
146 loop: $loop$,
157−$endif$
147+
158−$if(rtl)$
159 // Change the presentation direction to be RTL
148 // Change the presentation direction to be RTL
160 rtl: $rtl$,
149 rtl: $rtl$,
161−$endif$
150+
162−$if(navigationMode)$
163 // see https://revealjs.com/vertical-slides/#navigation-mode
151 // see https://revealjs.com/vertical-slides/#navigation-mode
164 navigationMode: '$navigationMode$',
152 navigationMode: '$navigationMode$',
165−$endif$
153+
166−$if(shuffle)$
167 // Randomizes the order of slides each time the presentation loads
154 // Randomizes the order of slides each time the presentation loads
168 shuffle: $shuffle$,
155 shuffle: $shuffle$,
169−$endif$
156+
170−$if(fragments)$
171 // Turns fragments on and off globally
157 // Turns fragments on and off globally
172 fragments: $fragments$,
158 fragments: $fragments$,
173−$endif$
159+
174−$if(fragmentInURL)$
175 // Flags whether to include the current fragment in the URL,
160 // Flags whether to include the current fragment in the URL,
176 // so that reloading brings you to the same fragment position
161 // so that reloading brings you to the same fragment position
177 fragmentInURL: $fragmentInURL$,
162 fragmentInURL: $fragmentInURL$,
178−$endif$
163+
179−$if(embedded)$
180 // Flags if the presentation is running in an embedded mode,
164 // Flags if the presentation is running in an embedded mode,
181 // i.e. contained within a limited portion of the screen
165 // i.e. contained within a limited portion of the screen
182 embedded: $embedded$,
166 embedded: $embedded$,
183−$endif$
167+
184−$if(help)$
185 // Flags if we should show a help overlay when the questionmark
168 // Flags if we should show a help overlay when the questionmark
186 // key is pressed
169 // key is pressed
187 help: $help$,
170 help: $help$,
188−$endif$
171+
189−$if(pause)$
190− // Flags if it should be possible to pause the presentation (blackout)
172+ // Flags if it should be possible to pause the presentation (blackout)
191− pause: $pause$,
173+ pause: $pause$,
192−$endif$
174+
193−$if(showNotes)$
194 // Flags if speaker notes should be visible to all viewers
175 // Flags if speaker notes should be visible to all viewers
195 showNotes: $showNotes$,
176 showNotes: $showNotes$,
196−$endif$
177+
197−$if(autoPlayMedia)$
198− // Global override for autoplaying embedded media (video/audio/iframe)
178+ // Global override for autoplaying embedded media (null/true/false)
199− // - null: Media will only autoplay if data-autoplay is present
200− // - true: All media will autoplay, regardless of individual setting
201− // - false: No media will autoplay, regardless of individual setting
202 autoPlayMedia: $autoPlayMedia$,
179 autoPlayMedia: $autoPlayMedia$,
203−$endif$
180+
204−$if(preloadIframes)$
205− // Global override for preloading lazy-loaded iframes
181+ // Global override for preloading lazy-loaded iframes (null/true/false)
206− // - null: Iframes with data-src AND data-preload will be loaded when within
207− // the viewDistance, iframes with only data-src will be loaded when visible
208− // - true: All iframes with data-src will be loaded when within the viewDistance
209− // - false: All iframes with data-src will be loaded only when visible
210 preloadIframes: $preloadIframes$,
182 preloadIframes: $preloadIframes$,
211−$endif$
183+
212−$if(autoSlide)$
213 // Number of milliseconds between automatically proceeding to the
184 // Number of milliseconds between automatically proceeding to the
214 // next slide, disabled when set to 0, this value can be overwritten
185 // next slide, disabled when set to 0, this value can be overwritten
215 // by using a data-autoslide attribute on your slides
186 // by using a data-autoslide attribute on your slides
216 autoSlide: $autoSlide$,
187 autoSlide: $autoSlide$,
217−$endif$
188+
218−$if(autoSlideStoppable)$
219 // Stop auto-sliding after user input
189 // Stop auto-sliding after user input
220 autoSlideStoppable: $autoSlideStoppable$,
190 autoSlideStoppable: $autoSlideStoppable$,
221−$endif$
191+
222−$if(autoSlideMethod)$
223 // Use this method for navigation when auto-sliding
192 // Use this method for navigation when auto-sliding
224 autoSlideMethod: $autoSlideMethod$,
193 autoSlideMethod: $autoSlideMethod$,
225−$endif$
194+
226−$if(defaultTiming)$
227 // Specify the average time in seconds that you think you will spend
195 // Specify the average time in seconds that you think you will spend
228 // presenting each slide. This is used to show a pacing timer in the
196 // presenting each slide. This is used to show a pacing timer in the
229 // speaker view
197 // speaker view
230 defaultTiming: $defaultTiming$,
198 defaultTiming: $defaultTiming$,
231−$endif$
199+
232−$if(totalTime)$
233− // Specify the total time in seconds that is available to
234− // present. If this is set to a nonzero value, the pacing
235− // timer will work out the time available for each slide,
236− // instead of using the defaultTiming value
237− totalTime: $totalTime$,
238−$endif$
239−$if(minimumTimePerSlide)$
240− // Specify the minimum amount of time you want to allot to
241− // each slide, if using the totalTime calculation method. If
242− // the automated time allocation causes slide pacing to fall
243− // below this threshold, then you will see an alert in the
244− // speaker notes window
245− minimumTimePerSlide: $minimumTimePerSlide$,
246−$endif$
247−$if(mouseWheel)$
248 // Enable slide navigation via mouse wheel
200 // Enable slide navigation via mouse wheel
249 mouseWheel: $mouseWheel$,
201 mouseWheel: $mouseWheel$,
250−$endif$
202+
251−$if(rollingLinks)$
203+ // The display mode that will be used to show slides
252− // Apply a 3D roll to links on hover
204+ display: '$display$',
253− rollingLinks: $rollingLinks$,
205+
254−$endif$
255−$if(hideInactiveCursor)$
256 // Hide cursor if inactive
206 // Hide cursor if inactive
257 hideInactiveCursor: $hideInactiveCursor$,
207 hideInactiveCursor: $hideInactiveCursor$,
258−$endif$
208+
259−$if(hideCursorTime)$
260 // Time before the cursor is hidden (in ms)
209 // Time before the cursor is hidden (in ms)
261 hideCursorTime: $hideCursorTime$,
210 hideCursorTime: $hideCursorTime$,
262−$endif$
211+
263−$if(hideAddressBar)$
264− // Hides the address bar on mobile devices
265− hideAddressBar: $hideAddressBar$,
266−$endif$
267−$if(previewLinks)$
268 // Opens links in an iframe preview overlay
212 // Opens links in an iframe preview overlay
269 previewLinks: $previewLinks$,
213 previewLinks: $previewLinks$,
270−$endif$
214+
271−$if(transition)$
272− // Transition style
273− transition: '$transition$', // none/fade/slide/convex/concave/zoom
215+ // Transition style (none/fade/slide/convex/concave/zoom)
274−$endif$
216+ transition: '$transition$',
275−$if(transitionSpeed)$
217+
276− // Transition speed
218+ // Transition speed (default/fast/slow)
277− transitionSpeed: '$transitionSpeed$', // default/fast/slow
219+ transitionSpeed: '$transitionSpeed$',
278−$endif$
220+
279−$if(backgroundTransition)$
280 // Transition style for full page slide backgrounds
221 // Transition style for full page slide backgrounds
281− backgroundTransition: '$backgroundTransition$', // none/fade/slide/convex/concave/zoom
222+ // (none/fade/slide/convex/concave/zoom)
282−$endif$
223+ backgroundTransition: '$backgroundTransition$',
283−$if(viewDistance)$
224+
284 // Number of slides away from the current that are visible
225 // Number of slides away from the current that are visible
285 viewDistance: $viewDistance$,
226 viewDistance: $viewDistance$,
286−$endif$
227+
287−$if(mobileViewDistance)$
288 // Number of slides away from the current that are visible on mobile
228 // Number of slides away from the current that are visible on mobile
289 // devices. It is advisable to set this to a lower number than
229 // devices. It is advisable to set this to a lower number than
290 // viewDistance in order to save resources.
230 // viewDistance in order to save resources.
291 mobileViewDistance: $mobileViewDistance$,
231 mobileViewDistance: $mobileViewDistance$,
292−$endif$
293$if(parallaxBackgroundImage)$
232$if(parallaxBackgroundImage)$
233+
294 // Parallax background image
234 // Parallax background image
295 parallaxBackgroundImage: '$parallaxBackgroundImage$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
235 parallaxBackgroundImage: '$parallaxBackgroundImage$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
296$else$
236$else$
297$if(background-image)$
237$if(background-image)$
238+
298 // Parallax background image
239 // Parallax background image
299 parallaxBackgroundImage: '$background-image$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
240 parallaxBackgroundImage: '$background-image$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
300$endif$
241$endif$
301$endif$
242$endif$
302$if(parallaxBackgroundSize)$
243$if(parallaxBackgroundSize)$
244+
303 // Parallax background size
245 // Parallax background size
304 parallaxBackgroundSize: '$parallaxBackgroundSize$', // CSS syntax, e.g. "2100px 900px"
246 parallaxBackgroundSize: '$parallaxBackgroundSize$', // CSS syntax, e.g. "2100px 900px"
305$endif$
247$endif$
306$if(parallaxBackgroundHorizontal)$
248$if(parallaxBackgroundHorizontal)$
249+
307 // Amount to move parallax background (horizontal and vertical) on slide change
250 // Amount to move parallax background (horizontal and vertical) on slide change
308 // Number, e.g. 100
251 // Number, e.g. 100
309 parallaxBackgroundHorizontal: $parallaxBackgroundHorizontal$,
252 parallaxBackgroundHorizontal: $parallaxBackgroundHorizontal$,
310$endif$
253$endif$
311$if(parallaxBackgroundVertical)$
254$if(parallaxBackgroundVertical)$
255+
312 parallaxBackgroundVertical: $parallaxBackgroundVertical$,
256 parallaxBackgroundVertical: $parallaxBackgroundVertical$,
313$endif$
257$endif$
314$if(width)$
258$if(width)$
259+
315 // The "normal" size of the presentation, aspect ratio will be preserved
260 // The "normal" size of the presentation, aspect ratio will be preserved
316 // when the presentation is scaled to fit different resolutions. Can be
261 // when the presentation is scaled to fit different resolutions. Can be
317 // specified using percentage units.
262 // specified using percentage units.
318 width: $width$,
263 width: $width$,
319$endif$
264$endif$
320$if(height)$
265$if(height)$
266+
321 height: $height$,
267 height: $height$,
322$endif$
268$endif$
323$if(margin)$
269$if(margin)$
270+
324 // Factor of the display size that should remain empty around the content
271 // Factor of the display size that should remain empty around the content
325 margin: $margin$,
272 margin: $margin$,
326$endif$
273$endif$
327$if(minScale)$
274$if(minScale)$
275+
328 // Bounds for smallest/largest possible scale to apply to content
276 // Bounds for smallest/largest possible scale to apply to content
329 minScale: $minScale$,
277 minScale: $minScale$,
330$endif$
278$endif$
331$if(maxScale)$
279$if(maxScale)$
280+
332 maxScale: $maxScale$,
281 maxScale: $maxScale$,
333$endif$
282$endif$
334−$if(zoomKey)$
335− // Modifier key used to click-zoom to part of the slide
336− zoomKey: '$zoomKey$',
337−$endif$
338−$if(display)$
339− // The display mode that will be used to show slides
340− display: '$display$',
341−$endif$
342$if(mathjax)$
283$if(mathjax)$
284+
343 math: {
285 math: {
344 mathjax: '$mathjaxurl$',
286 mathjax: '$mathjaxurl$',
345 config: 'TeX-AMS_HTML-full',
287 config: 'TeX-AMS_HTML-full',
data/templates/styles.html+2−1
@@ -14,7 +14,7 @@ body {
14 padding-top: $if(margin-top)$$margin-top$$else$50px$endif$;
14 padding-top: $if(margin-top)$$margin-top$$else$50px$endif$;
15 padding-bottom: $if(margin-bottom)$$margin-bottom$$else$50px$endif$;
15 padding-bottom: $if(margin-bottom)$$margin-bottom$$else$50px$endif$;
16 hyphens: auto;
16 hyphens: auto;
17− word-wrap: break-word;
17+ overflow-wrap: break-word;
18 text-rendering: optimizeLegibility;
18 text-rendering: optimizeLegibility;
19 font-kerning: normal;
19 font-kerning: normal;
20}
20}
@@ -93,6 +93,7 @@ $endif$
93pre code {
93pre code {
94 padding: 0;
94 padding: 0;
95 overflow: visible;
95 overflow: visible;
96+ overflow-wrap: normal;
96}
97}
97.sourceCode {
98.sourceCode {
98 background-color: transparent;
99 background-color: transparent;
doc/epub.md+9−2
@@ -141,8 +141,15 @@ Pandoc has an EPUB3 writer. It renders LaTeX math into MathML, which
141EPUB3 readers are supposed to support (but unfortunately few do).
141EPUB3 readers are supposed to support (but unfortunately few do).
142
142
143Of course, this isn't much help if you want EPUB2 output (`pandoc -t epub2`)
143Of course, this isn't much help if you want EPUB2 output (`pandoc -t epub2`)
144−or target readers that don't support MathML. Then you should try using the
144+or target readers that don't support MathML. Then you have two options:
145+
146+1. Use the [`--webtex`](https://pandoc.org/MANUAL.html#option--webtex) option,
145−`--webtex` option, which will use a web service to convert the TeX to an image.
147+ which will use a web service to convert the TeX to an image.
148+2. Use the [`--gladtex`](https://pandoc.org/MANUAL.html#option--gladtex) option
149+ to convert maths into SVG images on your local machine.
150+
151+Both GladTeX and WebTeX add the LaTeX source of the formula as alternative text
152+of the image, increasing accessibility for blind users.
146
153
147[KindleGen]: https://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000765211
154[KindleGen]: https://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000765211
148[EPUB]: https://en.wikipedia.org/wiki/EPUB
155[EPUB]: https://en.wikipedia.org/wiki/EPUB
doc/faqs.mdnew file+128
@@ -0,0 +1,128 @@
1+% FAQs
2+
3+::: faqs
4+
5+## How can I convert a whole directory of files from Markdown to RTF?
6+
7+On linux or OSX:
8+
9+ for f in *.txt; do pandoc "$f" -s -o "${f%.txt}.rtf"; done
10+
11+
12+In Windows Powershell:
13+
14+ gci -r -i *.txt |foreach{$rtf=$_.directoryname+"\"+$_.basename+".rtf";pandoc -f markdown -s $_.name -o $rtf}
15+
16+## I used pandoc to convert a document to ICML (or OPML or RTF), and when I try to open it I'm told it's invalid. What have I done wrong?
17+
18+Be sure to use the `-s` or `--standalone` flag, or you just get a
19+fragment, not a full document with the required header:
20+
21+ pandoc -s -f markdown -t icml -o my.icml my.md
22+
23+## I get a blank document when I try to convert a markdown document in Chinese to PDF.
24+
25+By default, pandoc uses pdflatex to generate the PDF, and pdflatex
26+doesn't handle Chinese characters. But you can change the default to
27+use xelatex instead. You should also make sure you're using a font
28+with Chinese glyphs. For example:
29+
30+ pandoc -o c.pdf --pdf-engine=xelatex -V mainfont='Adobe Ming Std'
31+
32+## The Windows installer does a single user install, rather than installing pandoc for all users. How can I install pandoc for all users?
33+
34+Run the following command as admin:
35+
36+ msiexec /i pandoc-VERSION.msi ALLUSERS=1
37+
38+This will put pandoc in `C:\Program Files\Pandoc`.
39+You can install Pandoc to a different directory by setting APPLICATIONFOLDER parameter,
40+for example:
41+
42+ msiexec /i pandoc-1.11.1.msi ALLUSERS=1 APPLICATIONFOLDER="C:\Pandoc"
43+
44+## How do I change the margins in PDF output?
45+
46+The option
47+
48+ -V geometry:margin=1in
49+
50+will set the margins to one inch on each side. If you don't want uniform
51+margins, you can do something like
52+
53+ -V geometry:"top=2cm, bottom=1.5cm, left=1cm, right=1cm"
54+
55+Or
56+
57+ -V geometry:"left=3cm, width=10cm"
58+
59+For more options, see the documentation for the LaTeX [geometry
60+package](https://www.ctan.org/pkg/geometry).
61+
62+## How does pandoc compare to multimarkdown?
63+
64+Here is a [wiki
65+page](https://github.com/jgm/pandoc/wiki/Pandoc-vs-Multimarkdown)
66+comparing the two.
67+
68+## When I specify an image width of 50% and convert to LaTeX, pandoc sets the height to textheight and the aspect ratio isn't preserved. How can I prevent this?
69+
70+For example, if you convert an image with `{width="50%"}`, the LaTeX produced
71+will be `\includegraphics[width=0.5\textwidth,height=\textheight]`.
72+
73+This output presupposes the following code in pandoc's default latex
74+template:
75+
76+```
77+% Scale images if necessary, so that they will not overflow the page
78+% margins by default, and it is still possible to overwrite the defaults
79+% using explicit options in \includegraphics[width, height, ...]{}
80+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
81+```
82+
83+If you don't have this in your custom template, you should
84+add it. If we didn't set the `height` explicitly in this way,
85+the image would not be resized correctly unless it was
86+being resized to smaller than its original size.
87+
88+## Pandoc sometimes uses too much memory. How can I limit the memory used by pandoc?
89+
90+`pandoc +RTS -M30m -RTS` will limit heap memory to 30MB.
91+When converting a document requires more than this, an out of
92+memory error will be issued.
93+
94+## When using `--include-in-header` with PDF or LaTeX output, how do I reference tex declarations coming after `$header-includes$` in the default template?
95+
96+For various reasons, the `$header-includes$` are not at the very
97+end of the LaTeX preamble. This poses a problem when the code
98+you are inserting depends on declarations in the preamble coming
99+after the `$header-includes$` location. For example, you might
100+want to reference the `\author` and `\title` metadata values
101+(set at the very bottom of the preamble) and present them in
102+margins. In that case you can wrap your code in `etoolbox`'s
103+`\AtEndPreamble`. The technique is demonstrated in [this
104+gist](https://gist.github.com/JohnLukeBentley/9dda6166b9ee5c4127afd2b8cd16b70a).
105+When using `\AtEndPreamble`, keep any `makeatletter` or
106+`makeatother` outside of the `\AtEndPreamble`, as shown in the
107+example.
108+
109+## How can I convert PDFs to other formats using pandoc?
110+
111+You can't. You can try opening the PDF in Word or Google Docs
112+and saving in a format from which pandoc can convert directly.
113+
114+## Do I really need to install a 1 GB TeX installation to produce a PDF using pandoc?
115+
116+No. You can get by with a relatively small TeX installation,
117+for example, by starting with MacTeX's Basic TeX distribution
118+and using the `tlmgr` tool to install a few packages required by pandoc
119+(see https://pandoc.org/MANUAL.html#creating-a-pdf).
120+
121+Or, you can produce PDFs via HTML and `wkhtmltopdf`,
122+or via groff ms and `pdfroff`. (These don't produce as nice
123+topography as TeX, particularly when it comes to math, but they
124+may be fine for many purposes.)
125+
126+
127+:::
128+
doc/using-the-pandoc-api.md+9−9
@@ -139,7 +139,7 @@ report :: PandocMonad m => LogMessage -> m ()
139-- | Fetch an image or other item from the local filesystem or the net.
139-- | Fetch an image or other item from the local filesystem or the net.
140-- Returns raw content and maybe mime type.
140-- Returns raw content and maybe mime type.
141fetchItem :: PandocMonad m
141fetchItem :: PandocMonad m
142− => String
142+ => Text
143 -> m (B.ByteString, Maybe MimeType)
143 -> m (B.ByteString, Maybe MimeType)
144
144
145-- Set the resource path searched by 'fetchItem'.
145-- Set the resource path searched by 'fetchItem'.
@@ -213,8 +213,8 @@ of the Monoid typeclass and can easily be concatenated:
213import Text.Pandoc.Builder
213import Text.Pandoc.Builder
214
214
215mydoc :: Pandoc
215mydoc :: Pandoc
216−mydoc = doc $ header 1 (text "Hello!")
216+mydoc = doc $ header 1 (text (T.pack "Hello!"))
217− <> para (emph (text "hello world") <> text ".")
217+ <> para (emph (text (T.pack "hello world")) <> text (T.pack "."))
218
218
219main :: IO ()
219main :: IO ()
220main = print mydoc
220main = print mydoc
@@ -261,16 +261,16 @@ import qualified Data.Text as T
261import Data.List (intersperse)
261import Data.List (intersperse)
262
262
263data Station = Station{
263data Station = Station{
264− address :: String
264+ address :: T.Text
265− , name :: String
265+ , name :: T.Text
266− , cardsAccepted :: [String]
266+ , cardsAccepted :: [T.Text]
267 } deriving Show
267 } deriving Show
268
268
269instance FromJSON Station where
269instance FromJSON Station where
270 parseJSON (Object v) = Station <$>
270 parseJSON (Object v) = Station <$>
271 v .: "street_address" <*>
271 v .: "street_address" <*>
272 v .: "station_name" <*>
272 v .: "station_name" <*>
273− (words <$> (v .:? "cards_accepted" .!= ""))
273+ (T.words <$> (v .:? "cards_accepted" .!= ""))
274 parseJSON _ = mzero
274 parseJSON _ = mzero
275
275
276createLetter :: [Station] -> Pandoc
276createLetter :: [Station] -> Pandoc
@@ -328,7 +328,7 @@ users to override the system defaults. If you want to disable
328this behavior, use `setUserDataDir Nothing`.
328this behavior, use `setUserDataDir Nothing`.
329
329
330To render a template, use `renderTemplate'`, which takes two
330To render a template, use `renderTemplate'`, which takes two
331−arguments, a template (String) and a context (any instance
331+arguments, a template (Text) and a context (any instance
332of ToJSON). If you want to create a context from the metadata
332of ToJSON). If you want to create a context from the metadata
333part of a Pandoc document, use `metaToJSON'` from
333part of a Pandoc document, use `metaToJSON'` from
334[Text.Pandoc.Writers.Shared]. If you also want to incorporate
334[Text.Pandoc.Writers.Shared]. If you also want to incorporate
@@ -426,7 +426,7 @@ concatenated together. Here's an example that returns a
426list of the URLs linked to in a document:
426list of the URLs linked to in a document:
427
427
428```haskell
428```haskell
429−listURLs :: Pandoc -> [String]
429+listURLs :: Pandoc -> [Text]
430listURLs = query urls
430listURLs = query urls
431 where urls (Link _ _ (src, _)) = [src]
431 where urls (Link _ _ (src, _)) = [src]
432 urls _ = []
432 urls _ = []
man/pandoc.1+62−16
@@ -1,7 +1,7 @@
1'\" t
1'\" t
2−.\" Automatically generated by Pandoc 2.14
2+.\" Automatically generated by Pandoc 2.14.0.1
3.\"
3.\"
4−.TH "Pandoc User\[cq]s Guide" "" "May 21, 2021" "pandoc 2.14" ""
4+.TH "Pandoc User\[cq]s Guide" "" "June 20, 2021" "pandoc 2.14.0.3" ""
5.hy
5.hy
6.SH NAME
6.SH NAME
7pandoc - general markup converter
7pandoc - general markup converter
@@ -716,11 +716,11 @@ Extract images and other media contained in or linked from the source
716document to the path \f[I]DIR\f[R], creating it if necessary, and adjust
716document to the path \f[I]DIR\f[R], creating it if necessary, and adjust
717the images references in the document so they point to the extracted
717the images references in the document so they point to the extracted
718files.
718files.
719+Media are downloaded, read from the file system, or extracted from a
719−If the source format is a binary container (docx, epub, or odt), the
720+binary container (e.g.\ docx), as needed.
720−media is extracted from the container and the original filenames are
721+The original file paths are used if they are relative paths not
721−used.
722+containing \f[C]..\f[R].
722−Otherwise the media is read from the file system or downloaded, and new
723−filenames are constructed based on SHA1 hashes of the contents.
723+Otherwise filenames are constructed from the SHA1 hash of the contents.
724.TP
724.TP
725\f[B]\f[CB]--abbreviations=\f[B]\f[R]\f[I]FILE\f[R]
725\f[B]\f[CB]--abbreviations=\f[B]\f[R]\f[I]FILE\f[R]
726Specifies a custom abbreviations file, with abbreviations one to a line.
726Specifies a custom abbreviations file, with abbreviations one to a line.
@@ -1504,16 +1504,16 @@ inserted.
1504.TP
1504.TP
1505\f[B]\f[CB]--gladtex\f[B]\f[R]
1505\f[B]\f[CB]--gladtex\f[B]\f[R]
1506Enclose TeX math in \f[C]<eq>\f[R] tags in HTML output.
1506Enclose TeX math in \f[C]<eq>\f[R] tags in HTML output.
1507−The resulting HTML can then be processed by GladTeX to produce images of
1507+The resulting HTML can then be processed by GladTeX to produce SVG
1508−the typeset formulas and an HTML file with links to these images.
1508+images of the typeset formulas and an HTML file with these images
1509−So, the procedure is:
1509+embedded.
1510.RS
1510.RS
1511.IP
1511.IP
1512.nf
1512.nf
1513\f[C]
1513\f[C]
1514pandoc -s --gladtex input.md -o myfile.htex
1514pandoc -s --gladtex input.md -o myfile.htex
1515−gladtex -d myfile-images myfile.htex
1515+gladtex -d image_dir myfile.htex
1516−# produces myfile.html and images in myfile-images
1516+# produces myfile.html and images in image_dir
1517\f[R]
1517\f[R]
1518.fi
1518.fi
1519.RE
1519.RE
@@ -4275,7 +4275,7 @@ Term 2
4275Note that space between items in a definition list is required.
4275Note that space between items in a definition list is required.
4276(A variant that loosens this requirement, but disallows \[lq]lazy\[rq]
4276(A variant that loosens this requirement, but disallows \[lq]lazy\[rq]
4277hard wrapping, can be activated with \f[C]compact_definition_lists\f[R]:
4277hard wrapping, can be activated with \f[C]compact_definition_lists\f[R]:
4278−see Non-pandoc extensions, below.)
4278+see Non-default extensions, below.)
4279.SS Numbered example lists
4279.SS Numbered example lists
4280.SS Extension: \f[C]example_lists\f[R]
4280.SS Extension: \f[C]example_lists\f[R]
4281.PP
4281.PP
@@ -4820,6 +4820,13 @@ abstract: |
4820\f[R]
4820\f[R]
4821.fi
4821.fi
4822.PP
4822.PP
4823+The literal block after the \f[C]|\f[R] must be indented relative to the
4824+line containing the \f[C]|\f[R].
4825+If it is not, the YAML will be invalid and pandoc will not interpret it
4826+as metadata.
4827+For an overview of the complex rules governing YAML, see the Wikipedia
4828+entry on YAML syntax.
4829+.PP
4823Template variables will be set automatically from the metadata.
4830Template variables will be set automatically from the metadata.
4824Thus, for example, in writing HTML, the variable \f[C]abstract\f[R] will
4831Thus, for example, in writing HTML, the variable \f[C]abstract\f[R] will
4825be set to the HTML equivalent of the Markdown in the \f[C]abstract\f[R]
4832be set to the HTML equivalent of the Markdown in the \f[C]abstract\f[R]
@@ -5866,12 +5873,14 @@ singular or plural forms, as \f[C]book\f[R],
5866If no locator term is used, \[lq]page\[rq] is assumed.
5873If no locator term is used, \[lq]page\[rq] is assumed.
5867.PP
5874.PP
5868In complex cases, you can force something to be treated as a locator by
5875In complex cases, you can force something to be treated as a locator by
5869−enclosing it in curly braces:
5876+enclosing it in curly braces or prevent parsing the suffix as locator by
5877+prepending curly braces:
5870.IP
5878.IP
5871.nf
5879.nf
5872\f[C]
5880\f[C]
5873[\[at]smith{ii, A, D-Z}, with a suffix]
5881[\[at]smith{ii, A, D-Z}, with a suffix]
5874[\[at]smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]
5882[\[at]smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]
5883+[\[at]smith{}, 99 years later]
5875\f[R]
5884\f[R]
5876.fi
5885.fi
5877.PP
5886.PP
@@ -5909,13 +5918,50 @@ normal citations will be put in parentheses, while author-in-text
5909citations will not.
5918citations will not.
5910For this reason, it is sometimes preferable to use the author-in-text
5919For this reason, it is sometimes preferable to use the author-in-text
5911style inside notes when using a note style.
5920style inside notes when using a note style.
5912−.SS Non-pandoc extensions
5921+.SS Non-default extensions
5913.PP
5922.PP
5914The following Markdown syntax extensions are not enabled by default in
5923The following Markdown syntax extensions are not enabled by default in
5915pandoc, but may be enabled by adding \f[C]+EXTENSION\f[R] to the format
5924pandoc, but may be enabled by adding \f[C]+EXTENSION\f[R] to the format
5916name, where \f[C]EXTENSION\f[R] is the name of the extension.
5925name, where \f[C]EXTENSION\f[R] is the name of the extension.
5917Thus, for example, \f[C]markdown+hard_line_breaks\f[R] is Markdown with
5926Thus, for example, \f[C]markdown+hard_line_breaks\f[R] is Markdown with
5918hard line breaks.
5927hard line breaks.
5928+.SS Extension: \f[C]rebase_relative_paths\f[R]
5929+.PP
5930+Rewrite relative paths for Markdown links and images, depending on the
5931+path of the file containing the link or image link.
5932+For each link or image, pandoc will compute the directory of the
5933+containing file, relative to the working directory, and prepend the
5934+resulting path to the link or image path.
5935+.PP
5936+The use of this extension is best understood by example.
5937+Suppose you have a a subdirectory for each chapter of a book,
5938+\f[C]chap1\f[R], \f[C]chap2\f[R], \f[C]chap3\f[R].
5939+Each contains a file \f[C]text.md\f[R] and a number of images used in
5940+the chapter.
5941+You would like to have \f[C]![image](spider.jpg)\f[R] in
5942+\f[C]chap1/text.md\f[R] refer to \f[C]chap1/spider.jpg\f[R] and
5943+\f[C]![image](spider.jpg)\f[R] in \f[C]chap2/text.md\f[R] refer to
5944+\f[C]chap2/spider.jpg\f[R].
5945+To do this, use
5946+.IP
5947+.nf
5948+\f[C]
5949+pandoc chap*/*.md -f markdown+rebase_relative_paths
5950+\f[R]
5951+.fi
5952+.PP
5953+Without this extension, you would have to use
5954+\f[C]![image](chap1/spider.jpg)\f[R] in \f[C]chap1/text.md\f[R] and
5955+\f[C]![image](chap2/spider.jpg)\f[R] in \f[C]chap2/text.md\f[R].
5956+Links with relative paths will be rewritten in the same way as images.
5957+.PP
5958+Absolute paths and URLs are not changed.
5959+Neither are empty paths or paths consisting entirely of a fragment,
5960+e.g., \f[C]#foo\f[R].
5961+.PP
5962+Note that relative paths in reference links and images will be rewritten
5963+relative to the file containing the link reference definition, not the
5964+file containing the reference link or image itself, if these differ.
5919.SS Extension: \f[C]attributes\f[R]
5965.SS Extension: \f[C]attributes\f[R]
5920.PP
5966.PP
5921Allows attributes to be attached to any inline or block-level element.
5967Allows attributes to be attached to any inline or block-level element.
@@ -7662,7 +7708,7 @@ The HTML generated by pandoc is not guaranteed to be safe.
7662If \f[C]raw_html\f[R] is enabled for the Markdown input, users can
7708If \f[C]raw_html\f[R] is enabled for the Markdown input, users can
7663inject arbitrary HTML.
7709inject arbitrary HTML.
7664Even if \f[C]raw_html\f[R] is disabled, users can include dangerous
7710Even if \f[C]raw_html\f[R] is disabled, users can include dangerous
7665−content in attributes for headings, spans, and code blocks.
7711+content in URLs and attributes.
7666To be safe, you should run all the generated HTML through an HTML
7712To be safe, you should run all the generated HTML through an HTML
7667sanitizer.
7713sanitizer.
7668.SH AUTHORS
7714.SH AUTHORS
pandoc.cabal+14−10
@@ -1,6 +1,6 @@
1cabal-version: 2.2
1cabal-version: 2.2
2name: pandoc
2name: pandoc
3−version: 2.14
3+version: 2.14.0.3
4build-type: Simple
4build-type: Simple
5license: GPL-2.0-or-later
5license: GPL-2.0-or-later
6license-file: COPYING.md
6license-file: COPYING.md
@@ -12,7 +12,7 @@ stability: alpha
12homepage: https://pandoc.org
12homepage: https://pandoc.org
13category: Text
13category: Text
14tested-with: GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5,
14tested-with: GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5,
15− GHC == 8.8.4, GHC == 8.10.2
15+ GHC == 8.8.4, GHC == 8.10.2, GHC == 9.0.1
16synopsis: Conversion between markup formats
16synopsis: Conversion between markup formats
17description: Pandoc is a Haskell library for converting from one markup
17description: Pandoc is a Haskell library for converting from one markup
18 format to another, and a command-line tool that uses
18 format to another, and a command-line tool that uses
@@ -208,12 +208,16 @@ extra-source-files:
208 test/command/*.md
208 test/command/*.md
209 test/command/*.csl
209 test/command/*.csl
210 test/command/biblio.bib
210 test/command/biblio.bib
211− test/command/biblatex-examples.bib
211+ test/command/averroes.bib
212 test/command/A.txt
212 test/command/A.txt
213 test/command/B.txt
213 test/command/B.txt
214 test/command/C.txt
214 test/command/C.txt
215 test/command/D.txt
215 test/command/D.txt
216 test/command/01.csv
216 test/command/01.csv
217+ test/command/chap1/spider.png
218+ test/command/chap2/spider.png
219+ test/command/chap1/text.md
220+ test/command/chap2/text.md
217 test/command/defaults1.yaml
221 test/command/defaults1.yaml
218 test/command/defaults2.yaml
222 test/command/defaults2.yaml
219 test/command/defaults3.yaml
223 test/command/defaults3.yaml
@@ -446,10 +450,10 @@ library
446 blaze-markup >= 0.8 && < 0.9,
450 blaze-markup >= 0.8 && < 0.9,
447 bytestring >= 0.9 && < 0.12,
451 bytestring >= 0.9 && < 0.12,
448 case-insensitive >= 1.2 && < 1.3,
452 case-insensitive >= 1.2 && < 1.3,
449− citeproc >= 0.4 && < 0.4.1,
453+ citeproc >= 0.4.0.1 && < 0.4.1,
450− commonmark >= 0.1.1.3 && < 0.2,
454+ commonmark >= 0.2.1 && < 0.3,
451− commonmark-extensions >= 0.2.0.4 && < 0.3,
455+ commonmark-extensions >= 0.2.1.2 && < 0.3,
452− commonmark-pandoc >= 0.2 && < 0.3,
456+ commonmark-pandoc >= 0.2.1.1 && < 0.3,
453 connection >= 0.3.1,
457 connection >= 0.3.1,
454 containers >= 0.4.2.1 && < 0.7,
458 containers >= 0.4.2.1 && < 0.7,
455 data-default >= 0.4 && < 0.8,
459 data-default >= 0.4 && < 0.8,
@@ -461,7 +465,7 @@ library
461 exceptions >= 0.8 && < 0.11,
465 exceptions >= 0.8 && < 0.11,
462 file-embed >= 0.0 && < 0.1,
466 file-embed >= 0.0 && < 0.1,
463 filepath >= 1.1 && < 1.5,
467 filepath >= 1.1 && < 1.5,
464− haddock-library >= 1.8 && < 1.10,
468+ haddock-library >= 1.10 && < 1.11,
465 hslua >= 1.1 && < 1.4,
469 hslua >= 1.1 && < 1.4,
466 hslua-module-path >= 0.1.0 && < 0.2.0,
470 hslua-module-path >= 0.1.0 && < 0.2.0,
467 hslua-module-system >= 0.2 && < 0.3,
471 hslua-module-system >= 0.2 && < 0.3,
@@ -480,8 +484,8 @@ library
480 random >= 1 && < 1.3,
484 random >= 1 && < 1.3,
481 safe >= 0.3.18 && < 0.4,
485 safe >= 0.3.18 && < 0.4,
482 scientific >= 0.3 && < 0.4,
486 scientific >= 0.3 && < 0.4,
483− skylighting >= 0.10.5.1 && < 0.10.6,
487+ skylighting >= 0.10.5.2 && < 0.10.6,
484− skylighting-core >= 0.10.5.1 && < 0.10.6,
488+ skylighting-core >= 0.10.5.2 && < 0.10.6,
485 split >= 0.2 && < 0.3,
489 split >= 0.2 && < 0.3,
486 syb >= 0.1 && < 0.8,
490 syb >= 0.1 && < 0.8,
487 tagsoup >= 0.14.6 && < 0.15,
491 tagsoup >= 0.14.6 && < 0.15,
src/Text/Pandoc/Citeproc.hs+67−41
@@ -27,7 +27,7 @@ import Text.Pandoc.Error (PandocError(..))
27import Text.Pandoc.Extensions (pandocExtensions)
27import Text.Pandoc.Extensions (pandocExtensions)
28import Text.Pandoc.Logging (LogMessage(..))
28import Text.Pandoc.Logging (LogMessage(..))
29import Text.Pandoc.Options (ReaderOptions(..))
29import Text.Pandoc.Options (ReaderOptions(..))
30−import Text.Pandoc.Shared (stringify, ordNub, blocksToInlines, tshow)
30+import Text.Pandoc.Shared (stringify, ordNub, tshow)
31import qualified Text.Pandoc.UTF8 as UTF8
31import qualified Text.Pandoc.UTF8 as UTF8
32import Text.Pandoc.Walk (query, walk, walkM)
32import Text.Pandoc.Walk (query, walk, walkM)
33import Control.Applicative ((<|>))
33import Control.Applicative ((<|>))
@@ -91,22 +91,18 @@ processCitations (Pandoc meta bs) = do
91 walk (convertQuotes locale) .
91 walk (convertQuotes locale) .
92 insertSpace $ out)
92 insertSpace $ out)
93 (resultBibliography result)
93 (resultBibliography result)
94− let moveNotes = maybe True truish $
94+ let moveNotes = styleIsNoteStyle sopts &&
95− lookupMeta "notes-after-punctuation" meta
95+ maybe True truish (lookupMeta "notes-after-punctuation" meta)
96 let cits = map (walk (convertQuotes locale)) $
96 let cits = map (walk (convertQuotes locale)) $
97 resultCitations result
97 resultCitations result
98
98
99− let fixQuotes = case localePunctuationInQuote locale of
100− Just True ->
101− B.toList . movePunctuationInsideQuotes . B.fromList
102− _ -> id
103−
104 let metanocites = lookupMeta "nocite" meta
99 let metanocites = lookupMeta "nocite" meta
105 let Pandoc meta'' bs' =
100 let Pandoc meta'' bs' =
106 maybe id (setMeta "nocite") metanocites .
101 maybe id (setMeta "nocite") metanocites .
107− walk (map capitalizeNoteCitation .
108− fixQuotes . mvPunct moveNotes locale) .
102+ walk (mvPunct moveNotes locale) .
103+ (if styleIsNoteStyle sopts
109− walk deNote .
104+ then walk addNote . walk deNote
105+ else id) .
110 evalState (walkM insertResolvedCitations $ Pandoc meta' bs)
106 evalState (walkM insertResolvedCitations $ Pandoc meta' bs)
111 $ cits
107 $ cits
112 return $ Pandoc meta''
108 return $ Pandoc meta''
@@ -195,7 +191,9 @@ getReferences mblocale (Pandoc meta bs) = do
195 then const True
191 then const True
196 else (`Set.member` citeIds)
192 else (`Set.member` citeIds)
197 let inlineRefs = case lookupMeta "references" meta of
193 let inlineRefs = case lookupMeta "references" meta of
194+ Just (MetaList rs) ->
195+ filter (idpred . unItemId . referenceId)
198− Just (MetaList rs) -> mapMaybe metaValueToReference rs
196+ $ mapMaybe metaValueToReference rs
199 _ -> []
197 _ -> []
200 externalRefs <- case lookupMeta "bibliography" meta of
198 externalRefs <- case lookupMeta "bibliography" meta of
201 Just (MetaList xs) ->
199 Just (MetaList xs) ->
@@ -374,7 +372,6 @@ formatFromExtension fp = case dropWhile (== '.') $ takeExtension fp of
374
372
375
373
376isNote :: Inline -> Bool
374isNote :: Inline -> Bool
377−isNote (Note _) = True
378isNote (Cite _ [Note _]) = True
375isNote (Cite _ [Note _]) = True
379 -- the following allows citation styles that are "in-text" but use superscript
376 -- the following allows citation styles that are "in-text" but use superscript
380 -- references to be treated as if they are "notes" for the purposes of moving
377 -- references to be treated as if they are "notes" for the purposes of moving
@@ -387,6 +384,12 @@ isSpacy Space = True
387isSpacy SoftBreak = True
384isSpacy SoftBreak = True
388isSpacy _ = False
385isSpacy _ = False
389
386
387+movePunctInsideQuotes :: Locale -> [Inline] -> [Inline]
388+movePunctInsideQuotes locale
389+ | localePunctuationInQuote locale == Just True
390+ = B.toList . movePunctuationInsideQuotes . B.fromList
391+ | otherwise
392+ = id
390
393
391mvPunct :: Bool -> Locale -> [Inline] -> [Inline]
394mvPunct :: Bool -> Locale -> [Inline] -> [Inline]
392mvPunct moveNotes locale (x : xs)
395mvPunct moveNotes locale (x : xs)
@@ -399,7 +402,8 @@ mvPunct moveNotes locale (q : s : x : ys)
399 in if moveNotes
402 in if moveNotes
400 then if T.null spunct
403 then if T.null spunct
401 then q : x : mvPunct moveNotes locale ys
404 then q : x : mvPunct moveNotes locale ys
405+ else movePunctInsideQuotes locale
402− else q : Str spunct : x : mvPunct moveNotes locale
406+ [q , Str spunct , x] ++ mvPunct moveNotes locale
403 (B.toList
407 (B.toList
404 (dropTextWhile isPunctuation (B.fromList ys)))
408 (dropTextWhile isPunctuation (B.fromList ys)))
405 else q : x : mvPunct moveNotes locale ys
409 else q : x : mvPunct moveNotes locale ys
@@ -411,9 +415,10 @@ mvPunct moveNotes locale (Cite cs ils : ys)
411 , moveNotes
415 , moveNotes
412 = let s = stringify ys
416 = let s = stringify ys
413 spunct = T.takeWhile isPunctuation s
417 spunct = T.takeWhile isPunctuation s
418+ in Cite cs (movePunctInsideQuotes locale $
414− in Cite cs (init ils
419+ init ils
415− ++ [Str spunct | not (endWithPunct False (init ils))]
420+ ++ [Str spunct | not (endWithPunct False (init ils))]
416− ++ [last ils]) :
421+ ++ [last ils]) :
417 mvPunct moveNotes locale
422 mvPunct moveNotes locale
418 (B.toList (dropTextWhile isPunctuation (B.fromList ys)))
423 (B.toList (dropTextWhile isPunctuation (B.fromList ys)))
419mvPunct moveNotes locale (s : x : ys) | isSpacy s, isNote x =
424mvPunct moveNotes locale (s : x : ys) | isSpacy s, isNote x =
@@ -499,7 +504,8 @@ insertRefs refkvs refclasses meta refs bs =
499 put True
504 put True
500 -- refHeader isn't used if you have an explicit references div
505 -- refHeader isn't used if you have an explicit references div
501 let cs' = ordNub $ cs ++ refclasses
506 let cs' = ordNub $ cs ++ refclasses
507+ let kvs' = ordNub $ kvs ++ refkvs
502− return $ Div ("refs",cs' ++ refclasses,kvs ++ refkvs) (xs ++ refs)
508+ return $ Div ("refs",cs',kvs') (xs ++ refs)
503 go x = return x
509 go x = return x
504
510
505refTitle :: Meta -> Maybe [Inline]
511refTitle :: Meta -> Maybe [Inline]
@@ -558,42 +564,62 @@ extractText (FancyVal x) = toText x
558extractText (NumVal n) = T.pack (show n)
564extractText (NumVal n) = T.pack (show n)
559extractText _ = mempty
565extractText _ = mempty
560
566
567+-- Here we take the Spans with class csl-note that are left
568+-- after deNote has removed nested ones, and convert them
569+-- into real notes.
561−capitalizeNoteCitation :: Inline -> Inline
570+addNote :: Inline -> Inline
562−capitalizeNoteCitation (Cite cs [Note [Para ils]]) =
571+addNote (Span ("",["csl-note"],[]) ils) =
563− Cite cs
572+ Note [Para $
564− [Note [Para $ B.toList $ addTextCase Nothing CapitalizeFirst
573+ B.toList . addTextCase Nothing CapitalizeFirst . B.fromList $ ils]
565− $ B.fromList ils]]
574+addNote x = x
566−capitalizeNoteCitation x = x
575+
567−
576+-- Here we handle citation notes that occur inside footnotes
577+-- or other citation notes, in a note style. We don't want
578+-- notes inside notes, so we convert these to parenthesized
579+-- or comma-separated citations.
568−deNote :: [Inline] -> [Inline]
580+deNote :: Inline -> Inline
569−deNote [] = []
581+deNote (Note bs) =
570−deNote (Note bs:rest) =
582+ case bs of
571− Note (walk go bs) : deNote rest
583+ [Para (cit@(Cite (c:_) _) : ils)]
584+ | citationMode c /= AuthorInText ->
585+ -- if citation is first in note, no need to parenthesize.
586+ Note [Para (walk removeNotes $ cit : walk addParens ils)]
587+ _ -> Note (walk removeNotes . walk addParens $ bs)
588+
572 where
589 where
573− go [] = []
590+ addParens [] = []
574− go (Cite (c:cs) ils : zs)
591+ addParens (Cite (c:cs) ils : zs)
575 | citationMode c == AuthorInText
592 | citationMode c == AuthorInText
576− = Cite (c:cs) (concatMap (noteAfterComma (needsPeriod zs)) ils) : go zs
593+ = Cite (c:cs) (concatMap (noteAfterComma (needsPeriod zs)) ils) :
594+ addParens zs
577 | otherwise
595 | otherwise
578− = Cite (c:cs) (concatMap noteInParens ils) : go zs
596+ = Cite (c:cs) (concatMap noteInParens ils) : addParens zs
579− go (x:xs) = x : go xs
597+ addParens (x:xs) = x : addParens xs
598+
599+ removeNotes (Span ("",["csl-note"],[]) ils) = Span ("",[],[]) ils
600+ removeNotes x = x
601+
580 needsPeriod [] = True
602 needsPeriod [] = True
581 needsPeriod (Str t:_) = case T.uncons t of
603 needsPeriod (Str t:_) = case T.uncons t of
582 Nothing -> False
604 Nothing -> False
583 Just (c,_) -> isUpper c
605 Just (c,_) -> isUpper c
584 needsPeriod (Space:zs) = needsPeriod zs
606 needsPeriod (Space:zs) = needsPeriod zs
585 needsPeriod _ = False
607 needsPeriod _ = False
608+
586− noteInParens (Note bs')
609+ noteInParens (Span ("",["csl-note"],[]) ils)
587 = Space : Str "(" :
610 = Space : Str "(" :
588− removeFinalPeriod (blocksToInlines bs') ++ [Str ")"]
611+ removeFinalPeriod ils ++ [Str ")"]
589 noteInParens x = [x]
612 noteInParens x = [x]
613+
590− noteAfterComma needsPer (Note bs')
614+ noteAfterComma needsPer (Span ("",["csl-note"],[]) ils)
615+ | not (null ils)
591 = Str "," : Space :
616 = Str "," : Space :
592− (if needsPer
617+ if needsPer
593− then id
618+ then ils
594− else removeFinalPeriod) (blocksToInlines bs')
619+ else removeFinalPeriod ils
595 noteAfterComma _ x = [x]
620 noteAfterComma _ x = [x]
621+
596−deNote (x:xs) = x : deNote xs
622+deNote x = x
597
623
598-- Note: we can't use dropTextWhileEnd indiscriminately,
624-- Note: we can't use dropTextWhileEnd indiscriminately,
599-- because this would remove the final period on abbreviations like Ibid.
625-- because this would remove the final period on abbreviations like Ibid.
src/Text/Pandoc/Citeproc/BibTeX.hs+4−2
@@ -71,9 +71,11 @@ readBibtexString variant locale idpred contents = do
71 filter (\item -> idpred (identifier item) &&
71 filter (\item -> idpred (identifier item) &&
72 entryType item /= "xdata"))
72 entryType item /= "xdata"))
73 (fromMaybe defaultLang $ localeLanguage locale, Map.empty)
73 (fromMaybe defaultLang $ localeLanguage locale, Map.empty)
74− "" (toSources contents) of
74+ (initialSourceName sources) sources of
75 Left err -> Left err
75 Left err -> Left err
76 Right xs -> return xs
76 Right xs -> return xs
77+ where
78+ sources = toSources contents
77
79
78-- | Write BibTeX or BibLaTeX given given a 'Reference'.
80-- | Write BibTeX or BibLaTeX given given a 'Reference'.
79writeBibtexString :: WriterOptions -- ^ options (for writing LaTex)
81writeBibtexString :: WriterOptions -- ^ options (for writing LaTex)
@@ -866,7 +868,7 @@ fieldName = resolveAlias . T.toLower
866
868
867isBibtexKeyChar :: Char -> Bool
869isBibtexKeyChar :: Char -> Bool
868isBibtexKeyChar c =
870isBibtexKeyChar c =
869− isAlphaNum c || c `elem` (".:;?!`'()/*@_+=-[]*&" :: [Char])
871+ isAlphaNum c || c `elem` (".:;?!`'()$/*@_+=-[]*&" :: [Char])
870
872
871bibItem :: BibParser Item
873bibItem :: BibParser Item
872bibItem = do
874bibItem = do
src/Text/Pandoc/Citeproc/Locator.hs+18−3
@@ -20,7 +20,7 @@ parseLocator :: Locale -> [Inline] -> (Maybe (Text, Text), [Inline])
20parseLocator locale inp =
20parseLocator locale inp =
21 case parse (pLocatorWords (toLocatorMap locale)) "suffix" $ splitInp inp of
21 case parse (pLocatorWords (toLocatorMap locale)) "suffix" $ splitInp inp of
22 Right r -> r
22 Right r -> r
23− Left _ -> (Nothing, inp)
23+ Left _ -> (Nothing, maybeAddComma inp)
24
24
25splitInp :: [Inline] -> [Inline]
25splitInp :: [Inline] -> [Inline]
26splitInp = splitStrWhen (\c -> isSpace c || (isPunctuation c && c /= ':'))
26splitInp = splitStrWhen (\c -> isSpace c || (isPunctuation c && c /= ':'))
@@ -42,9 +42,17 @@ pLocatorWords locMap = do
42 -- i.e. the first one will be " 9"
42 -- i.e. the first one will be " 9"
43 return $
43 return $
44 if T.null la && T.null lo
44 if T.null la && T.null lo
45− then (Nothing, s)
45+ then (Nothing, maybeAddComma s)
46 else (Just (la, T.strip lo), s)
46 else (Just (la, T.strip lo), s)
47
47
48+maybeAddComma :: [Inline] -> [Inline]
49+maybeAddComma [] = []
50+maybeAddComma ils@(Space : _) = ils
51+maybeAddComma ils@(Str t : _)
52+ | Just (c, _) <- T.uncons t
53+ , isPunctuation c = ils
54+maybeAddComma ils = Str "," : Space : ils
55+
48pLocatorDelimited :: LocatorMap -> LocatorParser (Text, Text)
56pLocatorDelimited :: LocatorMap -> LocatorParser (Text, Text)
49pLocatorDelimited locMap = try $ do
57pLocatorDelimited locMap = try $ do
50 _ <- pMatchChar "{" (== '{')
58 _ <- pMatchChar "{" (== '{')
@@ -97,7 +105,7 @@ pLocatorLabel' locMap lim = go ""
97 t <- anyToken
105 t <- anyToken
98 ts <- manyTill anyToken (try $ lookAhead lim)
106 ts <- manyTill anyToken (try $ lookAhead lim)
99 let s = acc <> stringify (t:ts)
107 let s = acc <> stringify (t:ts)
100− case M.lookup (T.strip s) locMap of
108+ case M.lookup (T.toCaseFold $ T.strip s) locMap of
101 -- try to find a longer one, or return this one
109 -- try to find a longer one, or return this one
102 Just l -> go s <|> return (l, False)
110 Just l -> go s <|> return (l, False)
103 Nothing -> go s
111 Nothing -> go s
@@ -181,6 +189,7 @@ pPageUnit = roman <|> plainUnit
181 plainUnit = do
189 plainUnit = do
182 ts <- many1 (notFollowedBy pSpace >>
190 ts <- many1 (notFollowedBy pSpace >>
183 notFollowedBy pLocatorPunct >>
191 notFollowedBy pLocatorPunct >>
192+ notFollowedBy pMath >>
184 anyToken)
193 anyToken)
185 let s = stringify ts
194 let s = stringify ts
186 -- otherwise look for actual digits or -s
195 -- otherwise look for actual digits or -s
@@ -211,6 +220,12 @@ pMatchChar msg f = satisfyTok f' <?> msg
211pSpace :: LocatorParser Inline
220pSpace :: LocatorParser Inline
212pSpace = satisfyTok (\t -> isSpacey t || t == Str "\160") <?> "space"
221pSpace = satisfyTok (\t -> isSpacey t || t == Str "\160") <?> "space"
213
222
223+pMath :: LocatorParser Inline
224+pMath = satisfyTok isMath
225+ where
226+ isMath (Math{}) = True
227+ isMath _ = False
228+
214satisfyTok :: (Inline -> Bool) -> LocatorParser Inline
229satisfyTok :: (Inline -> Bool) -> LocatorParser Inline
215satisfyTok f = tokenPrim show (\sp _ _ -> sp) (\tok -> if f tok
230satisfyTok f = tokenPrim show (\sp _ _ -> sp) (\tok -> if f tok
216 then Just tok
231 then Just tok
src/Text/Pandoc/Class/IO.hs+21−21
@@ -62,7 +62,7 @@ import Text.Pandoc.Definition (Pandoc, Inline (Image))
62import Text.Pandoc.Error (PandocError (..))
62import Text.Pandoc.Error (PandocError (..))
63import Text.Pandoc.Logging (LogMessage (..), messageVerbosity, showLogMessage)
63import Text.Pandoc.Logging (LogMessage (..), messageVerbosity, showLogMessage)
64import Text.Pandoc.MIME (MimeType)
64import Text.Pandoc.MIME (MimeType)
65−import Text.Pandoc.MediaBag (MediaBag, MediaItem(..), lookupMedia, mediaDirectory)
65+import Text.Pandoc.MediaBag (MediaBag, MediaItem(..), lookupMedia, mediaItems)
66import Text.Pandoc.Walk (walk)
66import Text.Pandoc.Walk (walk)
67import qualified Control.Exception as E
67import qualified Control.Exception as E
68import qualified Data.ByteString as B
68import qualified Data.ByteString as B
@@ -200,32 +200,32 @@ alertIndent (l:ls) = do
200extractMedia :: (PandocMonad m, MonadIO m) => FilePath -> Pandoc -> m Pandoc
200extractMedia :: (PandocMonad m, MonadIO m) => FilePath -> Pandoc -> m Pandoc
201extractMedia dir d = do
201extractMedia dir d = do
202 media <- getMediaBag
202 media <- getMediaBag
203− case [fp | (fp, _, _) <- mediaDirectory media] of
203+ let items = mediaItems media
204+ if null items
204− [] -> return d
205+ then return d
205− fps -> do
206+ else do
206− mapM_ (writeMedia dir media) fps
207+ mapM_ (writeMedia dir) items
207− return $ walk (adjustImagePath dir fps) d
208+ return $ walk (adjustImagePath dir media) d
208
209
209-- | Write the contents of a media bag to a path.
210-- | Write the contents of a media bag to a path.
210writeMedia :: (PandocMonad m, MonadIO m)
211writeMedia :: (PandocMonad m, MonadIO m)
211− => FilePath -> MediaBag -> FilePath
212+ => FilePath
213+ -> (FilePath, MimeType, BL.ByteString)
212 -> m ()
214 -> m ()
213−writeMedia dir mediabag subpath = do
215+writeMedia dir (fp, _mt, bs) = do
214− -- we join and split to convert a/b/c to a\b\c on Windows;
216+ -- we normalize to get proper path separators for the platform
215− -- in zip containers all paths use /
217+ let fullpath = normalise $ dir </> fp
216− let mbcontents = lookupMedia subpath mediabag
217− case mbcontents of
218− Nothing -> throwError $ PandocResourceNotFound $ pack subpath
219− Just item -> do
220− let fullpath = dir </> mediaPath item
221− liftIOError (createDirectoryIfMissing True) (takeDirectory fullpath)
218+ liftIOError (createDirectoryIfMissing True) (takeDirectory fullpath)
222− logIOError $ BL.writeFile fullpath $ mediaContents item
219+ logIOError $ BL.writeFile fullpath bs
223
220
224-- | If the given Inline element is an image with a @src@ path equal to
221-- | If the given Inline element is an image with a @src@ path equal to
225-- one in the list of @paths@, then prepends @dir@ to the image source;
222-- one in the list of @paths@, then prepends @dir@ to the image source;
226-- returns the element unchanged otherwise.
223-- returns the element unchanged otherwise.
227−adjustImagePath :: FilePath -> [FilePath] -> Inline -> Inline
224+adjustImagePath :: FilePath -> MediaBag -> Inline -> Inline
228−adjustImagePath dir paths (Image attr lab (src, tit))
225+adjustImagePath dir mediabag (Image attr lab (src, tit)) =
229− | unpack src `elem` paths
226+ case lookupMedia (T.unpack src) mediabag of
227+ Nothing -> Image attr lab (src, tit)
228+ Just item ->
229+ let fullpath = dir </> mediaPath item
230− = Image attr lab (pack (normalise $ dir </> unpack src), tit)
230+ in Image attr lab (T.pack fullpath, tit)
231adjustImagePath _ _ x = x
231adjustImagePath _ _ x = x
src/Text/Pandoc/Class/PandocMonad.hs+15−17
@@ -1,4 +1,5 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE TupleSections #-}
2{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleInstances #-}
4{-# LANGUAGE FlexibleInstances #-}
4{-# LANGUAGE MultiParamTypeClasses #-}
5{-# LANGUAGE MultiParamTypeClasses #-}
@@ -65,7 +66,7 @@ import Network.URI ( escapeURIString, nonStrictRelativeTo,
65 unEscapeString, parseURIReference, isAllowedInURI,
66 unEscapeString, parseURIReference, isAllowedInURI,
66 parseURI, URI(..) )
67 parseURI, URI(..) )
67import System.FilePath ((</>), takeExtension, dropExtension,
68import System.FilePath ((</>), takeExtension, dropExtension,
68− isRelative, splitDirectories)
69+ isRelative, splitDirectories, makeRelative)
69import System.Random (StdGen)
70import System.Random (StdGen)
70import Text.Collate.Lang (Lang(..), parseLang, renderLang)
71import Text.Collate.Lang (Lang(..), parseLang, renderLang)
71import Text.Pandoc.Class.CommonState (CommonState (..))
72import Text.Pandoc.Class.CommonState (CommonState (..))
@@ -409,9 +410,10 @@ downloadOrRead s = do
409 _ -> readLocalFile fp -- get from local file system
410 _ -> readLocalFile fp -- get from local file system
410 where readLocalFile f = do
411 where readLocalFile f = do
411 resourcePath <- getResourcePath
412 resourcePath <- getResourcePath
412− cont <- if isRelative f
413+ (fp', cont) <- if isRelative f
413− then withPaths resourcePath readFileStrict f
414+ then withPaths resourcePath readFileStrict f
414− else readFileStrict f
415+ else (f,) <$> readFileStrict f
416+ report $ LoadedResource f (makeRelative "." fp')
415 return (cont, mime)
417 return (cont, mime)
416 httpcolon = URI{ uriScheme = "http:",
418 httpcolon = URI{ uriScheme = "http:",
417 uriAuthority = Nothing,
419 uriAuthority = Nothing,
@@ -621,10 +623,11 @@ makeCanonical = Posix.joinPath . transformPathParts . splitDirectories
621-- that filepath. Returns the result of the first successful execution
623-- that filepath. Returns the result of the first successful execution
622-- of the action, or throws a @PandocResourceNotFound@ exception if the
624-- of the action, or throws a @PandocResourceNotFound@ exception if the
623-- action errors for all filepaths.
625-- action errors for all filepaths.
626+withPaths :: PandocMonad m
624−withPaths :: PandocMonad m => [FilePath] -> (FilePath -> m a) -> FilePath -> m a
627+ => [FilePath] -> (FilePath -> m a) -> FilePath -> m (FilePath, a)
625withPaths [] _ fp = throwError $ PandocResourceNotFound $ T.pack fp
628withPaths [] _ fp = throwError $ PandocResourceNotFound $ T.pack fp
626withPaths (p:ps) action fp =
629withPaths (p:ps) action fp =
627− catchError (action (p </> fp))
630+ catchError ((p </> fp,) <$> action (p </> fp))
628 (\_ -> withPaths ps action fp)
631 (\_ -> withPaths ps action fp)
629
632
630-- | Traverse tree, filling media bag for any images that
633-- | Traverse tree, filling media bag for any images that
@@ -635,17 +638,12 @@ fillMediaBag d = walkM handleImage d
635 handleImage (Image attr lab (src, tit)) = catchError
638 handleImage (Image attr lab (src, tit)) = catchError
636 (do mediabag <- getMediaBag
639 (do mediabag <- getMediaBag
637 let fp = T.unpack src
640 let fp = T.unpack src
638− src' <- T.pack <$> case lookupMedia fp mediabag of
641+ case lookupMedia fp mediabag of
639− Just item -> return $ mediaPath item
642+ Just _ -> return ()
640− Nothing -> do
643+ Nothing -> do
641− (bs, mt) <- fetchItem src
644+ (bs, mt) <- fetchItem src
642− insertMedia fp mt (BL.fromStrict bs)
645+ insertMedia fp mt (BL.fromStrict bs)
643− mediabag' <- getMediaBag
644− case lookupMedia fp mediabag' of
645− Just item -> return $ mediaPath item
646− Nothing -> throwError $ PandocSomeError $
647− src <> " not successfully inserted into MediaBag"
648− return $ Image attr lab (src', tit))
646+ return $ Image attr lab (src, tit))
649 (\e ->
647 (\e ->
650 case e of
648 case e of
651 PandocResourceNotFound _ -> do
649 PandocResourceNotFound _ -> do
src/Text/Pandoc/Error.hs+3−3
@@ -97,13 +97,13 @@ renderError e =
97 [] -> ""
97 [] -> ""
98 ((pos,txt):_) ->
98 ((pos,txt):_) ->
99 let ls = T.lines txt <> [""]
99 let ls = T.lines txt <> [""]
100− ln = errLine - sourceLine pos
100+ ln = (errLine - sourceLine pos) + 1
101− in if length ls > ln - 1
101+ in if length ls > ln && ln >= 1
102 then T.concat ["\n", ls !! (ln - 1)
102 then T.concat ["\n", ls !! (ln - 1)
103 ,"\n", T.replicate (errColumn - 1) " "
103 ,"\n", T.replicate (errColumn - 1) " "
104 ,"^"]
104 ,"^"]
105 else ""
105 else ""
106− in "\nError at " <> tshow err' <> errorInFile
106+ in "Error at " <> tshow err' <> errorInFile
107 PandocMakePDFError s -> s
107 PandocMakePDFError s -> s
108 PandocOptionError s -> s
108 PandocOptionError s -> s
109 PandocSyntaxMapError s -> s
109 PandocSyntaxMapError s -> s
src/Text/Pandoc/Extensions.hs+4
@@ -136,6 +136,8 @@ data Extension =
136 | Ext_raw_html -- ^ Allow raw HTML
136 | Ext_raw_html -- ^ Allow raw HTML
137 | Ext_raw_tex -- ^ Allow raw TeX (other than math)
137 | Ext_raw_tex -- ^ Allow raw TeX (other than math)
138 | Ext_raw_markdown -- ^ Parse markdown in ipynb as raw markdown
138 | Ext_raw_markdown -- ^ Parse markdown in ipynb as raw markdown
139+ | Ext_rebase_relative_paths -- ^ Rebase relative image and link paths,
140+ -- relative to directory of containing file
139 | Ext_shortcut_reference_links -- ^ Shortcut reference links
141 | Ext_shortcut_reference_links -- ^ Shortcut reference links
140 | Ext_simple_tables -- ^ Pandoc-style simple tables
142 | Ext_simple_tables -- ^ Pandoc-style simple tables
141 | Ext_smart -- ^ "Smart" quotes, apostrophes, ellipses, dashes
143 | Ext_smart -- ^ "Smart" quotes, apostrophes, ellipses, dashes
@@ -462,6 +464,7 @@ getAllExtensions f = universalExtensions <> getAll f
462 , Ext_gutenberg
464 , Ext_gutenberg
463 , Ext_smart
465 , Ext_smart
464 , Ext_literate_haskell
466 , Ext_literate_haskell
467+ , Ext_rebase_relative_paths
465 ]
468 ]
466 getAll "markdown_strict" = allMarkdownExtensions
469 getAll "markdown_strict" = allMarkdownExtensions
467 getAll "markdown_phpextra" = allMarkdownExtensions
470 getAll "markdown_phpextra" = allMarkdownExtensions
@@ -514,6 +517,7 @@ getAllExtensions f = universalExtensions <> getAll f
514 , Ext_attributes
517 , Ext_attributes
515 , Ext_sourcepos
518 , Ext_sourcepos
516 , Ext_yaml_metadata_block
519 , Ext_yaml_metadata_block
520+ , Ext_rebase_relative_paths
517 ]
521 ]
518 getAll "commonmark_x" = getAll "commonmark"
522 getAll "commonmark_x" = getAll "commonmark"
519 getAll "org" = autoIdExtensions <>
523 getAll "org" = autoIdExtensions <>
src/Text/Pandoc/ImageSize.hs+5−1
@@ -57,7 +57,8 @@ import Codec.Picture (decodeImageWithMetadata)
57-- quick and dirty functions to get image sizes
57-- quick and dirty functions to get image sizes
58-- algorithms borrowed from wwwis.pl
58-- algorithms borrowed from wwwis.pl
59
59
60−data ImageType = Png | Gif | Jpeg | Svg | Pdf | Eps | Emf deriving Show
60+data ImageType = Png | Gif | Jpeg | Svg | Pdf | Eps | Emf | Tiff
61+ deriving Show
61data Direction = Width | Height
62data Direction = Width | Height
62instance Show Direction where
63instance Show Direction where
63 show Width = "width"
64 show Width = "width"
@@ -100,6 +101,8 @@ imageType :: ByteString -> Maybe ImageType
100imageType img = case B.take 4 img of
101imageType img = case B.take 4 img of
101 "\x89\x50\x4e\x47" -> return Png
102 "\x89\x50\x4e\x47" -> return Png
102 "\x47\x49\x46\x38" -> return Gif
103 "\x47\x49\x46\x38" -> return Gif
104+ "\x49\x49\x2a\x00" -> return Tiff
105+ "\x4D\x4D\x00\x2a" -> return Tiff
103 "\xff\xd8\xff\xe0" -> return Jpeg -- JFIF
106 "\xff\xd8\xff\xe0" -> return Jpeg -- JFIF
104 "\xff\xd8\xff\xe1" -> return Jpeg -- Exif
107 "\xff\xd8\xff\xe1" -> return Jpeg -- Exif
105 "%PDF" -> return Pdf
108 "%PDF" -> return Pdf
@@ -124,6 +127,7 @@ imageSize opts img = checkDpi <$>
124 Just Png -> getSize img
127 Just Png -> getSize img
125 Just Gif -> getSize img
128 Just Gif -> getSize img
126 Just Jpeg -> getSize img
129 Just Jpeg -> getSize img
130+ Just Tiff -> getSize img
127 Just Svg -> mbToEither "could not determine SVG size" $ svgSize opts img
131 Just Svg -> mbToEither "could not determine SVG size" $ svgSize opts img
128 Just Eps -> mbToEither "could not determine EPS size" $ epsSize img
132 Just Eps -> mbToEither "could not determine EPS size" $ epsSize img
129 Just Pdf -> mbToEither "could not determine PDF size" $ pdfSize img
133 Just Pdf -> mbToEither "could not determine PDF size" $ pdfSize img
src/Text/Pandoc/Logging.hs+13−6
@@ -85,6 +85,7 @@ data LogMessage =
85 | CouldNotParseCSS Text
85 | CouldNotParseCSS Text
86 | Fetching Text
86 | Fetching Text
87 | Extracting Text
87 | Extracting Text
88+ | LoadedResource FilePath FilePath
88 | NoTitleElement Text
89 | NoTitleElement Text
89 | NoLangSpecified
90 | NoLangSpecified
90 | InvalidLang Text
91 | InvalidLang Text
@@ -195,6 +196,9 @@ instance ToJSON LogMessage where
195 ["path" .= fp]
196 ["path" .= fp]
196 Extracting fp ->
197 Extracting fp ->
197 ["path" .= fp]
198 ["path" .= fp]
199+ LoadedResource orig found ->
200+ ["for" .= orig
201+ ,"from" .= found]
198 NoTitleElement fallback ->
202 NoTitleElement fallback ->
199 ["fallback" .= fallback]
203 ["fallback" .= fallback]
200 NoLangSpecified -> []
204 NoLangSpecified -> []
@@ -278,7 +282,7 @@ showLogMessage msg =
278 ParsingUnescaped s pos ->
282 ParsingUnescaped s pos ->
279 "Parsing unescaped '" <> s <> "' at " <> showPos pos
283 "Parsing unescaped '" <> s <> "' at " <> showPos pos
280 CouldNotLoadIncludeFile fp pos ->
284 CouldNotLoadIncludeFile fp pos ->
281− "Could not load include file '" <> fp <> "' at " <> showPos pos
285+ "Could not load include file " <> fp <> " at " <> showPos pos
282 MacroAlreadyDefined name pos ->
286 MacroAlreadyDefined name pos ->
283 "Macro '" <> name <> "' already defined, ignoring at " <> showPos pos
287 "Macro '" <> name <> "' already defined, ignoring at " <> showPos pos
284 InlineNotRendered il ->
288 InlineNotRendered il ->
@@ -290,18 +294,18 @@ showLogMessage msg =
290 IgnoredIOError s ->
294 IgnoredIOError s ->
291 "IO Error (ignored): " <> s
295 "IO Error (ignored): " <> s
292 CouldNotFetchResource fp s ->
296 CouldNotFetchResource fp s ->
293− "Could not fetch resource '" <> fp <> "'" <>
297+ "Could not fetch resource " <> fp <>
294 if Text.null s then "" else ": " <> s
298 if Text.null s then "" else ": " <> s
295 CouldNotDetermineImageSize fp s ->
299 CouldNotDetermineImageSize fp s ->
296− "Could not determine image size for '" <> fp <> "'" <>
300+ "Could not determine image size for " <> fp <>
297 if Text.null s then "" else ": " <> s
301 if Text.null s then "" else ": " <> s
298 CouldNotConvertImage fp s ->
302 CouldNotConvertImage fp s ->
299− "Could not convert image '" <> fp <> "'" <>
303+ "Could not convert image " <> fp <>
300 if Text.null s then "" else ": " <> s
304 if Text.null s then "" else ": " <> s
301 CouldNotDetermineMimeType fp ->
305 CouldNotDetermineMimeType fp ->
302− "Could not determine mime type for '" <> fp <> "'"
306+ "Could not determine mime type for " <> fp
303 CouldNotConvertTeXMath s m ->
307 CouldNotConvertTeXMath s m ->
304− "Could not convert TeX math '" <> s <> "', rendering as TeX" <>
308+ "Could not convert TeX math " <> s <> ", rendering as TeX" <>
305 if Text.null m then "" else ":\n" <> m
309 if Text.null m then "" else ":\n" <> m
306 CouldNotParseCSS m ->
310 CouldNotParseCSS m ->
307 "Could not parse CSS" <> if Text.null m then "" else ":\n" <> m
311 "Could not parse CSS" <> if Text.null m then "" else ":\n" <> m
@@ -309,6 +313,8 @@ showLogMessage msg =
309 "Fetching " <> fp <> "..."
313 "Fetching " <> fp <> "..."
310 Extracting fp ->
314 Extracting fp ->
311 "Extracting " <> fp <> "..."
315 "Extracting " <> fp <> "..."
316+ LoadedResource orig found ->
317+ "Loaded " <> Text.pack orig <> " from " <> Text.pack found
312 NoTitleElement fallback ->
318 NoTitleElement fallback ->
313 "This document format requires a nonempty <title> element.\n" <>
319 "This document format requires a nonempty <title> element.\n" <>
314 "Defaulting to '" <> fallback <> "' as the title.\n" <>
320 "Defaulting to '" <> fallback <> "' as the title.\n" <>
@@ -389,6 +395,7 @@ messageVerbosity msg =
389 CouldNotParseCSS{} -> WARNING
395 CouldNotParseCSS{} -> WARNING
390 Fetching{} -> INFO
396 Fetching{} -> INFO
391 Extracting{} -> INFO
397 Extracting{} -> INFO
398+ LoadedResource{} -> INFO
392 NoTitleElement{} -> WARNING
399 NoTitleElement{} -> WARNING
393 NoLangSpecified -> INFO
400 NoLangSpecified -> INFO
394 InvalidLang{} -> WARNING
401 InvalidLang{} -> WARNING
src/Text/Pandoc/Lua/Module/Utils.hs+1−1
@@ -146,7 +146,7 @@ from_simple_table (SimpleTable capt aligns widths head' body) = do
146 nullAttr
146 nullAttr
147 (Caption Nothing [Plain capt])
147 (Caption Nothing [Plain capt])
148 (zipWith (\a w -> (a, toColWidth w)) aligns widths)
148 (zipWith (\a w -> (a, toColWidth w)) aligns widths)
149− (TableHead nullAttr [blockListToRow head'])
149+ (TableHead nullAttr [blockListToRow head' | not (null head') ])
150 [TableBody nullAttr 0 [] $ map blockListToRow body]
150 [TableBody nullAttr 0 [] $ map blockListToRow body]
151 (TableFoot nullAttr [])
151 (TableFoot nullAttr [])
152 return (NumResults 1)
152 return (NumResults 1)
src/Text/Pandoc/MIME.hs+10
@@ -43,6 +43,16 @@ getMimeTypeDef :: FilePath -> MimeType
43getMimeTypeDef = fromMaybe "application/octet-stream" . getMimeType
43getMimeTypeDef = fromMaybe "application/octet-stream" . getMimeType
44
44
45extensionFromMimeType :: MimeType -> Maybe T.Text
45extensionFromMimeType :: MimeType -> Maybe T.Text
46+-- few special cases, where there are multiple options:
47+extensionFromMimeType "text/plain" = Just "txt"
48+extensionFromMimeType "video/quicktime" = Just "mov"
49+extensionFromMimeType "video/mpeg" = Just "mpeg"
50+extensionFromMimeType "video/dv" = Just "dv"
51+extensionFromMimeType "image/vnd.djvu" = Just "djvu"
52+extensionFromMimeType "image/tiff" = Just "tiff"
53+extensionFromMimeType "image/jpeg" = Just "jpg"
54+extensionFromMimeType "application/xml" = Just "xml"
55+extensionFromMimeType "application/ogg" = Just "ogg"
46extensionFromMimeType mimetype =
56extensionFromMimeType mimetype =
47 M.lookup (T.takeWhile (/=';') mimetype) reverseMimeTypes
57 M.lookup (T.takeWhile (/=';') mimetype) reverseMimeTypes
48 -- note: we just look up the basic mime type, dropping the content-encoding etc.
58 -- note: we just look up the basic mime type, dropping the content-encoding etc.
src/Text/Pandoc/MediaBag.hs+20−12
@@ -26,13 +26,14 @@ module Text.Pandoc.MediaBag (
26import qualified Data.ByteString.Lazy as BL
26import qualified Data.ByteString.Lazy as BL
27import Data.Data (Data)
27import Data.Data (Data)
28import qualified Data.Map as M
28import qualified Data.Map as M
29−import Data.Maybe (fromMaybe)
29+import Data.Maybe (fromMaybe, isNothing)
30import Data.Typeable (Typeable)
30import Data.Typeable (Typeable)
31import System.FilePath
31import System.FilePath
32import Text.Pandoc.MIME (MimeType, getMimeTypeDef, extensionFromMimeType)
32import Text.Pandoc.MIME (MimeType, getMimeTypeDef, extensionFromMimeType)
33import Data.Text (Text)
33import Data.Text (Text)
34import qualified Data.Text as T
34import qualified Data.Text as T
35import Data.Digest.Pure.SHA (sha1, showDigest)
35import Data.Digest.Pure.SHA (sha1, showDigest)
36+import Network.URI (URI (..), parseURI)
36
37
37data MediaItem =
38data MediaItem =
38 MediaItem
39 MediaItem
@@ -71,16 +72,25 @@ insertMedia :: FilePath -- ^ relative path and canonical name of resource
71 -> MediaBag
72 -> MediaBag
72 -> MediaBag
73 -> MediaBag
73insertMedia fp mbMime contents (MediaBag mediamap) =
74insertMedia fp mbMime contents (MediaBag mediamap) =
74− MediaBag (M.insert (canonicalize fp) mediaItem mediamap)
75+ MediaBag (M.insert fp' mediaItem mediamap)
75− where mediaItem = MediaItem{ mediaPath = showDigest (sha1 contents) <>
76+ where mediaItem = MediaItem{ mediaPath = newpath
76− "." <> ext
77 , mediaContents = contents
77 , mediaContents = contents
78 , mediaMimeType = mt }
78 , mediaMimeType = mt }
79+ fp' = canonicalize fp
80+ uri = parseURI fp
81+ newpath = if isRelative fp
82+ && isNothing uri
83+ && ".." `notElem` splitPath fp
84+ then T.unpack fp'
85+ else showDigest (sha1 contents) <> "." <> ext
79 fallback = case takeExtension fp of
86 fallback = case takeExtension fp of
80 ".gz" -> getMimeTypeDef $ dropExtension fp
87 ".gz" -> getMimeTypeDef $ dropExtension fp
81 _ -> getMimeTypeDef fp
88 _ -> getMimeTypeDef fp
82 mt = fromMaybe fallback mbMime
89 mt = fromMaybe fallback mbMime
90+ path = maybe fp uriPath uri
91+ ext = case takeExtension path of
92+ '.':e -> e
83− ext = maybe (takeExtension fp) T.unpack $ extensionFromMimeType mt
93+ _ -> maybe "" T.unpack $ extensionFromMimeType mt
84
94
85
95
86-- | Lookup a media item in a 'MediaBag', returning mime type and contents.
96-- | Lookup a media item in a 'MediaBag', returning mime type and contents.
@@ -92,13 +102,11 @@ lookupMedia fp (MediaBag mediamap) = M.lookup (canonicalize fp) mediamap
92-- | Get a list of the file paths stored in a 'MediaBag', with
102-- | Get a list of the file paths stored in a 'MediaBag', with
93-- their corresponding mime types and the lengths in bytes of the contents.
103-- their corresponding mime types and the lengths in bytes of the contents.
94mediaDirectory :: MediaBag -> [(FilePath, MimeType, Int)]
104mediaDirectory :: MediaBag -> [(FilePath, MimeType, Int)]
95−mediaDirectory (MediaBag mediamap) =
105+mediaDirectory mediabag =
96− M.foldrWithKey (\fp item ->
97− ((T.unpack fp, mediaMimeType item,
98− fromIntegral (BL.length (mediaContents item))):)) [] mediamap
106+ map (\(fp, mt, bs) -> (fp, mt, fromIntegral (BL.length bs)))
107+ (mediaItems mediabag)
99
108
100mediaItems :: MediaBag -> [(FilePath, MimeType, BL.ByteString)]
109mediaItems :: MediaBag -> [(FilePath, MimeType, BL.ByteString)]
101mediaItems (MediaBag mediamap) =
110mediaItems (MediaBag mediamap) =
102− M.foldrWithKey (\fp item ->
103− ((T.unpack fp, mediaMimeType item, mediaContents item):))
111+ map (\item -> (mediaPath item, mediaMimeType item, mediaContents item))
104− [] mediamap
112+ (M.elems mediamap)
src/Text/Pandoc/Options.hs+17−17
@@ -315,6 +315,23 @@ defaultMathJaxURL = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.j
315defaultKaTeXURL :: Text
315defaultKaTeXURL :: Text
316defaultKaTeXURL = "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/"
316defaultKaTeXURL = "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/"
317
317
318+-- Update documentation in doc/filters.md if this is changed.
319+$(deriveJSON defaultOptions{ constructorTagModifier =
320+ camelCaseStrToHyphenated
321+ } ''TrackChanges)
322+
323+$(deriveJSON defaultOptions{ constructorTagModifier =
324+ camelCaseStrToHyphenated
325+ } ''WrapOption)
326+
327+$(deriveJSON defaultOptions{ constructorTagModifier =
328+ camelCaseStrToHyphenated . drop 8
329+ } ''TopLevelDivision)
330+
331+$(deriveJSON defaultOptions{ constructorTagModifier =
332+ camelCaseStrToHyphenated
333+ } ''ReferenceLocation)
334+
318-- Update documentation in doc/filters.md if this is changed.
335-- Update documentation in doc/filters.md if this is changed.
319$(deriveJSON defaultOptions ''ReaderOptions)
336$(deriveJSON defaultOptions ''ReaderOptions)
320
337
@@ -338,20 +355,3 @@ $(deriveJSON defaultOptions{ constructorTagModifier =
338 } ''ObfuscationMethod)
355 } ''ObfuscationMethod)
339
356
340$(deriveJSON defaultOptions ''HTMLSlideVariant)
357$(deriveJSON defaultOptions ''HTMLSlideVariant)
341−
342−-- Update documentation in doc/filters.md if this is changed.
343−$(deriveJSON defaultOptions{ constructorTagModifier =
344− camelCaseStrToHyphenated
345− } ''TrackChanges)
346−
347−$(deriveJSON defaultOptions{ constructorTagModifier =
348− camelCaseStrToHyphenated
349− } ''WrapOption)
350−
351−$(deriveJSON defaultOptions{ constructorTagModifier =
352− camelCaseStrToHyphenated . drop 8
353− } ''TopLevelDivision)
354−
355−$(deriveJSON defaultOptions{ constructorTagModifier =
356− camelCaseStrToHyphenated
357− } ''ReferenceLocation)
src/Text/Pandoc/PDF.hs+16−3
@@ -202,7 +202,7 @@ convertImage opts tmpdir fname = do
202 Just "image/svg+xml" -> E.catch (do
202 Just "image/svg+xml" -> E.catch (do
203 (exit, _) <- pipeProcess Nothing "rsvg-convert"
203 (exit, _) <- pipeProcess Nothing "rsvg-convert"
204 ["-f","pdf","-a","--dpi-x",dpi,"--dpi-y",dpi,
204 ["-f","pdf","-a","--dpi-x",dpi,"--dpi-y",dpi,
205− "-o",pdfOut,fname] BL.empty
205+ "-o",pdfOut,svgIn] BL.empty
206 if exit == ExitSuccess
206 if exit == ExitSuccess
207 then return $ Right pdfOut
207 then return $ Right pdfOut
208 else return $ Left "conversion from SVG failed")
208 else return $ Left "conversion from SVG failed")
@@ -217,6 +217,7 @@ convertImage opts tmpdir fname = do
217 where
217 where
218 pngOut = replaceDirectory (replaceExtension fname ".png") tmpdir
218 pngOut = replaceDirectory (replaceExtension fname ".png") tmpdir
219 pdfOut = replaceDirectory (replaceExtension fname ".pdf") tmpdir
219 pdfOut = replaceDirectory (replaceExtension fname ".pdf") tmpdir
220+ svgIn = tmpdir </> fname
220 mime = getMimeType fname
221 mime = getMimeType fname
221 doNothing = return (Right fname)
222 doNothing = return (Right fname)
222
223
@@ -506,8 +507,20 @@ showVerboseInfo mbTmpDir program programArgs env source = do
506 UTF8.hPutStrLn stderr $
507 UTF8.hPutStrLn stderr $
507 T.pack program <> " " <> T.pack (unwords (map show programArgs))
508 T.pack program <> " " <> T.pack (unwords (map show programArgs))
508 UTF8.hPutStr stderr "\n"
509 UTF8.hPutStr stderr "\n"
509− UTF8.hPutStrLn stderr "[makePDF] Environment:"
510+ UTF8.hPutStrLn stderr "[makePDF] Relevant environment variables:"
511+ -- we filter out irrelevant stuff to avoid leaking passwords and keys!
512+ let isRelevant ("PATH",_) = True
513+ isRelevant ("TMPDIR",_) = True
514+ isRelevant ("PWD",_) = True
515+ isRelevant ("LANG",_) = True
516+ isRelevant ("HOME",_) = True
517+ isRelevant ("LUA_PATH",_) = True
518+ isRelevant ("LUA_CPATH",_) = True
519+ isRelevant ("SHELL",_) = True
520+ isRelevant ("TEXINPUTS",_) = True
521+ isRelevant ("TEXMFOUTPUT",_) = True
522+ isRelevant _ = False
510− mapM_ (UTF8.hPutStrLn stderr . tshow) env
523+ mapM_ (UTF8.hPutStrLn stderr . tshow) (filter isRelevant env)
511 UTF8.hPutStr stderr "\n"
524 UTF8.hPutStr stderr "\n"
512 UTF8.hPutStrLn stderr "[makePDF] Source:"
525 UTF8.hPutStrLn stderr "[makePDF] Source:"
513 UTF8.hPutStrLn stderr source
526 UTF8.hPutStrLn stderr source
src/Text/Pandoc/Parsing.hs+4−5
@@ -188,7 +188,7 @@ import Control.Monad.Identity
188import Control.Monad.Reader
188import Control.Monad.Reader
189 ( asks, runReader, MonadReader(ask), Reader, ReaderT(ReaderT) )
189 ( asks, runReader, MonadReader(ask), Reader, ReaderT(ReaderT) )
190import Data.Char (chr, isAlphaNum, isAscii, isAsciiUpper, isAsciiLower,
190import Data.Char (chr, isAlphaNum, isAscii, isAsciiUpper, isAsciiLower,
191− isPunctuation, isSpace, ord, toLower, toUpper)
191+ isSpace, ord, toLower, toUpper)
192import Data.Default ( Default(..) )
192import Data.Default ( Default(..) )
193import Data.Functor (($>))
193import Data.Functor (($>))
194import Data.List (intercalate, transpose)
194import Data.List (intercalate, transpose)
@@ -693,13 +693,12 @@ emailAddress = try $ toResult <$> mailbox <*> (char '@' *> domain)
693 mailbox = intercalate "." <$> (emailWord `sepBy1'` dot)
693 mailbox = intercalate "." <$> (emailWord `sepBy1'` dot)
694 domain = intercalate "." <$> (subdomain `sepBy1'` dot)
694 domain = intercalate "." <$> (subdomain `sepBy1'` dot)
695 dot = char '.'
695 dot = char '.'
696− subdomain = many1 $ alphaNum <|> innerPunct
696+ subdomain = many1 $ alphaNum <|> innerPunct (=='-')
697 -- this excludes some valid email addresses, since an
697 -- this excludes some valid email addresses, since an
698 -- email could contain e.g. '__', but gives better results
698 -- email could contain e.g. '__', but gives better results
699 -- for our purposes, when combined with markdown parsing:
699 -- for our purposes, when combined with markdown parsing:
700− innerPunct = try (satisfy (\c -> isEmailPunct c || c == '@')
700+ innerPunct f = try (satisfy f
701− <* notFollowedBy space
701+ <* notFollowedBy (satisfy (not . isAlphaNum)))
702− <* notFollowedBy (satisfy isPunctuation))
703 -- technically an email address could begin with a symbol,
702 -- technically an email address could begin with a symbol,
704 -- but allowing this creates too many problems.
703 -- but allowing this creates too many problems.
705 -- See e.g. https://github.com/jgm/pandoc/issues/2940
704 -- See e.g. https://github.com/jgm/pandoc/issues/2940
src/Text/Pandoc/Readers/CommonMark.hs+8−6
@@ -30,7 +30,7 @@ import Text.Pandoc.Readers.Metadata (yamlMetaBlock)
30import Control.Monad.Except
30import Control.Monad.Except
31import Data.Functor.Identity (runIdentity)
31import Data.Functor.Identity (runIdentity)
32import Data.Typeable
32import Data.Typeable
33−import Text.Pandoc.Parsing (runParserT, getPosition,
33+import Text.Pandoc.Parsing (runParserT, getInput,
34 runF, defaultParserState, option, many1, anyChar,
34 runF, defaultParserState, option, many1, anyChar,
35 Sources(..), ToSources(..), ParserT, Future,
35 Sources(..), ToSources(..), ParserT, Future,
36 sourceName)
36 sourceName)
@@ -44,14 +44,14 @@ readCommonMark opts s
44 let sources = toSources s
44 let sources = toSources s
45 let toks = concatMap sourceToToks (unSources sources)
45 let toks = concatMap sourceToToks (unSources sources)
46 res <- runParserT (do meta <- yamlMetaBlock (metaValueParser opts)
46 res <- runParserT (do meta <- yamlMetaBlock (metaValueParser opts)
47− pos <- getPosition
47+ rest <- getInput
48− return (meta, pos))
48+ return (meta, rest))
49 defaultParserState "YAML metadata" (toSources s)
49 defaultParserState "YAML metadata" (toSources s)
50 case res of
50 case res of
51 Left _ -> readCommonMarkBody opts sources toks
51 Left _ -> readCommonMarkBody opts sources toks
52− Right (meta, pos) -> do
52+ Right (meta, rest) -> do
53 -- strip off metadata section and parse body
53 -- strip off metadata section and parse body
54− let body = dropWhile (\t -> tokPos t < pos) toks
54+ let body = concatMap sourceToToks (unSources rest)
55 Pandoc _ bs <- readCommonMarkBody opts sources body
55 Pandoc _ bs <- readCommonMarkBody opts sources body
56 return $ Pandoc (runF meta defaultParserState) bs
56 return $ Pandoc (runF meta defaultParserState) bs
57 | otherwise = do
57 | otherwise = do
@@ -112,5 +112,7 @@ specFor opts = foldr ($) defaultSyntaxSpec exts
112 | isEnabled Ext_implicit_header_references opts ] ++
112 | isEnabled Ext_implicit_header_references opts ] ++
113 [ (footnoteSpec <>) | isEnabled Ext_footnotes opts ] ++
113 [ (footnoteSpec <>) | isEnabled Ext_footnotes opts ] ++
114 [ (definitionListSpec <>) | isEnabled Ext_definition_lists opts ] ++
114 [ (definitionListSpec <>) | isEnabled Ext_definition_lists opts ] ++
115− [ (taskListSpec <>) | isEnabled Ext_task_lists opts ]
115+ [ (taskListSpec <>) | isEnabled Ext_task_lists opts ] ++
116+ [ (rebaseRelativePathsSpec <>)
117+ | isEnabled Ext_rebase_relative_paths opts ]
116
118
src/Text/Pandoc/Readers/DocBook.hs+2−1
@@ -134,6 +134,7 @@ List of all DocBook tags, with [x] indicating implemented,
134[ ] corpcredit - A corporation or organization credited in a document
134[ ] corpcredit - A corporation or organization credited in a document
135[ ] corpname - The name of a corporation
135[ ] corpname - The name of a corporation
136[ ] country - The name of a country
136[ ] country - The name of a country
137+[x] danger - An admonition set off from the text indicating hazardous situation
137[ ] database - The name of a database, or part of a database
138[ ] database - The name of a database, or part of a database
138[x] date - The date of publication or revision of a document
139[x] date - The date of publication or revision of a document
139[ ] dedication - A wrapper for the dedication section of a book
140[ ] dedication - A wrapper for the dedication section of a book
@@ -718,7 +719,7 @@ blockTags =
718 ] ++ admonitionTags
719 ] ++ admonitionTags
719
720
720admonitionTags :: [Text]
721admonitionTags :: [Text]
721−admonitionTags = ["important","caution","note","tip","warning"]
722+admonitionTags = ["caution","danger","important","note","tip","warning"]
722
723
723-- Trim leading and trailing newline characters
724-- Trim leading and trailing newline characters
724trimNl :: Text -> Text
725trimNl :: Text -> Text
src/Text/Pandoc/Readers/Docx.hs+58−37
@@ -61,13 +61,14 @@ module Text.Pandoc.Readers.Docx
61import Codec.Archive.Zip
61import Codec.Archive.Zip
62import Control.Monad.Reader
62import Control.Monad.Reader
63import Control.Monad.State.Strict
63import Control.Monad.State.Strict
64+import Data.Bifunctor (bimap, first)
64import qualified Data.ByteString.Lazy as B
65import qualified Data.ByteString.Lazy as B
65import Data.Default (Default)
66import Data.Default (Default)
66−import Data.List (delete, intersect)
67+import Data.List (delete, intersect, foldl')
67import Data.Char (isSpace)
68import Data.Char (isSpace)
68import qualified Data.Map as M
69import qualified Data.Map as M
69import qualified Data.Text as T
70import qualified Data.Text as T
70−import Data.Maybe (isJust, fromMaybe)
71+import Data.Maybe (catMaybes, isJust, fromMaybe)
71import Data.Sequence (ViewL (..), viewl)
72import Data.Sequence (ViewL (..), viewl)
72import qualified Data.Sequence as Seq
73import qualified Data.Sequence as Seq
73import qualified Data.Set as Set
74import qualified Data.Set as Set
@@ -113,6 +114,7 @@ data DState = DState { docxAnchorMap :: M.Map T.Text T.Text
113 -- restarting
114 -- restarting
114 , docxListState :: M.Map (T.Text, T.Text) Integer
115 , docxListState :: M.Map (T.Text, T.Text) Integer
115 , docxPrevPara :: Inlines
116 , docxPrevPara :: Inlines
117+ , docxTableCaptions :: [Blocks]
116 }
118 }
117
119
118instance Default DState where
120instance Default DState where
@@ -123,6 +125,7 @@ instance Default DState where
123 , docxDropCap = mempty
125 , docxDropCap = mempty
124 , docxListState = M.empty
126 , docxListState = M.empty
125 , docxPrevPara = mempty
127 , docxPrevPara = mempty
128+ , docxTableCaptions = []
126 }
129 }
127
130
128data DEnv = DEnv { docxOptions :: ReaderOptions
131data DEnv = DEnv { docxOptions :: ReaderOptions
@@ -491,15 +494,32 @@ singleParaToPlain blks
491 singleton $ Plain ils
494 singleton $ Plain ils
492singleParaToPlain blks = blks
495singleParaToPlain blks = blks
493
496
494−cellToBlocks :: PandocMonad m => Docx.Cell -> DocxContext m Blocks
497+cellToCell :: PandocMonad m => RowSpan -> Docx.Cell -> DocxContext m Pandoc.Cell
495−cellToBlocks (Docx.Cell bps) = do
498+cellToCell rowSpan (Docx.Cell gridSpan _ bps) = do
496 blks <- smushBlocks <$> mapM bodyPartToBlocks bps
499 blks <- smushBlocks <$> mapM bodyPartToBlocks bps
497− return $ fromList $ blocksToDefinitions $ blocksToBullets $ toList blks
500+ let blks' = singleParaToPlain $ fromList $ blocksToDefinitions $ blocksToBullets $ toList blks
501+ return (cell AlignDefault rowSpan (ColSpan (fromIntegral gridSpan)) blks')
502+
503+rowsToRows :: PandocMonad m => [Docx.Row] -> DocxContext m [Pandoc.Row]
504+rowsToRows rows = do
505+ let rowspans = (fmap . fmap) (first RowSpan) (Docx.rowsToRowspans rows)
506+ cells <- traverse (traverse (uncurry cellToCell)) rowspans
507+ return (fmap (Pandoc.Row nullAttr) cells)
508+
509+splitHeaderRows :: Bool -> [Docx.Row] -> ([Docx.Row], [Docx.Row])
510+splitHeaderRows hasFirstRowFormatting rs = bimap reverse reverse $ fst
511+ $ if hasFirstRowFormatting
512+ then foldl' f ((take 1 rs, []), True) (drop 1 rs)
513+ else foldl' f (([], []), False) rs
514+ where
515+ f ((headerRows, bodyRows), previousRowWasHeader) r@(Docx.Row h cs)
516+ | h == HasTblHeader || (previousRowWasHeader && any isContinuationCell cs)
517+ = ((r : headerRows, bodyRows), True)
518+ | otherwise
519+ = ((headerRows, r : bodyRows), False)
520+
521+ isContinuationCell (Docx.Cell _ vm _) = vm == Docx.Continue
498
522
499−rowToBlocksList :: PandocMonad m => Docx.Row -> DocxContext m [Blocks]
500−rowToBlocksList (Docx.Row cells) = do
501− blksList <- mapM cellToBlocks cells
502− return $ map singleParaToPlain blksList
503
523
504-- like trimInlines, but also take out linebreaks
524-- like trimInlines, but also take out linebreaks
505trimSps :: Inlines -> Inlines
525trimSps :: Inlines -> Inlines
@@ -546,6 +566,11 @@ normalizeToClassName = T.map go . fromStyleName
546 where go c | isSpace c = '-'
566 where go c | isSpace c = '-'
547 | otherwise = c
567 | otherwise = c
548
568
569+bodyPartToTableCaption :: PandocMonad m => BodyPart -> DocxContext m (Maybe Blocks)
570+bodyPartToTableCaption (TblCaption pPr parparts) =
571+ Just <$> bodyPartToBlocks (Paragraph pPr parparts)
572+bodyPartToTableCaption _ = pure Nothing
573+
549bodyPartToBlocks :: PandocMonad m => BodyPart -> DocxContext m Blocks
574bodyPartToBlocks :: PandocMonad m => BodyPart -> DocxContext m Blocks
550bodyPartToBlocks (Paragraph pPr parparts)
575bodyPartToBlocks (Paragraph pPr parparts)
551 | Just True <- pBidi pPr = do
576 | Just True <- pBidi pPr = do
@@ -637,49 +662,43 @@ bodyPartToBlocks (ListItem pPr _ _ _ parparts) =
637 let pPr' = pPr {pStyle = constructBogusParStyleData "list-paragraph": pStyle pPr}
662 let pPr' = pPr {pStyle = constructBogusParStyleData "list-paragraph": pStyle pPr}
638 in
663 in
639 bodyPartToBlocks $ Paragraph pPr' parparts
664 bodyPartToBlocks $ Paragraph pPr' parparts
665+bodyPartToBlocks (TblCaption _ _) =
666+ return $ para mempty -- collected separately
640bodyPartToBlocks (Tbl _ _ _ []) =
667bodyPartToBlocks (Tbl _ _ _ []) =
641 return $ para mempty
668 return $ para mempty
642−bodyPartToBlocks (Tbl cap _ look parts@(r:rs)) = do
669+bodyPartToBlocks (Tbl cap grid look parts) = do
643− let cap' = simpleCaption $ plain $ text cap
670+ captions <- gets docxTableCaptions
644− (hdr, rows) = case firstRowFormatting look of
671+ fullCaption <- case captions of
645− True | null rs -> (Nothing, [r])
672+ c : cs -> do
646− | otherwise -> (Just r, rs)
673+ modify (\s -> s { docxTableCaptions = cs })
647− False -> (Nothing, r:rs)
674+ return c
648−
675+ [] -> return $ if T.null cap then mempty else plain (text cap)
649− cells <- mapM rowToBlocksList rows
676+ let shortCaption = if T.null cap then Nothing else Just (toList (text cap))
677+ cap' = caption shortCaption fullCaption
678+ (hdr, rows) = splitHeaderRows (firstRowFormatting look) parts
650
679
651 let width = maybe 0 maximum $ nonEmpty $ map rowLength parts
680 let width = maybe 0 maximum $ nonEmpty $ map rowLength parts
652 rowLength :: Docx.Row -> Int
681 rowLength :: Docx.Row -> Int
653− rowLength (Docx.Row c) = length c
682+ rowLength (Docx.Row _ c) = sum (fmap (\(Docx.Cell gridSpan _ _) -> fromIntegral gridSpan) c)
654
683
655− let toRow = Pandoc.Row nullAttr . map simpleCell
684+ headerCells <- rowsToRows hdr
656− toHeaderRow l = [toRow l | not (null l)]
685+ bodyCells <- rowsToRows rows
657
686
658− -- pad cells. New Text.Pandoc.Builder will do that for us,
687+ -- Horizontal column alignment goes to the default at the moment. Getting
659− -- so this is for compatibility while we switch over.
660− let cells' = map (\row -> toRow $ take width (row ++ repeat mempty)) cells
661−
662− hdrCells <- case hdr of
663− Just r' -> toHeaderRow <$> rowToBlocksList r'
664− Nothing -> return []
665−
666− -- The two following variables (horizontal column alignment and
667− -- relative column widths) go to the default at the
668− -- moment. Width information is in the TblGrid field of the Tbl,
669− -- so should be possible. Alignment might be more difficult,
670− -- since there doesn't seem to be a column entity in docx.
688+ -- it might be difficult, since there doesn't seem to be a column entity
689+ -- in docx.
671 let alignments = replicate width AlignDefault
690 let alignments = replicate width AlignDefault
672− widths = replicate width ColWidthDefault
691+ totalWidth = sum grid
692+ widths = (\w -> ColWidth (fromInteger w / fromInteger totalWidth)) <$> grid
673
693
674 return $ table cap'
694 return $ table cap'
675 (zip alignments widths)
695 (zip alignments widths)
676− (TableHead nullAttr hdrCells)
696+ (TableHead nullAttr headerCells)
677− [TableBody nullAttr 0 [] cells']
697+ [TableBody nullAttr 0 [] bodyCells]
678 (TableFoot nullAttr [])
698 (TableFoot nullAttr [])
679bodyPartToBlocks (OMathPara e) =
699bodyPartToBlocks (OMathPara e) =
680 return $ para $ displayMath (writeTeX e)
700 return $ para $ displayMath (writeTeX e)
681
701
682−
683-- replace targets with generated anchors.
702-- replace targets with generated anchors.
684rewriteLink' :: PandocMonad m => Inline -> DocxContext m Inline
703rewriteLink' :: PandocMonad m => Inline -> DocxContext m Inline
685rewriteLink' l@(Link attr ils (T.uncons -> Just ('#',target), title)) = do
704rewriteLink' l@(Link attr ils (T.uncons -> Just ('#',target), title)) = do
@@ -715,6 +734,8 @@ bodyToOutput :: PandocMonad m => Body -> DocxContext m (Meta, [Block])
715bodyToOutput (Body bps) = do
734bodyToOutput (Body bps) = do
716 let (metabps, blkbps) = sepBodyParts bps
735 let (metabps, blkbps) = sepBodyParts bps
717 meta <- bodyPartsToMeta metabps
736 meta <- bodyPartsToMeta metabps
737+ captions <- catMaybes <$> mapM bodyPartToTableCaption blkbps
738+ modify (\s -> s { docxTableCaptions = captions })
718 blks <- smushBlocks <$> mapM bodyPartToBlocks blkbps
739 blks <- smushBlocks <$> mapM bodyPartToBlocks blkbps
719 blks' <- rewriteLinks $ blocksToDefinitions $ blocksToBullets $ toList blks
740 blks' <- rewriteLinks $ blocksToDefinitions $ blocksToBullets $ toList blks
720 blks'' <- removeOrphanAnchors blks'
741 blks'' <- removeOrphanAnchors blks'
src/Text/Pandoc/Readers/Docx/Combine.hs+3−3
@@ -61,7 +61,7 @@ import Data.List
61import Data.Bifunctor
61import Data.Bifunctor
62import Data.Sequence ( ViewL (..), ViewR (..), viewl, viewr, spanr, spanl
62import Data.Sequence ( ViewL (..), ViewR (..), viewl, viewr, spanr, spanl
63 , (><), (|>) )
63 , (><), (|>) )
64−import Text.Pandoc.Builder
64+import Text.Pandoc.Builder as B
65
65
66data Modifier a = Modifier (a -> a)
66data Modifier a = Modifier (a -> a)
67 | AttrModifier (Attr -> a -> a) Attr
67 | AttrModifier (Attr -> a -> a) Attr
@@ -116,12 +116,12 @@ ilModifierAndInnards ils = case viewl $ unMany ils of
116
116
117inlinesL :: Inlines -> (Inlines, Inlines)
117inlinesL :: Inlines -> (Inlines, Inlines)
118inlinesL ils = case viewl $ unMany ils of
118inlinesL ils = case viewl $ unMany ils of
119− (s :< sq) -> (singleton s, Many sq)
119+ (s :< sq) -> (B.singleton s, Many sq)
120 _ -> (mempty, ils)
120 _ -> (mempty, ils)
121
121
122inlinesR :: Inlines -> (Inlines, Inlines)
122inlinesR :: Inlines -> (Inlines, Inlines)
123inlinesR ils = case viewr $ unMany ils of
123inlinesR ils = case viewr $ unMany ils of
124− (sq :> s) -> (Many sq, singleton s)
124+ (sq :> s) -> (Many sq, B.singleton s)
125 _ -> (ils, mempty)
125 _ -> (ils, mempty)
126
126
127combineInlines :: Inlines -> Inlines -> Inlines
127combineInlines :: Inlines -> Inlines -> Inlines
src/Text/Pandoc/Readers/Docx/Parse.hs+112−19
@@ -33,7 +33,9 @@ module Text.Pandoc.Readers.Docx.Parse ( Docx(..)
33 , ParStyle
33 , ParStyle
34 , CharStyle(cStyleData)
34 , CharStyle(cStyleData)
35 , Row(..)
35 , Row(..)
36+ , TblHeader(..)
36 , Cell(..)
37 , Cell(..)
38+ , VMerge(..)
37 , TrackedChange(..)
39 , TrackedChange(..)
38 , ChangeType(..)
40 , ChangeType(..)
39 , ChangeInfo(..)
41 , ChangeInfo(..)
@@ -50,6 +52,7 @@ module Text.Pandoc.Readers.Docx.Parse ( Docx(..)
50 , pHeading
52 , pHeading
51 , constructBogusParStyleData
53 , constructBogusParStyleData
52 , leftBiasedMergeRunStyle
54 , leftBiasedMergeRunStyle
55+ , rowsToRowspans
53 ) where
56 ) where
54import Text.Pandoc.Readers.Docx.Parse.Styles
57import Text.Pandoc.Readers.Docx.Parse.Styles
55import Codec.Archive.Zip
58import Codec.Archive.Zip
@@ -225,6 +228,7 @@ defaultParagraphStyle = ParagraphStyle { pStyle = []
225data BodyPart = Paragraph ParagraphStyle [ParPart]
228data BodyPart = Paragraph ParagraphStyle [ParPart]
226 | ListItem ParagraphStyle T.Text T.Text (Maybe Level) [ParPart]
229 | ListItem ParagraphStyle T.Text T.Text (Maybe Level) [ParPart]
227 | Tbl T.Text TblGrid TblLook [Row]
230 | Tbl T.Text TblGrid TblLook [Row]
231+ | TblCaption ParagraphStyle [ParPart]
228 | OMathPara [Exp]
232 | OMathPara [Exp]
229 deriving Show
233 deriving Show
230
234
@@ -236,12 +240,61 @@ newtype TblLook = TblLook {firstRowFormatting::Bool}
236defaultTblLook :: TblLook
240defaultTblLook :: TblLook
237defaultTblLook = TblLook{firstRowFormatting = False}
241defaultTblLook = TblLook{firstRowFormatting = False}
238
242
239−newtype Row = Row [Cell]
243+data Row = Row TblHeader [Cell] deriving Show
240− deriving Show
244+
245+data TblHeader = HasTblHeader | NoTblHeader deriving (Show, Eq)
241
246
242−newtype Cell = Cell [BodyPart]
247+data Cell = Cell GridSpan VMerge [BodyPart]
243 deriving Show
248 deriving Show
244
249
250+type GridSpan = Integer
251+
252+data VMerge = Continue
253+ -- ^ This cell should be merged with the one above it
254+ | Restart
255+ -- ^ This cell should not be merged with the one above it
256+ deriving (Show, Eq)
257+
258+rowsToRowspans :: [Row] -> [[(Int, Cell)]]
259+rowsToRowspans rows = let
260+ removeMergedCells = fmap (filter (\(_, Cell _ vmerge _) -> vmerge == Restart))
261+ in removeMergedCells (foldr f [] rows)
262+ where
263+ f :: Row -> [[(Int, Cell)]] -> [[(Int, Cell)]]
264+ f (Row _ cells) acc = let
265+ spans = g cells Nothing (listToMaybe acc)
266+ in spans : acc
267+
268+ g ::
269+ -- | The current row
270+ [Cell] ->
271+ -- | Number of columns left below
272+ Maybe Integer ->
273+ -- | (rowspan so far, cell) for the row below this one
274+ Maybe [(Int, Cell)] ->
275+ -- | (rowspan so far, cell) for this row
276+ [(Int, Cell)]
277+ g cells _ Nothing = zip (repeat 1) cells
278+ g cells columnsLeftBelow (Just rowBelow) =
279+ case cells of
280+ [] -> []
281+ thisCell@(Cell thisGridSpan _ _) : restOfRow -> case rowBelow of
282+ [] -> zip (repeat 1) cells
283+ (spanSoFarBelow, Cell gridSpanBelow vmerge _) : _ ->
284+ let spanSoFar = case vmerge of
285+ Restart -> 1
286+ Continue -> 1 + spanSoFarBelow
287+ columnsToDrop = thisGridSpan + (gridSpanBelow - fromMaybe gridSpanBelow columnsLeftBelow)
288+ (newColumnsLeftBelow, restOfRowBelow) = dropColumns columnsToDrop rowBelow
289+ in (spanSoFar, thisCell) : g restOfRow (Just newColumnsLeftBelow) (Just restOfRowBelow)
290+
291+ dropColumns :: Integer -> [(a, Cell)] -> (Integer, [(a, Cell)])
292+ dropColumns n [] = (n, [])
293+ dropColumns n cells@((_, Cell gridSpan _ _) : otherCells) =
294+ if n < gridSpan
295+ then (gridSpan - n, cells)
296+ else dropColumns (n - gridSpan) otherCells
297+
245leftBiasedMergeRunStyle :: RunStyle -> RunStyle -> RunStyle
298leftBiasedMergeRunStyle :: RunStyle -> RunStyle -> RunStyle
246leftBiasedMergeRunStyle a b = RunStyle
299leftBiasedMergeRunStyle a b = RunStyle
247 { isBold = isBold a <|> isBold b
300 { isBold = isBold a <|> isBold b
@@ -426,20 +479,26 @@ filePathToRelType path docXmlPath =
426 then Just InDocument
479 then Just InDocument
427 else Nothing
480 else Nothing
428
481
429−relElemToRelationship :: DocumentLocation -> Element -> Maybe Relationship
482+relElemToRelationship :: FilePath -> DocumentLocation -> Element
483+ -> Maybe Relationship
430−relElemToRelationship relType element | qName (elName element) == "Relationship" =
484+relElemToRelationship fp relType element | qName (elName element) == "Relationship" =
431 do
485 do
432 relId <- findAttr (QName "Id" Nothing Nothing) element
486 relId <- findAttr (QName "Id" Nothing Nothing) element
433 target <- findAttr (QName "Target" Nothing Nothing) element
487 target <- findAttr (QName "Target" Nothing Nothing) element
488+ -- target may be relative (media/image1.jpeg) or absolute
489+ -- (/word/media/image1.jpeg); we need to relativize it (see #7374)
490+ let frontOfFp = T.pack $ takeWhile (/= '_') fp
491+ let target' = fromMaybe target $
492+ T.stripPrefix frontOfFp $ T.dropWhile (== '/') target
434− return $ Relationship relType relId target
493+ return $ Relationship relType relId target'
435−relElemToRelationship _ _ = Nothing
494+relElemToRelationship _ _ _ = Nothing
436
495
437filePathToRelationships :: Archive -> FilePath -> FilePath -> [Relationship]
496filePathToRelationships :: Archive -> FilePath -> FilePath -> [Relationship]
438filePathToRelationships ar docXmlPath fp
497filePathToRelationships ar docXmlPath fp
439 | Just relType <- filePathToRelType fp docXmlPath
498 | Just relType <- filePathToRelType fp docXmlPath
440 , Just entry <- findEntryByPath fp ar
499 , Just entry <- findEntryByPath fp ar
441 , Just relElems <- parseXMLFromEntry entry =
500 , Just relElems <- parseXMLFromEntry entry =
442− mapMaybe (relElemToRelationship relType) $ elChildren relElems
501+ mapMaybe (relElemToRelationship fp relType) $ elChildren relElems
443filePathToRelationships _ _ _ = []
502filePathToRelationships _ _ _ = []
444
503
445archiveToRelationships :: Archive -> FilePath -> [Relationship]
504archiveToRelationships :: Archive -> FilePath -> [Relationship]
@@ -563,7 +622,7 @@ elemToTblGrid :: NameSpaces -> Element -> D TblGrid
563elemToTblGrid ns element | isElem ns "w" "tblGrid" element =
622elemToTblGrid ns element | isElem ns "w" "tblGrid" element =
564 let cols = findChildrenByName ns "w" "gridCol" element
623 let cols = findChildrenByName ns "w" "gridCol" element
565 in
624 in
566− mapD (\e -> maybeToD (findAttrByName ns "w" "val" e >>= stringToInteger))
625+ mapD (\e -> maybeToD (findAttrByName ns "w" "w" e >>= stringToInteger))
567 cols
626 cols
568elemToTblGrid _ _ = throwError WrongElem
627elemToTblGrid _ _ = throwError WrongElem
569
628
@@ -587,14 +646,31 @@ elemToRow ns element | isElem ns "w" "tr" element =
587 do
646 do
588 let cellElems = findChildrenByName ns "w" "tc" element
647 let cellElems = findChildrenByName ns "w" "tc" element
589 cells <- mapD (elemToCell ns) cellElems
648 cells <- mapD (elemToCell ns) cellElems
649+ let hasTblHeader = maybe NoTblHeader (const HasTblHeader)
650+ (findChildByName ns "w" "trPr" element
651+ >>= findChildByName ns "w" "tblHeader")
590− return $ Row cells
652+ return $ Row hasTblHeader cells
591elemToRow _ _ = throwError WrongElem
653elemToRow _ _ = throwError WrongElem
592
654
593elemToCell :: NameSpaces -> Element -> D Cell
655elemToCell :: NameSpaces -> Element -> D Cell
594elemToCell ns element | isElem ns "w" "tc" element =
656elemToCell ns element | isElem ns "w" "tc" element =
595 do
657 do
658+ let properties = findChildByName ns "w" "tcPr" element
659+ let gridSpan = properties
660+ >>= findChildByName ns "w" "gridSpan"
661+ >>= findAttrByName ns "w" "val"
662+ >>= stringToInteger
663+ let vMerge = case properties >>= findChildByName ns "w" "vMerge" of
664+ Nothing -> Restart
665+ Just e ->
666+ fromMaybe Continue $ do
667+ s <- findAttrByName ns "w" "val" e
668+ case s of
669+ "continue" -> Just Continue
670+ "restart" -> Just Restart
671+ _ -> Nothing
596 cellContents <- mapD (elemToBodyPart ns) (elChildren element)
672 cellContents <- mapD (elemToBodyPart ns) (elChildren element)
597− return $ Cell cellContents
673+ return $ Cell (fromMaybe 1 gridSpan) vMerge cellContents
598elemToCell _ _ = throwError WrongElem
674elemToCell _ _ = throwError WrongElem
599
675
600elemToParIndentation :: NameSpaces -> Element -> Maybe ParIndentation
676elemToParIndentation :: NameSpaces -> Element -> Maybe ParIndentation
@@ -626,10 +702,9 @@ pNumInfo = getParStyleField numInfo . pStyle
626elemToBodyPart :: NameSpaces -> Element -> D BodyPart
702elemToBodyPart :: NameSpaces -> Element -> D BodyPart
627elemToBodyPart ns element
703elemToBodyPart ns element
628 | isElem ns "w" "p" element
704 | isElem ns "w" "p" element
629− , (c:_) <- findChildrenByName ns "m" "oMathPara" element =
705+ , (c:_) <- findChildrenByName ns "m" "oMathPara" element = do
630− do
631− expsLst <- eitherToD $ readOMML $ showElement c
706+ expsLst <- eitherToD $ readOMML $ showElement c
632− return $ OMathPara expsLst
707+ return $ OMathPara expsLst
633elemToBodyPart ns element
708elemToBodyPart ns element
634 | isElem ns "w" "p" element
709 | isElem ns "w" "p" element
635 , Just (numId, lvl) <- getNumInfo ns element = do
710 , Just (numId, lvl) <- getNumInfo ns element = do
@@ -647,13 +722,31 @@ elemToBodyPart ns element
647 Nothing | Just (numId, lvl) <- pNumInfo parstyle -> do
722 Nothing | Just (numId, lvl) <- pNumInfo parstyle -> do
648 levelInfo <- lookupLevel numId lvl <$> asks envNumbering
723 levelInfo <- lookupLevel numId lvl <$> asks envNumbering
649 return $ ListItem parstyle numId lvl levelInfo parparts
724 return $ ListItem parstyle numId lvl levelInfo parparts
725+ _ -> let
726+ hasCaptionStyle = elem "Caption" (pStyleId <$> pStyle parstyle)
727+
728+ hasSimpleTableField = fromMaybe False $ do
729+ fldSimple <- findChildByName ns "w" "fldSimple" element
730+ instr <- findAttrByName ns "w" "instr" fldSimple
731+ pure ("Table" `elem` T.words instr)
732+
733+ hasComplexTableField = fromMaybe False $ do
734+ instrText <- findElementByName ns "w" "instrText" element
735+ pure ("Table" `elem` T.words (strContent instrText))
736+
737+ in if hasCaptionStyle && (hasSimpleTableField || hasComplexTableField)
738+ then return $ TblCaption parstyle parparts
650− _ -> return $ Paragraph parstyle parparts
739+ else return $ Paragraph parstyle parparts
740+
651elemToBodyPart ns element
741elemToBodyPart ns element
652 | isElem ns "w" "tbl" element = do
742 | isElem ns "w" "tbl" element = do
653− let caption' = findChildByName ns "w" "tblPr" element
743+ let tblProperties = findChildByName ns "w" "tblPr" element
744+ caption = fromMaybe "" $ tblProperties
654 >>= findChildByName ns "w" "tblCaption"
745 >>= findChildByName ns "w" "tblCaption"
655 >>= findAttrByName ns "w" "val"
746 >>= findAttrByName ns "w" "val"
656− caption = fromMaybe "" caption'
747+ description = fromMaybe "" $ tblProperties
748+ >>= findChildByName ns "w" "tblDescription"
749+ >>= findAttrByName ns "w" "val"
657 grid' = case findChildByName ns "w" "tblGrid" element of
750 grid' = case findChildByName ns "w" "tblGrid" element of
658 Just g -> elemToTblGrid ns g
751 Just g -> elemToTblGrid ns g
659 Nothing -> return []
752 Nothing -> return []
@@ -666,7 +759,7 @@ elemToBodyPart ns element
666 grid <- grid'
759 grid <- grid'
667 tblLook <- tblLook'
760 tblLook <- tblLook'
668 rows <- mapD (elemToRow ns) (elChildren element)
761 rows <- mapD (elemToRow ns) (elChildren element)
669− return $ Tbl caption grid tblLook rows
762+ return $ Tbl (caption <> description) grid tblLook rows
670elemToBodyPart _ _ = throwError WrongElem
763elemToBodyPart _ _ = throwError WrongElem
671
764
672lookupRelationship :: DocumentLocation -> RelId -> [Relationship] -> Maybe Target
765lookupRelationship :: DocumentLocation -> RelId -> [Relationship] -> Maybe Target
src/Text/Pandoc/Readers/Docx/Util.hs+7
@@ -19,6 +19,7 @@ module Text.Pandoc.Readers.Docx.Util (
19 , elemToNameSpaces
19 , elemToNameSpaces
20 , findChildByName
20 , findChildByName
21 , findChildrenByName
21 , findChildrenByName
22+ , findElementByName
22 , findAttrByName
23 , findAttrByName
23 ) where
24 ) where
24
25
@@ -56,6 +57,12 @@ findChildrenByName ns pref name el =
56 let ns' = ns <> elemToNameSpaces el
57 let ns' = ns <> elemToNameSpaces el
57 in findChildren (elemName ns' pref name) el
58 in findChildren (elemName ns' pref name) el
58
59
60+-- | Like 'findChildrenByName', but searches descendants.
61+findElementByName :: NameSpaces -> Text -> Text -> Element -> Maybe Element
62+findElementByName ns pref name el =
63+ let ns' = ns <> elemToNameSpaces el
64+ in findElement (elemName ns' pref name) el
65+
59findAttrByName :: NameSpaces -> Text -> Text -> Element -> Maybe Text
66findAttrByName :: NameSpaces -> Text -> Text -> Element -> Maybe Text
60findAttrByName ns pref name el =
67findAttrByName ns pref name el =
61 let ns' = ns <> elemToNameSpaces el
68 let ns' = ns <> elemToNameSpaces el
src/Text/Pandoc/Readers/HTML/Table.hs+1−1
@@ -49,7 +49,7 @@ pCol = try $ do
49 return $ case lookup "width" attribs of
49 return $ case lookup "width" attribs of
50 Nothing -> case lookup "style" attribs of
50 Nothing -> case lookup "style" attribs of
51 Just (T.stripPrefix "width:" -> Just xs) | T.any (== '%') xs ->
51 Just (T.stripPrefix "width:" -> Just xs) | T.any (== '%') xs ->
52− maybe (Right ColWidthDefault) (Right . ColWidth)
52+ maybe (Right ColWidthDefault) (Right . ColWidth . (/ 100.0))
53 $ safeRead (T.filter
53 $ safeRead (T.filter
54 (`notElem` (" \t\r\n%'\";" :: [Char])) xs)
54 (`notElem` (" \t\r\n%'\";" :: [Char])) xs)
55 _ -> Right ColWidthDefault
55 _ -> Right ColWidthDefault
src/Text/Pandoc/Readers/Haddock.hs+2−1
@@ -131,7 +131,8 @@ docHToInlines isCode d' =
131 DocIdentifier s -> B.codeWith ("",["haskell","identifier"],[]) $ T.pack s
131 DocIdentifier s -> B.codeWith ("",["haskell","identifier"],[]) $ T.pack s
132 _ -> mempty
132 _ -> mempty
133 DocIdentifierUnchecked s -> B.codeWith ("",["haskell","identifier"],[]) $ T.pack s
133 DocIdentifierUnchecked s -> B.codeWith ("",["haskell","identifier"],[]) $ T.pack s
134− DocModule s -> B.codeWith ("",["haskell","module"],[]) $ T.pack s
134+ DocModule s -> B.codeWith ("",["haskell","module"],[]) $
135+ T.pack (modLinkName s)
135 DocWarning _ -> mempty -- TODO
136 DocWarning _ -> mempty -- TODO
136 DocEmphasis d -> B.emph (docHToInlines isCode d)
137 DocEmphasis d -> B.emph (docHToInlines isCode d)
137 DocMonospaced (DocString s) -> B.code $ T.pack s
138 DocMonospaced (DocString s) -> B.code $ T.pack s
src/Text/Pandoc/Readers/LaTeX.hs+4−2
@@ -24,7 +24,7 @@ module Text.Pandoc.Readers.LaTeX ( readLaTeX,
24import Control.Applicative (many, optional, (<|>))
24import Control.Applicative (many, optional, (<|>))
25import Control.Monad
25import Control.Monad
26import Control.Monad.Except (throwError)
26import Control.Monad.Except (throwError)
27−import Data.Char (isDigit, isLetter, toUpper, chr)
27+import Data.Char (isDigit, isLetter, isAlphaNum, toUpper, chr)
28import Data.Default
28import Data.Default
29import Data.List (intercalate)
29import Data.List (intercalate)
30import qualified Data.Map as M
30import qualified Data.Map as M
@@ -300,7 +300,9 @@ inlineCommand' :: PandocMonad m => LP m Inlines
300inlineCommand' = try $ do
300inlineCommand' = try $ do
301 Tok _ (CtrlSeq name) cmd <- anyControlSeq
301 Tok _ (CtrlSeq name) cmd <- anyControlSeq
302 guard $ name /= "begin" && name /= "end" && name /= "and"
302 guard $ name /= "begin" && name /= "end" && name /= "and"
303+ star <- if T.all isAlphaNum name
303− star <- option "" ("*" <$ symbol '*' <* sp)
304+ then option "" ("*" <$ symbol '*' <* sp)
305+ else pure ""
304 overlay <- option "" overlaySpecification
306 overlay <- option "" overlaySpecification
305 let name' = name <> star <> overlay
307 let name' = name <> star <> overlay
306 let names = ordNub [name', name] -- check non-starred as fallback
308 let names = ordNub [name', name] -- check non-starred as fallback
src/Text/Pandoc/Readers/LaTeX/Macro.hs+45−14
@@ -14,6 +14,7 @@ import Text.Pandoc.Parsing hiding (blankline, mathDisplay, mathInline,
14import Control.Applicative ((<|>), optional)
14import Control.Applicative ((<|>), optional)
15import qualified Data.Map as M
15import qualified Data.Map as M
16import Data.Text (Text)
16import Data.Text (Text)
17+import qualified Data.Text as T
17
18
18macroDef :: (PandocMonad m, Monoid a) => (Text -> a) -> LP m a
19macroDef :: (PandocMonad m, Monoid a) => (Text -> a) -> LP m a
19macroDef constructor = do
20macroDef constructor = do
@@ -22,9 +23,11 @@ macroDef constructor = do
22 guardDisabled Ext_latex_macros)
23 guardDisabled Ext_latex_macros)
23 <|> return mempty
24 <|> return mempty
24 where commandDef = do
25 where commandDef = do
25− (name, macro') <- newcommand <|> letmacro <|> defmacro
26+ nameMacroPairs <- newcommand <|> letmacro <|> defmacro <|> newif
26 guardDisabled Ext_latex_macros <|>
27 guardDisabled Ext_latex_macros <|>
28+ mapM_ (\(name, macro') ->
27− updateState (\s -> s{ sMacros = M.insert name macro' (sMacros s) })
29+ updateState (\s -> s{ sMacros = M.insert name macro'
30+ (sMacros s) })) nameMacroPairs
28 environmentDef = do
31 environmentDef = do
29 mbenv <- newenvironment
32 mbenv <- newenvironment
30 case mbenv of
33 case mbenv of
@@ -40,7 +43,7 @@ macroDef constructor = do
40 -- @\newcommand{\envname}[n-args][default]{begin}@
43 -- @\newcommand{\envname}[n-args][default]{begin}@
41 -- @\newcommand{\endenvname}@
44 -- @\newcommand{\endenvname}@
42
45
43−letmacro :: PandocMonad m => LP m (Text, Macro)
46+letmacro :: PandocMonad m => LP m [(Text, Macro)]
44letmacro = do
47letmacro = do
45 controlSeq "let"
48 controlSeq "let"
46 (name, contents) <- withVerbatimMode $ do
49 (name, contents) <- withVerbatimMode $ do
@@ -53,18 +56,47 @@ letmacro = do
53 contents <- bracedOrToken
56 contents <- bracedOrToken
54 return (name, contents)
57 return (name, contents)
55 contents' <- doMacros' 0 contents
58 contents' <- doMacros' 0 contents
56− return (name, Macro ExpandWhenDefined [] Nothing contents')
59+ return [(name, Macro ExpandWhenDefined [] Nothing contents')]
57
60
58−defmacro :: PandocMonad m => LP m (Text, Macro)
61+defmacro :: PandocMonad m => LP m [(Text, Macro)]
59−defmacro = try $
62+defmacro = do
60 -- we use withVerbatimMode, because macros are to be expanded
63 -- we use withVerbatimMode, because macros are to be expanded
61 -- at point of use, not point of definition
64 -- at point of use, not point of definition
65+ controlSeq "def"
62 withVerbatimMode $ do
66 withVerbatimMode $ do
63− controlSeq "def"
64 Tok _ (CtrlSeq name) _ <- anyControlSeq
67 Tok _ (CtrlSeq name) _ <- anyControlSeq
65 argspecs <- many (argspecArg <|> argspecPattern)
68 argspecs <- many (argspecArg <|> argspecPattern)
66 contents <- bracedOrToken
69 contents <- bracedOrToken
67− return (name, Macro ExpandWhenUsed argspecs Nothing contents)
70+ return [(name, Macro ExpandWhenUsed argspecs Nothing contents)]
71+
72+-- \newif\iffoo' defines:
73+-- \iffoo to be \iffalse
74+-- \footrue to be a command that defines \iffoo to be \iftrue
75+-- \foofalse to be a command that defines \iffoo to be \iffalse
76+newif :: PandocMonad m => LP m [(Text, Macro)]
77+newif = do
78+ controlSeq "newif"
79+ withVerbatimMode $ do
80+ Tok pos (CtrlSeq name) _ <- anyControlSeq
81+ -- \def\iffoo\iffalse
82+ -- \def\footrue{\def\iffoo\iftrue}
83+ -- \def\foofalse{\def\iffoo\iffalse}
84+ let base = T.drop 2 name
85+ return [ (name, Macro ExpandWhenUsed [] Nothing
86+ [Tok pos (CtrlSeq "iffalse") "\\iffalse"])
87+ , (base <> "true",
88+ Macro ExpandWhenUsed [] Nothing
89+ [ Tok pos (CtrlSeq "def") "\\def"
90+ , Tok pos (CtrlSeq name) ("\\" <> name)
91+ , Tok pos (CtrlSeq "iftrue") "\\iftrue"
92+ ])
93+ , (base <> "false",
94+ Macro ExpandWhenUsed [] Nothing
95+ [ Tok pos (CtrlSeq "def") "\\def"
96+ , Tok pos (CtrlSeq name) ("\\" <> name)
97+ , Tok pos (CtrlSeq "iffalse") "\\iffalse"
98+ ])
99+ ]
68
100
69argspecArg :: PandocMonad m => LP m ArgSpec
101argspecArg :: PandocMonad m => LP m ArgSpec
70argspecArg = do
102argspecArg = do
@@ -77,10 +109,9 @@ argspecPattern =
77 (toktype' == Symbol || toktype' == Word) &&
109 (toktype' == Symbol || toktype' == Word) &&
78 (txt /= "{" && txt /= "\\" && txt /= "}")))
110 (txt /= "{" && txt /= "\\" && txt /= "}")))
79
111
80−newcommand :: PandocMonad m => LP m (Text, Macro)
112+newcommand :: PandocMonad m => LP m [(Text, Macro)]
81newcommand = do
113newcommand = do
82− pos <- getPosition
83− Tok _ (CtrlSeq mtype) _ <- controlSeq "newcommand" <|>
114+ Tok pos (CtrlSeq mtype) _ <- controlSeq "newcommand" <|>
84 controlSeq "renewcommand" <|>
115 controlSeq "renewcommand" <|>
85 controlSeq "providecommand" <|>
116 controlSeq "providecommand" <|>
86 controlSeq "DeclareMathOperator" <|>
117 controlSeq "DeclareMathOperator" <|>
@@ -112,9 +143,9 @@ newcommand = do
112 Just macro
143 Just macro
113 | mtype == "newcommand" -> do
144 | mtype == "newcommand" -> do
114 report $ MacroAlreadyDefined txt pos
145 report $ MacroAlreadyDefined txt pos
115− return (name, macro)
146+ return [(name, macro)]
116− | mtype == "providecommand" -> return (name, macro)
147+ | mtype == "providecommand" -> return [(name, macro)]
117− _ -> return (name, Macro ExpandWhenUsed argspecs optarg contents)
148+ _ -> return [(name, Macro ExpandWhenUsed argspecs optarg contents)]
118
149
119newenvironment :: PandocMonad m => LP m (Maybe (Text, Macro, Macro))
150newenvironment :: PandocMonad m => LP m (Maybe (Text, Macro, Macro))
120newenvironment = do
151newenvironment = do
src/Text/Pandoc/Readers/LaTeX/Parsing.hs+18−1
@@ -113,7 +113,6 @@ import Text.Pandoc.Readers.LaTeX.Types (ExpansionPoint (..), Macro (..),
113 ArgSpec (..), Tok (..), TokType (..))
113 ArgSpec (..), Tok (..), TokType (..))
114import Text.Pandoc.Shared
114import Text.Pandoc.Shared
115import Text.Parsec.Pos
115import Text.Parsec.Pos
116−-- import Debug.Trace
117
116
118newtype DottedNum = DottedNum [Int]
117newtype DottedNum = DottedNum [Int]
119 deriving (Show, Eq)
118 deriving (Show, Eq)
@@ -563,8 +562,26 @@ trySpecialMacro "xspace" ts = do
563 Tok pos Word t : _
562 Tok pos Word t : _
564 | startsWithAlphaNum t -> return $ Tok pos Spaces " " : ts'
563 | startsWithAlphaNum t -> return $ Tok pos Spaces " " : ts'
565 _ -> return ts'
564 _ -> return ts'
565+trySpecialMacro "iftrue" ts = handleIf True ts
566+trySpecialMacro "iffalse" ts = handleIf False ts
566trySpecialMacro _ _ = mzero
567trySpecialMacro _ _ = mzero
567
568
569+handleIf :: PandocMonad m => Bool -> [Tok] -> LP m [Tok]
570+handleIf b ts = do
571+ res' <- lift $ runParserT (ifParser b) defaultLaTeXState "tokens" ts
572+ case res' of
573+ Left _ -> Prelude.fail "Could not parse conditional"
574+ Right ts' -> return ts'
575+
576+ifParser :: PandocMonad m => Bool -> LP m [Tok]
577+ifParser b = do
578+ ifToks <- many (notFollowedBy (controlSeq "else" <|> controlSeq "fi")
579+ *> anyTok)
580+ elseToks <- (controlSeq "else" >> manyTill anyTok (controlSeq "fi"))
581+ <|> ([] <$ controlSeq "fi")
582+ rest <- getInput
583+ return $ (if b then ifToks else elseToks) ++ rest
584+
568startsWithAlphaNum :: Text -> Bool
585startsWithAlphaNum :: Text -> Bool
569startsWithAlphaNum t =
586startsWithAlphaNum t =
570 case T.uncons t of
587 case T.uncons t of
src/Text/Pandoc/Readers/Markdown.hs+35−9
@@ -29,7 +29,9 @@ import qualified Data.Set as Set
29import Data.Text (Text)
29import Data.Text (Text)
30import qualified Data.Text as T
30import qualified Data.Text as T
31import qualified Data.ByteString.Lazy as BL
31import qualified Data.ByteString.Lazy as BL
32−import System.FilePath (addExtension, takeExtension)
32+import System.FilePath (addExtension, takeExtension, takeDirectory)
33+import qualified System.FilePath.Windows as Windows
34+import qualified System.FilePath.Posix as Posix
33import Text.HTML.TagSoup hiding (Row)
35import Text.HTML.TagSoup hiding (Row)
34import Text.Pandoc.Builder (Blocks, Inlines)
36import Text.Pandoc.Builder (Blocks, Inlines)
35import qualified Text.Pandoc.Builder as B
37import qualified Text.Pandoc.Builder as B
@@ -336,7 +338,9 @@ referenceKey = try $ do
336 notFollowedBy' (() <$ reference)
338 notFollowedBy' (() <$ reference)
337 many1Char $ notFollowedBy space >> litChar
339 many1Char $ notFollowedBy space >> litChar
338 let betweenAngles = try $ char '<' >> manyTillChar litChar (char '>')
340 let betweenAngles = try $ char '<' >> manyTillChar litChar (char '>')
341+ rebase <- option False (True <$ guardEnabled Ext_rebase_relative_paths)
342+ src <- (if rebase then rebasePath pos else id) <$>
339− src <- try betweenAngles <|> sourceURL
343+ (try betweenAngles <|> sourceURL)
340 tit <- option "" referenceTitle
344 tit <- option "" referenceTitle
341 attr <- option nullAttr $ try $
345 attr <- option nullAttr $ try $
342 do guardEnabled Ext_link_attributes
346 do guardEnabled Ext_link_attributes
@@ -1836,9 +1840,12 @@ regLink :: PandocMonad m
1836 -> MarkdownParser m (F Inlines)
1840 -> MarkdownParser m (F Inlines)
1837regLink constructor lab = try $ do
1841regLink constructor lab = try $ do
1838 (src, tit) <- source
1842 (src, tit) <- source
1843+ rebase <- option False (True <$ guardEnabled Ext_rebase_relative_paths)
1844+ pos <- getPosition
1845+ let src' = if rebase then rebasePath pos src else src
1839 attr <- option nullAttr $
1846 attr <- option nullAttr $
1840 guardEnabled Ext_link_attributes >> attributes
1847 guardEnabled Ext_link_attributes >> attributes
1841− return $ constructor attr src tit <$> lab
1848+ return $ constructor attr src' tit <$> lab
1842
1849
1843-- a link like [this][ref] or [this][] or [this]
1850-- a link like [this][ref] or [this][] or [this]
1844referenceLink :: PandocMonad m
1851referenceLink :: PandocMonad m
@@ -1878,7 +1885,8 @@ referenceLink constructor (lab, raw) = do
1878 Just ((src, tit), _) -> constructor nullAttr src tit <$> lab
1885 Just ((src, tit), _) -> constructor nullAttr src tit <$> lab
1879 Nothing -> makeFallback
1886 Nothing -> makeFallback
1880 else makeFallback
1887 else makeFallback
1888+ Just ((src,tit), attr) ->
1881− Just ((src,tit), attr) -> constructor attr src tit <$> lab
1889+ constructor attr src tit <$> lab
1882
1890
1883dropBrackets :: Text -> Text
1891dropBrackets :: Text -> Text
1884dropBrackets = dropRB . dropLB
1892dropBrackets = dropRB . dropLB
@@ -1911,15 +1919,33 @@ autoLink = try $ do
1911 return $ return $ B.linkWith attr (src <> escapeURI extra) ""
1919 return $ return $ B.linkWith attr (src <> escapeURI extra) ""
1912 (B.str $ orig <> extra)
1920 (B.str $ orig <> extra)
1913
1921
1922+-- | Rebase a relative path, by adding the (relative) directory
1923+-- of the containing source position. Absolute links and URLs
1924+-- are untouched.
1925+rebasePath :: SourcePos -> Text -> Text
1926+rebasePath pos path = do
1927+ let fp = sourceName pos
1928+ isFragment = T.take 1 path == "#"
1929+ path' = T.unpack path
1930+ isAbsolutePath = Posix.isAbsolute path' || Windows.isAbsolute path'
1931+ in if T.null path || isFragment || isAbsolutePath || isURI path
1932+ then path
1933+ else
1934+ case takeDirectory fp of
1935+ "" -> path
1936+ "." -> path
1937+ d -> T.pack d <> "/" <> path
1938+
1914image :: PandocMonad m => MarkdownParser m (F Inlines)
1939image :: PandocMonad m => MarkdownParser m (F Inlines)
1915image = try $ do
1940image = try $ do
1916 char '!'
1941 char '!'
1917 (lab,raw) <- reference
1942 (lab,raw) <- reference
1918 defaultExt <- getOption readerDefaultImageExtension
1943 defaultExt <- getOption readerDefaultImageExtension
1944+ let constructor attr' src =
1919− let constructor attr' src = case takeExtension (T.unpack src) of
1945+ case takeExtension (T.unpack src) of
1920− "" -> B.imageWith attr' (T.pack $ addExtension (T.unpack src)
1946+ "" -> B.imageWith attr' (T.pack $ addExtension (T.unpack src)
1921− $ T.unpack defaultExt)
1947+ $ T.unpack defaultExt)
1922− _ -> B.imageWith attr' src
1948+ _ -> B.imageWith attr' src
1923 regLink constructor lab <|> referenceLink constructor (lab,raw)
1949 regLink constructor lab <|> referenceLink constructor (lab,raw)
1924
1950
1925note :: PandocMonad m => MarkdownParser m (F Inlines)
1951note :: PandocMonad m => MarkdownParser m (F Inlines)
@@ -2228,4 +2254,4 @@ toRow :: [Blocks] -> Row
2228toRow = Row nullAttr . map B.simpleCell
2254toRow = Row nullAttr . map B.simpleCell
2229
2255
2230toHeaderRow :: [Blocks] -> [Row]
2256toHeaderRow :: [Blocks] -> [Row]
2231−toHeaderRow l = [toRow l | not (null l)]
2257+toHeaderRow l = [toRow l | not (null l) && not (all null l)]
src/Text/Pandoc/Readers/Metadata.hs+3
@@ -45,6 +45,9 @@ yamlBsToMeta pMetaValue bstr = do
45 Right [] -> return . return $ mempty
45 Right [] -> return . return $ mempty
46 Right [YAML.Doc (YAML.Scalar _ YAML.SNull)]
46 Right [YAML.Doc (YAML.Scalar _ YAML.SNull)]
47 -> return . return $ mempty
47 -> return . return $ mempty
48+ -- the following is what we get from a comment:
49+ Right [YAML.Doc (YAML.Scalar _ (YAML.SUnknown _ ""))]
50+ -> return . return $ mempty
48 Right _ -> Prelude.fail "expected YAML object"
51 Right _ -> Prelude.fail "expected YAML object"
49 Left (yamlpos, err')
52 Left (yamlpos, err')
50 -> do pos <- getPosition
53 -> do pos <- getPosition
src/Text/Pandoc/Readers/Odt/ContentReader.hs+5−6
@@ -1,4 +1,5 @@
1{-# LANGUAGE Arrows #-}
1{-# LANGUAGE Arrows #-}
2+{-# LANGUAGE CPP #-}
2{-# LANGUAGE DeriveFoldable #-}
3{-# LANGUAGE DeriveFoldable #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4{-# LANGUAGE PatternGuards #-}
5{-# LANGUAGE PatternGuards #-}
@@ -33,7 +34,7 @@ import Data.List (find)
33import qualified Data.Map as M
34import qualified Data.Map as M
34import qualified Data.Text as T
35import qualified Data.Text as T
35import Data.Maybe
36import Data.Maybe
36−import Data.Semigroup (First(..), Option(..))
37+import Data.Monoid (Alt (..))
37
38
38import Text.TeXMath (readMathML, writeTeX)
39import Text.TeXMath (readMathML, writeTeX)
39import qualified Text.Pandoc.XML.Light as XML
40import qualified Text.Pandoc.XML.Light as XML
@@ -505,13 +506,11 @@ type InlineMatcher = ElementMatcher Inlines
505
506
506type BlockMatcher = ElementMatcher Blocks
507type BlockMatcher = ElementMatcher Blocks
507
508
508−
509−newtype FirstMatch a = FirstMatch (Option (First a))
509+newtype FirstMatch a = FirstMatch (Alt Maybe a)
510− deriving (Foldable, Monoid, Semigroup)
510+ deriving (Foldable, Monoid, Semigroup)
511
511
512firstMatch :: a -> FirstMatch a
512firstMatch :: a -> FirstMatch a
513−firstMatch = FirstMatch . Option . Just . First
513+firstMatch = FirstMatch . Alt . Just
514−
515
514
516--
515--
517matchingElement :: (Monoid e)
516matchingElement :: (Monoid e)
src/Text/Pandoc/Readers/Txt2Tags.hs+21−1
@@ -478,9 +478,29 @@ macro = try $ do
478-- raw URLs in text are automatically linked
478-- raw URLs in text are automatically linked
479url :: T2T Inlines
479url :: T2T Inlines
480url = try $ do
480url = try $ do
481− (rawUrl, escapedUrl) <- try uri <|> emailAddress
481+ (rawUrl, escapedUrl) <- try uri <|> emailAddress'
482 return $ B.link rawUrl "" (B.str escapedUrl)
482 return $ B.link rawUrl "" (B.str escapedUrl)
483
483
484+emailAddress' :: T2T (Text, Text)
485+emailAddress' = do
486+ (base, mailURI) <- emailAddress
487+ query <- option "" emailQuery
488+ return (base <> query, mailURI <> query)
489+
490+emailQuery :: T2T Text
491+emailQuery = do
492+ char '?'
493+ parts <- kv `sepBy1` (char '&')
494+ return $ "?" <> T.intercalate "&" parts
495+
496+kv :: T2T Text
497+kv = do
498+ k <- T.pack <$> many1 alphaNum
499+ char '='
500+ let vchar = alphaNum <|> try (oneOf "%._/~:,=$@&+-;*" <* lookAhead alphaNum)
501+ v <- T.pack <$> many1 vchar
502+ return (k <> "=" <> v)
503+
484uri :: T2T (Text, Text)
504uri :: T2T (Text, Text)
485uri = try $ do
505uri = try $ do
486 address <- t2tURI
506 address <- t2tURI
src/Text/Pandoc/Writers/Docbook.hs+1−2
@@ -198,8 +198,7 @@ blockToDocbook opts (Div (id',"section":_,_) (Header lvl (_,_,attrs) ils : xs))
198blockToDocbook opts (Div (ident,classes,_) bs) = do
198blockToDocbook opts (Div (ident,classes,_) bs) = do
199 version <- ask
199 version <- ask
200 let identAttribs = [(idName version, ident) | not (T.null ident)]
200 let identAttribs = [(idName version, ident) | not (T.null ident)]
201− admonitions = ["attention","caution","danger","error","hint",
202− "important","note","tip","warning"]
201+ admonitions = ["caution","danger","important","note","tip","warning"]
203 case classes of
202 case classes of
204 (l:_) | l `elem` admonitions -> do
203 (l:_) | l `elem` admonitions -> do
205 let (mTitleBs, bodyBs) =
204 let (mTitleBs, bodyBs) =
src/Text/Pandoc/Writers/Docx.hs+19−3
@@ -36,7 +36,8 @@ import Data.Time.Clock.POSIX
36import Data.Digest.Pure.SHA (sha1, showDigest)
36import Data.Digest.Pure.SHA (sha1, showDigest)
37import Skylighting
37import Skylighting
38import Text.Collate.Lang (renderLang)
38import Text.Collate.Lang (renderLang)
39−import Text.Pandoc.Class.PandocMonad (PandocMonad, report, toLang)
39+import Text.Pandoc.Class.PandocMonad (PandocMonad, report, toLang, translateTerm)
40+import qualified Text.Pandoc.Translations as Term
40import qualified Text.Pandoc.Class.PandocMonad as P
41import qualified Text.Pandoc.Class.PandocMonad as P
41import Data.Time
42import Data.Time
42import Text.Pandoc.UTF8 (fromTextLazy)
43import Text.Pandoc.UTF8 (fromTextLazy)
@@ -854,14 +855,28 @@ blockToOpenXML' opts (Plain lst) = do
854-- title beginning with fig: indicates that the image is a figure
855-- title beginning with fig: indicates that the image is a figure
855blockToOpenXML' opts (Para [Image attr alt (src,T.stripPrefix "fig:" -> Just tit)]) = do
856blockToOpenXML' opts (Para [Image attr alt (src,T.stripPrefix "fig:" -> Just tit)]) = do
856 setFirstPara
857 setFirstPara
858+ fignum <- gets stNextFigureNum
859+ unless (null alt) $ modify $ \st -> st{ stNextFigureNum = fignum + 1 }
860+ let figid = "fig" <> tshow fignum
861+ figname <- translateTerm Term.Figure
857 prop <- pStyleM $
862 prop <- pStyleM $
858 if null alt
863 if null alt
859 then "Figure"
864 then "Figure"
860 else "Captioned Figure"
865 else "Captioned Figure"
861 paraProps <- local (\env -> env { envParaProperties = EnvProps (Just prop) [] <> envParaProperties env }) (getParaProps False)
866 paraProps <- local (\env -> env { envParaProperties = EnvProps (Just prop) [] <> envParaProperties env }) (getParaProps False)
862 contents <- inlinesToOpenXML opts [Image attr alt (src,tit)]
867 contents <- inlinesToOpenXML opts [Image attr alt (src,tit)]
868+ captionNode <- if null alt
869+ then return []
863− captionNode <- withParaPropM (pStyleM "Image Caption")
870+ else withParaPropM (pStyleM "Image Caption")
864− $ blockToOpenXML opts (Para alt)
871+ $ blockToOpenXML opts
872+ (Para $ Span (figid,[],[])
873+ [Str (figname <> "\160"),
874+ RawInline (Format "openxml")
875+ ("<w:fldSimple w:instr=\"SEQ Figure"
876+ <> " \\* ARABIC \"><w:r><w:t>"
877+ <> tshow fignum
878+ <> "</w:t></w:r></w:fldSimple>"),
879+ Str ":", Space] : alt)
865 return $
880 return $
866 Elem (mknode "w:p" [] (map Elem paraProps ++ contents))
881 Elem (mknode "w:p" [] (map Elem paraProps ++ contents))
867 : captionNode
882 : captionNode
@@ -1289,6 +1304,7 @@ inlineToOpenXML' opts (Image attr@(imgident, _, _) alt (src, title)) = do
1289 Just Eps -> ".eps"
1304 Just Eps -> ".eps"
1290 Just Svg -> ".svg"
1305 Just Svg -> ".svg"
1291 Just Emf -> ".emf"
1306 Just Emf -> ".emf"
1307+ Just Tiff -> ".tiff"
1292 Nothing -> ""
1308 Nothing -> ""
1293 imgpath = "media/" <> ident <> imgext
1309 imgpath = "media/" <> ident <> imgext
1294 mbMimeType = mt <|> getMimeType (T.unpack imgpath)
1310 mbMimeType = mt <|> getMimeType (T.unpack imgpath)
src/Text/Pandoc/Writers/Docx/Table.hs+33−6
@@ -17,7 +17,7 @@ import Control.Monad.State.Strict
17import Data.Array
17import Data.Array
18import Data.Text (Text)
18import Data.Text (Text)
19import Text.Pandoc.Definition
19import Text.Pandoc.Definition
20−import Text.Pandoc.Class.PandocMonad (PandocMonad)
20+import Text.Pandoc.Class.PandocMonad (PandocMonad, translateTerm)
21import Text.Pandoc.Writers.Docx.Types
21import Text.Pandoc.Writers.Docx.Types
22import Text.Pandoc.Shared
22import Text.Pandoc.Shared
23import Text.Printf (printf)
23import Text.Printf (printf)
@@ -25,6 +25,7 @@ import Text.Pandoc.Writers.GridTable hiding (Table)
25import Text.Pandoc.Writers.OOXML
25import Text.Pandoc.Writers.OOXML
26import Text.Pandoc.XML.Light as XML hiding (Attr)
26import Text.Pandoc.XML.Light as XML hiding (Attr)
27import qualified Data.Text as T
27import qualified Data.Text as T
28+import qualified Text.Pandoc.Translations as Term
28import qualified Text.Pandoc.Writers.GridTable as Grid
29import qualified Text.Pandoc.Writers.GridTable as Grid
29
30
30tableToOpenXML :: PandocMonad m
31tableToOpenXML :: PandocMonad m
@@ -33,16 +34,26 @@ tableToOpenXML :: PandocMonad m
33 -> WS m [Content]
34 -> WS m [Content]
34tableToOpenXML blocksToOpenXML gridTable = do
35tableToOpenXML blocksToOpenXML gridTable = do
35 setFirstPara
36 setFirstPara
36− modify $ \s -> s { stInTable = True }
37− let (Grid.Table _attr caption colspecs _rowheads thead tbodies tfoot) =
37+ let (Grid.Table (ident,_,_) caption colspecs _rowheads thead tbodies tfoot) =
38 gridTable
38 gridTable
39 let (Caption _maybeShortCaption captionBlocks) = caption
39 let (Caption _maybeShortCaption captionBlocks) = caption
40+ tablenum <- gets stNextTableNum
41+ unless (null captionBlocks) $
42+ modify $ \st -> st{ stNextTableNum = tablenum + 1 }
43+ let tableid = if T.null ident
44+ then "table" <> tshow tablenum
45+ else ident
46+ tablename <- translateTerm Term.Table
40 let captionStr = stringify captionBlocks
47 let captionStr = stringify captionBlocks
41 let aligns = map fst $ elems colspecs
48 let aligns = map fst $ elems colspecs
42 captionXml <- if null captionBlocks
49 captionXml <- if null captionBlocks
43 then return []
50 then return []
44 else withParaPropM (pStyleM "Table Caption")
51 else withParaPropM (pStyleM "Table Caption")
45− $ blocksToOpenXML captionBlocks
52+ $ blocksToOpenXML
53+ $ addLabel tableid tablename tablenum captionBlocks
54+ -- We set "in table" after processing the caption, because we don't
55+ -- want the "Table Caption" style to be overwritten with "Compact".
56+ modify $ \s -> s { stInTable = True }
46 head' <- cellGridToOpenXML blocksToOpenXML HeadRow aligns thead
57 head' <- cellGridToOpenXML blocksToOpenXML HeadRow aligns thead
47 bodies <- mapM (cellGridToOpenXML blocksToOpenXML BodyRow aligns) tbodies
58 bodies <- mapM (cellGridToOpenXML blocksToOpenXML BodyRow aligns) tbodies
48 foot' <- cellGridToOpenXML blocksToOpenXML FootRow aligns tfoot
59 foot' <- cellGridToOpenXML blocksToOpenXML FootRow aligns tfoot
@@ -79,6 +90,22 @@ tableToOpenXML blocksToOpenXML gridTable = do
79 modify $ \s -> s { stInTable = False }
90 modify $ \s -> s { stInTable = False }
80 return $ captionXml ++ [Elem tbl]
91 return $ captionXml ++ [Elem tbl]
81
92
93+addLabel :: Text -> Text -> Int -> [Block] -> [Block]
94+addLabel tableid tablename tablenum bs =
95+ case bs of
96+ (Para ils : rest) -> Para (label : Space : ils) : rest
97+ (Plain ils : rest) -> Plain (label : Space : ils) : rest
98+ _ -> Para [label] : bs
99+ where
100+ label = Span (tableid,[],[])
101+ [Str (tablename <> "\160"),
102+ RawInline (Format "openxml")
103+ ("<w:fldSimple w:instr=\"SEQ Table"
104+ <> " \\* ARABIC \"><w:r><w:t>"
105+ <> tshow tablenum
106+ <> "</w:t></w:r></w:fldSimple>"),
107+ Str ":"]
108+
82-- | Parts of a table
109-- | Parts of a table
83data RowType = HeadRow | BodyRow | FootRow
110data RowType = HeadRow | BodyRow | FootRow
84
111
@@ -114,8 +141,8 @@ cellGridToOpenXML :: PandocMonad m
114 -> [Alignment]
141 -> [Alignment]
115 -> Part
142 -> Part
116 -> WS m [Element]
143 -> WS m [Element]
117−cellGridToOpenXML blocksToOpenXML rowType aligns part@(Part _ _ rowAttrs) =
144+cellGridToOpenXML blocksToOpenXML rowType aligns part@(Part _ cellArray _) =
118− if null (indices rowAttrs)
145+ if null (elems cellArray)
119 then return mempty
146 then return mempty
120 else mapM (rowToOpenXML blocksToOpenXML) $
147 else mapM (rowToOpenXML blocksToOpenXML) $
121 partToRows rowType aligns part
148 partToRows rowType aligns part
src/Text/Pandoc/Writers/Docx/Types.hs+4
@@ -117,6 +117,8 @@ data WriterState = WriterState{
117 , stDynamicParaProps :: Set.Set ParaStyleName
117 , stDynamicParaProps :: Set.Set ParaStyleName
118 , stDynamicTextProps :: Set.Set CharStyleName
118 , stDynamicTextProps :: Set.Set CharStyleName
119 , stCurId :: Int
119 , stCurId :: Int
120+ , stNextFigureNum :: Int
121+ , stNextTableNum :: Int
120 }
122 }
121
123
122defaultWriterState :: WriterState
124defaultWriterState :: WriterState
@@ -137,6 +139,8 @@ defaultWriterState = WriterState{
137 , stDynamicParaProps = Set.empty
139 , stDynamicParaProps = Set.empty
138 , stDynamicTextProps = Set.empty
140 , stDynamicTextProps = Set.empty
139 , stCurId = 20
141 , stCurId = 20
142+ , stNextFigureNum = 1
143+ , stNextTableNum = 1
140 }
144 }
141
145
142setFirstPara :: PandocMonad m => WS m ()
146setFirstPara :: PandocMonad m => WS m ()
src/Text/Pandoc/Writers/HTML.hs+66−10
@@ -26,8 +26,13 @@ module Text.Pandoc.Writers.HTML (
26 writeSlideous,
26 writeSlideous,
27 writeDZSlides,
27 writeDZSlides,
28 writeRevealJs,
28 writeRevealJs,
29− tagWithAttributes
29+ tagWithAttributes,
30+ inlineToHtml,
31+ blockToHtml,
32+ WriterState(..),
33+ defaultWriterState
30 ) where
34 ) where
35+
31import Control.Monad.State.Strict
36import Control.Monad.State.Strict
32import Data.Char (ord)
37import Data.Char (ord)
33import Data.List (intercalate, intersperse, partition, delete, (\\), foldl')
38import Data.List (intercalate, intersperse, partition, delete, (\\), foldl')
@@ -344,6 +349,52 @@ pandocToHtml opts (Pandoc meta blocks) = do
344 PlainMath -> defField "displaymath-css" True
349 PlainMath -> defField "displaymath-css" True
345 WebTeX _ -> defField "displaymath-css" True
350 WebTeX _ -> defField "displaymath-css" True
346 _ -> id) .
351 _ -> id) .
352+ (if slideVariant == RevealJsSlides
353+ then -- set boolean options explicitly, since
354+ -- template can't distinguish False/undefined
355+ defField "controls" True .
356+ defField "controlsTutorial" True .
357+ defField "controlsLayout" ("bottom-right" :: Text) .
358+ defField "controlsBackArrows" ("faded" :: Text) .
359+ defField "progress" True .
360+ defField "slideNumber" False .
361+ defField "showSlideNumber" ("all" :: Text) .
362+ defField "hashOneBasedIndex" False .
363+ defField "hash" False .
364+ defField "respondToHashChanges" True .
365+ defField "history" False .
366+ defField "keyboard" True .
367+ defField "overview" True .
368+ defField "disableLayout" False .
369+ defField "center" True .
370+ defField "touch" True .
371+ defField "loop" False .
372+ defField "rtl" False .
373+ defField "navigationMode" ("default" :: Text) .
374+ defField "shuffle" False .
375+ defField "fragments" True .
376+ defField "fragmentInURL" True .
377+ defField "embedded" False .
378+ defField "help" True .
379+ defField "pause" True .
380+ defField "showNotes" False .
381+ defField "autoPlayMedia" ("null" :: Text) .
382+ defField "preloadIframes" ("null" :: Text) .
383+ defField "autoSlide" ("0" :: Text) .
384+ defField "autoSlideStoppable" True .
385+ defField "autoSlideMethod" ("null" :: Text) .
386+ defField "defaultTiming" ("null" :: Text) .
387+ defField "mouseWheel" False .
388+ defField "display" ("block" :: Text) .
389+ defField "hideInactiveCursor" True .
390+ defField "hideCursorTime" ("5000" :: Text) .
391+ defField "previewLinks" False .
392+ defField "transition" ("slide" :: Text) .
393+ defField "transitionSpeed" ("default" :: Text) .
394+ defField "backgroundTransition" ("fade" :: Text) .
395+ defField "viewDistance" ("3" :: Text) .
396+ defField "mobileViewDistance" ("2" :: Text)
397+ else id) .
347 defField "document-css" (isNothing mCss && slideVariant == NoSlides) .
398 defField "document-css" (isNothing mCss && slideVariant == NoSlides) .
348 defField "quotes" (stQuotes st) .
399 defField "quotes" (stQuotes st) .
349 -- for backwards compatibility we populate toc
400 -- for backwards compatibility we populate toc
@@ -613,17 +664,20 @@ dimensionsToAttrList attr = consolidateStyles $ go Width ++ go Height
613figure :: PandocMonad m
664figure :: PandocMonad m
614 => WriterOptions -> Attr -> [Inline] -> (Text, Text)
665 => WriterOptions -> Attr -> [Inline] -> (Text, Text)
615 -> StateT WriterState m Html
666 -> StateT WriterState m Html
616−figure opts attr txt (s,tit) = do
667+figure opts attr@(_, _, attrList) txt (s,tit) = do
617 html5 <- gets stHtml5
668 html5 <- gets stHtml5
618 -- Screen-readers will normally read the @alt@ text and the figure; we
669 -- Screen-readers will normally read the @alt@ text and the figure; we
619 -- want to avoid them reading the same text twice. With HTML5 we can
670 -- want to avoid them reading the same text twice. With HTML5 we can
620 -- use aria-hidden for the caption; with HTML4, we use an empty
671 -- use aria-hidden for the caption; with HTML4, we use an empty
621 -- alt-text instead.
672 -- alt-text instead.
673+ -- When the alt text differs from the caption both should be read.
622 let alt = if html5 then txt else [Str ""]
674 let alt = if html5 then txt else [Str ""]
623 let tocapt = if html5
675 let tocapt = if html5
624− then H5.figcaption !
676+ then (H5.figcaption !) $
677+ if isJust (lookup "alt" attrList)
678+ then mempty
625− H5.customAttribute (textTag "aria-hidden")
679+ else H5.customAttribute (textTag "aria-hidden")
626− (toValue @Text "true")
680+ (toValue @Text "true")
627 else H.p ! A.class_ "caption"
681 else H.p ! A.class_ "caption"
628 img <- inlineToHtml opts (Image attr alt (s,tit))
682 img <- inlineToHtml opts (Image attr alt (s,tit))
629 capt <- if null txt
683 capt <- if null txt
@@ -770,9 +824,10 @@ blockToHtml opts (Div attr@(ident, classes, kvs') bs) = do
770 lookup "entry-spacing" kvs' >>=
824 lookup "entry-spacing" kvs' >>=
771 safeRead }
825 safeRead }
772 let isCslBibEntry = "csl-entry" `elem` classes
826 let isCslBibEntry = "csl-entry" `elem` classes
773− let kvs = [(k,v) | (k,v) <- kvs', k /= "width"] ++
827+ let kvs = [(k,v) | (k,v) <- kvs'
828+ , k /= "width" || "column" `notElem` classes] ++
774− [("style", "width:" <> w <> ";") | "column" `elem` classes,
829+ [("style", "width:" <> w <> ";") | "column" `elem` classes
775− ("width", w) <- kvs'] ++
830+ , ("width", w) <- kvs'] ++
776 [("role", "doc-bibliography") | isCslBibBody && html5] ++
831 [("role", "doc-bibliography") | isCslBibBody && html5] ++
777 [("role", "doc-biblioentry") | isCslBibEntry && html5]
832 [("role", "doc-biblioentry") | isCslBibEntry && html5]
778 let speakerNotes = "notes" `elem` classes
833 let speakerNotes = "notes" `elem` classes
@@ -1386,7 +1441,7 @@ inlineToHtml opts inline = do
1386 return $ if T.null tit
1441 return $ if T.null tit
1387 then link'
1442 then link'
1388 else link' ! A.title (toValue tit)
1443 else link' ! A.title (toValue tit)
1389− (Image attr txt (s,tit)) -> do
1444+ (Image attr@(_, _, attrList) txt (s, tit)) -> do
1390 let alternate = stringify txt
1445 let alternate = stringify txt
1391 slideVariant <- gets stSlideVariant
1446 slideVariant <- gets stSlideVariant
1392 let isReveal = slideVariant == RevealJsSlides
1447 let isReveal = slideVariant == RevealJsSlides
@@ -1399,7 +1454,8 @@ inlineToHtml opts inline = do
1399 [A.title $ toValue tit | not (T.null tit)] ++
1454 [A.title $ toValue tit | not (T.null tit)] ++
1400 attrs
1455 attrs
1401 imageTag = (if html5 then H5.img else H.img
1456 imageTag = (if html5 then H5.img else H.img
1402− , [A.alt $ toValue alternate | not (null txt)] )
1457+ , [A.alt $ toValue alternate | not (null txt) &&
1458+ isNothing (lookup "alt" attrList)] )
1403 mediaTag tg fallbackTxt =
1459 mediaTag tg fallbackTxt =
1404 let linkTxt = if null txt
1460 let linkTxt = if null txt
1405 then fallbackTxt
1461 then fallbackTxt
src/Text/Pandoc/Writers/LaTeX.hs+1−1
@@ -919,7 +919,7 @@ inlineToLaTeX il@(RawInline f str) = do
919inlineToLaTeX LineBreak = do
919inlineToLaTeX LineBreak = do
920 emptyLine <- gets stEmptyLine
920 emptyLine <- gets stEmptyLine
921 setEmptyLine True
921 setEmptyLine True
922− return $ (if emptyLine then "~" else "") <> "\\\\" <> cr
922+ return $ (if emptyLine then "\\strut " else "") <> "\\\\" <> cr
923inlineToLaTeX SoftBreak = do
923inlineToLaTeX SoftBreak = do
924 wrapText <- gets (writerWrapText . stOptions)
924 wrapText <- gets (writerWrapText . stOptions)
925 case wrapText of
925 case wrapText of
src/Text/Pandoc/Writers/LaTeX/Table.hs+20−5
@@ -16,6 +16,7 @@ module Text.Pandoc.Writers.LaTeX.Table
16 ) where
16 ) where
17import Control.Monad.State.Strict
17import Control.Monad.State.Strict
18import Data.List (intersperse)
18import Data.List (intersperse)
19+import qualified Data.List.NonEmpty as NonEmpty
19import Data.List.NonEmpty (NonEmpty ((:|)))
20import Data.List.NonEmpty (NonEmpty ((:|)))
20import Data.Text (Text)
21import Data.Text (Text)
21import qualified Data.Text as T
22import qualified Data.Text as T
@@ -25,7 +26,8 @@ import Text.DocLayout
25 ( Doc, braces, cr, empty, hcat, hsep, isEmpty, literal, nest
26 ( Doc, braces, cr, empty, hcat, hsep, isEmpty, literal, nest
26 , text, vcat, ($$) )
27 , text, vcat, ($$) )
27import Text.Pandoc.Shared (blocksToInlines, splitBy, tshow)
28import Text.Pandoc.Shared (blocksToInlines, splitBy, tshow)
28−import Text.Pandoc.Walk (walk)
29+import Text.Pandoc.Walk (walk, query)
30+import Data.Monoid (Any(..))
29import Text.Pandoc.Writers.LaTeX.Caption (getCaption)
31import Text.Pandoc.Writers.LaTeX.Caption (getCaption)
30import Text.Pandoc.Writers.LaTeX.Notes (notesToLaTeX)
32import Text.Pandoc.Writers.LaTeX.Notes (notesToLaTeX)
31import Text.Pandoc.Writers.LaTeX.Types
33import Text.Pandoc.Writers.LaTeX.Types
@@ -243,8 +245,13 @@ cellToLaTeX :: PandocMonad m
243 -> Ann.Cell
245 -> Ann.Cell
244 -> LW m (Doc Text)
246 -> LW m (Doc Text)
245cellToLaTeX blockListToLaTeX celltype annotatedCell = do
247cellToLaTeX blockListToLaTeX celltype annotatedCell = do
246− let (Ann.Cell _specs _colnum cell) = annotatedCell
248+ let (Ann.Cell specs _colnum cell) = annotatedCell
249+ let hasWidths = snd (NonEmpty.head specs) /= ColWidthDefault
250+ let specAlign = fst (NonEmpty.head specs)
247− let (Cell _attr align rowspan colspan blocks) = cell
251+ let (Cell _attr align' rowspan colspan blocks) = cell
252+ let align = case align' of
253+ AlignDefault -> specAlign
254+ _ -> align'
248 beamer <- gets stBeamer
255 beamer <- gets stBeamer
249 externalNotes <- gets stExternalNotes
256 externalNotes <- gets stExternalNotes
250 inMinipage <- gets stInMinipage
257 inMinipage <- gets stInMinipage
@@ -255,8 +262,13 @@ cellToLaTeX blockListToLaTeX celltype annotatedCell = do
255 Para{} -> True
262 Para{} -> True
256 Plain{} -> True
263 Plain{} -> True
257 _ -> False
264 _ -> False
265+ let hasLineBreak LineBreak = Any True
266+ hasLineBreak _ = Any False
267+ let hasLineBreaks = getAny $ query hasLineBreak blocks
258 result <-
268 result <-
269+ if not hasWidths || (celltype /= HeaderCell
259− if all isPlainOrPara blocks
270+ && all isPlainOrPara blocks
271+ && not hasLineBreaks)
260 then
272 then
261 blockListToLaTeX $ walk fixLineBreaks $ walk displayMathToInline blocks
273 blockListToLaTeX $ walk fixLineBreaks $ walk displayMathToInline blocks
262 else do
274 else do
@@ -269,7 +281,9 @@ cellToLaTeX blockListToLaTeX celltype annotatedCell = do
269 let halign = literal $ alignCommand align
281 let halign = literal $ alignCommand align
270 return $ "\\begin{minipage}" <> valign <>
282 return $ "\\begin{minipage}" <> valign <>
271 braces "\\linewidth" <> halign <> cr <>
283 braces "\\linewidth" <> halign <> cr <>
272− cellContents <> cr <>
284+ cellContents <>
285+ (if hasLineBreaks then "\\strut" else mempty)
286+ <> cr <>
273 "\\end{minipage}"
287 "\\end{minipage}"
274 modify $ \st -> st{ stExternalNotes = externalNotes }
288 modify $ \st -> st{ stExternalNotes = externalNotes }
275 when (rowspan /= RowSpan 1) $
289 when (rowspan /= RowSpan 1) $
@@ -290,3 +304,4 @@ cellToLaTeX blockListToLaTeX celltype annotatedCell = do
290data CellType
304data CellType
291 = HeaderCell
305 = HeaderCell
292 | BodyCell
306 | BodyCell
307+ deriving Eq
src/Text/Pandoc/Writers/Markdown.hs+18−38
@@ -43,7 +43,7 @@ import Text.Pandoc.Templates (renderTemplate)
43import Text.DocTemplates (Val(..), Context(..), FromContext(..))
43import Text.DocTemplates (Val(..), Context(..), FromContext(..))
44import Text.Pandoc.Walk
44import Text.Pandoc.Walk
45import Text.Pandoc.Writers.HTML (writeHtml5String)
45import Text.Pandoc.Writers.HTML (writeHtml5String)
46−import Text.Pandoc.Writers.Markdown.Inline (inlineListToMarkdown)
46+import Text.Pandoc.Writers.Markdown.Inline (inlineListToMarkdown, linkAttributes, attrsToMarkdown)
47import Text.Pandoc.Writers.Markdown.Types (MarkdownVariant(..),
47import Text.Pandoc.Writers.Markdown.Types (MarkdownVariant(..),
48 WriterState(..),
48 WriterState(..),
49 WriterEnv(..),
49 WriterEnv(..),
@@ -75,7 +75,6 @@ writeCommonMark opts document =
75 -- we set them here so that escapeText will behave
75 -- we set them here so that escapeText will behave
76 -- properly.
76 -- properly.
77 enableExtension Ext_all_symbols_escapable $
77 enableExtension Ext_all_symbols_escapable $
78− enableExtension Ext_pipe_tables $
79 enableExtension Ext_intraword_underscores $
78 enableExtension Ext_intraword_underscores $
80 writerExtensions opts }
79 writerExtensions opts }
81
80
@@ -257,39 +256,12 @@ noteToMarkdown opts num blocks = do
257 then hang (writerTabStop opts) (marker <> spacer) contents
256 then hang (writerTabStop opts) (marker <> spacer) contents
258 else marker <> spacer <> contents
257 else marker <> spacer <> contents
259
258
260−attrsToMarkdown :: Attr -> Doc Text
261−attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
262− where attribId = case attribs of
263− ("",_,_) -> empty
264− (i,_,_) -> "#" <> escAttr i
265− attribClasses = case attribs of
266− (_,[],_) -> empty
267− (_,cs,_) -> hsep $
268− map (escAttr . ("."<>))
269− cs
270− attribKeys = case attribs of
271− (_,_,[]) -> empty
272− (_,_,ks) -> hsep $
273− map (\(k,v) -> escAttr k
274− <> "=\"" <>
275− escAttr v <> "\"") ks
276− escAttr = mconcat . map escAttrChar . T.unpack
277− escAttrChar '"' = literal "\\\""
278− escAttrChar '\\' = literal "\\\\"
279− escAttrChar c = literal $ T.singleton c
280−
281−-- | (Code) blocks with a single class can just use it standalone,
259+-- | (Code) blocks with a single class and no attributes can just use it
282−-- no need to bother with curly braces.
260+-- standalone, no need to bother with curly braces.
283classOrAttrsToMarkdown :: Attr -> Doc Text
261classOrAttrsToMarkdown :: Attr -> Doc Text
284−classOrAttrsToMarkdown ("",[cls],_) = literal cls
262+classOrAttrsToMarkdown ("",[cls],[]) = literal cls
285classOrAttrsToMarkdown attrs = attrsToMarkdown attrs
263classOrAttrsToMarkdown attrs = attrsToMarkdown attrs
286
264
287−linkAttributes :: WriterOptions -> Attr -> Doc Text
288−linkAttributes opts attr =
289− if isEnabled Ext_link_attributes opts && attr /= nullAttr
290− then attrsToMarkdown attr
291− else empty
292−
293-- | Ordered list start parser for use in Para below.
265-- | Ordered list start parser for use in Para below.
294olMarker :: Parser Text ParserState ()
266olMarker :: Parser Text ParserState ()
295olMarker = do (start, style', delim) <- anyOrderedListMarker
267olMarker = do (start, style', delim) <- anyOrderedListMarker
@@ -349,9 +321,12 @@ blockToMarkdown' opts (Div attrs ils) = do
349 case () of
321 case () of
350 _ | isEnabled Ext_fenced_divs opts &&
322 _ | isEnabled Ext_fenced_divs opts &&
351 attrs /= nullAttr ->
323 attrs /= nullAttr ->
324+ let attrsToMd = if variant == Commonmark
325+ then attrsToMarkdown
326+ else classOrAttrsToMarkdown
352− nowrap (literal ":::" <+> classOrAttrsToMarkdown attrs) $$
327+ in nowrap (literal ":::" <+> attrsToMd attrs) $$
353− chomp contents $$
328+ chomp contents $$
354− literal ":::" <> blankline
329+ literal ":::" <> blankline
355 | isEnabled Ext_native_divs opts ||
330 | isEnabled Ext_native_divs opts ||
356 (isEnabled Ext_raw_html opts &&
331 (isEnabled Ext_raw_html opts &&
357 (variant == Commonmark ||
332 (variant == Commonmark ||
@@ -393,7 +368,7 @@ blockToMarkdown' opts (Plain inlines) = do
393-- title beginning with fig: indicates figure
368-- title beginning with fig: indicates figure
394blockToMarkdown' opts (Para [Image attr alt (src,tgt@(T.stripPrefix "fig:" -> Just tit))])
369blockToMarkdown' opts (Para [Image attr alt (src,tgt@(T.stripPrefix "fig:" -> Just tit))])
395 | isEnabled Ext_raw_html opts &&
370 | isEnabled Ext_raw_html opts &&
396− not (isEnabled Ext_link_attributes opts) &&
371+ not (isEnabled Ext_link_attributes opts || isEnabled Ext_attributes opts) &&
397 attr /= nullAttr = -- use raw HTML
372 attr /= nullAttr = -- use raw HTML
398 (<> blankline) . literal . T.strip <$>
373 (<> blankline) . literal . T.strip <$>
399 writeHtml5String opts{ writerTemplate = Nothing }
374 writeHtml5String opts{ writerTemplate = Nothing }
@@ -458,7 +433,8 @@ blockToMarkdown' opts (Header level attr inlines) = do
458 && id' == autoId -> empty
433 && id' == autoId -> empty
459 (id',_,_) | isEnabled Ext_mmd_header_identifiers opts ->
434 (id',_,_) | isEnabled Ext_mmd_header_identifiers opts ->
460 space <> brackets (literal id')
435 space <> brackets (literal id')
461− _ | isEnabled Ext_header_attributes opts ->
436+ _ | isEnabled Ext_header_attributes opts ||
437+ isEnabled Ext_attributes opts ->
462 space <> attrsToMarkdown attr
438 space <> attrsToMarkdown attr
463 | otherwise -> empty
439 | otherwise -> empty
464 contents <- inlineListToMarkdown opts $
440 contents <- inlineListToMarkdown opts $
@@ -517,7 +493,8 @@ blockToMarkdown' opts (CodeBlock attribs str) = do
517 endline c = literal $ T.replicate (endlineLen c) $ T.singleton c
493 endline c = literal $ T.replicate (endlineLen c) $ T.singleton c
518 backticks = endline '`'
494 backticks = endline '`'
519 tildes = endline '~'
495 tildes = endline '~'
520− attrs = if isEnabled Ext_fenced_code_attributes opts
496+ attrs = if isEnabled Ext_fenced_code_attributes opts ||
497+ isEnabled Ext_attributes opts
521 then nowrap $ " " <> classOrAttrsToMarkdown attribs
498 then nowrap $ " " <> classOrAttrsToMarkdown attribs
522 else case attribs of
499 else case attribs of
523 (_,cls:_,_) -> " " <> literal cls
500 (_,cls:_,_) -> " " <> literal cls
@@ -814,6 +791,9 @@ blockListToMarkdown opts blocks = do
814 b1 : commentSep : fixBlocks (b2:bs)
791 b1 : commentSep : fixBlocks (b2:bs)
815 fixBlocks (Plain ils : bs@(RawBlock{}:_)) =
792 fixBlocks (Plain ils : bs@(RawBlock{}:_)) =
816 Plain ils : fixBlocks bs
793 Plain ils : fixBlocks bs
794+ fixBlocks (Plain ils : bs@(Div{}:_))
795+ | isEnabled Ext_fenced_divs opts =
796+ Para ils : fixBlocks bs
817 fixBlocks (Plain ils : bs) | inlist =
797 fixBlocks (Plain ils : bs) | inlist =
818 Plain ils : fixBlocks bs
798 Plain ils : fixBlocks bs
819 fixBlocks (Plain ils : bs) =
799 fixBlocks (Plain ils : bs) =
src/Text/Pandoc/Writers/Markdown/Inline.hs+15−11
@@ -11,7 +11,9 @@
11 Portability : portable
11 Portability : portable
12-}
12-}
13module Text.Pandoc.Writers.Markdown.Inline (
13module Text.Pandoc.Writers.Markdown.Inline (
14− inlineListToMarkdown
14+ inlineListToMarkdown,
15+ linkAttributes,
16+ attrsToMarkdown
15 ) where
17 ) where
16import Control.Monad.Reader
18import Control.Monad.Reader
17import Control.Monad.State.Strict
19import Control.Monad.State.Strict
@@ -115,7 +117,7 @@ attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
115
117
116linkAttributes :: WriterOptions -> Attr -> Doc Text
118linkAttributes :: WriterOptions -> Attr -> Doc Text
117linkAttributes opts attr =
119linkAttributes opts attr =
118− if isEnabled Ext_link_attributes opts && attr /= nullAttr
120+ if (isEnabled Ext_link_attributes opts || isEnabled Ext_attributes opts) && attr /= nullAttr
119 then attrsToMarkdown attr
121 then attrsToMarkdown attr
120 else empty
122 else empty
121
123
@@ -392,13 +394,15 @@ inlineToMarkdown opts (Quoted DoubleQuote lst) = do
392 then "&ldquo;" <> contents <> "&rdquo;"
394 then "&ldquo;" <> contents <> "&rdquo;"
393 else "“" <> contents <> "”"
395 else "“" <> contents <> "”"
394inlineToMarkdown opts (Code attr str) = do
396inlineToMarkdown opts (Code attr str) = do
395− let tickGroups = filter (T.any (== '`')) $ T.group str
397+ let tickGroups = filter (T.any (== '`')) $ T.group str
396− let longest = maybe 0 maximum $ nonEmpty $ map T.length tickGroups
398+ let longest = maybe 0 maximum $ nonEmpty $ map T.length tickGroups
397− let marker = T.replicate (longest + 1) "`"
399+ let marker = T.replicate (longest + 1) "`"
398− let spacer = if longest == 0 then "" else " "
400+ let spacer = if longest == 0 then "" else " "
401+ let attrsEnabled = isEnabled Ext_inline_code_attributes opts ||
402+ isEnabled Ext_attributes opts
399− let attrs = if isEnabled Ext_inline_code_attributes opts && attr /= nullAttr
403+ let attrs = if attrsEnabled && attr /= nullAttr
400− then attrsToMarkdown attr
404+ then attrsToMarkdown attr
401− else empty
405+ else empty
402 variant <- asks envVariant
406 variant <- asks envVariant
403 case variant of
407 case variant of
404 PlainText -> return $ literal str
408 PlainText -> return $ literal str
@@ -557,7 +561,7 @@ inlineToMarkdown opts lnk@(Link attr txt (src, tit)) = do
557 else "[" <> reftext <> "]"
561 else "[" <> reftext <> "]"
558 in return $ first <> second
562 in return $ first <> second
559 | isEnabled Ext_raw_html opts
563 | isEnabled Ext_raw_html opts
560− , not (isEnabled Ext_link_attributes opts)
564+ , not (isEnabled Ext_link_attributes opts || isEnabled Ext_attributes opts)
561 , attr /= nullAttr -> -- use raw HTML to render attributes
565 , attr /= nullAttr -> -- use raw HTML to render attributes
562 literal . T.strip <$>
566 literal . T.strip <$>
563 writeHtml5String opts{ writerTemplate = Nothing }
567 writeHtml5String opts{ writerTemplate = Nothing }
@@ -567,7 +571,7 @@ inlineToMarkdown opts lnk@(Link attr txt (src, tit)) = do
567 linkAttributes opts attr
571 linkAttributes opts attr
568inlineToMarkdown opts img@(Image attr alternate (source, tit))
572inlineToMarkdown opts img@(Image attr alternate (source, tit))
569 | isEnabled Ext_raw_html opts &&
573 | isEnabled Ext_raw_html opts &&
570− not (isEnabled Ext_link_attributes opts) &&
574+ not (isEnabled Ext_link_attributes opts || isEnabled Ext_attributes opts) &&
571 attr /= nullAttr = -- use raw HTML
575 attr /= nullAttr = -- use raw HTML
572 literal . T.strip <$>
576 literal . T.strip <$>
573 writeHtml5String opts{ writerTemplate = Nothing } (Pandoc nullMeta [Plain [img]])
577 writeHtml5String opts{ writerTemplate = Nothing } (Pandoc nullMeta [Plain [img]])
src/Text/Pandoc/Writers/OpenDocument.hs+47−51
@@ -1,4 +1,5 @@
1{-# LANGUAGE FlexibleContexts #-}
1{-# LANGUAGE FlexibleContexts #-}
2+{-# LANGUAGE LambdaCase #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE PatternGuards #-}
4{-# LANGUAGE PatternGuards #-}
4{-# LANGUAGE ViewPatterns #-}
5{-# LANGUAGE ViewPatterns #-}
@@ -372,36 +373,32 @@ blocksToOpenDocument o b = vcat <$> mapM (blockToOpenDocument o) b
372
373
373-- | Convert a Pandoc block element to OpenDocument.
374-- | Convert a Pandoc block element to OpenDocument.
374blockToOpenDocument :: PandocMonad m => WriterOptions -> Block -> OD m (Doc Text)
375blockToOpenDocument :: PandocMonad m => WriterOptions -> Block -> OD m (Doc Text)
375−blockToOpenDocument o bs
376+blockToOpenDocument o = \case
376− | Plain b <- bs = if null b
377+ Plain b -> if null b
377− then return empty
378+ then return empty
378− else inParagraphTags =<< inlinesToOpenDocument o b
379+ else inParagraphTags =<< inlinesToOpenDocument o b
379− | Para [Image attr c (s,T.stripPrefix "fig:" -> Just t)] <- bs
380+ Para [Image attr c (s,T.stripPrefix "fig:" -> Just t)] -> figure attr c s t
380− = figure attr c s t
381− | Para b <- bs = if null b &&
381+ Para b -> if null b &&
382− not (isEnabled Ext_empty_paragraphs o)
382+ not (isEnabled Ext_empty_paragraphs o)
383− then return empty
383+ then return empty
384− else inParagraphTags =<< inlinesToOpenDocument o b
384+ else inParagraphTags =<< inlinesToOpenDocument o b
385− | LineBlock b <- bs = blockToOpenDocument o $ linesToPara b
385+ LineBlock b -> blockToOpenDocument o $ linesToPara b
386− | Div attr xs <- bs = mkDiv attr xs
386+ Div attr xs -> mkDiv attr xs
387− | Header i (ident,_,_) b
387+ Header i (ident,_,_) b -> do
388− <- bs = setFirstPara >> (inHeaderTags i ident
388+ setFirstPara
389− =<< inlinesToOpenDocument o b)
389+ inHeaderTags i ident =<< inlinesToOpenDocument o b
390− | BlockQuote b <- bs = setFirstPara >> mkBlockQuote b
390+ BlockQuote b -> setFirstPara >> mkBlockQuote b
391− | DefinitionList b <- bs = setFirstPara >> defList b
391+ DefinitionList b -> setFirstPara >> defList b
392− | BulletList b <- bs = setFirstPara >> bulletListToOpenDocument o b
392+ BulletList b -> setFirstPara >> bulletListToOpenDocument o b
393− | OrderedList a b <- bs = setFirstPara >> orderedList a b
393+ OrderedList a b -> setFirstPara >> orderedList a b
394− | CodeBlock _ s <- bs = setFirstPara >> preformatted s
394+ CodeBlock _ s -> setFirstPara >> preformatted s
395− | Table a bc s th tb tf <- bs = setFirstPara >> table (Ann.toTable a bc s th tb tf)
395+ Table a bc s th tb tf -> setFirstPara >> table (Ann.toTable a bc s th tb tf)
396− | HorizontalRule <- bs = setFirstPara >> return (selfClosingTag "text:p"
396+ HorizontalRule -> setFirstPara >> return (selfClosingTag "text:p"
397− [ ("text:style-name", "Horizontal_20_Line") ])
397+ [ ("text:style-name", "Horizontal_20_Line") ])
398− | RawBlock f s <- bs = if f == Format "opendocument"
398+ b@(RawBlock f s) -> if f == Format "opendocument"
399− then return $ text $ T.unpack s
399+ then return $ text $ T.unpack s
400− else do
401− report $ BlockNotRendered bs
400+ else empty <$ report (BlockNotRendered b)
402− return empty
403− | Null <- bs = return empty
404− | otherwise = return empty
401+ Null -> return empty
405 where
402 where
406 defList b = do setInDefinitionList True
403 defList b = do setInDefinitionList True
407 r <- vcat <$> mapM (deflistItemToOpenDocument o) b
404 r <- vcat <$> mapM (deflistItemToOpenDocument o) b
@@ -874,27 +871,26 @@ data TextStyle = Italic
874textStyleAttr :: Map.Map Text Text
871textStyleAttr :: Map.Map Text Text
875 -> TextStyle
872 -> TextStyle
876 -> Map.Map Text Text
873 -> Map.Map Text Text
877−textStyleAttr m s
874+textStyleAttr m = \case
878− | Italic <- s = Map.insert "fo:font-style" "italic" .
875+ Italic -> Map.insert "fo:font-style" "italic" .
879− Map.insert "style:font-style-asian" "italic" .
876+ Map.insert "style:font-style-asian" "italic" .
880− Map.insert "style:font-style-complex" "italic" $ m
877+ Map.insert "style:font-style-complex" "italic" $ m
881− | Bold <- s = Map.insert "fo:font-weight" "bold" .
878+ Bold -> Map.insert "fo:font-weight" "bold" .
882− Map.insert "style:font-weight-asian" "bold" .
879+ Map.insert "style:font-weight-asian" "bold" .
883− Map.insert "style:font-weight-complex" "bold" $ m
880+ Map.insert "style:font-weight-complex" "bold" $ m
884− | Under <- s = Map.insert "style:text-underline-style" "solid" .
881+ Under -> Map.insert "style:text-underline-style" "solid" .
885− Map.insert "style:text-underline-width" "auto" .
882+ Map.insert "style:text-underline-width" "auto" .
886− Map.insert "style:text-underline-color" "font-color" $ m
883+ Map.insert "style:text-underline-color" "font-color" $ m
887− | Strike <- s = Map.insert "style:text-line-through-style" "solid" m
884+ Strike -> Map.insert "style:text-line-through-style" "solid" m
888− | Sub <- s = Map.insert "style:text-position" "sub 58%" m
885+ Sub -> Map.insert "style:text-position" "sub 58%" m
889− | Sup <- s = Map.insert "style:text-position" "super 58%" m
886+ Sup -> Map.insert "style:text-position" "super 58%" m
890− | SmallC <- s = Map.insert "fo:font-variant" "small-caps" m
887+ SmallC -> Map.insert "fo:font-variant" "small-caps" m
891− | Pre <- s = Map.insert "style:font-name" "Courier New" .
888+ Pre -> Map.insert "style:font-name" "Courier New" .
892− Map.insert "style:font-name-asian" "Courier New" .
889+ Map.insert "style:font-name-asian" "Courier New" .
893− Map.insert "style:font-name-complex" "Courier New" $ m
890+ Map.insert "style:font-name-complex" "Courier New" $ m
894− | Language lang <- s
891+ Language lang ->
895− = Map.insert "fo:language" (langLanguage lang) .
892+ Map.insert "fo:language" (langLanguage lang) .
896− maybe id (Map.insert "fo:country") (langRegion lang) $ m
893+ maybe id (Map.insert "fo:country") (langRegion lang) $ m
897− | otherwise = m
898
894
899withLangFromAttr :: PandocMonad m => Attr -> OD m a -> OD m a
895withLangFromAttr :: PandocMonad m => Attr -> OD m a -> OD m a
900withLangFromAttr (_,_,kvs) action =
896withLangFromAttr (_,_,kvs) action =
src/Text/Pandoc/Writers/Powerpoint/Output.hs+1
@@ -537,6 +537,7 @@ registerMedia fp caption = do
537 Just Eps -> Just ".eps"
537 Just Eps -> Just ".eps"
538 Just Svg -> Just ".svg"
538 Just Svg -> Just ".svg"
539 Just Emf -> Just ".emf"
539 Just Emf -> Just ".emf"
540+ Just Tiff -> Just ".tiff"
540 Nothing -> Nothing
541 Nothing -> Nothing
541
542
542 let newGlobalId = fromMaybe (maxGlobalId + 1) (M.lookup fp globalIds)
543 let newGlobalId = fromMaybe (maxGlobalId + 1) (M.lookup fp globalIds)
stack.yaml+9−7
@@ -7,14 +7,16 @@ flags:
7packages:
7packages:
8- '.'
8- '.'
9extra-deps:
9extra-deps:
10−- hslua-1.3.0
10+- commonmark-0.2.1
11−- hslua-module-path-0.1.0
11+- commonmark-pandoc-0.2.1.1
12−- jira-wiki-markup-1.4.0
12+- skylighting-core-0.10.5.2
13−- random-1.2.0
13+- skylighting-0.10.5.2
14−- unicode-collation-0.1.3
14+- git: https://github.com/jgm/doctemplates
15+ commit: 428c26d5303cf7a2b1051fe1ffd9aafe9ba71c81
15−- citeproc-0.4
16+- git: https://github.com/jgm/citeproc
17+ commit: 4ce0501cd6f9c86eee087afcf878c256e49b9615
16ghc-options:
18ghc-options:
17 "$locals": -fhide-source-paths -Wno-missing-home-modules
19 "$locals": -fhide-source-paths -Wno-missing-home-modules
18−resolver: lts-17.12
20+resolver: lts-18.0
19nix:
21nix:
20 packages: [zlib]
22 packages: [zlib]
test/Tests/Command.hs+4−1
@@ -130,4 +130,7 @@ extractCommandTest testExePath fp = unsafePerformIO $ do
130 def{ readerExtensions = pandocExtensions } contents)
130 def{ readerExtensions = pandocExtensions } contents)
131 let codeblocks = map extractCode $ filter isCodeBlock blocks
131 let codeblocks = map extractCode $ filter isCodeBlock blocks
132 let cases = zipWith (runCommandTest testExePath fp) [1..] codeblocks
132 let cases = zipWith (runCommandTest testExePath fp) [1..] codeblocks
133− return $ testGroup fp cases
133+ return $ testGroup fp
134+ $ if null cases
135+ then [testCase "!!" $ assertFailure "No command tests defined"]
136+ else cases
test/Tests/Readers/Docx.hs+16
@@ -317,14 +317,30 @@ tests = [ testGroup "document"
317 "tables with lists in cells"
317 "tables with lists in cells"
318 "docx/table_with_list_cell.docx"
318 "docx/table_with_list_cell.docx"
319 "docx/table_with_list_cell.native"
319 "docx/table_with_list_cell.native"
320+ , testCompare
321+ "a table with a header which contains rowspans greater than 1"
322+ "docx/table_header_rowspan.docx"
323+ "docx/table_header_rowspan.native"
320 , testCompare
324 , testCompare
321 "tables with one row"
325 "tables with one row"
322 "docx/table_one_row.docx"
326 "docx/table_one_row.docx"
323 "docx/table_one_row.native"
327 "docx/table_one_row.native"
328+ , testCompare
329+ "tables with just one row, which is a header"
330+ "docx/table_one_header_row.docx"
331+ "docx/table_one_header_row.native"
324 , testCompare
332 , testCompare
325 "tables with variable width"
333 "tables with variable width"
326 "docx/table_variable_width.docx"
334 "docx/table_variable_width.docx"
327 "docx/table_variable_width.native"
335 "docx/table_variable_width.native"
336+ , testCompare
337+ "tables with captions which contain a Table field"
338+ "docx/table_captions_with_field.docx"
339+ "docx/table_captions_with_field.native"
340+ , testCompare
341+ "tables with captions which don't contain a Table field"
342+ "docx/table_captions_no_field.docx"
343+ "docx/table_captions_no_field.native"
328 , testCompare
344 , testCompare
329 "code block"
345 "code block"
330 "docx/codeblock.docx"
346 "docx/codeblock.docx"
test/Tests/Readers/EPUB.hs+1−1
@@ -47,7 +47,7 @@ featuresBag = [("img/check.gif","image/gif",1340)
47
47
48-- with additional meta tag for cover in EPUB2 format
48-- with additional meta tag for cover in EPUB2 format
49epub3CoverBag :: [(String, String, Int)]
49epub3CoverBag :: [(String, String, Int)]
50−epub3CoverBag = [("wasteland-cover.jpg","image/jpeg",103477)]
50+epub3CoverBag = [("wasteland-cover.jpg","image/jpeg", 16586)]
51
51
52epub3NoCoverBag :: [(String, String, Int)]
52epub3NoCoverBag :: [(String, String, Int)]
53epub3NoCoverBag = [("img/check.gif","image/gif",1340)
53epub3NoCoverBag = [("img/check.gif","image/gif",1340)
test/Tests/Writers/Docbook.hs+6−6
@@ -83,32 +83,32 @@ tests = [ testGroup "line blocks"
83 , "</warning>"
83 , "</warning>"
84 ]
84 ]
85 , "admonition-with-title" =:
85 , "admonition-with-title" =:
86− divWith ("foo", ["attention"], []) (
86+ divWith ("foo", ["note"], []) (
87 divWith ("foo", ["title"], [])
87 divWith ("foo", ["title"], [])
88 (plain (text "This is title")) <>
88 (plain (text "This is title")) <>
89 para "This is a test"
89 para "This is a test"
90 )
90 )
91 =?> unlines
91 =?> unlines
92− [ "<attention id=\"foo\">"
92+ [ "<note id=\"foo\">"
93 , " <title>This is title</title>"
93 , " <title>This is title</title>"
94 , " <para>"
94 , " <para>"
95 , " This is a test"
95 , " This is a test"
96 , " </para>"
96 , " </para>"
97− , "</attention>"
97+ , "</note>"
98 ]
98 ]
99 , "admonition-with-title-in-para" =:
99 , "admonition-with-title-in-para" =:
100− divWith ("foo", ["attention"], []) (
100+ divWith ("foo", ["note"], []) (
101 divWith ("foo", ["title"], [])
101 divWith ("foo", ["title"], [])
102 (para "This is title") <>
102 (para "This is title") <>
103 para "This is a test"
103 para "This is a test"
104 )
104 )
105 =?> unlines
105 =?> unlines
106− [ "<attention id=\"foo\">"
106+ [ "<note id=\"foo\">"
107 , " <title>This is title</title>"
107 , " <title>This is title</title>"
108 , " <para>"
108 , " <para>"
109 , " This is a test"
109 , " This is a test"
110 , " </para>"
110 , " </para>"
111− , "</attention>"
111+ , "</note>"
112 ]
112 ]
113 , "single-child" =:
113 , "single-child" =:
114 divWith ("foo", [], []) (para "This is a test")
114 divWith ("foo", [], []) (para "This is a test")
test/Tests/Writers/Docx.hs+5
@@ -111,6 +111,11 @@ tests = [ testGroup "inlines"
111 def
111 def
112 "docx/tables.native"
112 "docx/tables.native"
113 "docx/golden/tables.docx"
113 "docx/golden/tables.docx"
114+ , docxTest
115+ "tables without explicit column widths"
116+ def
117+ "docx/tables-default-widths.native"
118+ "docx/golden/tables-default-widths.docx"
114 , docxTest
119 , docxTest
115 "tables with lists in cells"
120 "tables with lists in cells"
116 def
121 def
test/Tests/Writers/OOXML.hs+3−1
@@ -55,7 +55,9 @@ testArchive :: (WriterOptions -> Pandoc -> PandocIO BL.ByteString)
55 -> IO Archive
55 -> IO Archive
56testArchive writerFn opts fp = do
56testArchive writerFn opts fp = do
57 txt <- T.readFile fp
57 txt <- T.readFile fp
58+ bs <- runIOorExplode $ do
59+ setTranslations "en-US"
58− bs <- runIOorExplode $ readNative def txt >>= writerFn opts
60+ readNative def txt >>= writerFn opts
59 return $ toArchive bs
61 return $ toArchive bs
60
62
61compareFileList :: FilePath -> Archive -> Archive -> Maybe String
63compareFileList :: FilePath -> Archive -> Archive -> Maybe String
test/command/2874.md+2−2
@@ -3,12 +3,12 @@
3<a></a>
3<a></a>
4<br/>
4<br/>
5^D
5^D
6−{}~\\
6+{}\strut \\
7```
7```
8
8
9```
9```
10% pandoc -f html -t latex
10% pandoc -f html -t latex
11<a name="foo"></a><br/>
11<a name="foo"></a><br/>
12^D
12^D
13−\protect\hypertarget{foo}{}{}~\\
13+\protect\hypertarget{foo}{}{}\strut \\
14```
14```
test/command/3752.mdnew file+60
@@ -0,0 +1,60 @@
1+```
2+% pandoc command/chap1/text.md command/chap2/text.md -f markdown+rebase_relative_paths --verbose -t docx -o - | pandoc -f docx -t plain
3+^D
4+[INFO] Loaded command/chap1/spider.png from command/chap1/spider.png
5+[INFO] Loaded command/chap2/spider.png from command/chap2/spider.png
6+[INFO] Loaded command/chap1/../../lalune.jpg from command/chap1/../../lalune.jpg
7+Chapter one
8+
9+A spider: [spider]
10+
11+Another spider: [another spider]
12+
13+The moon: [moon]
14+
15+Link to spider picture.
16+
17+URL left alone: manual.
18+
19+Absolute path left alone: absolute.
20+
21+Link to fragment: chapter two.
22+
23+Empty path: empty.
24+
25+Chapter two
26+
27+A spider: [spider]
28+```
29+
30+```
31+% pandoc command/chap1/text.md command/chap2/text.md -f markdown+rebase_relative_paths -t html
32+^D
33+<h1 id="chapter-one">Chapter one</h1>
34+<p>A spider: <img src="command/chap1/spider.png" alt="spider" /></p>
35+<p>Another spider: <img src="command/chap2/spider.png" alt="another spider" /></p>
36+<p>The moon: <img src="command/chap1/../../lalune.jpg" alt="moon" /></p>
37+<p>Link to <a href="command/chap1/spider.png">spider picture</a>.</p>
38+<p>URL left alone: <a href="https://pandoc.org/MANUAL.html">manual</a>.</p>
39+<p>Absolute path left alone: <a href="/foo/bar/baz.png">absolute</a>.</p>
40+<p>Link to fragment: <a href="#chapter-two">chapter two</a>.</p>
41+<p>Empty path: <a href="">empty</a>.</p>
42+<h1 id="chapter-two">Chapter two</h1>
43+<p>A spider: <img src="command/chap2/spider.png" alt="spider" /></p>
44+```
45+
46+```
47+% pandoc command/chap1/text.md command/chap2/text.md -f commonmark+rebase_relative_paths -t html
48+^D
49+<h1>Chapter one</h1>
50+<p>A spider: <img src="command/chap1/spider.png" alt="spider" /></p>
51+<p>Another spider: <img src="command/chap2/spider.png" alt="another spider" /></p>
52+<p>The moon: <img src="command/chap1/../../lalune.jpg" alt="moon" /></p>
53+<p>Link to <a href="command/chap1/spider.png">spider picture</a>.</p>
54+<p>URL left alone: <a href="https://pandoc.org/MANUAL.html">manual</a>.</p>
55+<p>Absolute path left alone: <a href="/foo/bar/baz.png">absolute</a>.</p>
56+<p>Link to fragment: <a href="#chapter-two">chapter two</a>.</p>
57+<p>Empty path: <a href="">empty</a>.</p>
58+<h1>Chapter two</h1>
59+<p>A spider: <img src="command/chap2/spider.png" alt="spider" /></p>
60+```
test/command/4465.mdnew file+15
@@ -0,0 +1,15 @@
1+```
2+% pandoc -f html -t markdown
3+<ol>
4+ <li>An ordered list can contain block-level elements ind html, it means that divs are also allowed.</li>
5+ <li>Let's see the problem! <div class="example">This is an example.</div></li>
6+</ol>
7+^D
8+1. An ordered list can contain block-level elements ind html, it means
9+ that divs are also allowed.
10+2. Let\'s see the problem!
11+
12+ ::: example
13+ This is an example.
14+ :::
15+```
test/command/5367.md+6−2
@@ -24,11 +24,15 @@ hello\footnote{doc footnote}
24 >{\centering\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.17}}@{}}
24 >{\centering\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.17}}@{}}
25\caption[Sample table.]{Sample table.\footnote{caption footnote}}\tabularnewline
25\caption[Sample table.]{Sample table.\footnote{caption footnote}}\tabularnewline
26\toprule
26\toprule
27+\begin{minipage}[b]{\linewidth}\centering
27−Fruit\footnote{header footnote} \\
28+Fruit\footnote{header footnote}
29+\end{minipage} \\
28\midrule
30\midrule
29\endfirsthead
31\endfirsthead
30\toprule
32\toprule
33+\begin{minipage}[b]{\linewidth}\centering
31−Fruit{} \\
34+Fruit{}
35+\end{minipage} \\
32\midrule
36\midrule
33\endhead
37\endhead
34Bans\footnote{table cell footnote} \\
38Bans\footnote{table cell footnote} \\
test/command/6890.md+2−2
@@ -23,12 +23,12 @@ references:
23
23
24@fruchtel-sozialer-2013a
24@fruchtel-sozialer-2013a
25
25
26−Some text [^1].
26+Some text.[^1]
27
27
28[^1]: @fruchtel-sozialer-2013a
28[^1]: @fruchtel-sozialer-2013a
29^D
29^D
30[Para [Cite [Citation {citationId = "fruchtel-sozialer-2013a", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 1, citationHash = 0}] [Str "Fr\252chtel,",Space,Str "Budde,",Space,Str "and",Space,Str "Cyprian",Space,Str "(2013)"]]
30[Para [Cite [Citation {citationId = "fruchtel-sozialer-2013a", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 1, citationHash = 0}] [Str "Fr\252chtel,",Space,Str "Budde,",Space,Str "and",Space,Str "Cyprian",Space,Str "(2013)"]]
31−,Para [Str "Some",Space,Str "text",Str ".",Note [Para [Cite [Citation {citationId = "fruchtel-sozialer-2013a", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 2, citationHash = 0}] [Str "Fr\252chtel,",Space,Str "Budde,",Space,Str "and",Space,Str "Cyprian",Space,Str "(2013)"]]],Str ""]
31+,Para [Str "Some",Space,Str "text.",Note [Para [Cite [Citation {citationId = "fruchtel-sozialer-2013a", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 2, citationHash = 0}] [Str "Fr\252chtel,",Space,Str "Budde,",Space,Str "and",Space,Str "Cyprian",Space,Str "(2013)"]]]]
32,Div ("refs",["references","csl-bib-body","hanging-indent"],[])
32,Div ("refs",["references","csl-bib-body","hanging-indent"],[])
33 [Div ("ref-fruchtel-sozialer-2013a",["csl-entry"],[])
33 [Div ("ref-fruchtel-sozialer-2013a",["csl-entry"],[])
34 [Para [Str "Fr\252chtel,",Space,Str "Frank,",Space,Str "Wolfgang",Space,Str "Budde,",Space,Str "and",Space,Str "Gudrun",Space,Str "Cyprian.",Space,Str "2013.",Space,Emph [Str "Sozialer",Space,Str "Raum",Space,Str "und",Space,Str "Soziale",Space,Str "Arbeit",Space,Str "Fieldbook:",Space,Str "Methoden",Space,Str "und",Space,Str "Techniken"],Str ".",Space,Str "3rd",Space,Str "ed.",Space,Str "Wiesbaden,",Space,Str "Germany:",Space,Str "Springer",Space,Str "VS."]]]]
34 [Para [Str "Fr\252chtel,",Space,Str "Frank,",Space,Str "Wolfgang",Space,Str "Budde,",Space,Str "and",Space,Str "Gudrun",Space,Str "Cyprian.",Space,Str "2013.",Space,Emph [Str "Sozialer",Space,Str "Raum",Space,Str "und",Space,Str "Soziale",Space,Str "Arbeit",Space,Str "Fieldbook:",Space,Str "Methoden",Space,Str "und",Space,Str "Techniken"],Str ".",Space,Str "3rd",Space,Str "ed.",Space,Str "Wiesbaden,",Space,Str "Germany:",Space,Str "Springer",Space,Str "VS."]]]]
test/command/7099.md+1−1
@@ -11,7 +11,7 @@
11<iframe src="h:invalid@url"></iframe>
11<iframe src="h:invalid@url"></iframe>
12^D
12^D
13[INFO] Fetching h:invalid@url...
13[INFO] Fetching h:invalid@url...
14−[WARNING] Could not fetch resource 'h:invalid@url': Could not fetch h:invalid@url
14+[WARNING] Could not fetch resource h:invalid@url: Could not fetch h:invalid@url
15 InvalidUrlException "h:invalid@url" "Invalid scheme"
15 InvalidUrlException "h:invalid@url" "Invalid scheme"
16[INFO] Skipped '<iframe src="h:invalid@url"></iframe>' at input line 1 column 29
16[INFO] Skipped '<iframe src="h:invalid@url"></iframe>' at input line 1 column 29
17[]
17[]
test/command/7272.md+4−1
@@ -18,7 +18,10 @@
18 >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.00}}@{}}
18 >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.00}}@{}}
19\toprule
19\toprule
20\endhead
20\endhead
21−{\vtop{\hbox{\strut text}\hbox{\strut text2 }}} \\
21+\begin{minipage}[t]{\linewidth}\raggedright
22+{ text\\
23+text2 }\strut
24+\end{minipage} \\
22\bottomrule
25\bottomrule
23\end{longtable}
26\end{longtable}
24```
27```
test/command/7321.mdnew file+24
@@ -0,0 +1,24 @@
1+```
2+% pandoc -t plain --citeproc --wrap=none
3+---
4+references:
5+- id: fenner2012a
6+ title: One-click science marketing
7+ author:
8+ - family: Fenner
9+ given: Martin
10+ container-title: Nature Materials
11+ volume: 11
12+ issue: 4
13+ publisher: Nature Publishing Group
14+ type: article-journal
15+ issued:
16+ year: 2012
17+---
18+
19+[@fenner2012a, $a^2+b^2=c^2$]
20+^D
21+(Fenner 2012, a² + b² = c²)
22+
23+Fenner, Martin. 2012. “One-Click Science Marketing.” Nature Materials 11 (4).
24+```
test/command/7323.mdnew file+29
@@ -0,0 +1,29 @@
1+```
2+% pandoc --citeproc -t plain
3+---
4+references:
5+- id: smith
6+ author: John Smith
7+ issued: 2019
8+ title: Insects
9+ type: book
10+...
11+
12+@smith [chap. 6]
13+
14+@smith [chapter 6]
15+
16+@smith [Chap. 6]
17+
18+@smith [Chapter 6]
19+^D
20+John Smith (2019, chap. 6)
21+
22+John Smith (2019, chap. 6)
23+
24+John Smith (2019, chap. 6)
25+
26+John Smith (2019, chap. 6)
27+
28+John Smith. 2019. Insects.
29+```
test/command/7324.mdnew file+25
@@ -0,0 +1,25 @@
1+```
2+% pandoc --citeproc -t plain
3+---
4+references:
5+- id: smith
6+ author: John Smith
7+ issued: 2019
8+ title: Insects
9+ type: book
10+...
11+
12+@smith [, among others]
13+
14+@smith [ among others]
15+
16+@smith [among others]
17+^D
18+John Smith (2019, among others)
19+
20+John Smith (2019 among others)
21+
22+John Smith (2019, among others)
23+
24+John Smith. 2019. Insects.
25+```
test/command/7339.mdnew file+11
@@ -0,0 +1,11 @@
1+```
2+% pandoc -f gfm -s -t native
3+---
4+title: Test
5+---
6+
7+Hi
8+^D
9+Pandoc (Meta {unMeta = fromList [("title",MetaInlines [Str "Test"])]})
10+[Para [Str "Hi"]]
11+```
test/command/7340.mdnew file+6
@@ -0,0 +1,6 @@
1+```
2+% pandoc -f latex -t native
3+\(*\)
4+^D
5+[Para [Math InlineMath "*"]]
6+```
test/command/7376.mdnew file+16
@@ -0,0 +1,16 @@
1+```
2+% pandoc --citeproc -t plain
3+---
4+references:
5+- id: item1
6+ type: book
7+ author:
8+ - family: Doe
9+ given: Jane
10+ issued: 2020
11+ title: The title
12+...
13+^D
14+
15+
16+```
test/command/7394.mdnew file+85
@@ -0,0 +1,85 @@
1+```
2+% pandoc -f markdown -t plain --citeproc
3+---
4+csl: command/chicago-fullnote-bibliography.csl
5+references:
6+- author:
7+ - family: Wandt
8+ given: Manfred
9+ edition: 6
10+ id: wandt2014ges-sv
11+ issued: 2014
12+ publisher: Franz Vahlen
13+ publisher-place: München
14+ title: Gesetzliche schuldverhältnisse
15+ title-short: Gesetzl SV
16+ type: book
17+- author:
18+ - family: Smith
19+ given: Zenda
20+ edition: 6
21+ id: smith2015
22+ issued: 2015
23+ publisher: Macmillan
24+ publisher-place: New York
25+ title: A verb and a noun
26+ type: book
27+---
28+
29+Hi^[@wandt2014ges-sv.].
30+
31+Hi^[[@wandt2014ges-sv].].
32+
33+Hi^[[See also @wandt2014ges-sv].].
34+
35+Hi^[See also @wandt2014ges-sv.].
36+
37+Hi^[@wandt2014ges-sv [@smith2015].].
38+
39+Hi^[[@wandt2014ges-sv; @smith2015].].
40+
41+Hi [@wandt2014ges-sv].
42+
43+Hi [see also @wandt2014ges-sv].
44+
45+^D
46+Hi[1].
47+
48+Hi[2].
49+
50+Hi[3].
51+
52+Hi[4].
53+
54+Hi[5].
55+
56+Hi[6].
57+
58+Hi.[7]
59+
60+Hi.[8]
61+
62+Smith, Zenda. A Verb and a Noun. 6th ed. New York: Macmillan, 2015.
63+
64+Wandt, Manfred. Gesetzliche Schuldverhältnisse. 6th ed. München: Franz
65+Vahlen, 2014.
66+
67+[1] Manfred Wandt, Gesetzliche Schuldverhältnisse, 6th ed. (München:
68+Franz Vahlen, 2014).
69+
70+[2] Wandt.
71+
72+[3] See also Wandt.
73+
74+[4] See also Wandt.
75+
76+[5] Wandt, Zenda Smith, A Verb and a Noun, 6th ed. (New York: Macmillan,
77+2015).
78+
79+[6] Wandt, Gesetzl SV; Smith, A Verb and a Noun.
80+
81+[7] Wandt, Gesetzl SV.
82+
83+[8] See also Wandt.
84+```
85+
test/command/7397.mdnew file+14
@@ -0,0 +1,14 @@
1+````
2+% pandoc -t markdown
3+~~~~ { .haskell startFrom="100"}
4+qsort [] = []
5+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
6+ qsort (filter (>= x) xs)
7+~~~~
8+^D
9+``` {.haskell startFrom="100"}
10+qsort [] = []
11+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
12+ qsort (filter (>= x) xs)
13+```
14+````
test/command/7400.mdnew file+9
@@ -0,0 +1,9 @@
1+```
2+% pandoc -t native -s
3+---
4+# Comment only
5+...
6+^D
7+Pandoc (Meta {unMeta = fromList []})
8+[]
9+```
test/command/7416.mdnew file+19
@@ -0,0 +1,19 @@
1+```
2+% pandoc -f markdown -t html
3+![caption](../media/rId25.jpg "title"){alt="alt"}
4+
5+^D
6+<figure>
7+<img src="../media/rId25.jpg" title="title" alt="alt" /><figcaption>caption</figcaption>
8+</figure>
9+```
10+
11+```
12+% pandoc -f markdown -t html
13+![caption](../media/rId25.jpg "title")
14+
15+^D
16+<figure>
17+<img src="../media/rId25.jpg" title="title" alt="caption" /><figcaption aria-hidden="true">caption</figcaption>
18+</figure>
19+```
test/command/averroes.bibnew file+95
@@ -0,0 +1,95 @@
1+@string{anch-ie = {Angew.~Chem. Int.~Ed.}}
2+@string{cup = {Cambridge University Press}}
3+@string{dtv = {Deutscher Taschenbuch-Verlag}}
4+@string{hup = {Harvard University Press}}
5+@string{jams = {J.~Amer. Math. Soc.}}
6+@string{jchph = {J.~Chem. Phys.}}
7+@string{jomch = {J.~Organomet. Chem.}}
8+@string{pup = {Princeton University Press}}
9+
10+@book{averroes/bland,
11+ author = {Averroes},
12+ title = {The Epistle on the Possibility of Conjunction with the Active
13+ Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
14+ date = 1982,
15+ editor = {Bland, Kalman P.},
16+ translator = {Bland, Kalman P.},
17+ series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
18+ number = 7,
19+ publisher = {Jewish Theological Seminary of America},
20+ location = {New York},
21+ keywords = {primary},
22+ langid = {english},
23+ langidopts = {variant=american},
24+ indextitle = {Epistle on the Possibility of Conjunction, The},
25+ shorttitle = {Possibility of Conjunction},
26+ annotation = {A \texttt{book} entry with a \texttt{series} and a
27+ \texttt{number}. Note the concatenation of the \texttt{editor}
28+ and \texttt{translator} fields as well as the
29+ \texttt{indextitle} field},
30+}
31+
32+@book{averroes/hannes,
33+ author = {Averroes},
34+ title = {Des Averro{\"e}s Abhandlung: \mkbibquote{{\"U}ber die
35+ M{\"o}glichkeit der Conjunktion} oder \mkbibquote{{\"U}ber den
36+ materiellen Intellekt}},
37+ date = 1892,
38+ editor = {Hannes, Ludwig},
39+ translator = {Hannes, Ludwig},
40+ annotator = {Hannes, Ludwig},
41+ publisher = {C.~A. Kaemmerer},
42+ location = {Halle an der Saale},
43+ keywords = {primary},
44+ langid = {german},
45+ sorttitle = {Uber die Moglichkeit der Conjunktion},
46+ indexsorttitle= {Uber die Moglichkeit der Conjunktion},
47+ indextitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
48+ shorttitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
49+ annotation = {An annotated edition. Note the concatenation of the
50+ \texttt{editor}, \texttt{translator}, and \texttt{annotator}
51+ fields. Also note the \texttt{shorttitle},
52+ \texttt{indextitle}, \texttt{sorttitle}, and
53+ \texttt{indexsorttitle} fields},
54+}
55+
56+@book{averroes/hercz,
57+ author = {Averroes},
58+ title = {Drei Abhandlungen {\"u}ber die Conjunction des separaten
59+ Intellects mit dem Menschen},
60+ date = 1869,
61+ editor = {Hercz, J.},
62+ translator = {Hercz, J.},
63+ publisher = {S.~Hermann},
64+ location = {Berlin},
65+ keywords = {primary},
66+ langid = {german},
67+ indexsorttitle= {Drei Abhandlungen uber die Conjunction},
68+ indextitle = {Drei Abhandlungen {\"u}ber die Conjunction},
69+ subtitle = {Von Averroes (Vater und Sohn), aus dem Arabischen
70+ {\"u}bersetzt von Samuel Ibn Tibbon},
71+ shorttitle = {Drei Abhandlungen},
72+ annotation = {A \texttt{book} entry. Note the concatenation of the
73+ \texttt{editor} and \texttt{translator} fields as well as the
74+ \texttt{indextitle} and \texttt{indexsorttitle} fields},
75+}
76+
77+@book{cicero,
78+ author = {Cicero, Marcus Tullius},
79+ title = {De natura deorum. {\"U}ber das Wesen der G{\"o}tter},
80+ date = 1995,
81+ editor = {Blank-Sangmeister, Ursula},
82+ translator = {Blank-Sangmeister, Ursula},
83+ afterword = {Thraede, Klaus},
84+ language = {langlatin and langgerman},
85+ publisher = {Reclam},
86+ location = {Stuttgart},
87+ langid = {german},
88+ indextitle = {De natura deorum},
89+ shorttitle = {De natura deorum},
90+ annotation = {A bilingual edition of Cicero's \emph{De natura deorum}, with
91+ a German translation. Note the format of the \texttt{language}
92+ field in the database file, the concatenation of the
93+ \texttt{editor} and \texttt{translator} fields, and the
94+ \texttt{afterword} field},
95+}
test/command/biblatex-basic.md+5−3
@@ -1,3 +1,5 @@
1+```
2+% pandoc -f biblatex -t markdown -s
1@Book{item1,
3@Book{item1,
2author="John Doe",
4author="John Doe",
3title="First Book",
5title="First Book",
@@ -27,7 +29,7 @@ year="2007"
27
29
28^D
30^D
29---
31---
30−nocite: '[@*]'
32+nocite: "[@*]"
31references:
33references:
32- author:
34- author:
33 - family: Doe
35 - family: Doe
@@ -44,9 +46,9 @@ references:
44 container-title: Journal of Generic Studies
46 container-title: Journal of Generic Studies
45 id: item2
47 id: item2
46 issued: 2006
48 issued: 2006
47− page: '33-34'
49+ page: 33-34
48 title: Article
50 title: Article
49− type: 'article-journal'
51+ type: article-journal
50 volume: 6
52 volume: 6
51- author:
53- author:
52 - family: Doe
54 - family: Doe
test/command/biblatex-examples.bibdeleted−1674
@@ -1,1674 +0,0 @@
1−@string{anch-ie = {Angew.~Chem. Int.~Ed.}}
2−@string{cup = {Cambridge University Press}}
3−@string{dtv = {Deutscher Taschenbuch-Verlag}}
4−@string{hup = {Harvard University Press}}
5−@string{jams = {J.~Amer. Math. Soc.}}
6−@string{jchph = {J.~Chem. Phys.}}
7−@string{jomch = {J.~Organomet. Chem.}}
8−@string{pup = {Princeton University Press}}
9−
10−@incollection{westfahl:space,
11− author = {Westfahl, Gary},
12− title = {The True Frontier},
13− subtitle = {Confronting and Avoiding the Realities of Space in {American}
14− Science Fiction Films},
15− pages = {55-65},
16− crossref = {westfahl:frontier},
17− langid = {english},
18− langidopts = {variant=american},
19− indextitle = {True Frontier, The},
20− annotation = {A cross-referenced article from a \texttt{collection}. This is
21− an \texttt{incollection} entry with a \texttt{crossref}
22− field. Note the \texttt{subtitle} and \texttt{indextitle}
23− fields},
24−}
25−
26−@set{set,
27− entryset = {herrmann,aksin,yoon},
28− annotation = {A \texttt{set} with three members. The \texttt{crossref} field
29− in the \texttt{@set} entry and the \texttt{entryset} field in
30− each set member entry is needed only when using BibTeX as the
31− backend},
32−}
33−
34−@set{stdmodel,
35− entryset = {glashow,weinberg,salam},
36− annotation = {A \texttt{set} with three members discussing the standard
37− model of particle physics. The \texttt{crossref} field
38− in the \texttt{@set} entry and the \texttt{entryset} field in
39− each set member entry is needed only when using BibTeX as the
40− backend},
41−}
42−
43−@article{aksin,
44− author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent
45− and {\c{C}}etinkaya, Bekir and Ni, Chaoying and
46− B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan},
47− title = {Effect of immobilization on catalytic characteristics of
48− saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck}
49− reactions},
50− journaltitle = jomch,
51− date = 2006,
52− volume = 691,
53− number = 13,
54− pages = {3027-3036},
55− indextitle = {Effect of immobilization on catalytic characteristics},
56−}
57−
58−@article{angenendt,
59− author = {Angenendt, Arnold},
60− title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der
61− Patrozinienkunde},
62− journaltitle = {Revue d'Histoire Eccl{\'e}siastique},
63− date = 2002,
64− volume = 97,
65− pages = {431--456, 791--823},
66− langid = {german},
67− indextitle = {In Honore Salvatoris},
68− shorttitle = {In Honore Salvatoris},
69− annotation = {A German article in a French journal. Apart from that, a
70− typical \texttt{article} entry. Note the \texttt{indextitle}
71− field},
72−}
73−
74−@article{baez/article,
75− author = {Baez, John C. and Lauda, Aaron D.},
76− title = {Higher-Dimensional Algebra {V}: 2-Groups},
77− journaltitle = {Theory and Applications of Categories},
78− date = 2004,
79− volume = 12,
80− pages = {423-491},
81− version = 3,
82− eprint = {math/0307200v3},
83− eprinttype = {arxiv},
84− langid = {english},
85− langidopts = {variant=american},
86− annotation = {An \texttt{article} with \texttt{eprint} and
87− \texttt{eprinttype} fields. Note that the arXiv reference is
88− transformed into a clickable link if \texttt{hyperref} support
89− has been enabled. Compare \texttt{baez\slash online}, which
90− is the same item given as an \texttt{online} entry},
91−}
92−
93−@article{bertram,
94− author = {Bertram, Aaron and Wentworth, Richard},
95− title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
96− journaltitle = jams,
97− date = 1996,
98− volume = 9,
99− number = 2,
100− pages = {529-571},
101− langid = {english},
102− langidopts = {variant=american},
103− shorttitle = {Gromov invariants},
104− annotation = {An \texttt{article} entry with a \texttt{volume} and a
105− \texttt{number} field},
106−}
107−
108−@article{doody,
109− author = {Doody, Terrence},
110− title = {Hemingway's Style and {Jake's} Narration},
111− year = 1974,
112− volume = 4,
113− number = 3,
114− pages = {212-225},
115− langid = {english},
116− langidopts = {variant=american},
117− related = {matuz:doody},
118− relatedstring= {\autocap{e}xcerpt in},
119− journal = {The Journal of Narrative Technique},
120− annotation = {An \texttt{article} entry cited as an excerpt from a
121− \texttt{collection} entry. Note the format of the
122− \texttt{related} and \texttt{relatedstring} fields},
123−}
124−
125−@collection{matuz:doody,
126− editor = {Matuz, Roger},
127− title = {Contemporary Literary Criticism},
128− year = 1990,
129− volume = 61,
130− publisher = {Gale},
131− location = {Detroit},
132− pages = {204-208},
133− langid = {english},
134− langidopts = {variant=american},
135− annotation = {A \texttt{collection} entry providing the excerpt information
136− for the \texttt{doody} entry. Note the format of the
137− \texttt{pages} field},
138−}
139−
140−@article{gillies,
141− author = {Gillies, Alexander},
142− title = {Herder and the Preparation of {Goethe's} Idea of World
143− Literature},
144− journaltitle = {Publications of the English Goethe Society},
145− date = 1933,
146− series = {newseries},
147− volume = 9,
148− pages = {46-67},
149− langid = {english},
150− langidopts = {variant=british},
151− annotation = {An \texttt{article} entry with a \texttt{series} and a
152− \texttt{volume} field. Note that format of the \texttt{series}
153− field in the database file},
154−}
155−
156−@article{glashow,
157− author = {Glashow, Sheldon},
158− title = {Partial Symmetries of Weak Interactions},
159− journaltitle = {Nucl.~Phys.},
160− date = 1961,
161− volume = 22,
162− pages = {579-588},
163−}
164−
165−@article{herrmann,
166− author = {Herrmann, Wolfgang A. and {\"O}fele, Karl and Schneider,
167− Sabine K. and Herdtweck, Eberhardt and Hoffmann, Stephan D.},
168− title = {A carbocyclic carbene as an efficient catalyst ligand for {C--C}
169− coupling reactions},
170− journaltitle = anch-ie,
171− date = 2006,
172− volume = 45,
173− number = 23,
174− pages = {3859-3862},
175− indextitle = {Carbocyclic carbene as an efficient catalyst, A},
176−}
177−
178−@article{kastenholz,
179− author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.},
180− title = {Computation of methodology\hyphen independent ionic solvation
181− free energies from molecular simulations},
182− journaltitle = jchph,
183− date = 2006,
184− subtitle = {{I}. {The} electrostatic potential in molecular liquids},
185− volume = 124,
186− eid = 124106,
187− doi = {10.1063/1.2172593},
188− langid = {english},
189− langidopts = {variant=american},
190− indextitle = {Computation of ionic solvation free energies},
191− annotation = {An \texttt{article} entry with an \texttt{eid} and a
192− \texttt{doi} field. Note that the \textsc{doi} is transformed
193− into a clickable link if \texttt{hyperref} support has been
194− enabled},
195− abstract = {The computation of ionic solvation free energies from
196− atomistic simulations is a surprisingly difficult problem that
197− has found no satisfactory solution for more than 15 years. The
198− reason is that the charging free energies evaluated from such
199− simulations are affected by very large errors. One of these is
200− related to the choice of a specific convention for summing up
201− the contributions of solvent charges to the electrostatic
202− potential in the ionic cavity, namely, on the basis of point
203− charges within entire solvent molecules (M scheme) or on the
204− basis of individual point charges (P scheme). The use of an
205− inappropriate convention may lead to a charge-independent
206− offset in the calculated potential, which depends on the
207− details of the summation scheme, on the quadrupole-moment
208− trace of the solvent molecule, and on the approximate form
209− used to represent electrostatic interactions in the
210− system. However, whether the M or P scheme (if any) represents
211− the appropriate convention is still a matter of on-going
212− debate. The goal of the present article is to settle this
213− long-standing controversy by carefully analyzing (both
214− analytically and numerically) the properties of the
215− electrostatic potential in molecular liquids (and inside
216− cavities within them).},
217−}
218−
219−@article{murray,
220− author = {Hostetler, Michael J. and Wingate, Julia E. and Zhong,
221− Chuan-Jian and Harris, Jay E. and Vachet, Richard W. and
222− Clark, Michael R. and Londono, J. David and Green, Stephen
223− J. and Stokes, Jennifer J. and Wignall, George D. and Glish,
224− Gary L. and Porter, Marc D. and Evans, Neal D. and Murray,
225− Royce W.},
226− title = {Alkanethiolate gold cluster molecules with core diameters from
227− 1.5 to 5.2~{nm}},
228− journaltitle = {Langmuir},
229− date = 1998,
230− subtitle = {Core and monolayer properties as a function of core size},
231− volume = 14,
232− number = 1,
233− pages = {17-30},
234− langid = {english},
235− langidopts = {variant=american},
236− indextitle = {Alkanethiolate gold cluster molecules},
237− shorttitle = {Alkanethiolate gold cluster molecules},
238− annotation = {An \texttt{article} entry with \arabic{author} authors. By
239− default, long author and editor lists are automatically
240− truncated. This is configurable},
241−}
242−
243−@article{reese,
244− author = {Reese, Trevor R.},
245− title = {Georgia in {Anglo-Spanish} Diplomacy, 1736--1739},
246− journaltitle = {William and Mary Quarterly},
247− date = 1958,
248− series = 3,
249− volume = 15,
250− pages = {168-190},
251− langid = {english},
252− langidopts = {variant=american},
253− annotation = {An \texttt{article} entry with a \texttt{series} and a
254− \texttt{volume} field. Note the format of the series. If the
255− value of the \texttt{series} field is an integer, this number
256− is printed as an ordinal and the string \enquote*{series} is
257− appended automatically},
258−}
259−
260−@article{sarfraz,
261− author = {M. Sarfraz and M. F. A. Razzak},
262− title = {Technical section: {An} algorithm for automatic capturing of
263− the font outlines},
264− year = 2002,
265− volume = 26,
266− number = 5,
267− pages = {795-804},
268− issn = {0097-8493},
269− journal = {Computers and Graphics},
270− annotation = {An \texttt{article} entry with an \texttt{issn} field},
271−}
272−
273−@article{shore,
274− author = {Shore, Bradd},
275− title = {Twice-Born, Once Conceived},
276− journaltitle = {American Anthropologist},
277− date = {1991-03},
278− subtitle = {Meaning Construction and Cultural Cognition},
279− series = {newseries},
280− volume = 93,
281− number = 1,
282− pages = {9-27},
283− annotation = {An \texttt{article} entry with \texttt{series},
284− \texttt{volume}, and \texttt{number} fields. Note the format
285− of the \texttt{series} which is a localization key},
286−}
287−
288−@article{sigfridsson,
289− author = {Sigfridsson, Emma and Ryde, Ulf},
290− title = {Comparison of methods for deriving atomic charges from the
291− electrostatic potential and moments},
292− journaltitle = {Journal of Computational Chemistry},
293− date = 1998,
294− volume = 19,
295− number = 4,
296− pages = {377-395},
297− doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
298− langid = {english},
299− langidopts = {variant=american},
300− indextitle = {Methods for deriving atomic charges},
301− annotation = {An \texttt{article} entry with \texttt{volume},
302− \texttt{number}, and \texttt{doi} fields. Note that the
303− \textsc{doi} is transformed into a clickable link if
304− \texttt{hyperref} support has been enabled},
305− abstract = {Four methods for deriving partial atomic charges from the
306− quantum chemical electrostatic potential (CHELP, CHELPG,
307− Merz-Kollman, and RESP) have been compared and critically
308− evaluated. It is shown that charges strongly depend on how and
309− where the potential points are selected. Two alternative
310− methods are suggested to avoid the arbitrariness in the
311− point-selection schemes and van der Waals exclusion radii:
312− CHELP-BOW, which also estimates the charges from the
313− electrostatic potential, but with potential points that are
314− Boltzmann-weighted after their occurrence in actual
315− simulations using the energy function of the program in which
316− the charges will be used, and CHELMO, which estimates the
317− charges directly from the electrostatic multipole
318− moments. Different criteria for the quality of the charges are
319− discussed.},
320−}
321−
322−@article{spiegelberg,
323− author = {Spiegelberg, Herbert},
324− title = {\mkbibquote{Intention} und \mkbibquote{Intentionalit{\"a}t} in
325− der Scholastik, bei Brentano und Husserl},
326− journaltitle = {Studia Philosophica},
327− date = 1969,
328− volume = 29,
329− pages = {189-216},
330− langid = {german},
331− sorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano
332− und Husserl},
333− indexsorttitle= {Intention und Intentionalitat in der Scholastik, bei Brentano
334− und Husserl},
335− shorttitle = {Intention und Intentionalit{\"a}t},
336− annotation = {An \texttt{article} entry. Note the \texttt{sorttitle} and
337− \texttt{indexsorttitle} fields and the markup of the quotes in
338− the database file},
339−}
340−
341−@article{springer,
342− author = {Springer, Otto},
343− title = {Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}},
344− journaltitle = {Mediaeval Studies},
345− date = 1950,
346− volume = 12,
347− pages = {92-122},
348− langid = {english},
349− langidopts = {variant=british},
350− shorttitle = {Mediaeval Pilgrim Routes},
351− annotation = {A plain \texttt{article} entry},
352−}
353−
354−@article{weinberg,
355− author = {Weinberg, Steven},
356− title = {A Model of Leptons},
357− journaltitle = {Phys.~Rev.~Lett.},
358− date = 1967,
359− volume = 19,
360− pages = {1264-1266},
361−}
362−
363−@article{yoon,
364− author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn,
365− Kyo Han},
366− title = {Palladium pincer complexes with reduced bond angle strain:
367− efficient catalysts for the {Heck} reaction},
368− journaltitle = {Organometallics},
369− date = 2006,
370− volume = 25,
371− number = 10,
372− pages = {2409-2411},
373− indextitle = {Palladium pincer complexes},
374−}
375−
376−@book{aristotle:anima,
377− author = {Aristotle},
378− title = {De Anima},
379− date = 1907,
380− editor = {Hicks, Robert Drew},
381− publisher = cup,
382− location = {Cambridge},
383− keywords = {primary},
384− langid = {english},
385− langidopts = {variant=british},
386− annotation = {A \texttt{book} entry with an \texttt{author} and an
387− \texttt{editor}},
388−}
389−
390−@book{aristotle:physics,
391− author = {Aristotle},
392− title = {Physics},
393− date = 1929,
394− translator = {Wicksteed, P. H. and Cornford, F. M.},
395− publisher = {G. P. Putnam},
396− location = {New York},
397− keywords = {primary},
398− langid = {english},
399− langidopts = {variant=american},
400− shorttitle = {Physics},
401− annotation = {A \texttt{book} entry with a \texttt{translator} field},
402−}
403−
404−@book{aristotle:poetics,
405− author = {Aristotle},
406− title = {Poetics},
407− date = 1968,
408− editor = {Lucas, D. W.},
409− series = {Clarendon {Aristotle}},
410− publisher = {Clarendon Press},
411− location = {Oxford},
412− keywords = {primary},
413− langid = {english},
414− langidopts = {variant=british},
415− shorttitle = {Poetics},
416− annotation = {A \texttt{book} entry with an \texttt{author} and an
417− \texttt{editor} as well as a \texttt{series} field},
418−}
419−
420−@book{aristotle:rhetoric,
421− author = {Aristotle},
422− title = {The Rhetoric of {Aristotle} with a commentary by the late {Edward
423− Meredith Cope}},
424− date = 1877,
425− editor = {Cope, Edward Meredith},
426− commentator = {Cope, Edward Meredith},
427− volumes = 3,
428− publisher = cup,
429− keywords = {primary},
430− langid = {english},
431− langidopts = {variant=british},
432− sorttitle = {Rhetoric of Aristotle},
433− indextitle = {Rhetoric of {Aristotle}, The},
434− shorttitle = {Rhetoric},
435− annotation = {A commented edition. Note the concatenation of the
436− \texttt{editor} and \texttt{commentator} fields as well as the
437− \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle}
438− fields},
439−}
440−
441−@book{augustine,
442− author = {Augustine, Robert L.},
443− title = {Heterogeneous catalysis for the synthetic chemist},
444− date = 1995,
445− publisher = {Marcel Dekker},
446− location = {New York},
447− langid = {english},
448− langidopts = {variant=american},
449− shorttitle = {Heterogeneous catalysis},
450− annotation = {A plain \texttt{book} entry},
451−}
452−
453−@book{averroes/bland,
454− author = {Averroes},
455− title = {The Epistle on the Possibility of Conjunction with the Active
456− Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
457− date = 1982,
458− editor = {Bland, Kalman P.},
459− translator = {Bland, Kalman P.},
460− series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
461− number = 7,
462− publisher = {Jewish Theological Seminary of America},
463− location = {New York},
464− keywords = {primary},
465− langid = {english},
466− langidopts = {variant=american},
467− indextitle = {Epistle on the Possibility of Conjunction, The},
468− shorttitle = {Possibility of Conjunction},
469− annotation = {A \texttt{book} entry with a \texttt{series} and a
470− \texttt{number}. Note the concatenation of the \texttt{editor}
471− and \texttt{translator} fields as well as the
472− \texttt{indextitle} field},
473−}
474−
475−@book{averroes/hannes,
476− author = {Averroes},
477− title = {Des Averro{\"e}s Abhandlung: \mkbibquote{{\"U}ber die
478− M{\"o}glichkeit der Conjunktion} oder \mkbibquote{{\"U}ber den
479− materiellen Intellekt}},
480− date = 1892,
481− editor = {Hannes, Ludwig},
482− translator = {Hannes, Ludwig},
483− annotator = {Hannes, Ludwig},
484− publisher = {C.~A. Kaemmerer},
485− location = {Halle an der Saale},
486− keywords = {primary},
487− langid = {german},
488− sorttitle = {Uber die Moglichkeit der Conjunktion},
489− indexsorttitle= {Uber die Moglichkeit der Conjunktion},
490− indextitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
491− shorttitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
492− annotation = {An annotated edition. Note the concatenation of the
493− \texttt{editor}, \texttt{translator}, and \texttt{annotator}
494− fields. Also note the \texttt{shorttitle},
495− \texttt{indextitle}, \texttt{sorttitle}, and
496− \texttt{indexsorttitle} fields},
497−}
498−
499−@book{averroes/hercz,
500− author = {Averroes},
501− title = {Drei Abhandlungen {\"u}ber die Conjunction des separaten
502− Intellects mit dem Menschen},
503− date = 1869,
504− editor = {Hercz, J.},
505− translator = {Hercz, J.},
506− publisher = {S.~Hermann},
507− location = {Berlin},
508− keywords = {primary},
509− langid = {german},
510− indexsorttitle= {Drei Abhandlungen uber die Conjunction},
511− indextitle = {Drei Abhandlungen {\"u}ber die Conjunction},
512− subtitle = {Von Averroes (Vater und Sohn), aus dem Arabischen
513− {\"u}bersetzt von Samuel Ibn Tibbon},
514− shorttitle = {Drei Abhandlungen},
515− annotation = {A \texttt{book} entry. Note the concatenation of the
516− \texttt{editor} and \texttt{translator} fields as well as the
517− \texttt{indextitle} and \texttt{indexsorttitle} fields},
518−}
519−
520−@book{cicero,
521− author = {Cicero, Marcus Tullius},
522− title = {De natura deorum. {\"U}ber das Wesen der G{\"o}tter},
523− date = 1995,
524− editor = {Blank-Sangmeister, Ursula},
525− translator = {Blank-Sangmeister, Ursula},
526− afterword = {Thraede, Klaus},
527− language = {langlatin and langgerman},
528− publisher = {Reclam},
529− location = {Stuttgart},
530− langid = {german},
531− indextitle = {De natura deorum},
532− shorttitle = {De natura deorum},
533− annotation = {A bilingual edition of Cicero's \emph{De natura deorum}, with
534− a German translation. Note the format of the \texttt{language}
535− field in the database file, the concatenation of the
536− \texttt{editor} and \texttt{translator} fields, and the
537− \texttt{afterword} field},
538−}
539−
540−@book{coleridge,
541− author = {Coleridge, Samuel Taylor},
542− title = {Biographia literaria, or {Biographical} sketches of my literary
543− life and opinions},
544− date = 1983,
545− editor = {Coburn, Kathleen and Engell, James and Bate, W. Jackson},
546− maintitle = {The collected works of {Samuel Taylor Coleridge}},
547− volume = 7,
548− part = 2,
549− series = {Bollingen Series},
550− number = 75,
551− publisher = {Routledge {and} Kegan Paul},
552− location = {London},
553− langid = {english},
554− langidopts = {variant=british},
555− indextitle = {Biographia literaria},
556− shorttitle = {Biographia literaria},
557− annotation = {One (partial) volume of a multivolume book. This is a
558− \texttt{book} entry with a \texttt{volume} and a \texttt{part}
559− field which explicitly refers to the second (physical) part of
560− the seventh (logical) volume. Also note the \texttt{series}
561− and \texttt{number} fields},
562−}
563−
564−@book{companion,
565− author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
566− title = {The {LaTeX} Companion},
567− date = 1994,
568− edition = 1,
569− publisher = {Addison-Wesley},
570− location = {Reading, Mass.},
571− pagetotal = 528,
572− langid = {english},
573− langidopts = {variant=american},
574− sorttitle = {LaTeX Companion},
575− indextitle = {LaTeX Companion, The},
576− shorttitle = {LaTeX Companion},
577− annotation = {A book with three authors. Note the formatting of the author
578− list. By default, only the first name is reversed in the
579− bibliography},
580−}
581−
582−@book{cotton,
583− author = {Cotton, Frank Albert and Wilkinson, Geoffrey and Murillio,
584− Carlos A. and Bochmann, Manfred},
585− title = {Advanced inorganic chemistry},
586− date = 1999,
587− edition = 6,
588− publisher = {Wiley},
589− location = {Chichester},
590− langid = {english},
591− langidopts = {variant=british},
592− annotation = {A \texttt{book} entry with \arabic{author} authors and an
593− \texttt{edition} field. By default, long \texttt{author} and
594− \texttt{editor} lists are automatically truncated. This is
595− configurable},
596−}
597−
598−@book{gerhardt,
599− author = {Gerhardt, Michael J.},
600− title = {The Federal Appointments Process},
601− date = 2000,
602− publisher = {Duke University Press},
603− location = {Durham and London},
604− langid = {english},
605− langidopts = {variant=american},
606− sorttitle = {Federal Appointments Process},
607− indextitle = {Federal Appointments Process, The},
608− subtitle = {A Constitutional and Historical Analysis},
609− shorttitle = {Federal Appointments Process},
610− annotation = {This is a \texttt{book} entry. Note the format of the
611− \texttt{location} field as well as the \texttt{sorttitle} and
612− \texttt{indextitle} fields},
613−}
614−
615−@book{gonzalez,
616− author = {Gonzalez, Ray},
617− title = {The Ghost of {John Wayne} and Other Stories},
618− date = 2001,
619− publisher = {The University of Arizona Press},
620− location = {Tucson},
621− isbn = {0-816-52066-6},
622− langid = {english},
623− langidopts = {variant=american},
624− sorttitle = {Ghost of John Wayne and Other Stories},
625− indextitle = {Ghost of {John Wayne} and Other Stories, The},
626− shorttitle = {Ghost of {John Wayne}},
627− annotation = {A collection of short stories. This is a \texttt{book} entry.
628− Note the \texttt{sorttitle} and \texttt{indextitle} fields in
629− the database file. There's also an \texttt{isbn} field},
630−}
631−
632−@book{hammond,
633− author = {Hammond, Christopher},
634− title = {The basics of crystallography and diffraction},
635− date = 1997,
636− publisher = {International Union of Crystallography and Oxford University
637− Press},
638− location = {Oxford},
639− langid = {english},
640− langidopts = {variant=british},
641− sorttitle = {Basics of crystallography and diffraction},
642− indextitle = {Basics of crystallography and diffraction, The},
643− shorttitle = {Crystallography and diffraction},
644− annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
645− \texttt{indextitle} fields as well as the format of the
646− \texttt{publisher} field},
647−}
648−
649−@book{iliad,
650− author = {Homer},
651− title = {Die Ilias},
652− date = 2004,
653− translator = {Schadewaldt, Wolfgang},
654− introduction = {Latacz, Joachim},
655− edition = 3,
656− publisher = {Artemis \& Winkler},
657− location = {D{\"u}sseldorf and Z{\"u}rich},
658− langid = {german},
659− sorttitle = {Ilias},
660− indextitle = {Ilias, Die},
661− shorttitle = {Ilias},
662− annotation = {A German translation of the \emph{Iliad}. Note the
663− \texttt{translator} and \texttt{introduction} fields and the
664− format of the \texttt{location} field in the database
665− file. Also note the \texttt{sorttitle} and \texttt{indextitle}
666− fields},
667−}
668−
669−@book{knuth:ct,
670− author = {Knuth, Donald E.},
671− title = {Computers \& Typesetting},
672− date = {1984/1986},
673− volumes = 5,
674− publisher = {Addison-Wesley},
675− location = {Reading, Mass.},
676− langid = {english},
677− langidopts = {variant=american},
678− sortyear = {1984-0},
679− sorttitle = {Computers & Typesetting},
680− indexsorttitle= {Computers & Typesetting},
681− annotation = {A five-volume book cited as a whole. This is a \texttt{book}
682− entry, note the \texttt{volumes} field},
683−}
684−
685−@book{knuth:ct:a,
686− author = {Knuth, Donald E.},
687− title = {The {\TeX} book},
688− date = 1984,
689− maintitle = {Computers \& Typesetting},
690− volume = {A},
691− publisher = {Addison-Wesley},
692− location = {Reading, Mass.},
693− langid = {english},
694− langidopts = {variant=american},
695− sortyear = {1984-1},
696− sorttitle = {Computers & Typesetting A},
697− indexsorttitle= {The TeXbook},
698− indextitle = {\protect\TeX book, The},
699− shorttitle = {\TeX book},
700− annotation = {The first volume of a five-volume book. Note the
701− \texttt{sorttitle} and \texttt{sortyear} fields. We want this
702− volume to be listed after the entry referring to the entire
703− five-volume set. Also note the \texttt{indextitle} and
704− \texttt{indexsorttitle} fields. Indexing packages that don't
705− generate robust index entries require some control sequences
706− to be protected from expansion},
707−}
708−
709−@book{knuth:ct:b,
710− author = {Knuth, Donald E.},
711− title = {\TeX: The Program},
712− date = 1986,
713− maintitle = {Computers \& Typesetting},
714− volume = {B},
715− publisher = {Addison-Wesley},
716− location = {Reading, Mass.},
717− langid = {english},
718− langidopts = {variant=american},
719− sortyear = {1986-1},
720− sorttitle = {Computers & Typesetting B},
721− indexsorttitle= {TeX: The Program},
722− shorttitle = {\TeX},
723− annotation = {The second volume of a five-volume book. Note the
724− \texttt{sorttitle} and \texttt{sortyear} fields. Also note the
725− \texttt{indexsorttitle} field},
726−}
727−
728−@book{knuth:ct:c,
729− author = {Knuth, Donald E.},
730− title = {The {METAFONTbook}},
731− date = 1986,
732− maintitle = {Computers \& Typesetting},
733− volume = {C},
734− publisher = {Addison-Wesley},
735− location = {Reading, Mass.},
736− langid = {english},
737− langidopts = {variant=american},
738− sortyear = {1986-2},
739− sorttitle = {Computers & Typesetting C},
740− indextitle = {METAFONTbook, The},
741− shorttitle = {METAFONTbook},
742− annotation = {The third volume of a five-volume book. Note the
743− \texttt{sorttitle} and \texttt{sortyear} fields as well as the
744− \texttt{indextitle} field},
745−}
746−
747−@book{knuth:ct:d,
748− author = {Knuth, Donald E.},
749− title = {METAFONT: The Program},
750− date = 1986,
751− maintitle = {Computers \& Typesetting},
752− volume = {D},
753− publisher = {Addison-Wesley},
754− location = {Reading, Mass.},
755− langid = {english},
756− langidopts = {variant=american},
757− sortyear = {1986-3},
758− sorttitle = {Computers & Typesetting D},
759− shorttitle = {METAFONT},
760− annotation = {The fourth volume of a five-volume book. Note the
761− \texttt{sorttitle} and \texttt{sortyear} fields},
762−}
763−
764−@book{knuth:ct:e,
765− author = {Knuth, Donald E.},
766− title = {{Computer Modern} Typefaces},
767− date = 1986,
768− maintitle = {Computers \& Typesetting},
769− volume = {E},
770− publisher = {Addison-Wesley},
771− location = {Reading, Mass.},
772− langid = {english},
773− langidopts = {variant=american},
774− sortyear = {1986-4},
775− sorttitle = {Computers & Typesetting E},
776− annotation = {The fifth volume of a five-volume book. Note the
777− \texttt{sorttitle} and \texttt{sortyear} fields},
778−}
779−
780−@book{knuth:ct:related,
781− author = {Knuth, Donald E.},
782− title = {Computers \& Typesetting},
783− date = {1984/1986},
784− volumes = 5,
785− publisher = {Addison-Wesley},
786− location = {Reading, Mass.},
787− langid = {english},
788− langidopts = {variant=american},
789− sortyear = {1984-0},
790− sorttitle = {Computers & Typesetting},
791− indexsorttitle= {Computers & Typesetting},
792− related = {knuth:ct:a,knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e},
793− relatedtype = {multivolume},
794− annotation = {A five-volume book cited as a whole and related to its
795− individual volumes. Note the \texttt{related} and
796− \texttt{relatedtype} fields},
797−}
798−
799−@book{kullback,
800− author = {Kullback, Solomon},
801− title = {Information Theory and Statistics},
802− year = 1959,
803− publisher = {John Wiley \& Sons},
804− location = {New York},
805− langid = {english},
806− langidopts = {variant=american},
807−}
808−
809−@book{kullback:reprint,
810− author = {Kullback, Solomon},
811− title = {Information Theory and Statistics},
812− year = 1997,
813− publisher = {Dover Publications},
814− location = {New York},
815− origyear = 1959,
816− origpublisher= {John Wiley \& Sons},
817− langid = {english},
818− langidopts = {variant=american},
819− annotation = {A reprint of the \texttt{kullback} entry. Note the format of
820− \texttt{origyear} and \texttt{origpublisher}. These fields are
821− not used by the standard bibliography styles},
822−}
823−
824−@book{kullback:related,
825− author = {Kullback, Solomon},
826− title = {Information Theory and Statistics},
827− year = 1997,
828− publisher = {Dover Publications},
829− location = {New York},
830− langid = {english},
831− langidopts = {variant=american},
832− related = {kullback},
833− relatedtype = {origpubin},
834− annotation = {A reprint of the \texttt{kullback} entry. Note the format of
835− the \texttt{related} and \texttt{relatedtype} fields},
836−}
837−
838−@book{malinowski,
839− author = {Malinowski, Bronis{\l}aw},
840− title = {Argonauts of the {Western Pacific}},
841− date = 1972,
842− edition = 8,
843− publisher = {Routledge {and} Kegan Paul},
844− location = {London},
845− langid = {english},
846− langidopts = {variant=british},
847− subtitle = {An account of native enterprise and adventure in the
848− Archipelagoes of {Melanesian New Guinea}},
849− shorttitle = {Argonauts},
850− annotation = {This is a \texttt{book} entry. Note the format of the
851− \texttt{publisher} and \texttt{edition} fields as well as the
852− \texttt{subtitle} field},
853−}
854−
855−@book{maron,
856− author = {Maron, Monika},
857− title = {Animal Triste},
858− date = 2000,
859− translator = {Brigitte Goldstein},
860− origlanguage = {german},
861− publisher = {University of Nebraska Press},
862− location = {Lincoln},
863− langid = {english},
864− langidopts = {variant=american},
865− shorttitle = {Animal Triste},
866− annotation = {An English translation of a German novel with a French title.
867− In other words: a \texttt{book} entry with a
868− \texttt{translator} field. Note the \texttt{origlanguage}
869− field which is concatenated with the \texttt{translator}},
870−}
871−
872−@book{massa,
873− author = {Werner Massa},
874− title = {Crystal structure determination},
875− date = 2004,
876− edition = 2,
877− publisher = {Spinger},
878− location = {Berlin},
879− langid = {english},
880− langidopts = {variant=british},
881− annotation = {A \texttt{book} entry with an \texttt{edition} field},
882−}
883−
884−@article{moore,
885− author = {Moore, Gordon E.},
886− title = {Cramming more components onto integrated circuits},
887− journaltitle = {Electronics},
888− year = 1965,
889− volume = 38,
890− number = 8,
891− pages = {114-117},
892− langid = {english},
893− langidopts = {variant=american},
894−}
895−
896−@article{moore:related,
897− author = {Moore, Gordon E.},
898− title = {Cramming more components onto integrated circuits},
899− journaltitle = {Proceedings of the {IEEE}},
900− year = 1998,
901− volume = 86,
902− number = 1,
903− pages = {82-85},
904− langid = {english},
905− langidopts = {variant=american},
906− related = {moore},
907− relatedtype = {reprintfrom},
908− annotation = {A reprint of Moore's law. Note the \texttt{related} and
909− \texttt{relatedtype} fields},
910−}
911−
912−@book{nietzsche:ksa,
913− author = {Nietzsche, Friedrich},
914− title = {S{\"a}mtliche Werke},
915− date = 1988,
916− editor = {Colli, Giorgio and Montinari, Mazzino},
917− edition = 2,
918− volumes = 15,
919− publisher = dtv # { and Walter de Gruyter},
920− location = {M{\"u}nchen and Berlin and New York},
921− langid = {german},
922− sortyear = {1988-0},
923− sorttitle = {Werke-00-000},
924− indexsorttitle= {Samtliche Werke},
925− subtitle = {Kritische Studienausgabe},
926− annotation = {The critical edition of Nietzsche's works. This is a
927− \texttt{book} entry referring to a 15-volume work as a
928− whole. Note the \texttt{volumes} field and the format of the
929− \texttt{publisher} and \texttt{location} fields in the
930− database file. Also note the \texttt{sorttitle} and
931− \texttt{sortyear} fields which are used to fine-tune the
932− sorting order of the bibliography. We want this item listed
933− first in the bibliography},
934−}
935−
936−@book{nietzsche:ksa1,
937− author = {Nietzsche, Friedrich},
938− title = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
939− Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
940− date = 1988,
941− editor = {Colli, Giorgio and Montinari, Mazzino},
942− maintitle = {S{\"a}mtliche Werke},
943− mainsubtitle = {Kritische Studienausgabe},
944− volume = 1,
945− edition = 2,
946− publisher = dtv # { and Walter de Gruyter},
947− location = {M{\"u}nchen and Berlin and New York},
948− langid = {german},
949− sortyear = {1988-1},
950− sorttitle = {Werke-01-000},
951− indexsorttitle= {Samtliche Werke I},
952− bookauthor = {Nietzsche, Friedrich},
953− indextitle = {S{\"a}mtliche Werke I},
954− shorttitle = {S{\"a}mtliche Werke I},
955− annotation = {A single volume from the critical edition of Nietzsche's
956− works. This \texttt{book} entry explicitly refers to the first
957− volume only. Note the \texttt{title} and \texttt{maintitle}
958− fields. Also note the \texttt{sorttitle} and \texttt{sortyear}
959− fields. We want this entry to be listed after the entry
960− referring to the entire edition},
961−}
962−
963−@book{nussbaum,
964− author = {Nussbaum, Martha},
965− title = {Aristotle's \mkbibquote{De Motu Animalium}},
966− date = 1978,
967− publisher = pup,
968− location = {Princeton},
969− keywords = {secondary},
970− langid = {english},
971− langidopts = {variant=american},
972− sorttitle = {Aristotle's De Motu Animalium},
973− indexsorttitle= {Aristotle's De Motu Animalium},
974− annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
975− \texttt{indexsorttitle} fields and the markup of the quotes in
976− the database file},
977−}
978−
979−@book{piccato,
980− author = {Piccato, Pablo},
981− title = {City of Suspects},
982− date = 2001,
983− publisher = {Duke University Press},
984− location = {Durham and London},
985− langid = {english},
986− langidopts = {variant=american},
987− subtitle = {Crime in {Mexico City}, 1900--1931},
988− shorttitle = {City of Suspects},
989− annotation = {This is a \texttt{book} entry. Note the format of the
990− \texttt{location} field in the database file},
991−}
992−
993−@book{vangennep,
994− author = {van Gennep, Arnold},
995− title = {Les rites de passage},
996− date = 1909,
997− publisher = {Nourry},
998− location = {Paris},
999− options = {useprefix},
1000− langid = {french},
1001− sorttitle = {Rites de passage},
1002− indextitle = {Rites de passage, Les},
1003− shorttitle = {Rites de passage},
1004− annotation = {A \texttt{book} entry. Note the format of the printed name and
1005− compare the \texttt{useprefix} option in the \texttt{options}
1006− field as well as \texttt{brandt} and \texttt{geer}},
1007−}
1008−
1009−@book{vangennep:trans,
1010− author = {van Gennep, Arnold},
1011− title = {The Rites of Passage},
1012− year = 1960,
1013− translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
1014− language = {english},
1015− origlanguage = {french},
1016− publisher = {University of Chicago Press},
1017− options = {useprefix},
1018− indextitle = {Rites of Passage, The},
1019− sorttitle = {Rites of Passage},
1020− shorttitle = {Rites of Passage},
1021− langid = {english},
1022− langidopts = {variant=american},
1023− annotation = {A translation of the \texttt{vangennep} entry. Note the
1024− \texttt{translator} and \texttt{origlanguage} fields. Compare
1025− with the \texttt{vangennep:related} entry.},
1026−}
1027−
1028−@book{vangennep:related,
1029− author = {van Gennep, Arnold},
1030− title = {Les rites de passage},
1031− date = 1909,
1032− publisher = {Nourry},
1033− location = {Paris},
1034− options = {useprefix},
1035− langid = {french},
1036− related = {vizedom:related},
1037− relatedtype = {bytranslator},
1038− sorttitle = {Rites de passage},
1039− indextitle = {Rites de passage, Les},
1040− shorttitle = {Rites de passage},
1041− annotation = {A variant of the \texttt{vangennep} entry related to its
1042− translation. Note the format of the \texttt{related} and
1043− \texttt{relatedtype} fields},
1044−}
1045−
1046−@book{vizedom:related,
1047− title = {The Rites of Passage},
1048− year = 1960,
1049− translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
1050− language = {english},
1051− publisher = {University of Chicago Press},
1052− langid = {english},
1053− langidopts = {variant=american},
1054− options = {usetranslator},
1055− related = {vangennep},
1056− relatedtype = {translationof},
1057− indextitle = {Rites of Passage, The},
1058− sorttitle = {Rites of Passage},
1059− shorttitle = {Rites of Passage},
1060− annotation = {A translated work from \texttt{vangennep}. Note the format of
1061− the \texttt{related} and \texttt{relatedtype} fields},
1062−}
1063−
1064−@book{vazques-de-parga,
1065− author = {V{\'a}zques{ de }Parga, Luis and Lacarra, Jos{\'e} Mar{\'i}a
1066− and Ur{\'i}a R{\'i}u, Juan},
1067− title = {Las Peregrinaciones a Santiago de Compostela},
1068− date = 1993,
1069− volumes = 3,
1070− note = {Ed. facs. de la realizada en 1948--49},
1071− publisher = {Iberdrola},
1072− location = {Pamplona},
1073− langid = {spanish},
1074− sorttitle = {Peregrinaciones a Santiago de Compostela},
1075− indextitle = {Peregrinaciones a Santiago de Compostela, Las},
1076− shorttitle = {Peregrinaciones},
1077− annotation = {A multivolume book cited as a whole. This is a \texttt{book}
1078− entry with \texttt{volumes}, \texttt{note},
1079− \texttt{sorttitle}, and \texttt{indextitle} fields},
1080−}
1081−
1082−@book{wilde,
1083− author = {Wilde, Oscar},
1084− title = {The Importance of Being Earnest: A Trivial Comedy for Serious
1085− People},
1086− year = 1899,
1087− series = {English and {American} drama of the Nineteenth Century},
1088− publisher = {Leonard Smithers {and} Company},
1089− eprint = {4HIWAAAAYAAJ},
1090− eprinttype = {googlebooks},
1091− annotation = {A \texttt{book} with \texttt{eprint} and \texttt{eprinttype}
1092− fields.},
1093−}
1094−
1095−@book{worman,
1096− author = {Worman, Nancy},
1097− title = {The Cast of Character},
1098− date = 2002,
1099− publisher = {University of Texas Press},
1100− location = {Austin},
1101− langid = {english},
1102− langidopts = {variant=american},
1103− sorttitle = {Cast of Character},
1104− indextitle = {Cast of Character, The},
1105− subtitle = {Style in {Greek} Literature},
1106− shorttitle = {Cast of Character},
1107− annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
1108− \texttt{indextitle} fields},
1109−}
1110−
1111−@collection{britannica,
1112− editor = {Preece, Warren E.},
1113− title = {The {New Encyclop{\ae}dia Britannica}},
1114− date = 2003,
1115− edition = 15,
1116− volumes = 32,
1117− publisher = {Encyclop{\ae}dia Britannica},
1118− location = {Chicago, Ill.},
1119− options = {useeditor=false},
1120− label = {EB},
1121− langid = {english},
1122− langidopts = {variant=british},
1123− sorttitle = {Encyclop{\ae}dia Britannica},
1124− indextitle = {{Encyclop{\ae}dia Britannica}, The {New}},
1125− shorttitle = {{Encyclop{\ae}dia Britannica}},
1126− annotation = {This is a \texttt{collection} entry for an encyclopedia. Note
1127− the \texttt{useeditor} option in the \texttt{options} field as
1128− well as the \texttt{sorttitle} field. We want this entry to be
1129− cited and alphabetized by title even though there is an
1130− editor. In addition to that, we want the title to be
1131− alphabetized under \enquote*{E} rather than \enquote*{T}. Also
1132− note the \texttt{label} field which is provided for
1133− author-year citation styles},
1134−}
1135−
1136−@collection{gaonkar,
1137− editor = {Gaonkar, Dilip Parameshwar},
1138− title = {Alternative Modernities},
1139− date = 2001,
1140− publisher = {Duke University Press},
1141− location = {Durham and London},
1142− isbn = {0-822-32714-7},
1143− langid = {english},
1144− langidopts = {variant=american},
1145− annotation = {This is a \texttt{collection} entry. Note the format of the
1146− \texttt{location} field in the database file as well as the
1147− \texttt{isbn} field},
1148−}
1149−
1150−@InCollection{gaonkar:in,
1151− author = {Gaonkar, Dilip Parameshwar},
1152− editor = {Gaonkar, Dilip Parameshwar},
1153− title = {On Alternative Modernities},
1154− date = 2001,
1155− booktitle = {Alternative Modernities},
1156− publisher = {Duke University Press},
1157− location = {Durham and London},
1158− isbn = {0-822-32714-7},
1159− pages = {1-23},
1160−}
1161−
1162−@collection{jaffe,
1163− editor = {Jaff{\'e}, Philipp},
1164− title = {Regesta Pontificum Romanorum ab condita ecclesia ad annum post
1165− Christum natum \textsc{mcxcviii}},
1166− date = {1885/1888},
1167− editora = {Loewenfeld, Samuel and Kaltenbrunner, Ferdinand and Ewald,
1168− Paul},
1169− edition = 2,
1170− volumes = 2,
1171− location = {Leipzig},
1172− langid = {latin},
1173− editoratype = {redactor},
1174− indextitle = {Regesta Pontificum Romanorum},
1175− shorttitle = {Regesta Pontificum Romanorum},
1176− annotation = {A \texttt{collection} entry with \texttt{edition} and
1177− \texttt{volumes} fields. Note the \texttt{editora} and
1178− \texttt{editoratype} fields},
1179−}
1180−
1181−@collection{westfahl:frontier,
1182− editor = {Westfahl, Gary},
1183− title = {Space and Beyond},
1184− date = 2000,
1185− subtitle = {The Frontier Theme in Science Fiction},
1186− publisher = {Greenwood},
1187− location = {Westport, Conn. and London},
1188− langid = {english},
1189− langidopts = {variant=american},
1190− booktitle = {Space and Beyond},
1191− booksubtitle = {The Frontier Theme in Science Fiction},
1192− annotation = {This is a \texttt{collection} entry. Note the format of the
1193− \texttt{location} field as well as the \texttt{subtitle} and
1194− \texttt{booksubtitle} fields},
1195−}
1196−
1197−@inbook{kant:kpv,
1198− title = {Kritik der praktischen Vernunft},
1199− date = 1968,
1200− author = {Kant, Immanuel},
1201− booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
1202− bookauthor = {Kant, Immanuel},
1203− maintitle = {Kants Werke. Akademie Textausgabe},
1204− volume = 5,
1205− publisher = {Walter de Gruyter},
1206− location = {Berlin},
1207− pages = {1-163},
1208− shorthand = {KpV},
1209− langid = {german},
1210− shorttitle = {Kritik der praktischen Vernunft},
1211− annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
1212− is an \texttt{inbook} entry which explicitly refers to the
1213− \emph{Critique of Practical Reason} only, not to the entire
1214− fifth volume. Note the \texttt{author} and \texttt{bookauthor}
1215− fields in the database file. By default, the
1216− \texttt{bookauthor} is omitted if the values of the
1217− \texttt{author} and \texttt{bookauthor} fields are identical},
1218−}
1219−
1220−@inbook{kant:ku,
1221− title = {Kritik der Urtheilskraft},
1222− date = 1968,
1223− author = {Kant, Immanuel},
1224− booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
1225− bookauthor = {Kant, Immanuel},
1226− maintitle = {Kants Werke. Akademie Textausgabe},
1227− volume = 5,
1228− publisher = {Walter de Gruyter},
1229− location = {Berlin},
1230− pages = {165-485},
1231− shorthand = {KU},
1232− langid = {german},
1233− annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
1234− is an \texttt{inbook} entry which explicitly refers to the
1235− \emph{Critique of Judgment} only, not to the entire fifth
1236− volume},
1237−}
1238−
1239−@inbook{nietzsche:historie,
1240− title = {Unzeitgem{\"a}sse Betrachtungen. Zweites St{\"u}ck},
1241− date = 1988,
1242− author = {Nietzsche, Friedrich},
1243− booktitle = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
1244− Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
1245− bookauthor = {Nietzsche, Friedrich},
1246− editor = {Colli, Giorgio and Montinari, Mazzino},
1247− subtitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
1248− maintitle = {S{\"a}mtliche Werke},
1249− mainsubtitle = {Kritische Studienausgabe},
1250− volume = 1,
1251− publisher = dtv # { and Walter de Gruyter},
1252− location = {M{\"u}nchen and Berlin and New York},
1253− pages = {243-334},
1254− langid = {german},
1255− sortyear = {1988-2},
1256− sorttitle = {Werke-01-243},
1257− indexsorttitle= {Vom Nutzen und Nachtheil der Historie fur das Leben},
1258− indextitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
1259− shorttitle = {Vom Nutzen und Nachtheil der Historie},
1260− annotation = {A single essay from the critical edition of Nietzsche's works.
1261− This \texttt{inbook} entry explicitly refers to an essay found
1262− in the first volume. Note the \texttt{title},
1263− \texttt{booktitle}, and \texttt{maintitle} fields. Also note
1264− the \texttt{sorttitle} and \texttt{sortyear} fields. We want
1265− this entry to be listed after the entry referring to the
1266− entire first volume},
1267−}
1268−
1269−@incollection{brandt,
1270− author = {von Brandt, Ahasver and Erich Hoffmann},
1271− editor = {Ferdinand Seibt},
1272− title = {Die nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts
1273− bis 1448},
1274− date = 1987,
1275− booktitle = {Europa im Hoch- und Sp{\"a}tmittelalter},
1276− series = {Handbuch der europ{\"a}ischen Geschichte},
1277− number = 2,
1278− publisher = {Klett-Cotta},
1279− location = {Stuttgart},
1280− pages = {884-917},
1281− options = {useprefix=false},
1282− langid = {german},
1283− indexsorttitle= {Nordischen Lander von der Mitte des 11. Jahrhunderts bis
1284− 1448},
1285− indextitle = {Nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts bis
1286− 1448, Die},
1287− shorttitle = {Die nordischen L{\"a}nder},
1288− annotation = {An \texttt{incollection} entry with a \texttt{series} and a
1289− \texttt{number}. Note the format of the printed name and
1290− compare the \texttt{useprefix} option in the \texttt{options}
1291− field as well as \texttt{vangennep}. Also note the
1292− \texttt{indextitle, and \texttt{indexsorttitle} fields}},
1293−}
1294−
1295−@incollection{hyman,
1296− author = {Arthur Hyman},
1297− editor = {O'Meara, Dominic J.},
1298− title = {Aristotle's Theory of the Intellect and its Interpretation by
1299− {Averroes}},
1300− date = 1981,
1301− booktitle = {Studies in {Aristotle}},
1302− series = {Studies in Philosophy and the History of Philosophy},
1303− number = 9,
1304− publisher = {The Catholic University of America Press},
1305− location = {Washington, D.C.},
1306− pages = {161-191},
1307− keywords = {secondary},
1308− langid = {english},
1309− langidopts = {variant=american},
1310− indextitle = {Aristotle's Theory of the Intellect},
1311− shorttitle = {Aristotle's Theory of the Intellect},
1312− annotation = {An \texttt{incollection} entry with a \texttt{series} and
1313− \texttt{number} field},
1314−}
1315−
1316−@incollection{pines,
1317− author = {Pines, Shlomo},
1318− editor = {Twersky, Isadore},
1319− title = {The Limitations of Human Knowledge According to {Al-Farabi}, {ibn
1320− Bajja}, and {Maimonides}},
1321− date = 1979,
1322− booktitle = {Studies in Medieval {Jewish} History and Literature},
1323− publisher = hup,
1324− location = {Cambridge, Mass.},
1325− pages = {82-109},
1326− keywords = {secondary},
1327− langid = {english},
1328− langidopts = {variant=american},
1329− indextitle = {Limitations of Human Knowledge According to {Al-Farabi}, {ibn
1330− Bajja}, and {Maimonides}, The},
1331− shorttitle = {Limitations of Human Knowledge},
1332− annotation = {A typical \texttt{incollection} entry. Note the
1333− \texttt{indextitle} field},
1334−}
1335−
1336−@inproceedings{moraux,
1337− author = {Moraux, Paul},
1338− editor = {Lloyd, G. E. R. and Owen, G. E. L.},
1339− title = {Le \emph{De Anima} dans la tradition gr{\`e}cque},
1340− date = 1979,
1341− booktitle = {Aristotle on Mind and the Senses},
1342− subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de
1343− Theophraste {\`a} Themistius},
1344− booktitleaddon= {Proceedings of the Seventh Symposium Aristotelicum},
1345− eventdate = 1975,
1346− publisher = cup,
1347− location = {Cambridge},
1348− pages = {281-324},
1349− keywords = {secondary},
1350− langid = {french},
1351− indexsorttitle= {De Anima dans la tradition grecque},
1352− indextitle = {\emph{De Anima} dans la tradition gr{\`e}cque, Le},
1353− shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque},
1354− annotation = {This is a typical \texttt{inproceedings} entry. Note the
1355− \texttt{booksubtitle}, \texttt{shorttitle},
1356− \texttt{indextitle}, and \texttt{indexsorttitle} fields. Also
1357− note the \texttt{eventdate} field.},
1358−}
1359−
1360−@inproceedings{salam,
1361− author = {Salam, Abdus},
1362− editor = {Svartholm, Nils},
1363− title = {Weak and Electromagnetic Interactions},
1364− date = 1968,
1365− booktitle = {Elementary particle theory},
1366− booksubtitle = {Relativistic groups and analyticity},
1367− booktitleaddon= {Proceedings of the {Eighth Nobel Symposium}},
1368− eventdate = {1968-05-19/1968-05-25},
1369− venue = {Aspen{\"a}sgarden, Lerum},
1370− publisher = {Almquist \& Wiksell},
1371− location = {Stockholm},
1372− pages = {367-377},
1373−}
1374−
1375−@manual{cms,
1376− title = {The {Chicago} Manual of Style},
1377− date = 2003,
1378− subtitle = {The Essential Guide for Writers, Editors, and Publishers},
1379− edition = 15,
1380− publisher = {University of Chicago Press},
1381− location = {Chicago, Ill.},
1382− isbn = {0-226-10403-6},
1383− label = {CMS},
1384− langid = {english},
1385− langidopts = {variant=american},
1386− sorttitle = {Chicago Manual of Style},
1387− indextitle = {Chicago Manual of Style, The},
1388− shorttitle = {Chicago Manual of Style},
1389− annotation = {This is a \texttt{manual} entry without an \texttt{author} or
1390− \texttt{editor}. Note the \texttt{label} field in the database
1391− file which is provided for author-year citation styles. Also
1392− note the \texttt{sorttitle} and \texttt{indextitle} fields. By
1393− default, all entries without an \texttt{author} or
1394− \texttt{editor} are alphabetized by \texttt{title} but we want
1395− this entry to be alphabetized under \enquote*{C} rather than
1396− \enquote*{T}. There's also an \texttt{isbn} field},
1397−}
1398−
1399−@online{baez/online,
1400− author = {Baez, John C. and Lauda, Aaron D.},
1401− title = {Higher-Dimensional Algebra {V}: 2-Groups},
1402− date = {2004-10-27},
1403− version = 3,
1404− langid = {english},
1405− langidopts = {variant=american},
1406− eprinttype = {arxiv},
1407− eprint = {math/0307200v3},
1408− annotation = {An \texttt{online} reference from arXiv. Note the
1409− \texttt{eprint} and \texttt{eprinttype} fields. Compare
1410− \texttt{baez\slash article} which is the same item given as an
1411− \texttt{article} entry with eprint information},
1412−}
1413−
1414−@online{ctan,
1415− title = {CTAN},
1416− date = 2006,
1417− url = {http://www.ctan.org},
1418− subtitle = {The {Comprehensive TeX Archive Network}},
1419− urldate = {2006-10-01},
1420− label = {CTAN},
1421− langid = {english},
1422− langidopts = {variant=american},
1423− annotation = {This is an \texttt{online} entry. The \textsc{url}, which is
1424− given in the \texttt{url} field, is transformed into a
1425− clickable link if \texttt{hyperref} support has been
1426− enabled. Note the format of the \texttt{urldate} field
1427− (\texttt{yyyy-mm-dd}) in the database file. Also note the
1428− \texttt{label} field which may be used as a fallback by
1429− citation styles which need an \texttt{author} and\slash or a
1430− \texttt{year}},
1431−}
1432−
1433−@online{itzhaki,
1434− author = {Itzhaki, Nissan},
1435− title = {Some remarks on {'t Hooft's} {S}-matrix for black holes},
1436− date = {1996-03-11},
1437− version = 1,
1438− langid = {english},
1439− langidopts = {variant=american},
1440− eprinttype = {arxiv},
1441− eprint = {hep-th/9603067},
1442− annotation = {An \texttt{online} reference from arXiv. Note the
1443− \texttt{eprint} and \texttt{eprinttype} fields. Also note that
1444− the arXiv reference is transformed into a clickable link if
1445− \texttt{hyperref} support has been enabled},
1446− abstract = {We discuss the limitations of 't Hooft's proposal for the
1447− black hole S-matrix. We find that the validity of the S-matrix
1448− implies violation of the semi-classical approximation at
1449− scales large compared to the Planck scale. We also show that
1450− the effect of the centrifugal barrier on the S-matrix is
1451− crucial even for large transverse distances.},
1452−}
1453−
1454−@online{markey,
1455− author = {Markey, Nicolas},
1456− title = {Tame the {BeaST}},
1457− date = {2005-10-16},
1458− url = {http://mirror.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf},
1459− subtitle = {The {B} to {X} of {BibTeX}},
1460− version = {1.3},
1461− urldate = {2006-10-01},
1462− langid = {english},
1463− langidopts = {variant=american},
1464− sorttitle = {Tame the Beast},
1465− annotation = {An \texttt{online} entry for a tutorial. Note the format of
1466− the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database
1467− file.},
1468−}
1469−
1470−@online{wassenberg,
1471− author = {Wassenberg, Jan and Sanders, Peter},
1472− title = {Faster Radix Sort via Virtual Memory and Write-Combining},
1473− date = {2010-08-17},
1474− version = 1,
1475− langid = {english},
1476− langidopts = {variant=american},
1477− eprinttype = {arxiv},
1478− eprintclass = {cs.DS},
1479− eprint = {1008.2849v1},
1480− annotation = {A recent \texttt{online} reference from arXiv using the new
1481− (April 2007 onward) identifier format. Note the
1482− \texttt{eprint}, \texttt{eprinttype}, and \texttt{eprintclass}
1483− fields. Also note that the arXiv reference is transformed into
1484− a clickable link if \texttt{hyperref} support has been
1485− enabled},
1486− abstract = {Sorting algorithms are the deciding factor for the performance
1487− of common operations such as removal of duplicates or database
1488− sort-merge joins. This work focuses on 32-bit integer keys,
1489− optionally paired with a 32-bit value. We present a fast radix
1490− sorting algorithm that builds upon a microarchitecture-aware
1491− variant of counting sort},
1492−}
1493−
1494−@patent{almendro,
1495− author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez,
1496− Alberto and Nozal, Fernando},
1497− title = {Elektromagnetisches Signalhorn},
1498− number = {EU-29702195U},
1499− date = 1998,
1500− location = {countryfr and countryuk and countryde},
1501− langid = {german},
1502− annotation = {This is a \texttt{patent} entry with a \texttt{location}
1503− field. The number is given in the \texttt{number} field. Note
1504− the format of the \texttt{location} field in the database
1505− file. Compare \texttt{laufenberg}, \texttt{sorace}, and
1506− \texttt{kowalik}},
1507−}
1508−
1509−@patent{kowalik,
1510− author = {Kowalik, F. and Isard, M.},
1511− title = {Estimateur d'un d{\'e}faut de fonctionnement d'un modulateur
1512− en quadrature et {\'e}tage de modulation l'utilisant},
1513− number = 9500261,
1514− date = {1995-01-11},
1515− type = {patreqfr},
1516− langid = {french},
1517− indextitle = {Estimateur d'un d{\'e}faut de fonctionnement},
1518− annotation = {This is a \texttt{patent} entry for a French patent request
1519− with a full date. The number is given in the \texttt{number}
1520− field. Note the format of the \texttt{type} and \texttt{date}
1521− fields in the database file. Compare \texttt{almendro},
1522− \texttt{laufenberg}, and \texttt{sorace}},
1523−}
1524−
1525−@patent{laufenberg,
1526− author = {Laufenberg, Xaver and Eynius, Dominique and Suelzle, Helmut
1527− and Usbeck, Stephan and Spaeth, Matthias and Neuser-Hoffmann,
1528− Miriam and Myrzik, Christian and Schmid, Manfred and Nietfeld,
1529− Franz and Thiel, Alexander and Braun, Harald and Ebner,
1530− Norbert},
1531− title = {Elektrische Einrichtung und Betriebsverfahren},
1532− number = 1700367,
1533− date = {2006-09-13},
1534− holder = {{Robert Bosch GmbH} and {Daimler Chrysler AG} and {Bayerische
1535− Motoren Werke AG}},
1536− type = {patenteu},
1537− langid = {german},
1538− annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
1539− Note the format of the \texttt{type} and \texttt{location}
1540− fields in the database file. Compare \texttt{almendro},
1541− \texttt{sorace}, and \texttt{kowalik}},
1542− abstract = {The invention relates to an electric device comprising a
1543− generator, in particular for use in the vehicle electric
1544− system of a motor vehicle and a controller for controlling the
1545− generator voltage. The device is equipped with a control zone,
1546− in which the voltage is controlled and zones, in which the
1547− torque is controlled. The invention also relates to methods
1548− for operating a device of this type.},
1549− file = {http://v3.espacenet.com/textdoc?IDX=EP1700367},
1550−}
1551−
1552−@patent{sorace,
1553− author = {Sorace, Ronald E. and Reinhardt, Victor S. and Vaughn, Steven
1554− A.},
1555− title = {High-Speed Digital-to-{RF} Converter},
1556− number = 5668842,
1557− date = {1997-09-16},
1558− holder = {{Hughes Aircraft Company}},
1559− type = {patentus},
1560− langid = {english},
1561− langidopts = {variant=american},
1562− annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
1563− Note the format of the \texttt{type} and \texttt{date} fields
1564− in the database file. Compare \texttt{almendro},
1565− \texttt{laufenberg}, and \texttt{kowalik}},
1566−}
1567−
1568−@periodical{jcg,
1569− title = {Computers and Graphics},
1570− year = 2011,
1571− issuetitle = {Semantic {3D} Media and Content},
1572− volume = 35,
1573− number = 4,
1574− issn = {0097-8493},
1575− annotation = {This is a \texttt{periodical} entry with an \texttt{issn}
1576− field.},
1577−}
1578−
1579−@report{chiu,
1580− author = {Chiu, Willy W. and Chow, We Min},
1581− title = {A Hybrid Hierarchical Model of a {Multiple Virtual Storage}
1582− ({MVS}) Operating System},
1583− type = {resreport},
1584− institution = {IBM},
1585− date = 1978,
1586− number = {RC-6947},
1587− langid = {english},
1588− langidopts = {variant=american},
1589− sorttitle = {Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS)
1590− Operating System},
1591− indextitle = {Hybrid Hierarchical Model, A},
1592− annotation = {This is a \texttt{report} entry for a research report. Note
1593− the format of the \texttt{type} field in the database file
1594− which uses a localization key. The number of the report is
1595− given in the \texttt{number} field. Also note the
1596− \texttt{sorttitle} and \texttt{indextitle} fields},
1597−}
1598−
1599−@report{padhye,
1600− author = {Padhye, Jitendra and Firoiu, Victor and Towsley, Don},
1601− title = {A Stochastic Model of {TCP Reno} Congestion Avoidance and
1602− Control},
1603− type = {techreport},
1604− institution = {University of Massachusetts},
1605− date = 1999,
1606− number = {99-02},
1607− location = {Amherst, Mass.},
1608− langid = {english},
1609− langidopts = {variant=american},
1610− sorttitle = {A Stochastic Model of TCP Reno Congestion Avoidance and
1611− Control},
1612− indextitle = {Stochastic Model of {TCP Reno} Congestion Avoidance and Control,
1613− A},
1614− annotation = {This is a \texttt{report} entry for a technical report. Note
1615− the format of the \texttt{type} field in the database file
1616− which uses a localization key. The number of the report is
1617− given in the \texttt{number} field. Also note the
1618− \texttt{sorttitle} and \texttt{indextitle} fields},
1619− abstract = {The steady state performance of a bulk transfer TCP flow
1620− (i.e. a flow with a large amount of data to send, such as FTP
1621− transfers) may be characterized by three quantities. The first
1622− is the send rate, which is the amount of data sent by the
1623− sender in unit time. The second is the throughput, which is
1624− the amount of data received by the receiver in unit time. Note
1625− that the throughput will always be less than or equal to the
1626− send rate due to losses. Finally, the number of non-duplicate
1627− packets received by the receiver in unit time gives us the
1628− goodput of the connection. The goodput is always less than or
1629− equal to the throughput, since the receiver may receive two
1630− copies of the same packet due to retransmissions by the
1631− sender. In a previous paper, we presented a simple model for
1632− predicting the steady state send rate of a bulk transfer TCP
1633− flow as a function of loss rate and round trip time. In this
1634− paper, we extend that work in two ways. First, we analyze the
1635− performance of bulk transfer TCP flows using more precise,
1636− stochastic analysis. Second, we build upon the previous
1637− analysis to provide both an approximate formula as well as a
1638− more accurate stochastic model for the steady state throughput
1639− of a bulk transfer TCP flow.},
1640− file = {ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps},
1641−}
1642−
1643−@thesis{geer,
1644− author = {de Geer, Ingrid},
1645− title = {Earl, Saint, Bishop, Skald~-- and Music},
1646− type = {phdthesis},
1647− institution = {Uppsala Universitet},
1648− date = 1985,
1649− subtitle = {The {Orkney Earldom} of the Twelfth Century. {A} Musicological
1650− Study},
1651− location = {Uppsala},
1652− options = {useprefix=false},
1653− langid = {english},
1654− langidopts = {variant=british},
1655− annotation = {This is a typical \texttt{thesis} entry for a PhD thesis. Note
1656− the \texttt{type} field in the database file which uses a
1657− localization key. Also note the format of the printed name and
1658− compare the \texttt{useprefix} option in the \texttt{options}
1659− field as well as \texttt{vangennep}},
1660−}
1661−
1662−@thesis{loh,
1663− author = {Loh, Nin C.},
1664− title = {High-Resolution Micromachined Interferometric Accelerometer},
1665− type = {mathesis},
1666− institution = {Massachusetts Institute of Technology},
1667− date = 1992,
1668− location = {Cambridge, Mass.},
1669− langid = {english},
1670− langidopts = {variant=american},
1671− annotation = {This is a typical \texttt{thesis} entry for an MA thesis. Note
1672− the \texttt{type} field in the database file which uses a
1673− localization key},
1674−}
test/command/chap1/spider.pngnew file

Binary file not shown.

test/command/chap1/text.mdnew file+17
@@ -0,0 +1,17 @@
1+# Chapter one
2+
3+A spider: ![spider](spider.png)
4+
5+Another spider: ![another spider][refspider]
6+
7+The moon: ![moon](../../lalune.jpg)
8+
9+Link to [spider picture](spider.png).
10+
11+URL left alone: [manual](https://pandoc.org/MANUAL.html).
12+
13+Absolute path left alone: [absolute](/foo/bar/baz.png).
14+
15+Link to fragment: [chapter two](#chapter-two).
16+
17+Empty path: [empty]().
test/command/chap2/spider.pngnew file

Binary file not shown.

test/command/chap2/text.mdnew file+5
@@ -0,0 +1,5 @@
1+# Chapter two
2+
3+A spider: ![spider](spider.png)
4+
5+[refspider]: spider.png
test/command/defaults-inheritance-2.md+1−1
@@ -1,5 +1,5 @@
1```
1```
2−% pandoc -d command/defaults6
2+% pandoc -d command/defaults6 2>&1
3^D
3^D
4Error: Circular defaults file reference in 'command/defaults7.yaml'
4Error: Circular defaults file reference in 'command/defaults7.yaml'
5```
5```
test/command/newif.mdnew file+55
@@ -0,0 +1,55 @@
1+```
2+% pandoc -f latex -t plain
3+\iftrue
4+should print
5+\iftrue
6+should print
7+\else
8+should not print
9+\fi
10+\else
11+should not print
12+\fi
13+
14+\iffalse
15+should not print
16+\else
17+\iftrue
18+should print
19+\else
20+should not print
21+\fi
22+\fi
23+
24+\newif\ifepub
25+
26+\ifepub
27+should not print
28+\fi
29+
30+\epubtrue
31+
32+\ifepub
33+should print
34+\else
35+should not print
36+\fi
37+
38+\epubfalse
39+
40+\ifepub
41+should not print
42+\else
43+should print
44+\fi
45+^D
46+should print
47+
48+should print
49+
50+should print
51+
52+should print
53+
54+should print
55+```
test/command/pandoc-citeproc-119.md+1−1
@@ -1,7 +1,7 @@
1```
1```
2% pandoc --citeproc -t markdown-citations
2% pandoc --citeproc -t markdown-citations
3---
3---
4−bibliography: 'command/biblatex-examples.bib'
4+bibliography: 'command/averroes.bib'
5csl: command/apa.csl
5csl: command/apa.csl
6---
6---
7
7
test/command/pandoc-citeproc-322.md+1−1
@@ -19,7 +19,7 @@ references:
19 type: 'article-journal'
19 type: 'article-journal'
20---
20---
21
21
22−Foo[@timmory__justice_1950].
22+Foo [@timmory__justice_1950].
23^D
23^D
24Foo.[^1]
24Foo.[^1]
25
25
test/command/pandoc-citeproc-356.md+2−7
@@ -15,11 +15,6 @@ references:
15
15
16[@bar]
16[@bar]
17^D
17^D
18−(Alice 2042)
18+[WARNING] Citeproc: citation bar not found
19−
19+(**bar?**)
20−::: {#refs .references .csl-bib-body .hanging-indent}
21−::: {#ref-foo .csl-entry}
22−Alice. 2042.
23−:::
24−:::
25```
20```
test/command/pandoc-citeproc-chicago-author-date.md+7−7
@@ -54,14 +54,14 @@ References {#references .unnumbered}
54
54
55([**nonexistent?**](#ref-nonexistent))
55([**nonexistent?**](#ref-nonexistent))
56
56
57−[Doe](#ref-item1) ([2005](#ref-item1)) says blah.
57+Doe ([2005](#ref-item1)) says blah.
58
58
59−[Doe](#ref-item1) ([2005, 30](#ref-item1)) says blah.
59+Doe ([2005, 30](#ref-item1)) says blah.
60
60
61−[Doe](#ref-item1) ([2005, 30](#ref-item1), with suffix) says blah.
61+Doe ([2005, 30](#ref-item1), with suffix) says blah.
62
62
63−[Doe](#ref-item1) ([2005](#ref-item1); [2006, 30](#ref-item2); see also
63+Doe ([2005](#ref-item1); [2006, 30](#ref-item2); see also [Doe and Roe
64−[Doe and Roe 2007](#ref-пункт3)) says blah.
64+2007](#ref-пункт3)) says blah.
65
65
66In a note.[^1]
66In a note.[^1]
67
67
@@ -98,8 +98,8 @@ edited by Sam Smith. Oxford: Oxford University Press.
98:::
98:::
99:::
99:::
100
100
101−[^1]: [Doe and Roe](#ref-пункт3) ([2007, 12](#ref-пункт3)) and a
101+[^1]: Doe and Roe ([2007, 12](#ref-пункт3)) and a citation without
102− citation without locators ([Doe and Roe 2007](#ref-пункт3)).
102+ locators ([Doe and Roe 2007](#ref-пункт3)).
103
103
104[^2]: Some citations (see [Doe 2005, chap. 3](#ref-item1);
104[^2]: Some citations (see [Doe 2005, chap. 3](#ref-item1);
105 [2006](#ref-item2); [Doe and Roe 2007](#ref-пункт3)).
105 [2006](#ref-item2); [Doe and Roe 2007](#ref-пункт3)).
test/command/pandoc-citeproc-chicago-fullnote-bibliography.md+6−7
@@ -55,13 +55,13 @@ References {#references .unnumbered}
55
55
56[^2]
56[^2]
57
57
58−[John Doe](#ref-item1)[^3] says blah.
58+John Doe[^3] says blah.
59
59
60−[Doe](#ref-item1)[^4] says blah.
60+Doe[^4] says blah.
61
61
62−[Doe](#ref-item1)[^5] says blah.
62+Doe[^5] says blah.
63
63
64−[Doe](#ref-item1)[^6] says blah.
64+Doe[^6] says blah.
65
65
66In a note.[^7]
66In a note.[^7]
67
67
@@ -112,9 +112,8 @@ Sam Smith. Oxford: Oxford University Press, 2007.
112 Roe, "Why Water Is Wet," in *Third Book*, ed. Sam Smith (Oxford:
112 Roe, "Why Water Is Wet," in *Third Book*, ed. Sam Smith (Oxford:
113 Oxford University Press, 2007)](#ref-пункт3).
113 Oxford University Press, 2007)](#ref-пункт3).
114
114
115−[^7]: [Doe and Roe](#ref-пункт3), ["Why Water Is Wet," 12](#ref-пункт3)
115+[^7]: Doe and Roe, ["Why Water Is Wet," 12](#ref-пункт3) and a citation
116− and a citation without locators ([Doe and Roe, "Why Water Is
116+ without locators ([Doe and Roe, "Why Water Is Wet"](#ref-пункт3)).
117− Wet"](#ref-пункт3)).
118
117
119[^8]: See [Doe, *First Book*, chap. 3](#ref-item1); also [Doe and Roe,
118[^8]: See [Doe, *First Book*, chap. 3](#ref-item1); also [Doe and Roe,
120 "Why Water Is Wet," 34--35](#ref-пункт3).
119 "Why Water Is Wet," 34--35](#ref-пункт3).
test/command/svg.md+1−1
@@ -2,7 +2,7 @@
2% pandoc -f latex -t icml
2% pandoc -f latex -t icml
3\includegraphics{command/corrupt.svg}
3\includegraphics{command/corrupt.svg}
4^D
4^D
5−[WARNING] Could not determine image size for 'command/corrupt.svg': could not determine image type
5+[WARNING] Could not determine image size for command/corrupt.svg: could not determine image type
6<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
6<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
7 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
7 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
8 <Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 150 -100">
8 <Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 150 -100">
test/docx/0_level_headers.native+2−2
@@ -1,6 +1,6 @@
1[Table ("",[],[]) (Caption Nothing
1[Table ("",[],[]) (Caption Nothing
2 [])
2 [])
3− [(AlignDefault,ColWidthDefault)]
3+ [(AlignDefault,ColWidth 1.0)]
4 (TableHead ("",[],[])
4 (TableHead ("",[],[])
5 [])
5 [])
6 [(TableBody ("",[],[]) (RowHeadColumns 0)
6 [(TableBody ("",[],[]) (RowHeadColumns 0)
@@ -49,4 +49,4 @@
49,Para [Strong [Str "Table",Space,Str "Page"]]
49,Para [Strong [Str "Table",Space,Str "Page"]]
50,Para [Strong [Str "No",Space,Str "table",Space,Str "of",Space,Str "figures",Space,Str "entries",Space,Str "found."]]
50,Para [Strong [Str "No",Space,Str "table",Space,Str "of",Space,Str "figures",Space,Str "entries",Space,Str "found."]]
51,Header 1 ("introduction",[],[]) [Str "Introduction"]
51,Header 1 ("introduction",[],[]) [Str "Introduction"]
52−,Para [Str "Nothing",Space,Str "to",Space,Str "introduce,",Space,Str "yet."]]
52+,Para [Str "Nothing",Space,Str "to",Space,Str "introduce,",Space,Str "yet."]]
test/docx/golden/image.docx

Binary file not shown.

test/docx/golden/table_one_row.docx

Binary file not shown.

test/docx/golden/table_with_list_cell.docx

Binary file not shown.

test/docx/golden/tables-default-widths.docxnew file

Binary file not shown.

test/docx/golden/tables.docx

Binary file not shown.

test/docx/sdt_elements.native+9−10
@@ -1,20 +1,19 @@
1[Table ("",[],[]) (Caption Nothing
1[Table ("",[],[]) (Caption Nothing
2 [])
2 [])
3− [(AlignDefault,ColWidthDefault)
3+ [(AlignDefault,ColWidth 0.22069570301081556)
4− ,(AlignDefault,ColWidthDefault)
4+ ,(AlignDefault,ColWidth 0.22069570301081556)
5− ,(AlignDefault,ColWidthDefault)]
5+ ,(AlignDefault,ColWidth 0.5586085939783689)]
6 (TableHead ("",[],[])
6 (TableHead ("",[],[])
7− [])
8− [(TableBody ("",[],[]) (RowHeadColumns 0)
9− []
10− [Row ("",[],[])
7+ [Row ("",[],[])
11 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
8 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
12 [Plain [Strong [Str "col1Header"]]]
9 [Plain [Strong [Str "col1Header"]]]
13 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
10 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
14 [Plain [Strong [Str "col2Header"]]]
11 [Plain [Strong [Str "col2Header"]]]
15 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
12 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
16− [Plain [Strong [Str "col3Header"]]]]
13+ [Plain [Strong [Str "col3Header"]]]]])
14+ [(TableBody ("",[],[]) (RowHeadColumns 0)
15+ []
17− ,Row ("",[],[])
16+ [Row ("",[],[])
18 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
17 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
19 [Plain [Str "col1",Space,Str "content"]]
18 [Plain [Str "col1",Space,Str "content"]]
20 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
19 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
@@ -22,4 +21,4 @@
22 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
21 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
23 [Plain [Str "col3",Space,Str "content"]]]])]
22 [Plain [Str "col3",Space,Str "content"]]]])]
24 (TableFoot ("",[],[])
23 (TableFoot ("",[],[])
25− [])]
24+ [])]
test/docx/table_captions_no_field.docxnew file

Binary file not shown.

test/docx/table_captions_no_field.nativenew file+34
@@ -0,0 +1,34 @@
1+[Para [Str "See",Space,Str "Table",Space,Str "5.1."]
2+,Para [Str "Table",Space,Str "5.1"]
3+,Table ("",[],[]) (Caption Nothing
4+ [])
5+ [(AlignDefault,ColWidth 0.7605739372523825)
6+ ,(AlignDefault,ColWidth 0.11971303137380876)
7+ ,(AlignDefault,ColWidth 0.11971303137380876)]
8+ (TableHead ("",[],[])
9+[Row ("",[],[])
10+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
11+ []
12+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
13+ [Plain [Str "Count"]]
14+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15+ [Plain [Str "%"]]]])
16+ [(TableBody ("",[],[]) (RowHeadColumns 0)
17+ []
18+ [Row ("",[],[])
19+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
20+ [Plain [Str "First",Space,Str "option"]]
21+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
22+ [Plain [Str "242"]]
23+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
24+ [Plain [Str "45"]]]
25+,Row ("",[],[])
26+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
27+ [Plain [Str "Second",Space,Str "option"]]
28+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
29+ [Plain [Str "99"]]
30+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
31+ [Plain [Str "18"]]]])]
32+ (TableFoot ("",[],[])
33+ [])
34+,Header 2 ("section", [], []) []]
test/docx/table_captions_with_field.docxnew file

Binary file not shown.

test/docx/table_captions_with_field.nativenew file+54
@@ -0,0 +1,54 @@
1+[Para [Str "See",Space,Str "Table",Space,Str "1."]
2+,Para []
3+,Table ("",[],[]) (Caption Nothing
4+ [Para [Str "Table",Space,Str "1"]])
5+ [(AlignDefault,ColWidth 0.7605739372523825)
6+ ,(AlignDefault,ColWidth 0.11971303137380876)
7+ ,(AlignDefault,ColWidth 0.11971303137380876)]
8+ (TableHead ("",[],[])
9+[Row ("",[],[])
10+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
11+ []
12+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
13+ [Plain [Str "Count"]]
14+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15+ [Plain [Str "%"]]]])
16+ [(TableBody ("",[],[]) (RowHeadColumns 0)
17+ []
18+ [Row ("",[],[])
19+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
20+ [Plain [Str "First",Space,Str "option"]]
21+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
22+ [Plain [Str "242"]]
23+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
24+ [Plain [Str "45"]]]
25+,Row ("",[],[])
26+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
27+ [Plain [Str "Second",Space,Str "option"]]
28+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
29+ [Plain [Str "99"]]
30+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
31+ [Plain [Str "18"]]]])]
32+ (TableFoot ("",[],[])
33+ [])
34+,Header 2 ("section", [], []) []
35+,Table ("",[],[]) (Caption Nothing
36+ [Para [Str "Table",Space,Str "2"]])
37+ [(AlignDefault,ColWidth 0.3332963620230701)
38+ ,(AlignDefault,ColWidth 0.3332963620230701)
39+ ,(AlignDefault,ColWidth 0.3334072759538598)]
40+ (TableHead ("",[],[])
41+ [Row ("",[],[])
42+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
43+ [Plain [Str "One"]]
44+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
45+ [Plain [Str "Two"]]
46+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
47+ [Plain [Str "Three"]]]])
48+ [(TableBody ("",[],[]) (RowHeadColumns 0)
49+ []
50+ [])]
51+ (TableFoot ("",[],[])
52+ [])
53+,Para []
54+,Para [Str "See",Space,Str "Table",Space,Str "2."]]
test/docx/table_header_rowspan.docxnew file

Binary file not shown.

test/docx/table_header_rowspan.nativenew file+189
@@ -0,0 +1,189 @@
1+[Table ("",[],[]) (Caption Nothing
2+ [])
3+ [(AlignDefault,ColWidth 0.30701754385964913)
4+ ,(AlignDefault,ColWidth 0.1364522417153996)
5+ ,(AlignDefault,ColWidth 0.10009746588693957)
6+ ,(AlignDefault,ColWidth 9.707602339181287e-2)
7+ ,(AlignDefault,ColWidth 7.719298245614035e-2)
8+ ,(AlignDefault,ColWidth 7.085769980506823e-2)
9+ ,(AlignDefault,ColWidth 7.09551656920078e-2)
10+ ,(AlignDefault,ColWidth 0.14035087719298245)]
11+ (TableHead ("",[],[])
12+[Row ("",[],[])
13+ [Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
14+ [Plain [Str "A"]]
15+ ,Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
16+ [Plain [Strong [Str "B"]]]
17+ ,Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
18+ [Plain [Strong [Str "C"]]]
19+ ,Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
20+ [Plain [Strong [Str "D"]]]
21+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3)
22+ [Plain [Str "E"]]
23+ ,Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
24+ [Plain [Str "F"]]]
25+,Row ("",[],[])
26+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
27+ [Plain [Strong [Str "G"]]]
28+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
29+ [Plain [Strong [Str "H"]]]
30+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
31+ [Plain [Strong [Str "I"]]]]])
32+ [(TableBody ("",[],[]) (RowHeadColumns 0)
33+ []
34+ [Row ("",[],[])
35+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
36+ [Plain [Str "1"]]
37+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
38+ [Plain [Str "2"]]
39+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
40+ [Plain [Str "3"]]
41+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
42+ [Plain [Str "4"]]
43+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
44+ [Plain [Str "5"]]
45+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
46+ [Plain [Str "6"]]
47+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
48+ [Plain [Str "7"]]
49+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
50+ [Plain [Str "8"]]]
51+ ,Row ("",[],[])
52+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
53+ [Plain [Str "1"]]
54+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
55+ [Plain [Str "2"]]
56+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
57+ [Plain [Str "3"]]
58+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
59+ [Plain [Str "4"]]
60+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
61+ [Plain [Str "5"]]
62+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
63+ [Plain [Str "6"]]
64+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
65+ [Plain [Str "7"]]
66+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
67+ [Plain [Str "8"]]]
68+ ,Row ("",[],[])
69+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
70+ [Plain [Str "1"]]
71+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
72+ [Plain [Str "2"]]
73+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
74+ [Plain [Str "3"]]
75+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
76+ [Plain [Str "4"]]
77+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
78+ [Plain [Str "5"]]
79+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
80+ [Plain [Str "6"]]
81+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
82+ [Plain [Str "7"]]
83+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
84+ [Plain [Str "8"]]]
85+ ,Row ("",[],[])
86+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
87+ [Plain [Str "1"]]
88+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
89+ [Plain [Str "2"]]
90+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
91+ [Plain [Str "3"]]
92+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
93+ [Plain [Str "4"]]
94+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
95+ [Plain [Str "5"]]
96+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
97+ [Plain [Str "6"]]
98+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
99+ [Plain [Str "7"]]
100+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
101+ [Plain [Str "8"]]]
102+ ,Row ("",[],[])
103+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
104+ [Plain [Str "1"]]
105+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
106+ [Plain [Str "2"]]
107+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
108+ [Plain [Str "3"]]
109+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
110+ [Plain [Str "4"]]
111+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
112+ [Plain [Str "5"]]
113+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
114+ [Plain [Str "6"]]
115+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
116+ [Plain [Str "7"]]
117+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
118+ [Plain [Str "8"]]]
119+ ,Row ("",[],[])
120+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
121+ [Plain [Str "1"]]
122+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
123+ [Plain [Str "2"]]
124+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
125+ [Plain [Str "3"]]
126+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
127+ [Plain [Str "4"]]
128+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
129+ [Plain [Str "5"]]
130+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
131+ [Plain [Str "6"]]
132+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
133+ [Plain [Str "7"]]
134+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
135+ [Plain [Str "8"]]]
136+ ,Row ("",[],[])
137+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
138+ [Plain [Str "1"]]
139+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
140+ [Plain [Str "2"]]
141+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
142+ [Plain [Str "3"]]
143+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
144+ [Plain [Str "4"]]
145+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
146+ [Plain [Str "5"]]
147+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
148+ [Plain [Str "6"]]
149+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
150+ [Plain [Str "7"]]
151+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
152+ [Plain [Str "8"]]]
153+ ,Row ("",[],[])
154+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
155+ [Plain [Str "1"]]
156+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
157+ [Plain [Str "2"]]
158+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
159+ [Plain [Str "3"]]
160+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
161+ [Plain [Str "4"]]
162+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
163+ [Plain [Str "5"]]
164+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
165+ [Plain [Str "6"]]
166+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
167+ [Plain [Str "7"]]
168+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
169+ [Plain [Str "8"]]]
170+ ,Row ("",[],[])
171+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
172+ [Plain [Str "1"]]
173+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
174+ [Plain [Str "2"]]
175+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
176+ [Plain [Str "3"]]
177+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
178+ [Plain [Str "4"]]
179+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
180+ [Plain [Str "5"]]
181+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
182+ [Plain [Str "6"]]
183+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
184+ [Plain [Str "7"]]
185+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
186+ [Plain [Str "8"]]]
187+ ])]
188+ (TableFoot ("",[],[])
189+ [])]
test/docx/table_one_header_row.docxnew file

Binary file not shown.

test/docx/table_one_header_row.nativenew file+18
@@ -0,0 +1,18 @@
1+[Table ("",[],[]) (Caption Nothing
2+ [])
3+ [(AlignDefault,ColWidth 0.33302433371958284)
4+ ,(AlignDefault,ColWidth 0.3332560834298957)
5+ ,(AlignDefault,ColWidth 0.33371958285052145)]
6+ (TableHead ("",[],[])
7+ [Row ("",[],[])
8+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
9+ [Plain [Str "One"]]
10+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
11+ [Plain [Str "Row"]]
12+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
13+ [Plain [Str "Table"]]]])
14+ [(TableBody ("",[],[]) (RowHeadColumns 0)
15+ []
16+ [])]
17+ (TableFoot ("",[],[])
18+ [])]
test/docx/table_one_row.docx

Binary file not shown.

test/docx/table_one_row.native+4−4
@@ -1,8 +1,8 @@
1[Table ("",[],[]) (Caption Nothing
1[Table ("",[],[]) (Caption Nothing
2 [])
2 [])
3− [(AlignDefault,ColWidthDefault)
3+ [(AlignDefault,ColWidth 0.3333333333333333)
4− ,(AlignDefault,ColWidthDefault)
4+ ,(AlignDefault,ColWidth 0.3333333333333333)
5− ,(AlignDefault,ColWidthDefault)]
5+ ,(AlignDefault,ColWidth 0.3333333333333333)]
6 (TableHead ("",[],[])
6 (TableHead ("",[],[])
7 [])
7 [])
8 [(TableBody ("",[],[]) (RowHeadColumns 0)
8 [(TableBody ("",[],[]) (RowHeadColumns 0)
@@ -15,4 +15,4 @@
15 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
16 [Plain [Str "Table"]]]])]
16 [Plain [Str "Table"]]]])]
17 (TableFoot ("",[],[])
17 (TableFoot ("",[],[])
18− [])]
18+ [])]
test/docx/table_variable_width.native+12−17
@@ -1,10 +1,11 @@
1[Table ("",[],[]) (Caption Nothing
1[Table ("",[],[]) (Caption Nothing
2 [])
2 [])
3− [(AlignDefault,ColWidthDefault)
3+ [(AlignDefault,ColWidth 2.0096205237840725e-2)
4− ,(AlignDefault,ColWidthDefault)
4+ ,(AlignDefault,ColWidth 1.9882415820416888e-2)
5− ,(AlignDefault,ColWidthDefault)
5+ ,(AlignDefault,ColWidth 0.22202030999465527)
6− ,(AlignDefault,ColWidthDefault)
6+ ,(AlignDefault,ColWidth 0.4761090326028862)
7− ,(AlignDefault,ColWidthDefault)]
7+ ,(AlignDefault,ColWidth 1.0689470871191876e-4)
8+ ,(AlignDefault,ColWidth 0.26178514163548905)]
8 (TableHead ("",[],[])
9 (TableHead ("",[],[])
9 [Row ("",[],[])
10 [Row ("",[],[])
10 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
11 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
@@ -13,33 +14,27 @@
13 []
14 []
14 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15 [Plain [Str "h3"]]
16 [Plain [Str "h3"]]
16− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
17+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2)
17 [Plain [Str "h4"]]
18 [Plain [Str "h4"]]
18 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
19 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
19 [Plain [Str "h5"]]]])
20 [Plain [Str "h5"]]]])
20 [(TableBody ("",[],[]) (RowHeadColumns 0)
21 [(TableBody ("",[],[]) (RowHeadColumns 0)
21 []
22 []
22 [Row ("",[],[])
23 [Row ("",[],[])
23− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
24+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3)
24 [Plain [Str "c11"]]
25 [Plain [Str "c11"]]
25 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
26 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
26 []
27 []
27− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
28+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2)
28− []
29− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
30− []
31− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
32 []]
29 []]
33 ,Row ("",[],[])
30 ,Row ("",[],[])
34 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
31 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
35 []
32 []
36− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
33+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2)
37 [Plain [Str "c22"]]
34 [Plain [Str "c22"]]
38 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
35 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
39 [Plain [Str "c23"]]
36 [Plain [Str "c23"]]
40− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
37+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2)
41− []
42− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
43 []]])]
38 []]])]
44 (TableFoot ("",[],[])
39 (TableFoot ("",[],[])
45− [])]
40+ [])]
test/docx/table_with_list_cell.native+3−3
@@ -1,7 +1,7 @@
1[Table ("",[],[]) (Caption Nothing
1[Table ("",[],[]) (Caption Nothing
2 [])
2 [])
3− [(AlignDefault,ColWidthDefault)
3+ [(AlignDefault,ColWidth 0.5)
4− ,(AlignDefault,ColWidthDefault)]
4+ ,(AlignDefault,ColWidth 0.5)]
5 (TableHead ("",[],[])
5 (TableHead ("",[],[])
6 [Row ("",[],[])
6 [Row ("",[],[])
7 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
7 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
@@ -22,4 +22,4 @@
22 ,[Para [Str "A"]]
22 ,[Para [Str "A"]]
23 ,[Para [Str "Numbered",Space,Str "list."]]]]]])]
23 ,[Para [Str "Numbered",Space,Str "list."]]]]]])]
24 (TableFoot ("",[],[])
24 (TableFoot ("",[],[])
25− [])]
25+ [])]
test/docx/tables-default-widths.nativenew file+92
@@ -0,0 +1,92 @@
1+[Header 2 ("a-table-with-and-without-a-header-row",[],[]) [Str "A",Space,Str "table,",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "a",Space,Str "header",Space,Str "row"]
2+,Table ("",[],[]) (Caption Nothing
3+ [])
4+ [(AlignDefault,ColWidthDefault)
5+ ,(AlignDefault,ColWidthDefault)
6+ ,(AlignDefault,ColWidthDefault)
7+ ,(AlignDefault,ColWidthDefault)]
8+ (TableHead ("",[],[])
9+ [Row ("",[],[])
10+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
11+ [Plain [Str "Name"]]
12+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
13+ [Plain [Str "Game"]]
14+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
15+ [Plain [Str "Fame"]]
16+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
17+ [Plain [Str "Blame"]]]])
18+ [(TableBody ("",[],[]) (RowHeadColumns 0)
19+ []
20+ [Row ("",[],[])
21+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
22+ [Plain [Str "Lebron",Space,Str "James"]]
23+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
24+ [Plain [Str "Basketball"]]
25+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
26+ [Plain [Str "Very",Space,Str "High"]]
27+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
28+ [Plain [Str "Leaving",Space,Str "Cleveland"]]]
29+ ,Row ("",[],[])
30+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
31+ [Plain [Str "Ryan",Space,Str "Braun"]]
32+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
33+ [Plain [Str "Baseball"]]
34+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
35+ [Plain [Str "Moderate"]]
36+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
37+ [Plain [Str "Steroids"]]]
38+ ,Row ("",[],[])
39+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
40+ [Plain [Str "Russell",Space,Str "Wilson"]]
41+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
42+ [Plain [Str "Football"]]
43+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
44+ [Plain [Str "High"]]
45+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
46+ [Plain [Str "Tacky",Space,Str "uniform"]]]])]
47+ (TableFoot ("",[],[])
48+ [])
49+,Table ("",[],[]) (Caption Nothing
50+ [])
51+ [(AlignDefault,ColWidthDefault)
52+ ,(AlignDefault,ColWidthDefault)]
53+ (TableHead ("",[],[])
54+ [])
55+ [(TableBody ("",[],[]) (RowHeadColumns 0)
56+ []
57+ [Row ("",[],[])
58+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
59+ [Plain [Str "Sinple"]]
60+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
61+ [Plain [Str "Table"]]]
62+ ,Row ("",[],[])
63+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
64+ [Plain [Str "Without"]]
65+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
66+ [Plain [Str "Header"]]]])]
67+ (TableFoot ("",[],[])
68+ [])
69+,Table ("",[],[]) (Caption Nothing
70+ [])
71+ [(AlignDefault,ColWidthDefault)
72+ ,(AlignDefault,ColWidthDefault)]
73+ (TableHead ("",[],[])
74+ [])
75+ [(TableBody ("",[],[]) (RowHeadColumns 0)
76+ []
77+ [Row ("",[],[])
78+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
79+ [Para [Str "Simple"]
80+ ,Para [Str "Multiparagraph"]]
81+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
82+ [Para [Str "Table"]
83+ ,Para [Str "Full"]]]
84+ ,Row ("",[],[])
85+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
86+ [Para [Str "Of"]
87+ ,Para [Str "Paragraphs"]]
88+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
89+ [Para [Str "In",Space,Str "each"]
90+ ,Para [Str "Cell."]]]])]
91+ (TableFoot ("",[],[])
92+ [])]
test/docx/tables.native+9−9
@@ -1,10 +1,10 @@
1[Header 2 ("a-table-with-and-without-a-header-row",[],[]) [Str "A",Space,Str "table,",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "a",Space,Str "header",Space,Str "row"]
1[Header 2 ("a-table-with-and-without-a-header-row",[],[]) [Str "A",Space,Str "table,",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "a",Space,Str "header",Space,Str "row"]
2,Table ("",[],[]) (Caption Nothing
2,Table ("",[],[]) (Caption Nothing
3 [])
3 [])
4− [(AlignDefault,ColWidthDefault)
4+ [(AlignDefault,ColWidth 0.25)
5− ,(AlignDefault,ColWidthDefault)
5+ ,(AlignDefault,ColWidth 0.25)
6− ,(AlignDefault,ColWidthDefault)
6+ ,(AlignDefault,ColWidth 0.25)
7− ,(AlignDefault,ColWidthDefault)]
7+ ,(AlignDefault,ColWidth 0.25)]
8 (TableHead ("",[],[])
8 (TableHead ("",[],[])
9 [Row ("",[],[])
9 [Row ("",[],[])
10 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
10 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
@@ -48,8 +48,8 @@
48 [])
48 [])
49,Table ("",[],[]) (Caption Nothing
49,Table ("",[],[]) (Caption Nothing
50 [])
50 [])
51− [(AlignDefault,ColWidthDefault)
51+ [(AlignDefault,ColWidth 0.5)
52− ,(AlignDefault,ColWidthDefault)]
52+ ,(AlignDefault,ColWidth 0.5)]
53 (TableHead ("",[],[])
53 (TableHead ("",[],[])
54 [])
54 [])
55 [(TableBody ("",[],[]) (RowHeadColumns 0)
55 [(TableBody ("",[],[]) (RowHeadColumns 0)
@@ -68,8 +68,8 @@
68 [])
68 [])
69,Table ("",[],[]) (Caption Nothing
69,Table ("",[],[]) (Caption Nothing
70 [])
70 [])
71− [(AlignDefault,ColWidthDefault)
71+ [(AlignDefault,ColWidth 0.5)
72− ,(AlignDefault,ColWidthDefault)]
72+ ,(AlignDefault,ColWidth 0.5)]
73 (TableHead ("",[],[])
73 (TableHead ("",[],[])
74 [])
74 [])
75 [(TableBody ("",[],[]) (RowHeadColumns 0)
75 [(TableBody ("",[],[]) (RowHeadColumns 0)
@@ -89,4 +89,4 @@
89 [Para [Str "In",Space,Str "each"]
89 [Para [Str "In",Space,Str "each"]
90 ,Para [Str "Cell."]]]])]
90 ,Para [Str "Cell."]]]])]
91 (TableFoot ("",[],[])
91 (TableFoot ("",[],[])
92− [])]
92+ [])]
test/epub/wasteland.epub

Binary file not shown.

test/fb2/images.fb2+1−1
@@ -1,2 +1,2 @@
1<?xml version="1.0" encoding="UTF-8"?>
1<?xml version="1.0" encoding="UTF-8"?>
2−<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><p>This example test if Pandoc correctly embeds images into FictionBook.</p><p>Small inline image: <image l:href="#image1" l:type="inlineImageType" alt="alt text a small PNG image" />.</p><p>Paragraph image:</p><image l:href="#image2" l:type="imageType" alt="alt text of a big JPEG image" title="image title text" /><p>alt text of a big missing image</p><p>A missing image inline: alt text of missing image.</p></section></body><binary id="image2" content-type="image/jpeg">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</binary><binary id="image1" content-type="image/png">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</binary></FictionBook>
2+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><p>This example test if Pandoc correctly embeds images into FictionBook.</p><p>Small inline image: <image l:href="#image1" l:type="inlineImageType" alt="alt text a small PNG image" />.</p><p>Paragraph image:</p><image l:href="#image2" l:type="imageType" alt="alt text of a big JPEG image" title="image title text" /><p>alt text of a big missing image</p><p>A missing image inline: alt text of missing image.</p></section></body><binary id="image2" content-type="image/jpeg">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</binary><binary id="image1" content-type="image/png">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</binary></FictionBook>
test/fb2/test.jpg

Binary file not shown.

test/lhs-test.html+2−1
@@ -21,7 +21,7 @@
21 padding-top: 50px;
21 padding-top: 50px;
22 padding-bottom: 50px;
22 padding-bottom: 50px;
23 hyphens: auto;
23 hyphens: auto;
24− word-wrap: break-word;
24+ overflow-wrap: break-word;
25 text-rendering: optimizeLegibility;
25 text-rendering: optimizeLegibility;
26 font-kerning: normal;
26 font-kerning: normal;
27 }
27 }
@@ -92,6 +92,7 @@
92 pre code {
92 pre code {
93 padding: 0;
93 padding: 0;
94 overflow: visible;
94 overflow: visible;
95+ overflow-wrap: normal;
95 }
96 }
96 .sourceCode {
97 .sourceCode {
97 background-color: transparent;
98 background-color: transparent;
test/lhs-test.html+lhs+2−1
@@ -21,7 +21,7 @@
21 padding-top: 50px;
21 padding-top: 50px;
22 padding-bottom: 50px;
22 padding-bottom: 50px;
23 hyphens: auto;
23 hyphens: auto;
24− word-wrap: break-word;
24+ overflow-wrap: break-word;
25 text-rendering: optimizeLegibility;
25 text-rendering: optimizeLegibility;
26 font-kerning: normal;
26 font-kerning: normal;
27 }
27 }
@@ -92,6 +92,7 @@
92 pre code {
92 pre code {
93 padding: 0;
93 padding: 0;
94 overflow: visible;
94 overflow: visible;
95+ overflow-wrap: normal;
95 }
96 }
96 .sourceCode {
97 .sourceCode {
97 background-color: transparent;
98 background-color: transparent;
test/lhs-test.latex+3−3
@@ -4,9 +4,6 @@
4%
4%
5\documentclass[
5\documentclass[
6]{article}
6]{article}
7−\author{}
8−\date{}
9−
10\usepackage{amsmath,amssymb}
7\usepackage{amsmath,amssymb}
11\usepackage{lmodern}
8\usepackage{lmodern}
12\usepackage{iftex}
9\usepackage{iftex}
@@ -88,6 +85,9 @@
88 \usepackage{selnolig} % disable illegal ligatures
85 \usepackage{selnolig} % disable illegal ligatures
89\fi
86\fi
90
87
88+\author{}
89+\date{}
90+
91\begin{document}
91\begin{document}
92
92
93\hypertarget{lhs-test}{%
93\hypertarget{lhs-test}{%
test/lhs-test.latex+lhs+3−3
@@ -4,9 +4,6 @@
4%
4%
5\documentclass[
5\documentclass[
6]{article}
6]{article}
7−\author{}
8−\date{}
9−
10\usepackage{amsmath,amssymb}
7\usepackage{amsmath,amssymb}
11\usepackage{lmodern}
8\usepackage{lmodern}
12\usepackage{iftex}
9\usepackage{iftex}
@@ -55,6 +52,9 @@
55 \usepackage{selnolig} % disable illegal ligatures
52 \usepackage{selnolig} % disable illegal ligatures
56\fi
53\fi
57
54
55+\author{}
56+\date{}
57+
58\begin{document}
58\begin{document}
59
59
60\hypertarget{lhs-test}{%
60\hypertarget{lhs-test}{%
test/pipe-tables.native+2−10
@@ -131,13 +131,7 @@
131 ,(AlignLeft,ColWidthDefault)
131 ,(AlignLeft,ColWidthDefault)
132 ,(AlignCenter,ColWidthDefault)]
132 ,(AlignCenter,ColWidthDefault)]
133 (TableHead ("",[],[])
133 (TableHead ("",[],[])
134− [Row ("",[],[])
135− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
136− []
137− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
138− []
139− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
140− []]])
134+ [])
141 [(TableBody ("",[],[]) (RowHeadColumns 0)
135 [(TableBody ("",[],[]) (RowHeadColumns 0)
142 []
136 []
143 [Row ("",[],[])
137 [Row ("",[],[])
@@ -213,9 +207,7 @@
213 [])
207 [])
214 [(AlignCenter,ColWidthDefault)]
208 [(AlignCenter,ColWidthDefault)]
215 (TableHead ("",[],[])
209 (TableHead ("",[],[])
216− [Row ("",[],[])
217− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
218− []]])
210+ [])
219 [(TableBody ("",[],[]) (RowHeadColumns 0)
211 [(TableBody ("",[],[]) (RowHeadColumns 0)
220 []
212 []
221 [Row ("",[],[])
213 [Row ("",[],[])
test/pptx/code-custom_templated.pptx

Binary file not shown.

test/pptx/code_templated.pptx

Binary file not shown.

test/pptx/document-properties-short-desc_templated.pptx

Binary file not shown.

test/pptx/document-properties_templated.pptx

Binary file not shown.

test/pptx/endnotes_templated.pptx

Binary file not shown.

test/pptx/endnotes_toc_templated.pptx

Binary file not shown.

test/pptx/images_templated.pptx

Binary file not shown.

test/pptx/inline_formatting_templated.pptx

Binary file not shown.

test/pptx/lists_templated.pptx

Binary file not shown.

test/pptx/raw_ooxml_templated.pptx

Binary file not shown.

test/pptx/reference_depth.pptx

Binary file not shown.

test/pptx/remove_empty_slides_templated.pptx

Binary file not shown.

test/pptx/slide_breaks_slide_level_1_templated.pptx

Binary file not shown.

test/pptx/slide_breaks_templated.pptx

Binary file not shown.

test/pptx/slide_breaks_toc_templated.pptx

Binary file not shown.

test/pptx/speaker_notes_after_metadata_templated.pptx

Binary file not shown.

test/pptx/speaker_notes_afterheader_templated.pptx

Binary file not shown.

test/pptx/speaker_notes_afterseps_templated.pptx

Binary file not shown.

test/pptx/speaker_notes_templated.pptx

Binary file not shown.

test/pptx/start_numbering_at_templated.pptx

Binary file not shown.

test/pptx/tables_templated.pptx

Binary file not shown.

test/pptx/two_column_templated.pptx

Binary file not shown.

test/tables.latex+27−3
@@ -56,11 +56,27 @@ Multiline table with caption:
56 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.35}}@{}}
56 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.35}}@{}}
57\caption{Here's the caption. It may span multiple lines.}\tabularnewline
57\caption{Here's the caption. It may span multiple lines.}\tabularnewline
58\toprule
58\toprule
59+\begin{minipage}[b]{\linewidth}\centering
59−Centered Header & Left Aligned & Right Aligned & Default aligned \\
60+Centered Header
61+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
62+Left Aligned
63+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedleft
64+Right Aligned
65+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
66+Default aligned
67+\end{minipage} \\
60\midrule
68\midrule
61\endfirsthead
69\endfirsthead
62\toprule
70\toprule
71+\begin{minipage}[b]{\linewidth}\centering
63−Centered Header & Left Aligned & Right Aligned & Default aligned \\
72+Centered Header
73+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
74+Left Aligned
75+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedleft
76+Right Aligned
77+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
78+Default aligned
79+\end{minipage} \\
64\midrule
80\midrule
65\endhead
81\endhead
66First & row & 12.0 & Example of a row that spans multiple lines. \\
82First & row & 12.0 & Example of a row that spans multiple lines. \\
@@ -76,7 +92,15 @@ Multiline table without caption:
76 >{\raggedleft\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.16}}
92 >{\raggedleft\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.16}}
77 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.35}}@{}}
93 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.35}}@{}}
78\toprule
94\toprule
95+\begin{minipage}[b]{\linewidth}\centering
79−Centered Header & Left Aligned & Right Aligned & Default aligned \\
96+Centered Header
97+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
98+Left Aligned
99+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedleft
100+Right Aligned
101+\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
102+Default aligned
103+\end{minipage} \\
80\midrule
104\midrule
81\endhead
105\endhead
82First & row & 12.0 & Example of a row that spans multiple lines. \\
106First & row & 12.0 & Example of a row that spans multiple lines. \\
test/tables/nordics.latex+22−4
@@ -5,13 +5,31 @@
5 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.20}}@{}}
5 >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.20}}@{}}
6\caption{States belonging to the \emph{Nordics.}}\tabularnewline
6\caption{States belonging to the \emph{Nordics.}}\tabularnewline
7\toprule
7\toprule
8−Name & Capital & \vtop{\hbox{\strut Population}\hbox{\strut (in 2018)}} &
8+\begin{minipage}[b]{\linewidth}\centering
9+Name
10+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
11+Capital
12+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
13+Population\\
14+(in 2018)\strut
15+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
16+Area\\
9−\vtop{\hbox{\strut Area}\hbox{\strut (in km\textsuperscript{2})}} \\
17+(in km\textsuperscript{2})\strut
18+\end{minipage} \\
10\midrule
19\midrule
11\endfirsthead
20\endfirsthead
12\toprule
21\toprule
13−Name & Capital & \vtop{\hbox{\strut Population}\hbox{\strut (in 2018)}} &
22+\begin{minipage}[b]{\linewidth}\centering
23+Name
24+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
25+Capital
26+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
27+Population\\
28+(in 2018)\strut
29+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
30+Area\\
14−\vtop{\hbox{\strut Area}\hbox{\strut (in km\textsuperscript{2})}} \\
31+(in km\textsuperscript{2})\strut
32+\end{minipage} \\
15\midrule
33\midrule
16\endhead
34\endhead
17Denmark & Copenhagen & 5,809,502 & 43,094 \\
35Denmark & Copenhagen & 5,809,502 & 43,094 \\
test/tables/planets.latex+4−4
@@ -1,18 +1,18 @@
1\begin{longtable}[]{@{}cclrrrrrrrrl@{}}
1\begin{longtable}[]{@{}cclrrrrrrrrl@{}}
2\caption{Data about the planets of our solar system.}\tabularnewline
2\caption{Data about the planets of our solar system.}\tabularnewline
3\toprule
3\toprule
4−\multicolumn{2}{l}{} & Name & Mass (10\^{}24kg) & Diameter (km) & Density
4+\multicolumn{2}{c}{} & Name & Mass (10\^{}24kg) & Diameter (km) & Density
5(kg/m\^{}3) & Gravity (m/s\^{}2) & Length of day (hours) & Distance from Sun
5(kg/m\^{}3) & Gravity (m/s\^{}2) & Length of day (hours) & Distance from Sun
6(10\^{}6km) & Mean temperature (C) & Number of moons & Notes \\
6(10\^{}6km) & Mean temperature (C) & Number of moons & Notes \\
7\midrule
7\midrule
8\endfirsthead
8\endfirsthead
9\toprule
9\toprule
10−\multicolumn{2}{l}{} & Name & Mass (10\^{}24kg) & Diameter (km) & Density
10+\multicolumn{2}{c}{} & Name & Mass (10\^{}24kg) & Diameter (km) & Density
11(kg/m\^{}3) & Gravity (m/s\^{}2) & Length of day (hours) & Distance from Sun
11(kg/m\^{}3) & Gravity (m/s\^{}2) & Length of day (hours) & Distance from Sun
12(10\^{}6km) & Mean temperature (C) & Number of moons & Notes \\
12(10\^{}6km) & Mean temperature (C) & Number of moons & Notes \\
13\midrule
13\midrule
14\endhead
14\endhead
15−\multicolumn{2}{l}{\multirow{4}{*}{Terrestrial planets}} & Mercury & 0.330 &
15+\multicolumn{2}{c}{\multirow{4}{*}{Terrestrial planets}} & Mercury & 0.330 &
164,879 & 5427 & 3.7 & 4222.6 & 57.9 & 167 & 0 & Closest to the Sun \\
164,879 & 5427 & 3.7 & 4222.6 & 57.9 & 167 & 0 & Closest to the Sun \\
17& & Venus & 4.87 & 12,104 & 5243 & 8.9 & 2802.0 & 108.2 & 464 & 0 & \\
17& & Venus & 4.87 & 12,104 & 5243 & 8.9 & 2802.0 & 108.2 & 464 & 0 & \\
18& & Earth & 5.97 & 12,756 & 5514 & 9.8 & 24.0 & 149.6 & 15 & 1 & Our world \\
18& & Earth & 5.97 & 12,756 & 5514 & 9.8 & 24.0 & 149.6 & 15 & 1 & Our world \\
@@ -24,7 +24,7 @@ planet \\
24& \multirow{2}{*}{Ice giants} & Uranus & 86.8 & 51,118 & 1271 & 8.7 & 17.2 &
24& \multirow{2}{*}{Ice giants} & Uranus & 86.8 & 51,118 & 1271 & 8.7 & 17.2 &
252872.5 & -195 & 27 & \\
252872.5 & -195 & 27 & \\
26& & Neptune & 102 & 49,528 & 1638 & 11.0 & 16.1 & 4495.1 & -200 & 14 & \\
26& & Neptune & 102 & 49,528 & 1638 & 11.0 & 16.1 & 4495.1 & -200 & 14 & \\
27−\multicolumn{2}{l}{Dwarf planets} & Pluto & 0.0146 & 2,370 & 2095 & 0.7 &
27+\multicolumn{2}{c}{Dwarf planets} & Pluto & 0.0146 & 2,370 & 2095 & 0.7 &
28153.3 & 5906.4 & -225 & 5 & Declassified as a planet in 2006. \\
28153.3 & 5906.4 & -225 & 5 & Declassified as a planet in 2006. \\
29\bottomrule
29\bottomrule
30\end{longtable}
30\end{longtable}
test/tables/students.latex+10−2
@@ -3,11 +3,19 @@
3 >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.50}}@{}}
3 >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.50}}@{}}
4\caption{List of Students}\tabularnewline
4\caption{List of Students}\tabularnewline
5\toprule
5\toprule
6+\begin{minipage}[b]{\linewidth}\centering
6−Student ID & Name \\
7+Student ID
8+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
9+Name
10+\end{minipage} \\
7\midrule
11\midrule
8\endfirsthead
12\endfirsthead
9\toprule
13\toprule
14+\begin{minipage}[b]{\linewidth}\centering
10−Student ID & Name \\
15+Student ID
16+\end{minipage} & \begin{minipage}[b]{\linewidth}\centering
17+Name
18+\end{minipage} \\
11\midrule
19\midrule
12\endhead
20\endhead
13\multicolumn{2}{l}{Computer Science} \\
21\multicolumn{2}{l}{Computer Science} \\
test/writer.html4+2−1
@@ -24,7 +24,7 @@
24 padding-top: 50px;
24 padding-top: 50px;
25 padding-bottom: 50px;
25 padding-bottom: 50px;
26 hyphens: auto;
26 hyphens: auto;
27− word-wrap: break-word;
27+ overflow-wrap: break-word;
28 text-rendering: optimizeLegibility;
28 text-rendering: optimizeLegibility;
29 font-kerning: normal;
29 font-kerning: normal;
30 }
30 }
@@ -95,6 +95,7 @@
95 pre code {
95 pre code {
96 padding: 0;
96 padding: 0;
97 overflow: visible;
97 overflow: visible;
98+ overflow-wrap: normal;
98 }
99 }
99 .sourceCode {
100 .sourceCode {
100 background-color: transparent;
101 background-color: transparent;
test/writer.html5+2−1
@@ -24,7 +24,7 @@
24 padding-top: 50px;
24 padding-top: 50px;
25 padding-bottom: 50px;
25 padding-bottom: 50px;
26 hyphens: auto;
26 hyphens: auto;
27− word-wrap: break-word;
27+ overflow-wrap: break-word;
28 text-rendering: optimizeLegibility;
28 text-rendering: optimizeLegibility;
29 font-kerning: normal;
29 font-kerning: normal;
30 }
30 }
@@ -95,6 +95,7 @@
95 pre code {
95 pre code {
96 padding: 0;
96 padding: 0;
97 overflow: visible;
97 overflow: visible;
98+ overflow-wrap: normal;
98 }
99 }
99 .sourceCode {
100 .sourceCode {
100 background-color: transparent;
101 background-color: transparent;
test/writer.latex+4−4
@@ -4,10 +4,6 @@
4%
4%
5\documentclass[
5\documentclass[
6]{article}
6]{article}
7−\title{Pandoc Test Suite}
8−\author{John MacFarlane \and Anonymous}
9−\date{July 17, 2006}
10−
11\usepackage{amsmath,amssymb}
7\usepackage{amsmath,amssymb}
12\usepackage{lmodern}
8\usepackage{lmodern}
13\usepackage{iftex}
9\usepackage{iftex}
@@ -71,6 +67,10 @@
71 \usepackage{selnolig} % disable illegal ligatures
67 \usepackage{selnolig} % disable illegal ligatures
72\fi
68\fi
73
69
70+\title{Pandoc Test Suite}
71+\author{John MacFarlane \and Anonymous}
72+\date{July 17, 2006}
73+
74\begin{document}
74\begin{document}
75\maketitle
75\maketitle
76
76
test/writers-lang-and-dir.latex+3−3
@@ -5,9 +5,6 @@
5\documentclass[
5\documentclass[
6 english,
6 english,
7]{article}
7]{article}
8−\author{}
9−\date{}
10−
11\usepackage{amsmath,amssymb}
8\usepackage{amsmath,amssymb}
12\usepackage{lmodern}
9\usepackage{lmodern}
13\usepackage{iftex}
10\usepackage{iftex}
@@ -87,6 +84,9 @@
87 \newenvironment{LTR}{\beginL}{\endL}
84 \newenvironment{LTR}{\beginL}{\endL}
88\fi
85\fi
89
86
87+\author{}
88+\date{}
89+
90\begin{document}
90\begin{document}
91
91
92\hypertarget{empty-divs-and-spans}{%
92\hypertarget{empty-divs-and-spans}{%
tools/build-arm.sh+3−1
@@ -1,6 +1,8 @@
1#!/bin/sh
1#!/bin/sh
2
2
3+#old version:
3−IMAGE_ID=ami-0fa8979d18f69948b
4+#IMAGE_ID=ami-0fa8979d18f69948b
5+IMAGE_ID=ami-0cd6b53a434812702
4INSTANCE_TYPE=t4g.2xlarge
6INSTANCE_TYPE=t4g.2xlarge
5KEY_NAME=debian-arm-us-east-2
7KEY_NAME=debian-arm-us-east-2
6SECURITY_GROUP_ID=sg-086ffbadc286c5c00
8SECURITY_GROUP_ID=sg-086ffbadc286c5c00