pandoc 2.4 → 2.5
raw patch · 70 files changed
+2062/−1148 lines, 70 filesdep ~Globdep ~tastydep ~text
Dependency ranges changed: Glob, tasty, text, zip-archive
Files
- MANUAL.txt +96/−28
- README.md +2/−0
- changelog +195/−1
- data/abbreviations +29/−0
- data/pandoc.lua +4/−1
- data/templates/default.asciidoc +3/−0
- man/pandoc.1 +90/−15
- pandoc.cabal +13/−4
- src/Text/Pandoc/App.hs +3/−59
- src/Text/Pandoc/App/CommandLineOptions.hs +5/−162
- src/Text/Pandoc/App/FormatHeuristics.hs +94/−0
- src/Text/Pandoc/App/Opt.hs +221/−0
- src/Text/Pandoc/App/OutputSettings.hs +7/−48
- src/Text/Pandoc/Extensions.hs +30/−10
- src/Text/Pandoc/Filter.hs +18/−3
- src/Text/Pandoc/Lua/Module/Utils.hs +23/−4
- src/Text/Pandoc/Options.hs +50/−3
- src/Text/Pandoc/Parsing.hs +8/−15
- src/Text/Pandoc/Pretty.hs +9/−2
- src/Text/Pandoc/Readers/CommonMark.hs +8/−26
- src/Text/Pandoc/Readers/Docx.hs +7/−3
- src/Text/Pandoc/Readers/FB2.hs +1/−1
- src/Text/Pandoc/Readers/HTML.hs +17/−12
- src/Text/Pandoc/Readers/LaTeX.hs +23/−8
- src/Text/Pandoc/Readers/LaTeX/Parsing.hs +11/−5
- src/Text/Pandoc/Readers/Markdown.hs +2/−6
- src/Text/Pandoc/Readers/MediaWiki.hs +1/−2
- src/Text/Pandoc/Readers/Muse.hs +32/−3
- src/Text/Pandoc/Readers/Odt/Arrows/State.hs +0/−2
- src/Text/Pandoc/Readers/Odt/ContentReader.hs +7/−2
- src/Text/Pandoc/Shared.hs +44/−24
- src/Text/Pandoc/Slides.hs +3/−2
- src/Text/Pandoc/Writers/AsciiDoc.hs +35/−36
- src/Text/Pandoc/Writers/CommonMark.hs +30/−7
- src/Text/Pandoc/Writers/Docx.hs +36/−31
- src/Text/Pandoc/Writers/DokuWiki.hs +23/−23
- src/Text/Pandoc/Writers/EPUB.hs +28/−7
- src/Text/Pandoc/Writers/HTML.hs +2/−1
- src/Text/Pandoc/Writers/ICML.hs +15/−14
- src/Text/Pandoc/Writers/LaTeX.hs +5/−4
- src/Text/Pandoc/Writers/Markdown.hs +3/−3
- src/Text/Pandoc/Writers/Muse.hs +67/−22
- src/Text/Pandoc/Writers/ODT.hs +1/−2
- src/Text/Pandoc/Writers/OpenDocument.hs +2/−2
- src/Text/Pandoc/Writers/Powerpoint/Presentation.hs +2/−1
- src/Text/Pandoc/Writers/RST.hs +2/−1
- src/Text/Pandoc/Writers/RTF.hs +1/−1
- src/Text/Pandoc/Writers/Texinfo.hs +4/−2
- src/Text/Pandoc/XML.hs +11/−5
- stack.yaml +6/−6
- test/Tests/Readers/Muse.hs +54/−0
- test/Tests/Writers/Muse.hs +244/−142
- test/command/4635.md +2/−2
- test/command/4742.md +8/−4
- test/command/5014.md +19/−0
- test/command/5050.md +7/−0
- test/command/5053.md +14/−0
- test/command/5072.md +14/−0
- test/command/5079.md +16/−0
- test/command/5080.md +13/−0
- test/command/5099.md +13/−0
- test/command/ascii.md +38/−2
- test/command/md-abbrevs.md +0/−11
- test/docx/golden/nested_anchors_in_header.docx binary
- test/markdown-citations.native +2/−2
- test/writer.asciidoc +56/−39
- test/writer.icml +23/−128
- test/writer.opendocument +189/−189
- test/writer.texinfo +8/−0
- trypandoc/index.html +13/−10
MANUAL.txt view
@@ -1,6 +1,6 @@ % Pandoc User's Guide % John MacFarlane-% November 01, 2018+% November 25, 2018 Synopsis ========@@ -40,8 +40,8 @@ to be perfect, conversions from formats more expressive than pandoc's Markdown can be expected to be lossy. -Using `pandoc`---------------+Using pandoc+------------ If no *input-files* are specified, input is read from *stdin*. Output goes to *stdout* by default. For output to a file,@@ -239,6 +239,7 @@ - `markdown_phpextra` ([PHP Markdown Extra]) - `markdown_strict` (original unextended [Markdown]) - `mediawiki` ([MediaWiki markup])+ - `man` ([roff man]) - `muse` ([Muse]) - `native` (native Haskell) - `odt` ([ODT])@@ -858,13 +859,12 @@ `--ascii` -: Use only ASCII characters in output. Currently supported for- XML and HTML formats (which use entities instead of- UTF-8 when this option is selected), Markdown (which uses- entities), roff ms (which use hexadecimal escapes), and to- a limited degree LaTeX (which uses standard commands for- accented characters when possible). roff man output uses- ASCII by default.+: Use only ASCII characters in output. Currently supported for XML+ and HTML formats (which use entities instead of UTF-8 when this+ option is selected), CommonMark, gfm, and Markdown (which use+ entities), roff ms (which use hexadecimal escapes), and to a+ limited degree LaTeX (which uses standard commands for accented+ characters when possible). roff man output uses ASCII by default. `--reference-links` @@ -1852,7 +1852,8 @@ enabled by default in : `markdown`, `muse` -The algorithm used to derive the identifier from the header text is:+The default algorithm used to derive the identifier from the+header text is: - Remove all formatting, links, etc. - Remove all footnotes.@@ -1879,6 +1880,9 @@ above; the second will get the same identifier with `-1` appended; the third with `-2`; and so on. +(However, a different algorithm is used if+`gfm_auto_identifiers` is enabled; see below.)+ These identifiers are used to provide link targets in the table of contents generated by the `--toc|--table-of-contents` option. They also make it easy to provide links from one section of a document to@@ -1903,6 +1907,13 @@ Accents are stripped off of accented Latin letters, and non-Latin letters are omitted. +#### Extension: `gfm_auto_identifiers` ####++Changes the algorithm used by `auto_identifiers` to conform to+GitHub's method. Spaces are converted to dashes (`-`),+uppercase characters to lowercase characters, and punctuation+characters other than `-` and `_` are removed.+ Math Input ---------- @@ -1921,13 +1932,13 @@ input/output) are also described in more detail in their respective sections of [Pandoc's Markdown]. -#### [Extension: `raw_html`] {#raw_html}+#### Extension: `raw_html` {#raw_html} When converting from HTML, parse elements to raw HTML which are not representable in pandoc's AST. By default, this is disabled for HTML input. -#### [Extension: `raw_tex`] {#raw_tex}+#### Extension: `raw_tex` {#raw_tex} Allows raw LaTeX, TeX, and ConTeXt to be included in a document. @@ -1941,7 +1952,7 @@ output formats : `textile`, `commonmark` -#### [Extension: `native_divs`] {#native_divs}+#### Extension: `native_divs` {#native_divs} This extension is enabled by default for HTML input. This means that `div`s are parsed to pandoc native elements. (Alternatively, you@@ -1952,7 +1963,7 @@ pandoc -f html-native_divs-native_spans -t markdown -#### [Extension: `native_spans`] {#native_spans}+#### Extension: `native_spans` {#native_spans} Analogous to `native_divs` above. @@ -3515,7 +3526,7 @@ #### Extension: `latex_macros` #### -For output formats other than LaTeX, pandoc will parse LaTeX+When this extension is enabled, pandoc will parse LaTeX macro definitions and apply the resulting macros to all LaTeX math and raw LaTeX. So, for example, the following will work in all output formats, not just LaTeX:@@ -3865,8 +3876,10 @@ Note that `pandoc-citeproc --bib2json` and `pandoc-citeproc --bib2yaml` can produce `.json` and `.yaml` files from any of the supported formats. -In-field markup: In BibTeX and BibLaTeX databases, pandoc-citeproc parses-a subset of LaTeX markup; in CSL YAML databases, pandoc Markdown; and in CSL JSON databases, an [HTML-like markup][CSL markup specs]:+In-field markup: In BibTeX and BibLaTeX databases,+pandoc-citeproc parses a subset of LaTeX markup; in CSL YAML+databases, pandoc Markdown; and in CSL JSON databases, an+[HTML-like markup][CSL markup specs]: `<i>...</i>` : italics@@ -3957,6 +3970,13 @@ `verse`, `v.`/`vv.`; `volume`, `vol.`/`vols.`; `¶`/`¶¶`; `§`/`§§`. If no locator term is used, "page" is assumed. +`pandoc-citeproc` will use heuristics to distinguish the locator+from the suffix. In complex cases, the locator can be enclosed+in curly braces (using `pandoc-citeproc` 0.15 and higher only):++ [@smith{ii, A, D-Z}, with a suffix]+ [@smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]+ A minus sign (`-`) before the `@` will suppress mention of the author in the citation. This can be useful when the author is already mentioned in the text:@@ -3970,9 +3990,20 @@ @smith04 [p. 33] says blah. If the style calls for a list of works cited, it will be placed-at the end of the document. Normally, you will want to end your-document with an appropriate header:+in a div with id `refs`, if one exists: + ::: #refs+ :::++Otherwise, it will be placed at the end of the document.+Generation of the bibliography can be suppressed by setting+`suppress-bibliography: true` in the YAML metadata.++If you wish the bibliography to have a section header, you can+set `reference-section-title` in the metadata, or put the header+at the beginning of the div with id `refs` (if you are using it)+or at the end of your document:+ last paragraph... # References@@ -4189,10 +4220,11 @@ `shortcut_reference_links`, `spaced_reference_links`. `markdown_github` (deprecated GitHub-Flavored Markdown)-: `pipe_tables`, `raw_html`, `fenced_code_blocks`, `gfm_auto_identifiers`,- `ascii_identifiers`, `backtick_code_blocks`, `autolink_bare_uris`,- `space_in_atx_header`, `intraword_underscores`, `strikeout`,- `emoji`, `shortcut_reference_links`, `angle_brackets_escapable`,+: `pipe_tables`, `raw_html`, `fenced_code_blocks`, `auto_identifiers`,+ `gfm_auto_identifiers`, `backtick_code_blocks`,+ `autolink_bare_uris`, `space_in_atx_header`,+ `intraword_underscores`, `strikeout`, `emoji`,+ `shortcut_reference_links`, `angle_brackets_escapable`, `lists_without_preceding_blankline`. `markdown_mmd` (MultiMarkdown)@@ -4219,11 +4251,14 @@ Also, `raw_tex` only affects `gfm` output, not input. `gfm` (GitHub-Flavored Markdown)-: `pipe_tables`, `raw_html`, `fenced_code_blocks`, `gfm_auto_identifiers`,- `ascii_identifiers`, `backtick_code_blocks`, `autolink_bare_uris`,- `intraword_underscores`, `strikeout`, `hard_line_breaks`, `emoji`,- `shortcut_reference_links`, `angle_brackets_escapable`.+: `pipe_tables`, `raw_html`, `fenced_code_blocks`, `auto_identifiers`,+ `gfm_auto_identifiers`, `backtick_code_blocks`,+ `autolink_bare_uris`, `space_in_atx_header`,+ `intraword_underscores`, `strikeout`, `emoji`,+ `shortcut_reference_links`, `angle_brackets_escapable`,+ `lists_without_preceding_blankline`. + Producing slide shows with pandoc ================================= @@ -4840,6 +4875,39 @@ pandoc --print-default-data-file sample.lua [lua]: http://www.lua.org++A note on security+==================++If you use pandoc to convert user-contributed content in a web+application, here are some things to keep in mind:++1. Although pandoc itself will not create or modify any files other+ than those you explicitly ask it create (with the exception+ of temporary files used in producing PDFs), a filter or custom+ writer could in principle do anything on your file system. Please+ audit filters and custom writers very carefully before using them.++2. If your application uses pandoc as a Haskell library (rather than+ shelling out to the executable), it is possible to use it in a mode+ that fully isolates pandoc from your file system, by running the+ pandoc operations in the `PandocPure` monad. See the document+ [Using the pandoc API](http://pandoc.org/using-the-pandoc-api.html)+ for more details.++3. Pandoc's parsers can exhibit pathological performance on some+ corner cases. It is wise to put any pandoc operations under+ a timeout, to avoid DOS attacks that exploit these issues.+ If you are using the pandoc executable, you can add the+ command line options `+RTS -M512M -RTS` (for example) to limit+ the heap size to 512MB.++4. The HTML generated by pandoc is not guaranteed to be safe.+ If `raw_html` is enabled for the Markdown input, users can+ inject arbitrary HTML. Even if `raw_html` is disabled,+ users can include dangerous content in attributes for+ headers, spans, and code blocks. To be safe, you should+ run all the generated HTML through an HTML sanitizer. Authors =======
README.md view
@@ -56,6 +56,8 @@ [Markdown](http://daringfireball.net/projects/markdown/)) - `mediawiki` ([MediaWiki markup](https://www.mediawiki.org/wiki/Help:Formatting))+ - `man` ([roff+ man](http://man7.org/linux/man-pages/man7/groff_man.7.html)) - `muse` ([Muse](https://amusewiki.org/library/manual)) - `native` (native Haskell) - `odt` ([ODT](http://en.wikipedia.org/wiki/OpenDocument))
changelog view
@@ -1,3 +1,197 @@+pandoc (2.5)++ * Text.Pandoc.App: split into several unexported submodules (Albert+ Krewinkel): Text.Pandoc.App.FormatHeuristics,+ Text.Pandoc.App.Opt, Text.Pandoc.App.CommandLineOptions,+ Text.Pandoc.App.OutputSettings. This is motivated partly by the+ desire to reduce recompilations when something is modified,+ since App previously depended on virtually every other module.++ * Text.Pandoc.Extensions++ + Semantically, `gfm_auto_identifiers` is now a modifier of+ `auto_identifiers`; for identifiers to be set, `auto_identifiers` must+ be turned on, and then the type of identifier produced depends on+ `gfm_auto_identifiers` and `ascii_identifiers` are set. Accordingly,+ `auto_identifiers` is now added to `githubMarkdownExtensions` (#5057).+ + Remove `ascii_identifiers` from `githubMarkdownExtensions`.+ GitHub doesn't seem to strip non-ascii characters any more.++ * Text.Pandoc.Lua.Module.Utils (Albert Krewinkel)++ + Test AST object equality via Haskell (#5092). Equality of Lua+ objects representing pandoc AST elements is tested by unmarshalling+ the objects and comparing the result in Haskell.+ A new function `equals` which performs this test has been added to the+ `pandoc.utils` module.+ + Improve stringify. Meta value strings (MetaString)+ and booleans (MetaBool) are now converted to the literal string and the+ lowercase boolean name, respectively. Previously, all values of these+ types were converted to the empty string.++ * Text.Pandoc.Parsing: Remove Functor and Applicative constraints where Monad+ already exists (Alexander Krotov).++ * Text.Pandoc.Pretty: Don't render BreakingSpace at end of line+ or beginning of line (#5050).++ * Text.Pandoc.Readers.Markdown++ + Fix parsing of citations, quotes, and underline emphasis+ after symbols. Starting with pandoc 2.4, citations, quoted inlines,+ and underline emphasis were no longer recognized after certain+ symbols, like parentheses (#5099, #5053).+ + In pandoc 2.4, a soft break after an abbreviation would be+ relocated before it to allow for insertion of a nonbreaking+ space after the abbreviation. This behavior is here reverted.+ A soft break after an abbreviation will remain, and no nonbreaking+ space will be added. Those who care about this issue should take care not+ to end lines with an abbreviation, or to insert nonbreaking spaces+ manually.++ * Text.Pandoc.Readers.FB2: Do not throw error for unknown elements in+ `<body>` (Alexander Krotov). Some libraries include custom elements+ in their FB2 files.++ * Text.Pandoc.Readers.HTML++ + Allow `tfoot` before body rows (#5079).+ + Parse `<small>` as a Span with class "small" (#5080).+ + Allow thead containing a row with `td` rather than `th` (#5014).++ * Text.Pandoc.Readers.LaTeX++ + Cleaned up handling of dimension arguments. Allow decimal points,+ preceding space.+ + Don't allow arguments for verbatim, etc.+ + Allow space before bracketed options.+ + Allow optional arguments after `\\` in tables.+ + Improve parsing of `\tiny`, `\scriptsize`, etc. Parse as raw,+ but know that these font changing commands take no arguments.++ * Text.Pandoc.Readers.Muse++ + Trim whitespace before parsing grid table cells (Alexander Krotov).+ + Add grid tables support (Alexander Krotov).++ * Text.Pandoc.Shared++ + For bibliography match Div with id `refs`, not class `references`.+ This was a mismatch between pandoc's docx, epub, latex, and markdown+ writers and the behavior of pandoc-citeproc, which actually looks for a+ div with id `refs` rather than one with class `references`.+ + Exactly match GitHub's identifier generating algorithm (#5057).+ + Add parameter for `Extensions` to `uniqueIdent` and+ `inlineListToIdentifier` (#5057). [API change]+ This allows these functions to be sensitive to the settings of+ `Ext_gfm_auto_identifiers` and `Ext_ascii_identifiers`, and allows us to+ use `uniqueIdent` in the CommonMark reader, replacing custom code. It+ also means that `gfm_auto_identifiers` can now be used in all formats.++ * Text.Pandoc.Writers.AsciiDoc++ + Use `.`+ as list markers to support nested ordered lists (#5087).+ + Support list number styles (#5089).+ + Render Spans using `[#id .class]#contents#` (#5080).++ * Text.Pandoc.Writers.CommonMark++ + Respect `--ascii` (#5043, quasicomputational).+ + Make sure `--ascii` affects quotes, super/subscript.++ * Text.Pandoc.Writers.Docx++ + Fix bookmarks to headers with long titles (#5091).+ Word has a 40 character limit for bookmark names. In addition, bookmarks+ must begin with a letter. Since pandoc's auto-generated identifiers may+ not respect these constraints, some internal links did not work. With+ this change, pandoc uses a bookmark name based on the SHA1 hash of the+ identifier when the identifier isn't a legal bookmark name.+ + Add bookmarks to code blocks (Nikolay Yakimov).+ + Add bookmarks to images (Nikolay Yakimov).+ + Refactor common bookmark creation code into a function (Nikolay Yakimov).++ * Text.Pandoc.Writers.EPUB: Handle calibre metadata (#5098).+ Nodes of the form++ <meta name="calibre:series" content="Classics on War and Politics"/>++ are now included from an epub XML metadata file. You can also include+ this information in your YAML metadata, like so:++ calibre:+ series: Classics on War and Policitics++ In addition, ibooks-specific metadata can now be included via an XML+ file. (Previously, it could only be included via YAML metadata, see+ #2693.)++ * Text.Pandoc.Writers.HTML: Use plain `"` instead of `"` outside of+ attributes.++ * Text.Pandoc.Writers.ICML: Consolidate adjacent strings, inc. spaces.+ This avoids splitting up the output unnecessarily into separate elements.++ * Text.Pandoc.Writers.LaTeX: Don't emit `[<+->]` unless beamer output, even+ if `writerIncremental` is True (#5072).++ * Text.Pandoc.Writers.Muse (Alexander Krotov).++ + Output tables as grid tables if they have multi-line cells.+ + Indent simple tables only on the top level.+ + Output tables with one column as grid tables.+ + Add support for `--reference-location`.+ + Internal improvements.++ * Text.Pandoc.Writers.OpenDocument: Fix list indentation (Nils Carlson,+ #5095). This was a regression in pandoc 2.4.++ * Text.Pandoc.Writers.RTF: Fix warnings for skipped raw inlines.++ * Text.Pandoc.Writers.Texinfo: Add blank line before `@menu` section (#5055).++ * Text.Pandoc.XML: in `toHtml5Entities`, prefer shorter entities+ when there are several choices for a particular character.++ * data/abbreviations++ + Add additional abbreviations (Andrew Dunning)+ Many of these borrowed from the Chicago Manual of Style 10.42,+ 'Scholarly abbreviations'.++ * Templates++ + Asciidoc template: add :lang: to title header is lang is set in+ metadata (#5088).++ * pandoc.cabal: Add cabal flag `derive_json_via_th` (Albert Krewinkel)+ Disabling the flag will cause derivation of ToJSON and FromJSON+ instances via GHC Generics instead of Template Haskell. The flag is+ enabled by default, as deriving via Generics can be slow (see #4083).++ * trypandoc:++ + Tweaked drop-down lists.+ + Put link to site in footer.+ + Preselect output format.+ + Update on change of in or out format.+ + Add man input format.++ * MANUAL.txt:++ + Fix outdated description of latex_macros extension.+ + Clarified placement of bibliography.+ + Added "A note on security."+ + Fix note on curly brace syntx for locators.+ + Document new explicit syntax for citeproc locators.+ + Remove confusing cross-links for some extensions.+ + Don't put pandoc in code ticks in heading.+ + Document that `--ascii` works for gfm and commonmark too.+ + Add `man` to `--from` options.++ * doc/customizing-pandoc.md: various improvements (Mauro Bieg).++ pandoc (2.4) [new features]@@ -328,7 +522,7 @@ + With `--biblatex`, use `\autocite` when possible (#4960). `\autocites{a1}{a2}{a3}` will not collapse the entries. So, if we don't have prefixes and suffixes, we use instead- `\autocite{a1;a2;a3}`.+ `\autocite{a1,a2,a3}`. + Fix description lists contining highlighted code (#4662). * Text.Pandoc.Writers.Man
data/abbreviations view
@@ -1,23 +1,43 @@+aet.+aetat. al. Apr. Aug.+bk. Bros.+c. Capt. cf. ch.+chap.+chs. Co.+col. Corp. cp.+d. Dec. Dr. e.g.+ed.+eds. esp.+f.+fasc. Feb.+ff.+fig.+fl.+fol.+fols.+Fr. Gen. Gov. Hon. i.e.+ill. Inc.+incl. Jan. Jr. Jul.@@ -29,6 +49,9 @@ Mr. Mrs. Ms.+n.+n.b.+nn. No. Nov. Oct.@@ -37,8 +60,13 @@ pp. Pres. Prof.+pt.+q.v. Rep. Rev.+s.v.+s.vv.+saec. sec. Sen. Sep.@@ -46,6 +74,7 @@ Sgt. Sr. St.+univ. viz. vol. vs.
data/pandoc.lua view
@@ -25,6 +25,7 @@ local M = {} local List = require 'pandoc.List'+local utils = require 'pandoc.utils' ------------------------------------------------------------------------ -- Accessor objects@@ -119,6 +120,7 @@ 'function (x, v) x.c%s = v end', accessors )+ behavior.__eq = utils.equals behavior.__index = function(t, k) if getmetatable(t).getters[k] then return getmetatable(t).getters[k](t)@@ -873,6 +875,7 @@ return {identifier, classes, attributes} end M.Attr.behavior._field_names = {identifier = 1, classes = 2, attributes = 3}+M.Attr.behavior.__eq = utils.equals M.Attr.behavior.__index = function(t, k) return rawget(t, getmetatable(t)._field_names[k]) or getmetatable(t)[k]@@ -931,6 +934,7 @@ return {start, style, delimiter} end M.ListAttributes.behavior._field_names = {start = 1, style = 2, delimiter = 3}+M.ListAttributes.behavior.__eq = utils.equals M.ListAttributes.behavior.__index = function (t, k) return rawget(t, getmetatable(t)._field_names[k]) or getmetatable(t)[k]@@ -1033,7 +1037,6 @@ ------------------------------------------------------------------------ -- Functions which have moved to different modules-local utils = require 'pandoc.utils' M.sha1 = utils.sha1 return M
data/templates/default.asciidoc view
@@ -9,6 +9,9 @@ $if(keywords)$ :keywords: $for(keywords)$$keywords$$sep$, $endfor$ $endif$+$if(lang)$+:lang: $lang$+$endif$ $if(toc)$ :toc: $endif$
man/pandoc.1 view
@@ -1,5 +1,5 @@ .\"t-.TH PANDOC 1 "November 01, 2018" "pandoc 2.4"+.TH PANDOC 1 "November 25, 2018" "pandoc 2.5" .SH NAME pandoc - general markup converter .SH SYNOPSIS@@ -40,7 +40,7 @@ While conversions from pandoc\[aq]s Markdown to all formats aspire to be perfect, conversions from formats more expressive than pandoc\[aq]s Markdown can be expected to be lossy.-.SS Using \f[C]pandoc\f[R]+.SS Using pandoc .PP If no \f[I]input\-files\f[R] are specified, input is read from \f[I]stdin\f[R].@@ -258,6 +258,8 @@ .IP \[bu] 2 \f[C]mediawiki\f[R] (MediaWiki markup) .IP \[bu] 2+\f[C]man\f[R] (roff man)+.IP \[bu] 2 \f[C]muse\f[R] (Muse) .IP \[bu] 2 \f[C]native\f[R] (native Haskell)@@ -898,9 +900,10 @@ .B \f[C]\-\-ascii\f[R] Use only ASCII characters in output. Currently supported for XML and HTML formats (which use entities instead-of UTF\-8 when this option is selected), Markdown (which uses entities),-roff ms (which use hexadecimal escapes), and to a limited degree LaTeX-(which uses standard commands for accented characters when possible).+of UTF\-8 when this option is selected), CommonMark, gfm, and Markdown+(which use entities), roff ms (which use hexadecimal escapes), and to a+limited degree LaTeX (which uses standard commands for accented+characters when possible). roff man output uses ASCII by default. .TP .B \f[C]\-\-reference\-links\f[R]@@ -1955,7 +1958,8 @@ .B enabled by default in \f[C]markdown\f[R], \f[C]muse\f[R] .PP-The algorithm used to derive the identifier from the header text is:+The default algorithm used to derive the identifier from the header text+is: .IP \[bu] 2 Remove all formatting, links, etc. .IP \[bu] 2@@ -2017,6 +2021,9 @@ the same identifier with \f[C]\-1\f[R] appended; the third with \f[C]\-2\f[R]; and so on. .PP+(However, a different algorithm is used if+\f[C]gfm_auto_identifiers\f[R] is enabled; see below.)+.PP These identifiers are used to provide link targets in the table of contents generated by the \f[C]\-\-toc|\-\-table\-of\-contents\f[R] option.@@ -2047,6 +2054,13 @@ ASCII. Accents are stripped off of accented Latin letters, and non\-Latin letters are omitted.+.SS Extension: \f[C]gfm_auto_identifiers\f[R]+.PP+Changes the algorithm used by \f[C]auto_identifiers\f[R] to conform to+GitHub\[aq]s method.+Spaces are converted to dashes (\f[C]\-\f[R]), uppercase characters to+lowercase characters, and punctuation characters other than \f[C]\-\f[R]+and \f[C]_\f[R] are removed. .SS Math Input .PP The extensions \f[C]tex_math_dollars\f[R],@@ -4025,7 +4039,7 @@ .SS LaTeX macros .SS Extension: \f[C]latex_macros\f[R] .PP-For output formats other than LaTeX, pandoc will parse LaTeX macro+When this extension is enabled, pandoc will parse LaTeX macro definitions and apply the resulting macros to all LaTeX math and raw LaTeX. So, for example, the following will work in all output formats, not just@@ -4650,6 +4664,18 @@ \f[C]\[sc]\f[R]/\f[C]\[sc]\[sc]\f[R]. If no locator term is used, \[dq]page\[dq] is assumed. .PP+\f[C]pandoc\-citeproc\f[R] will use heuristics to distinguish the+locator from the suffix.+In complex cases, the locator can be enclosed in curly braces (using+\f[C]pandoc\-citeproc\f[R] 0.15 and higher only):+.IP+.nf+\f[C]+[\[at]smith{ii, A, D\-Z}, with a suffix]+[\[at]smith, {pp. iv, vi\-xi, (xv)\-(xvii)} with suffix here]+\f[R]+.fi+.PP A minus sign (\f[C]\-\f[R]) before the \f[C]\[at]\f[R] will suppress mention of the author in the citation. This can be useful when the author is already mentioned in the text:@@ -4670,12 +4696,27 @@ \f[R] .fi .PP-If the style calls for a list of works cited, it will be placed at the-end of the document.-Normally, you will want to end your document with an appropriate header:+If the style calls for a list of works cited, it will be placed in a div+with id \f[C]refs\f[R], if one exists: .IP .nf \f[C]+::: #refs+:::+\f[R]+.fi+.PP+Otherwise, it will be placed at the end of the document.+Generation of the bibliography can be suppressed by setting+\f[C]suppress\-bibliography: true\f[R] in the YAML metadata.+.PP+If you wish the bibliography to have a section header, you can set+\f[C]reference\-section\-title\f[R] in the metadata, or put the header+at the beginning of the div with id \f[C]refs\f[R] (if you are using it)+or at the end of your document:+.IP+.nf+\f[C] last paragraph... # References@@ -4888,7 +4929,7 @@ .TP .B \f[C]markdown_github\f[R] (deprecated GitHub\-Flavored Markdown) \f[C]pipe_tables\f[R], \f[C]raw_html\f[R], \f[C]fenced_code_blocks\f[R],-\f[C]gfm_auto_identifiers\f[R], \f[C]ascii_identifiers\f[R],+\f[C]auto_identifiers\f[R], \f[C]gfm_auto_identifiers\f[R], \f[C]backtick_code_blocks\f[R], \f[C]autolink_bare_uris\f[R], \f[C]space_in_atx_header\f[R], \f[C]intraword_underscores\f[R], \f[C]strikeout\f[R], \f[C]emoji\f[R],@@ -4924,11 +4965,12 @@ .TP .B \f[C]gfm\f[R] (GitHub\-Flavored Markdown) \f[C]pipe_tables\f[R], \f[C]raw_html\f[R], \f[C]fenced_code_blocks\f[R],-\f[C]gfm_auto_identifiers\f[R], \f[C]ascii_identifiers\f[R],+\f[C]auto_identifiers\f[R], \f[C]gfm_auto_identifiers\f[R], \f[C]backtick_code_blocks\f[R], \f[C]autolink_bare_uris\f[R],-\f[C]intraword_underscores\f[R], \f[C]strikeout\f[R],-\f[C]hard_line_breaks\f[R], \f[C]emoji\f[R],-\f[C]shortcut_reference_links\f[R], \f[C]angle_brackets_escapable\f[R].+\f[C]space_in_atx_header\f[R], \f[C]intraword_underscores\f[R],+\f[C]strikeout\f[R], \f[C]emoji\f[R],+\f[C]shortcut_reference_links\f[R], \f[C]angle_brackets_escapable\f[R],+\f[C]lists_without_preceding_blankline\f[R]. .SH PRODUCING SLIDE SHOWS WITH PANDOC .PP You can use pandoc to produce an HTML + JavaScript slide presentation@@ -5732,6 +5774,39 @@ pandoc \-\-print\-default\-data\-file sample.lua \f[R] .fi+.SH A NOTE ON SECURITY+.PP+If you use pandoc to convert user\-contributed content in a web+application, here are some things to keep in mind:+.IP "1." 3+Although pandoc itself will not create or modify any files other than+those you explicitly ask it create (with the exception of temporary+files used in producing PDFs), a filter or custom writer could in+principle do anything on your file system.+Please audit filters and custom writers very carefully before using+them.+.IP "2." 3+If your application uses pandoc as a Haskell library (rather than+shelling out to the executable), it is possible to use it in a mode that+fully isolates pandoc from your file system, by running the pandoc+operations in the \f[C]PandocPure\f[R] monad.+See the document Using the pandoc API for more details.+.IP "3." 3+Pandoc\[aq]s parsers can exhibit pathological performance on some corner+cases.+It is wise to put any pandoc operations under a timeout, to avoid DOS+attacks that exploit these issues.+If you are using the pandoc executable, you can add the command line+options \f[C]+RTS \-M512M \-RTS\f[R] (for example) to limit the heap+size to 512MB.+.IP "4." 3+The HTML generated by pandoc is not guaranteed to be safe.+If \f[C]raw_html\f[R] is enabled for the Markdown input, users can+inject arbitrary HTML.+Even if \f[C]raw_html\f[R] is disabled, users can include dangerous+content in attributes for headers, spans, and code blocks.+To be safe, you should run all the generated HTML through an HTML+sanitizer. .SH AUTHORS .PP Copyright 2006\-2017 John MacFarlane (jgm\[at]berkeley.edu).
pandoc.cabal view
@@ -1,5 +1,5 @@ name: pandoc-version: 2.4+version: 2.5 cabal-version: 2.0 build-type: Custom license: GPL-2@@ -337,6 +337,11 @@ Description: Embed data files in binary for relocatable executable. Default: False +flag derive_json_via_th+ Description: Use Template Haskell instead of GHC Generics to derive ToJSON+ and FromJSON instances.+ Default: True+ flag trypandoc Description: Build trypandoc cgi executable. Default: False@@ -356,7 +361,7 @@ process >= 1.2.3 && < 1.7, directory >= 1 && < 1.4, bytestring >= 0.9 && < 0.11,- text >= 0.11 && < 1.3,+ text >= 1.1.1.0 && < 1.3, time >= 1.5 && < 1.10, safe >= 0.3 && < 0.4, zip-archive >= 0.2.3.4 && < 0.4,@@ -413,6 +418,8 @@ cpp-options: -DEMBED_DATA_FILES build-depends: file-embed >= 0.0 && < 0.1 other-modules: Text.Pandoc.Data+ if flag(derive_json_via_th)+ cpp-options: -DDERIVE_JSON_VIA_TH if os(windows) cpp-options: -D_WINDOWS ghc-options: -Wall -fno-warn-unused-do-bind@@ -515,6 +522,8 @@ Text.Pandoc.BCP47, Text.Pandoc.Class other-modules: Text.Pandoc.App.CommandLineOptions,+ Text.Pandoc.App.FormatHeuristics,+ Text.Pandoc.App.Opt, Text.Pandoc.App.OutputSettings, Text.Pandoc.Filter.JSON, Text.Pandoc.Filter.Lua,@@ -634,7 +643,7 @@ pandoc-types >= 1.17.5 && < 1.18, bytestring >= 0.9 && < 0.11, base64-bytestring >= 0.1 && < 1.1,- text >= 0.11 && < 1.3,+ text >= 1.1.1.0 && < 1.3, time >= 1.5 && < 1.10, directory >= 1 && < 1.4, filepath >= 1.1 && < 1.5,@@ -718,7 +727,7 @@ build-depends: pandoc, time, bytestring, containers, base >= 4.8 && < 5,- text >= 0.11 && < 1.3,+ text >= 1.1.1.0 && < 1.3, mtl >= 2.2 && < 2.3, criterion >= 1.0 && < 1.6 if impl(ghc < 8.0)
src/Text/Pandoc/App.hs view
@@ -62,8 +62,9 @@ import System.IO (nativeNewline, stdout) import qualified System.IO as IO (Newline (..)) import Text.Pandoc-import Text.Pandoc.App.CommandLineOptions (Opt (..), LineEnding (..),- defaultOpts, parseOptions, options)+import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)+import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), defaultOpts)+import Text.Pandoc.App.CommandLineOptions (parseOptions, options) import Text.Pandoc.App.OutputSettings (OutputSettings (..), optToOutputSettings) import Text.Pandoc.BCP47 (Lang (..), parseBCP47) import Text.Pandoc.Builder (setMeta, deleteMeta)@@ -336,63 +337,6 @@ Right [YAML.Scalar (YAML.SBool b)] -> MetaBool b _ -> MetaString s---- Determine default reader based on source file extensions.-formatFromFilePaths :: String -> [FilePath] -> String-formatFromFilePaths fallback [] = fallback-formatFromFilePaths fallback (x:xs) =- case formatFromFilePath x of- Just f -> f- Nothing -> formatFromFilePaths fallback xs---- Determine format based on file extension-formatFromFilePath :: FilePath -> Maybe String-formatFromFilePath x =- case takeExtension (map toLower x) of- ".adoc" -> Just "asciidoc"- ".asciidoc" -> Just "asciidoc"- ".context" -> Just "context"- ".ctx" -> Just "context"- ".db" -> Just "docbook"- ".doc" -> Just "doc" -- so we get an "unknown reader" error- ".docx" -> Just "docx"- ".dokuwiki" -> Just "dokuwiki"- ".epub" -> Just "epub"- ".fb2" -> Just "fb2"- ".htm" -> Just "html"- ".html" -> Just "html"- ".icml" -> Just "icml"- ".json" -> Just "json"- ".latex" -> Just "latex"- ".lhs" -> Just "markdown+lhs"- ".ltx" -> Just "latex"- ".markdown" -> Just "markdown"- ".md" -> Just "markdown"- ".ms" -> Just "ms"- ".muse" -> Just "muse"- ".native" -> Just "native"- ".odt" -> Just "odt"- ".opml" -> Just "opml"- ".org" -> Just "org"- ".pdf" -> Just "pdf" -- so we get an "unknown reader" error- ".pptx" -> Just "pptx"- ".roff" -> Just "ms"- ".rst" -> Just "rst"- ".rtf" -> Just "rtf"- ".s5" -> Just "s5"- ".t2t" -> Just "t2t"- ".tei" -> Just "tei"- ".tei.xml" -> Just "tei"- ".tex" -> Just "latex"- ".texi" -> Just "texinfo"- ".texinfo" -> Just "texinfo"- ".text" -> Just "markdown"- ".textile" -> Just "textile"- ".txt" -> Just "markdown"- ".wiki" -> Just "mediawiki"- ".xhtml" -> Just "html"- ['.',y] | y `elem` ['1'..'9'] -> Just "man"- _ -> Nothing -- Transformations of a Pandoc document post-parsing:
src/Text/Pandoc/App/CommandLineOptions.hs view
@@ -1,9 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TupleSections #-}+#ifdef DERIVE_JSON_VIA_TH+{-# LANGUAGE TemplateHaskell #-}+#endif {- Copyright (C) 2006-2018 John MacFarlane <jgm@berkeley.edu> @@ -34,10 +35,7 @@ Does a pandoc conversion based on command-line options. -} module Text.Pandoc.App.CommandLineOptions (- Opt(..)- , LineEnding (..)- , defaultOpts- , parseOptions+ parseOptions , options , engines ) where@@ -46,11 +44,9 @@ import Control.Monad.Trans import Data.Aeson.Encode.Pretty (encodePretty', Config(..), keyOrder, defConfig, Indent(..), NumberFormat(..))-import Data.Aeson.TH (deriveJSON, defaultOptions) import Data.Char (toLower, toUpper) import Data.List (intercalate, sort) import Data.Maybe (fromMaybe)-import GHC.Generics import Skylighting (Style, Syntax (..), defaultSyntaxMap, parseTheme, pygments) import System.Console.GetOpt@@ -59,6 +55,7 @@ import System.FilePath import System.IO (stdout) import Text.Pandoc+import Text.Pandoc.App.Opt (Opt (..), LineEnding (..)) import Text.Pandoc.Filter (Filter (..)) import Text.Pandoc.Highlighting (highlightingStyles) import Text.Pandoc.Writers.Math (defaultMathJaxURL, defaultKaTeXURL)@@ -80,9 +77,6 @@ import qualified Data.Text as T import qualified Text.Pandoc.UTF8 as UTF8 --- | The type of line-endings to be used when writing plain-text.-data LineEnding = LF | CRLF | Native deriving (Show, Generic)- parseOptions :: [OptDescr (Opt -> IO Opt)] -> Opt -> IO Opt parseOptions options' defaults = do rawArgs <- map UTF8.decodeArg <$> getArgs@@ -122,152 +116,6 @@ pdfEngines :: [String] pdfEngines = ordNub $ map snd engines ---- | Data structure for command line options.-data Opt = Opt- { optTabStop :: Int -- ^ Number of spaces per tab- , optPreserveTabs :: Bool -- ^ Preserve tabs instead of converting to spaces- , optStandalone :: Bool -- ^ Include header, footer- , optReader :: Maybe String -- ^ Reader format- , optWriter :: Maybe String -- ^ Writer format- , optTableOfContents :: Bool -- ^ Include table of contents- , optBaseHeaderLevel :: Int -- ^ Base header level- , optTemplate :: Maybe FilePath -- ^ Custom template- , optVariables :: [(String,String)] -- ^ Template variables to set- , optMetadata :: [(String, String)] -- ^ Metadata fields to set- , optMetadataFile :: Maybe FilePath -- ^ Name of YAML metadata file- , optOutputFile :: Maybe FilePath -- ^ Name of output file- , optInputFiles :: [FilePath] -- ^ Names of input files- , optNumberSections :: Bool -- ^ Number sections in LaTeX- , optNumberOffset :: [Int] -- ^ Starting number for sections- , optSectionDivs :: Bool -- ^ Put sections in div tags in HTML- , optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5- , optSelfContained :: Bool -- ^ Make HTML accessible offline- , optHtmlQTags :: Bool -- ^ Use <q> tags in HTML- , optHighlightStyle :: Maybe Style -- ^ Style to use for highlighted code- , optSyntaxDefinitions :: [FilePath] -- ^ xml syntax defs to load- , optTopLevelDivision :: TopLevelDivision -- ^ Type of the top-level divisions- , optHTMLMathMethod :: HTMLMathMethod -- ^ Method to print HTML math- , optAbbreviations :: Maybe FilePath -- ^ Path to abbrevs file- , optReferenceDoc :: Maybe FilePath -- ^ Path of reference doc- , optEpubSubdirectory :: String -- ^ EPUB subdir in OCF container- , optEpubMetadata :: Maybe FilePath -- ^ EPUB metadata- , optEpubFonts :: [FilePath] -- ^ EPUB fonts to embed- , optEpubChapterLevel :: Int -- ^ Header level at which to split chapters- , optEpubCoverImage :: Maybe FilePath -- ^ Cover image for epub- , optTOCDepth :: Int -- ^ Number of levels to include in TOC- , optDumpArgs :: Bool -- ^ Output command-line arguments- , optIgnoreArgs :: Bool -- ^ Ignore command-line arguments- , optVerbosity :: Verbosity -- ^ Verbosity of diagnostic output- , optTrace :: Bool -- ^ Enable tracing- , optLogFile :: Maybe FilePath -- ^ File to write JSON log output- , optFailIfWarnings :: Bool -- ^ Fail on warnings- , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst- , optReferenceLocation :: ReferenceLocation -- ^ location for footnotes and link references in markdown output- , optDpi :: Int -- ^ Dpi- , optWrapText :: WrapOption -- ^ Options for wrapping text- , optColumns :: Int -- ^ Line length in characters- , optFilters :: [Filter] -- ^ Filters to apply- , optEmailObfuscation :: ObfuscationMethod- , optIdentifierPrefix :: String- , optStripEmptyParagraphs :: Bool -- ^ Strip empty paragraphs- , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks- , optDataDir :: Maybe FilePath- , optCiteMethod :: CiteMethod -- ^ Method to output cites- , optListings :: Bool -- ^ Use listings package for code blocks- , optPdfEngine :: Maybe String -- ^ Program to use for latex/html -> pdf- , optPdfEngineArgs :: [String] -- ^ Flags to pass to the engine- , optSlideLevel :: Maybe Int -- ^ Header level that creates slides- , optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2- , optAscii :: Bool -- ^ Prefer ascii output- , optDefaultImageExtension :: String -- ^ Default image extension- , optExtractMedia :: Maybe FilePath -- ^ Path to extract embedded media- , optTrackChanges :: TrackChanges -- ^ Accept or reject MS Word track-changes.- , optFileScope :: Bool -- ^ Parse input files before combining- , optTitlePrefix :: Maybe String -- ^ Prefix for title- , optCss :: [FilePath] -- ^ CSS files to link to- , optIncludeBeforeBody :: [FilePath] -- ^ Files to include before- , optIncludeAfterBody :: [FilePath] -- ^ Files to include after body- , optIncludeInHeader :: [FilePath] -- ^ Files to include in header- , optResourcePath :: [FilePath] -- ^ Path to search for images etc- , optRequestHeaders :: [(String, String)] -- ^ Headers for HTTP requests- , optEol :: LineEnding -- ^ Style of line-endings to use- , optStripComments :: Bool -- ^ Skip HTML comments- } deriving (Generic, Show)---- | Defaults for command-line options.-defaultOpts :: Opt-defaultOpts = Opt- { optTabStop = 4- , optPreserveTabs = False- , optStandalone = False- , optReader = Nothing- , optWriter = Nothing- , optTableOfContents = False- , optBaseHeaderLevel = 1- , optTemplate = Nothing- , optVariables = []- , optMetadata = []- , optMetadataFile = Nothing- , optOutputFile = Nothing- , optInputFiles = []- , optNumberSections = False- , optNumberOffset = [0,0,0,0,0,0]- , optSectionDivs = False- , optIncremental = False- , optSelfContained = False- , optHtmlQTags = False- , optHighlightStyle = Just pygments- , optSyntaxDefinitions = []- , optTopLevelDivision = TopLevelDefault- , optHTMLMathMethod = PlainMath- , optAbbreviations = Nothing- , optReferenceDoc = Nothing- , optEpubSubdirectory = "EPUB"- , optEpubMetadata = Nothing- , optEpubFonts = []- , optEpubChapterLevel = 1- , optEpubCoverImage = Nothing- , optTOCDepth = 3- , optDumpArgs = False- , optIgnoreArgs = False- , optVerbosity = WARNING- , optTrace = False- , optLogFile = Nothing- , optFailIfWarnings = False- , optReferenceLinks = False- , optReferenceLocation = EndOfDocument- , optDpi = 96- , optWrapText = WrapAuto- , optColumns = 72- , optFilters = []- , optEmailObfuscation = NoObfuscation- , optIdentifierPrefix = ""- , optStripEmptyParagraphs = False- , optIndentedCodeClasses = []- , optDataDir = Nothing- , optCiteMethod = Citeproc- , optListings = False- , optPdfEngine = Nothing- , optPdfEngineArgs = []- , optSlideLevel = Nothing- , optSetextHeaders = True- , optAscii = False- , optDefaultImageExtension = ""- , optExtractMedia = Nothing- , optTrackChanges = AcceptChanges- , optFileScope = False- , optTitlePrefix = Nothing- , optCss = []- , optIncludeBeforeBody = []- , optIncludeAfterBody = []- , optIncludeInHeader = []- , optResourcePath = ["."]- , optRequestHeaders = []- , optEol = Native- , optStripComments = False- }- lookupHighlightStyle :: String -> IO (Maybe Style) lookupHighlightStyle s | takeExtension s == ".theme" = -- attempt to load KDE theme@@ -1083,8 +931,3 @@ \r -> case r of Right () -> return () Left e -> E.throwIO e---- see https://github.com/jgm/pandoc/pull/4083--- using generic deriving caused long compilation times-$(deriveJSON defaultOptions ''LineEnding)-$(deriveJSON defaultOptions ''Opt)
+ src/Text/Pandoc/App/FormatHeuristics.hs view
@@ -0,0 +1,94 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-+Copyright (C) 2006-2018 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+-}++{- |+ Module : Text.Pandoc.App.FormatHeuristics+ Copyright : Copyright (C) 2006-2018 John MacFarlane+ License : GNU GPL, version 2 or above++ Maintainer : John MacFarlane <jgm@berkeley@edu>+ Stability : alpha+ Portability : portable++Guess the format of a file from its name.+-}+module Text.Pandoc.App.FormatHeuristics+ ( formatFromFilePaths+ ) where++import Prelude+import Data.Char (toLower)+import System.FilePath (takeExtension)++-- Determine default reader based on source file extensions.+formatFromFilePaths :: String -> [FilePath] -> String+formatFromFilePaths fallback [] = fallback+formatFromFilePaths fallback (x:xs) =+ case formatFromFilePath x of+ Just f -> f+ Nothing -> formatFromFilePaths fallback xs++-- Determine format based on file extension+formatFromFilePath :: FilePath -> Maybe String+formatFromFilePath x =+ case takeExtension (map toLower x) of+ ".adoc" -> Just "asciidoc"+ ".asciidoc" -> Just "asciidoc"+ ".context" -> Just "context"+ ".ctx" -> Just "context"+ ".db" -> Just "docbook"+ ".doc" -> Just "doc" -- so we get an "unknown reader" error+ ".docx" -> Just "docx"+ ".dokuwiki" -> Just "dokuwiki"+ ".epub" -> Just "epub"+ ".fb2" -> Just "fb2"+ ".htm" -> Just "html"+ ".html" -> Just "html"+ ".icml" -> Just "icml"+ ".json" -> Just "json"+ ".latex" -> Just "latex"+ ".lhs" -> Just "markdown+lhs"+ ".ltx" -> Just "latex"+ ".markdown" -> Just "markdown"+ ".md" -> Just "markdown"+ ".ms" -> Just "ms"+ ".muse" -> Just "muse"+ ".native" -> Just "native"+ ".odt" -> Just "odt"+ ".opml" -> Just "opml"+ ".org" -> Just "org"+ ".pdf" -> Just "pdf" -- so we get an "unknown reader" error+ ".pptx" -> Just "pptx"+ ".roff" -> Just "ms"+ ".rst" -> Just "rst"+ ".rtf" -> Just "rtf"+ ".s5" -> Just "s5"+ ".t2t" -> Just "t2t"+ ".tei" -> Just "tei"+ ".tei.xml" -> Just "tei"+ ".tex" -> Just "latex"+ ".texi" -> Just "texinfo"+ ".texinfo" -> Just "texinfo"+ ".text" -> Just "markdown"+ ".textile" -> Just "textile"+ ".txt" -> Just "markdown"+ ".wiki" -> Just "mediawiki"+ ".xhtml" -> Just "html"+ ['.',y] | y `elem` ['1'..'9'] -> Just "man"+ _ -> Nothing
+ src/Text/Pandoc/App/Opt.hs view
@@ -0,0 +1,221 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveGeneric #-}+#ifdef DERIVE_JSON_VIA_TH+{-# LANGUAGE TemplateHaskell #-}+#endif+{-+Copyright (C) 2006-2018 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+-}++{- |+ Module : Text.Pandoc.App.Opt+ Copyright : Copyright (C) 2006-2018 John MacFarlane+ License : GNU GPL, version 2 or above++ Maintainer : John MacFarlane <jgm@berkeley@edu>+ Stability : alpha+ Portability : portable++Options for pandoc when used as an app.+-}+module Text.Pandoc.App.Opt (+ Opt(..)+ , LineEnding (..)+ , defaultOpts+ ) where+import Prelude+import GHC.Generics+import Text.Pandoc.Filter (Filter (..))+import Text.Pandoc.Highlighting (Style, pygments)+import Text.Pandoc.Logging (Verbosity (WARNING))+import Text.Pandoc.Options (TopLevelDivision (TopLevelDefault),+ TrackChanges (AcceptChanges),+ WrapOption (WrapAuto), HTMLMathMethod (PlainMath),+ ReferenceLocation (EndOfDocument),+ ObfuscationMethod (NoObfuscation),+ CiteMethod (Citeproc))++#ifdef DERIVE_JSON_VIA_TH+import Data.Aeson.TH (deriveJSON, defaultOptions)+#else+import Data.Aeson (FromJSON (..), ToJSON (..),+ defaultOptions, genericToEncoding)+#endif++-- | The type of line-endings to be used when writing plain-text.+data LineEnding = LF | CRLF | Native deriving (Show, Generic)++-- | Data structure for command line options.+data Opt = Opt+ { optTabStop :: Int -- ^ Number of spaces per tab+ , optPreserveTabs :: Bool -- ^ Preserve tabs instead of converting to spaces+ , optStandalone :: Bool -- ^ Include header, footer+ , optReader :: Maybe String -- ^ Reader format+ , optWriter :: Maybe String -- ^ Writer format+ , optTableOfContents :: Bool -- ^ Include table of contents+ , optBaseHeaderLevel :: Int -- ^ Base header level+ , optTemplate :: Maybe FilePath -- ^ Custom template+ , optVariables :: [(String,String)] -- ^ Template variables to set+ , optMetadata :: [(String, String)] -- ^ Metadata fields to set+ , optMetadataFile :: Maybe FilePath -- ^ Name of YAML metadata file+ , optOutputFile :: Maybe FilePath -- ^ Name of output file+ , optInputFiles :: [FilePath] -- ^ Names of input files+ , optNumberSections :: Bool -- ^ Number sections in LaTeX+ , optNumberOffset :: [Int] -- ^ Starting number for sections+ , optSectionDivs :: Bool -- ^ Put sections in div tags in HTML+ , optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5+ , optSelfContained :: Bool -- ^ Make HTML accessible offline+ , optHtmlQTags :: Bool -- ^ Use <q> tags in HTML+ , optHighlightStyle :: Maybe Style -- ^ Style to use for highlighted code+ , optSyntaxDefinitions :: [FilePath] -- ^ xml syntax defs to load+ , optTopLevelDivision :: TopLevelDivision -- ^ Type of the top-level divisions+ , optHTMLMathMethod :: HTMLMathMethod -- ^ Method to print HTML math+ , optAbbreviations :: Maybe FilePath -- ^ Path to abbrevs file+ , optReferenceDoc :: Maybe FilePath -- ^ Path of reference doc+ , optEpubSubdirectory :: String -- ^ EPUB subdir in OCF container+ , optEpubMetadata :: Maybe FilePath -- ^ EPUB metadata+ , optEpubFonts :: [FilePath] -- ^ EPUB fonts to embed+ , optEpubChapterLevel :: Int -- ^ Header level at which to split chapters+ , optEpubCoverImage :: Maybe FilePath -- ^ Cover image for epub+ , optTOCDepth :: Int -- ^ Number of levels to include in TOC+ , optDumpArgs :: Bool -- ^ Output command-line arguments+ , optIgnoreArgs :: Bool -- ^ Ignore command-line arguments+ , optVerbosity :: Verbosity -- ^ Verbosity of diagnostic output+ , optTrace :: Bool -- ^ Enable tracing+ , optLogFile :: Maybe FilePath -- ^ File to write JSON log output+ , optFailIfWarnings :: Bool -- ^ Fail on warnings+ , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst+ , optReferenceLocation :: ReferenceLocation -- ^ location for footnotes and link references in markdown output+ , optDpi :: Int -- ^ Dpi+ , optWrapText :: WrapOption -- ^ Options for wrapping text+ , optColumns :: Int -- ^ Line length in characters+ , optFilters :: [Filter] -- ^ Filters to apply+ , optEmailObfuscation :: ObfuscationMethod+ , optIdentifierPrefix :: String+ , optStripEmptyParagraphs :: Bool -- ^ Strip empty paragraphs+ , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks+ , optDataDir :: Maybe FilePath+ , optCiteMethod :: CiteMethod -- ^ Method to output cites+ , optListings :: Bool -- ^ Use listings package for code blocks+ , optPdfEngine :: Maybe String -- ^ Program to use for latex/html -> pdf+ , optPdfEngineArgs :: [String] -- ^ Flags to pass to the engine+ , optSlideLevel :: Maybe Int -- ^ Header level that creates slides+ , optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2+ , optAscii :: Bool -- ^ Prefer ascii output+ , optDefaultImageExtension :: String -- ^ Default image extension+ , optExtractMedia :: Maybe FilePath -- ^ Path to extract embedded media+ , optTrackChanges :: TrackChanges -- ^ Accept or reject MS Word track-changes.+ , optFileScope :: Bool -- ^ Parse input files before combining+ , optTitlePrefix :: Maybe String -- ^ Prefix for title+ , optCss :: [FilePath] -- ^ CSS files to link to+ , optIncludeBeforeBody :: [FilePath] -- ^ Files to include before+ , optIncludeAfterBody :: [FilePath] -- ^ Files to include after body+ , optIncludeInHeader :: [FilePath] -- ^ Files to include in header+ , optResourcePath :: [FilePath] -- ^ Path to search for images etc+ , optRequestHeaders :: [(String, String)] -- ^ Headers for HTTP requests+ , optEol :: LineEnding -- ^ Style of line-endings to use+ , optStripComments :: Bool -- ^ Skip HTML comments+ } deriving (Generic, Show)++-- | Defaults for command-line options.+defaultOpts :: Opt+defaultOpts = Opt+ { optTabStop = 4+ , optPreserveTabs = False+ , optStandalone = False+ , optReader = Nothing+ , optWriter = Nothing+ , optTableOfContents = False+ , optBaseHeaderLevel = 1+ , optTemplate = Nothing+ , optVariables = []+ , optMetadata = []+ , optMetadataFile = Nothing+ , optOutputFile = Nothing+ , optInputFiles = []+ , optNumberSections = False+ , optNumberOffset = [0,0,0,0,0,0]+ , optSectionDivs = False+ , optIncremental = False+ , optSelfContained = False+ , optHtmlQTags = False+ , optHighlightStyle = Just pygments+ , optSyntaxDefinitions = []+ , optTopLevelDivision = TopLevelDefault+ , optHTMLMathMethod = PlainMath+ , optAbbreviations = Nothing+ , optReferenceDoc = Nothing+ , optEpubSubdirectory = "EPUB"+ , optEpubMetadata = Nothing+ , optEpubFonts = []+ , optEpubChapterLevel = 1+ , optEpubCoverImage = Nothing+ , optTOCDepth = 3+ , optDumpArgs = False+ , optIgnoreArgs = False+ , optVerbosity = WARNING+ , optTrace = False+ , optLogFile = Nothing+ , optFailIfWarnings = False+ , optReferenceLinks = False+ , optReferenceLocation = EndOfDocument+ , optDpi = 96+ , optWrapText = WrapAuto+ , optColumns = 72+ , optFilters = []+ , optEmailObfuscation = NoObfuscation+ , optIdentifierPrefix = ""+ , optStripEmptyParagraphs = False+ , optIndentedCodeClasses = []+ , optDataDir = Nothing+ , optCiteMethod = Citeproc+ , optListings = False+ , optPdfEngine = Nothing+ , optPdfEngineArgs = []+ , optSlideLevel = Nothing+ , optSetextHeaders = True+ , optAscii = False+ , optDefaultImageExtension = ""+ , optExtractMedia = Nothing+ , optTrackChanges = AcceptChanges+ , optFileScope = False+ , optTitlePrefix = Nothing+ , optCss = []+ , optIncludeBeforeBody = []+ , optIncludeAfterBody = []+ , optIncludeInHeader = []+ , optResourcePath = ["."]+ , optRequestHeaders = []+ , optEol = Native+ , optStripComments = False+ }++#ifdef DERIVE_JSON_VIA_TH+-- see https://github.com/jgm/pandoc/pull/4083+-- using generic deriving caused long compilation times+$(deriveJSON defaultOptions ''LineEnding)+$(deriveJSON defaultOptions ''Opt)+#else+instance ToJSON LineEnding where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON LineEnding++instance ToJSON Opt where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON Opt+#endif
src/Text/Pandoc/App/OutputSettings.hs view
@@ -50,7 +50,9 @@ import System.FilePath import System.IO (stdout) import Text.Pandoc-import Text.Pandoc.App.CommandLineOptions (Opt (..), engines)+import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)+import Text.Pandoc.App.Opt (Opt (..))+import Text.Pandoc.App.CommandLineOptions (engines) import Text.Pandoc.BCP47 (Lang (..), parseBCP47) import qualified Text.Pandoc.UTF8 as UTF8 @@ -80,14 +82,14 @@ Nothing -> return Nothing Just fp -> Just <$> readUtf8File fp - let nonPdfWriterName Nothing = defaultWriterName outputFile- nonPdfWriterName (Just x) = x- let pdfOutput = map toLower (takeExtension outputFile) == ".pdf" (writerName, maybePdfProg) <- if pdfOutput then liftIO $ pdfWriterAndProg (optWriter opts) (optPdfEngine opts)- else return (nonPdfWriterName $ optWriter opts, Nothing)+ else case optWriter opts of+ Nothing ->+ return (formatFromFilePaths "html" [outputFile], Nothing)+ Just f -> return (f, Nothing) let format = map toLower $ baseWriterName $ takeFileName writerName -- in case path to lua script@@ -230,49 +232,6 @@ , outputWriterOptions = writerOpts , outputPdfProgram = maybePdfProg }---- Determine default writer based on output file extension-defaultWriterName :: FilePath -> String-defaultWriterName "-" = "html" -- no output file-defaultWriterName x =- case takeExtension (map toLower x) of- "" -> "markdown" -- empty extension- ".tex" -> "latex"- ".latex" -> "latex"- ".ltx" -> "latex"- ".context" -> "context"- ".ctx" -> "context"- ".rtf" -> "rtf"- ".rst" -> "rst"- ".s5" -> "s5"- ".native" -> "native"- ".json" -> "json"- ".txt" -> "markdown"- ".text" -> "markdown"- ".md" -> "markdown"- ".muse" -> "muse"- ".markdown" -> "markdown"- ".textile" -> "textile"- ".lhs" -> "markdown+lhs"- ".texi" -> "texinfo"- ".texinfo" -> "texinfo"- ".db" -> "docbook"- ".odt" -> "odt"- ".docx" -> "docx"- ".epub" -> "epub"- ".org" -> "org"- ".asciidoc" -> "asciidoc"- ".adoc" -> "asciidoc"- ".fb2" -> "fb2"- ".opml" -> "opml"- ".icml" -> "icml"- ".tei.xml" -> "tei"- ".tei" -> "tei"- ".ms" -> "ms"- ".roff" -> "ms"- ".pptx" -> "pptx"- ['.',y] | y `elem` ['1'..'9'] -> "man"- _ -> "html" baseWriterName :: String -> String baseWriterName = takeWhile (\c -> c /= '+' && c /= '-')
src/Text/Pandoc/Extensions.hs view
@@ -1,9 +1,11 @@-{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}+#ifdef DERIVE_JSON_VIA_TH {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TemplateHaskell #-}+#endif {- Copyright (C) 2012-2018 John MacFarlane <jgm@berkeley.edu> @@ -50,17 +52,22 @@ , multimarkdownExtensions ) where import Prelude-import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions)-import Data.Aeson.TH (deriveJSON) import Data.Bits (clearBit, setBit, testBit, (.|.)) import Data.Data (Data) import Data.Typeable (Typeable) import GHC.Generics (Generic)-import Text.Pandoc.Shared (safeRead)+import Safe (readMay) import Text.Parsec +#ifdef DERIVE_JSON_VIA_TH+import Data.Aeson.TH (deriveJSON, defaultOptions)+#else+import Data.Aeson (FromJSON (..), ToJSON (..),+ defaultOptions, genericToEncoding)+#endif+ newtype Extensions = Extensions Integer- deriving (Show, Read, Eq, Ord, Data, Typeable, Generic, ToJSON, FromJSON)+ deriving (Show, Read, Eq, Ord, Data, Typeable, Generic) instance Semigroup Extensions where (Extensions a) <> (Extensions b) = Extensions (a .|. b)@@ -89,7 +96,8 @@ | Ext_all_symbols_escapable -- ^ Make all non-alphanumerics escapable | Ext_amuse -- ^ Enable Text::Amuse extensions to Emacs Muse markup | Ext_angle_brackets_escapable -- ^ Make < and > escapable- | Ext_ascii_identifiers -- ^ ascii-only identifiers for headers+ | Ext_ascii_identifiers -- ^ ascii-only identifiers for headers;+ -- presupposes Ext_auto_identifiers | Ext_auto_identifiers -- ^ Automatic identifiers for headers | Ext_autolink_bare_uris -- ^ Make all absolute URIs into links | Ext_backtick_code_blocks -- ^ GitHub style ``` code blocks@@ -116,8 +124,9 @@ | Ext_fenced_divs -- ^ Allow fenced div syntax ::: | Ext_footnotes -- ^ Pandoc\/PHP\/MMD style footnotes | Ext_four_space_rule -- ^ Require 4-space indent for list contents- | Ext_gfm_auto_identifiers -- ^ Automatic identifiers for headers, using- -- GitHub's method for generating identifiers+ | Ext_gfm_auto_identifiers -- ^ Use GitHub's method for generating+ -- header identifiers; presupposes+ -- Ext_auto_identifiers | Ext_grid_tables -- ^ Grid tables (pandoc, reST) | Ext_hard_line_breaks -- ^ All newlines become hard line breaks | Ext_header_attributes -- ^ Explicit header attributes {#id .class k=v}@@ -258,8 +267,8 @@ , Ext_pipe_tables , Ext_raw_html , Ext_fenced_code_blocks+ , Ext_auto_identifiers , Ext_gfm_auto_identifiers- , Ext_ascii_identifiers , Ext_backtick_code_blocks , Ext_autolink_bare_uris , Ext_space_in_atx_header@@ -378,7 +387,7 @@ extMod = do polarity <- oneOf "-+" name <- many $ noneOf "-+"- ext <- case safeRead ("Ext_" ++ name) of+ ext <- case readMay ("Ext_" ++ name) of Just n -> return n Nothing | name == "lhs" -> return Ext_literate_haskell@@ -387,4 +396,15 @@ '-' -> disableExtension ext _ -> enableExtension ext +#ifdef DERIVE_JSON_VIA_TH $(deriveJSON defaultOptions ''Extension)+$(deriveJSON defaultOptions ''Extensions)+#else+instance ToJSON Extension where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON Extension++instance ToJSON Extensions where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON Extensions+#endif
src/Text/Pandoc/Filter.hs view
@@ -1,5 +1,9 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NoImplicitPrelude #-}+#ifdef DERIVE_JSON_VIA_TH {-# LANGUAGE TemplateHaskell #-}+#endif {- Copyright (C) 2006-2018 John MacFarlane <jgm@berkeley.edu> @@ -34,9 +38,14 @@ ) where import Prelude-import Data.Aeson (defaultOptions)-import Data.Aeson.TH (deriveJSON)+#ifdef DERIVE_JSON_VIA_TH+import Data.Aeson.TH (deriveJSON, defaultOptions)+#else+import Data.Aeson (FromJSON (..), ToJSON (..),+ defaultOptions, genericToEncoding)+#endif import Data.Foldable (foldrM)+import GHC.Generics (Generic) import Text.Pandoc.Class (PandocIO) import Text.Pandoc.Definition (Pandoc) import Text.Pandoc.Options (ReaderOptions)@@ -47,7 +56,7 @@ -- | Type of filter and path to filter file. data Filter = LuaFilter FilePath | JSONFilter FilePath- deriving (Show)+ deriving (Show, Generic) -- | Modify the given document using a filter. applyFilters :: ReaderOptions@@ -67,4 +76,10 @@ expandFilterPath (LuaFilter fp) = LuaFilter <$> Path.expandFilterPath fp expandFilterPath (JSONFilter fp) = JSONFilter <$> Path.expandFilterPath fp +#ifdef DERIVE_JSON_VIA_TH $(deriveJSON defaultOptions ''Filter)+#else+instance ToJSON Filter where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON Filter+#endif
src/Text/Pandoc/Lua/Module/Utils.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE NoImplicitPrelude #-} {- Copyright © 2017-2018 Albert Krewinkel <tarleb+pandoc@moltkeplatz.de> @@ -15,7 +16,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -}-{-# LANGUAGE NoImplicitPrelude #-} {- | Module : Text.Pandoc.Lua.Module.Utils Copyright : Copyright © 2017-2018 Albert Krewinkel@@ -32,10 +32,12 @@ import Prelude import Control.Applicative ((<|>))+import Data.Char (toLower) import Data.Default (def) import Foreign.Lua (Peekable, Lua, NumResults) import Text.Pandoc.Class (runIO, setUserDataDir)-import Text.Pandoc.Definition (Pandoc, Meta, MetaValue, Block, Inline)+import Text.Pandoc.Definition ( Pandoc, Meta, MetaValue (..), Block, Inline+ , Citation, Attr, ListAttributes) import Text.Pandoc.Lua.StackInstances () import Text.Pandoc.Lua.Util (addFunction) @@ -51,6 +53,7 @@ pushModule mbDatadir = do Lua.newtable addFunction "blocks_to_inlines" blocksToInlines+ addFunction "equals" equals addFunction "hierarchicalize" hierarchicalize addFunction "normalize_date" normalizeDate addFunction "run_json_filter" (runJSONFilter mbDatadir)@@ -111,21 +114,37 @@ InlineElement i -> Shared.stringify i BlockElement b -> Shared.stringify b MetaElement m -> Shared.stringify m- MetaValueElement m -> Shared.stringify m+ CitationElement c -> Shared.stringify c+ MetaValueElement m -> stringifyMetaValue m+ _ -> "" +stringifyMetaValue :: MetaValue -> String+stringifyMetaValue mv = case mv of+ MetaBool b -> map toLower (show b)+ MetaString s -> s+ _ -> Shared.stringify mv++equals :: AstElement -> AstElement -> Lua Bool+equals e1 e2 = return (e1 == e2)+ data AstElement = PandocElement Pandoc | MetaElement Meta | BlockElement Block | InlineElement Inline | MetaValueElement MetaValue- deriving (Show)+ | AttrElement Attr+ | ListAttributesElement ListAttributes+ | CitationElement Citation+ deriving (Eq, Show) instance Peekable AstElement where peek idx = do res <- Lua.try $ (PandocElement <$> Lua.peek idx) <|> (InlineElement <$> Lua.peek idx) <|> (BlockElement <$> Lua.peek idx)+ <|> (AttrElement <$> Lua.peek idx)+ <|> (ListAttributesElement <$> Lua.peek idx) <|> (MetaElement <$> Lua.peek idx) <|> (MetaValueElement <$> Lua.peek idx) case res of
src/Text/Pandoc/Options.hs view
@@ -1,7 +1,11 @@-{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE NoImplicitPrelude #-}+#ifdef DERIVE_JSON_VIA_TH {-# LANGUAGE TemplateHaskell #-}+#endif+ {- Copyright (C) 2012-2018 John MacFarlane <jgm@berkeley.edu> @@ -48,8 +52,6 @@ , isEnabled ) where import Prelude-import Data.Aeson (defaultOptions)-import Data.Aeson.TH (deriveJSON) import Data.Data (Data) import Data.Default import qualified Data.Set as Set@@ -59,6 +61,13 @@ import Text.Pandoc.Extensions import Text.Pandoc.Highlighting (Style, pygments) +#ifdef DERIVE_JSON_VIA_TH+import Data.Aeson.TH (deriveJSON, defaultOptions)+#else+import Data.Aeson (FromJSON (..), ToJSON (..),+ defaultOptions, genericToEncoding)+#endif+ class HasSyntaxExtensions a where getExtensions :: a -> Extensions @@ -239,6 +248,7 @@ isEnabled :: HasSyntaxExtensions a => Extension -> a -> Bool isEnabled ext opts = ext `extensionEnabled` getExtensions opts +#ifdef DERIVE_JSON_VIA_TH $(deriveJSON defaultOptions ''ReaderOptions) $(deriveJSON defaultOptions ''HTMLMathMethod) $(deriveJSON defaultOptions ''CiteMethod)@@ -248,3 +258,40 @@ $(deriveJSON defaultOptions ''WrapOption) $(deriveJSON defaultOptions ''TopLevelDivision) $(deriveJSON defaultOptions ''ReferenceLocation)+#else+instance ToJSON CiteMethod where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON CiteMethod++instance ToJSON ReaderOptions where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON ReaderOptions++instance ToJSON ObfuscationMethod where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON ObfuscationMethod++instance ToJSON WrapOption where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON WrapOption++instance ToJSON HTMLMathMethod where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON HTMLMathMethod++instance ToJSON HTMLSlideVariant where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON HTMLSlideVariant++instance ToJSON TopLevelDivision where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON TopLevelDivision++instance ToJSON ReferenceLocation where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON ReferenceLocation++instance ToJSON TrackChanges where+ toEncoding = genericToEncoding defaultOptions+instance FromJSON TrackChanges+#endif
src/Text/Pandoc/Parsing.hs view
@@ -869,8 +869,7 @@ -- | Parse a table using 'headerParser', 'rowParser', -- 'lineParser', and 'footerParser'.-tableWith :: (Stream s m Char, HasReaderOptions st,- Functor mf, Applicative mf, Monad mf)+tableWith :: (Stream s m Char, HasReaderOptions st, Monad mf) => ParserT s st m (mf [Blocks], [Alignment], [Int]) -> ([Int] -> ParserT s st m (mf [Blocks])) -> ParserT s st m sep@@ -883,8 +882,7 @@ type TableComponents mf = ([Alignment], [Double], mf [Blocks], mf [[Blocks]]) -tableWith' :: (Stream s m Char, HasReaderOptions st,- Functor mf, Applicative mf, Monad mf)+tableWith' :: (Stream s m Char, HasReaderOptions st, Monad mf) => ParserT s st m (mf [Blocks], [Alignment], [Int]) -> ([Int] -> ParserT s st m (mf [Blocks])) -> ParserT s st m sep@@ -931,8 +929,7 @@ -- (which may be grid), then the rows, -- which may be grid, separated by blank lines, and -- ending with a footer (dashed line followed by blank line).-gridTableWith :: (Stream s m Char, HasReaderOptions st,- Functor mf, Applicative mf, Monad mf, IsString s)+gridTableWith :: (Stream s m Char, HasReaderOptions st, Monad mf, IsString s) => ParserT s st m (mf Blocks) -- ^ Block list parser -> Bool -- ^ Headerless table -> ParserT s st m (mf Blocks)@@ -940,8 +937,7 @@ tableWith (gridTableHeader headless blocks) (gridTableRow blocks) (gridTableSep '-') gridTableFooter -gridTableWith' :: (Stream s m Char, HasReaderOptions st,- Functor mf, Applicative mf, Monad mf, IsString s)+gridTableWith' :: (Stream s m Char, HasReaderOptions st, Monad mf, IsString s) => ParserT s st m (mf Blocks) -- ^ Block list parser -> Bool -- ^ Headerless table -> ParserT s st m (TableComponents mf)@@ -980,8 +976,7 @@ gridTableSep ch = try $ gridDashedLines ch >> return '\n' -- | Parse header for a grid table.-gridTableHeader :: (Stream s m Char, Functor mf, Applicative mf, Monad mf,- IsString s)+gridTableHeader :: (Stream s m Char, Monad mf, IsString s) => Bool -- ^ Headerless table -> ParserT s st m (mf Blocks) -> ParserT s st m (mf [Blocks], [Alignment], [Int])@@ -1014,8 +1009,7 @@ return (gridTableSplitLine indices line) -- | Parse row of grid table.-gridTableRow :: (Stream s m Char, Functor mf, Applicative mf, Monad mf,- IsString s)+gridTableRow :: (Stream s m Char, Monad mf, IsString s) => ParserT s st m (mf Blocks) -> [Int] -> ParserT s st m (mf [Blocks])@@ -1297,7 +1291,7 @@ let insert' = M.insertWith (\_new old -> old) if null ident && Ext_auto_identifiers `extensionEnabled` exts then do- let id' = uniqueIdent (B.toList header') ids+ let id' = uniqueIdent exts (B.toList header') ids let id'' = if Ext_ascii_identifiers `extensionEnabled` exts then mapMaybe toAsciiChar id' else id'@@ -1449,8 +1443,7 @@ Nothing -> cls kvs' = filter (\(k,_) -> k /= "id" || k /= "class") kvs -insertIncludedFile' :: (PandocMonad m, HasIncludeFiles st,- Functor mf, Applicative mf, Monad mf)+insertIncludedFile' :: (PandocMonad m, HasIncludeFiles st, Monad mf) => ParserT [a] st m (mf Blocks) -> (String -> [a]) -> [FilePath] -> FilePath
src/Text/Pandoc/Pretty.hs view
@@ -239,7 +239,7 @@ renderDoc :: (IsString a, Monoid a) => Doc -> DocState a-renderDoc = renderList . toList . unDoc+renderDoc = renderList . dropWhile (== BreakingSpace) . toList . unDoc data IsBlock = IsBlock Int [String] @@ -280,6 +280,9 @@ renderList (BlankLines m : BlankLines n : xs) = renderList (BlankLines (max m n) : xs) +renderList (BlankLines num : BreakingSpace : xs) =+ renderList (BlankLines num : xs)+ renderList (BlankLines num : xs) = do st <- get case output st of@@ -290,6 +293,9 @@ renderList (CarriageReturn : BlankLines m : xs) = renderList (BlankLines m : xs) +renderList (CarriageReturn : BreakingSpace : xs) =+ renderList (CarriageReturn : xs)+ renderList (CarriageReturn : xs) = do st <- get if newlines st > 0 || null xs@@ -302,7 +308,8 @@ outp (-1) "\n" renderList xs -renderList (BreakingSpace : CarriageReturn : xs) = renderList (CarriageReturn:xs)+renderList (BreakingSpace : CarriageReturn : xs) =+ renderList (CarriageReturn:xs) renderList (BreakingSpace : NewLine : xs) = renderList (NewLine:xs) renderList (BreakingSpace : BlankLines n : xs) = renderList (BlankLines n:xs) renderList (BreakingSpace : BreakingSpace : xs) = renderList (BreakingSpace:xs)
src/Text/Pandoc/Readers/CommonMark.hs view
@@ -36,23 +36,20 @@ import Prelude import CMarkGFM import Control.Monad.State-import Data.Char (isAlphaNum, isLetter, isSpace, toLower) import Data.List (groupBy)-import qualified Data.Map as Map-import Data.Maybe (mapMaybe)+import qualified Data.Set as Set import Data.Text (Text, unpack)-import Text.Pandoc.Asciify (toAsciiChar) import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition import Text.Pandoc.Emoji (emojiToInline) import Text.Pandoc.Options-import Text.Pandoc.Shared (stringify)+import Text.Pandoc.Shared (uniqueIdent) import Text.Pandoc.Walk (walkM) -- | Parse a CommonMark formatted string into a 'Pandoc' structure. readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc readCommonMark opts s = return $- (if isEnabled Ext_gfm_auto_identifiers opts+ (if isEnabled Ext_auto_identifiers opts then addHeaderIdentifiers opts else id) $ nodeToPandoc opts $ commonmarkToNode opts' exts s@@ -78,28 +75,13 @@ addHeaderIdentifiers :: ReaderOptions -> Pandoc -> Pandoc addHeaderIdentifiers opts doc = evalState (walkM (addHeaderId opts) doc) mempty -addHeaderId :: ReaderOptions -> Block -> State (Map.Map String Int) Block+addHeaderId :: ReaderOptions -> Block -> State (Set.Set String) Block addHeaderId opts (Header lev (_,classes,kvs) ils) = do- idmap <- get- let ident = toIdent opts ils- ident' <- case Map.lookup ident idmap of- Nothing -> do- put (Map.insert ident 1 idmap)- return ident- Just i -> do- put (Map.adjust (+ 1) ident idmap)- return (ident ++ "-" ++ show i)- return $ Header lev (ident',classes,kvs) ils+ ids <- get+ let ident = uniqueIdent (readerExtensions opts) ils ids+ modify (Set.insert ident)+ return $ Header lev (ident,classes,kvs) ils addHeaderId _ x = return x--toIdent :: ReaderOptions -> [Inline] -> String-toIdent opts = map (\c -> if isSpace c then '-' else c)- . filterer- . map toLower . stringify- where filterer = if isEnabled Ext_ascii_identifiers opts- then mapMaybe toAsciiChar- else filter (\c -> isLetter c || isAlphaNum c || isSpace c ||- c == '_' || c == '-') nodeToPandoc :: ReaderOptions -> Node -> Pandoc nodeToPandoc opts (Node _ DOCUMENT nodes) =
src/Text/Pandoc/Readers/Docx.hs view
@@ -442,9 +442,11 @@ (modify $ \s -> s { docxAnchorMap = M.insert anchor prevAnchor anchorMap}) return mempty Nothing -> do+ exts <- readerExtensions <$> asks docxOptions let newAnchor = if not inHdrBool && anchor `elem` M.elems anchorMap- then uniqueIdent [Str anchor] (Set.fromList $ M.elems anchorMap)+ then uniqueIdent exts [Str anchor]+ (Set.fromList $ M.elems anchorMap) else anchor unless inHdrBool (modify $ \s -> s { docxAnchorMap = M.insert anchor newAnchor anchorMap})@@ -487,8 +489,9 @@ | (c:_) <- filter isAnchorSpan ils , (Span (anchIdent, ["anchor"], _) cIls) <- c = do hdrIDMap <- gets docxAnchorMap+ exts <- readerExtensions <$> asks docxOptions let newIdent = if null ident- then uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)+ then uniqueIdent exts ils (Set.fromList $ M.elems hdrIDMap) else ident newIls = concatMap f ils where f il | il == c = cIls | otherwise = [il]@@ -499,8 +502,9 @@ makeHeaderAnchor' (Header n (ident, classes, kvs) ils) = do hdrIDMap <- gets docxAnchorMap+ exts <- readerExtensions <$> asks docxOptions let newIdent = if null ident- then uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)+ then uniqueIdent exts ils (Set.fromList $ M.elems hdrIDMap) else ident modify $ \s -> s {docxAnchorMap = M.insert newIdent newIdent hdrIDMap} return $ Header n (newIdent, classes, kvs) ils
src/Text/Pandoc/Readers/FB2.hs view
@@ -157,7 +157,7 @@ "title" -> header <$> gets fb2SectionLevel <*> parseTitleType (elContent e) "epigraph" -> parseEpigraph e "section" -> parseSection e- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ " in body.")+ name -> report (UnexpectedXmlElement name "body") $> mempty -- | Parse a @\<binary>@ element. parseBinaryElement :: PandocMonad m => Element -> FB2 m ()
src/Text/Pandoc/Readers/HTML.hs view
@@ -496,15 +496,16 @@ let pTh = option [] $ pInTags "tr" (pCell "th") pTr = try $ skipMany pBlank >> pInTags "tr" (pCell "td" <|> pCell "th")- pTBody = pOptInTag "tbody" $ many1 pTr- head'' <- pOptInTag "thead" pTh+ pTBody = pInTag True "tbody" $ many1 pTr+ head'' <- pInTag False "thead" (option [] pTr) <|> pInTag True "thead" pTh head' <- map snd <$>- pOptInTag "tbody"+ pInTag True "tbody" (if null head'' then pTh else return head'')+ topfoot <- option [] $ pInTag False "tfoot" $ many pTr rowsLs <- many pTBody- rows' <- pOptInTag "tfoot" $ many pTr+ bottomfoot <- option [] $ pInTag False "tfoot" $ many pTr TagClose _ <- pSatisfy (matchTagClose "table")- let rows'' = concat rowsLs <> rows'+ let rows'' = concat rowsLs <> topfoot <> bottomfoot let rows''' = map (map snd) rows'' -- let rows''' = map (map snd) rows'' -- fail on empty table@@ -609,7 +610,7 @@ TagOpen _ _ <- pSatisfy (matchTagOpen "figure" []) skipMany pBlank let pImg = (\x -> (Just x, Nothing)) <$>- (pOptInTag "p" pImage <* skipMany pBlank)+ (pInTag True "p" pImage <* skipMany pBlank) pCapt = (\x -> (Nothing, Just x)) <$> do bs <- pInTags "figcaption" block return $ blocksToInlines' $ B.toList bs@@ -655,6 +656,7 @@ , pStrong , pSuperscript , pSubscript+ , pSmall , pStrikeout , pUnderline , pLineBreak@@ -718,6 +720,9 @@ pSubscript :: PandocMonad m => TagParser m Inlines pSubscript = pInlinesInTags "sub" B.subscript +pSmall :: PandocMonad m => TagParser m Inlines+pSmall = pInlinesInTags "small" (B.spanWith ("",["small"],[]))+ pStrikeout :: PandocMonad m => TagParser m Inlines pStrikeout = pInlinesInTags "s" B.strikeout <|>@@ -868,16 +873,16 @@ pSatisfy (\t -> t ~== TagOpen tagtype [] && tagtest t) mconcat <$> manyTill parser (pCloses tagtype <|> eof) --- parses p, preceded by an optional opening tag--- and followed by an optional closing tags-pOptInTag :: PandocMonad m => Text -> TagParser m a -> TagParser m a-pOptInTag tagtype p = try $ do+-- parses p, preceded by an opening tag (optional if tagsOptional)+-- and followed by a closing tag (optional if tagsOptional)+pInTag :: PandocMonad m => Bool -> Text -> TagParser m a -> TagParser m a+pInTag tagsOptional tagtype p = try $ do skipMany pBlank- optional $ pSatisfy (matchTagOpen tagtype [])+ (if tagsOptional then optional else void) $ pSatisfy (matchTagOpen tagtype []) skipMany pBlank x <- p skipMany pBlank- optional $ pSatisfy (matchTagClose tagtype)+ (if tagsOptional then optional else void) $ pSatisfy (matchTagClose tagtype) skipMany pBlank return x
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -774,7 +774,8 @@ paropt = parenWrapped inline rawopt :: PandocMonad m => LP m Text-rawopt = do+rawopt = try $ do+ optional sp inner <- untokenize <$> bracketedToks optional sp return $ "[" <> inner <> "]"@@ -898,7 +899,7 @@ , ("(", mathInline . toksToString <$> manyTill anyTok (controlSeq ")")) , ("[", mathDisplay . toksToString <$> manyTill anyTok (controlSeq "]")) , ("ensuremath", mathInline . toksToString <$> braced)- , ("texorpdfstring", (\x _ -> x) <$> tok <*> tok)+ , ("texorpdfstring", const <$> tok <*> tok) , ("P", lit "¶") , ("S", lit "§") , ("$", lit "$")@@ -1297,12 +1298,26 @@ void $ count 4 braced "def" -> void $ manyTill anyTok braced- _ -> do- skipopts- option "" (try (optional sp *> dimenarg))- void $ many braced+ _ | isFontSizeCommand name -> return ()+ | otherwise -> do+ skipopts+ option "" (try dimenarg)+ void $ many braced return $ T.unpack (txt <> untokenize rawargs) +isFontSizeCommand :: Text -> Bool+isFontSizeCommand "tiny" = True+isFontSizeCommand "scriptsize" = True+isFontSizeCommand "footnotesize" = True+isFontSizeCommand "small" = True+isFontSizeCommand "normalsize" = True+isFontSizeCommand "large" = True+isFontSizeCommand "Large" = True+isFontSizeCommand "LARGE" = True+isFontSizeCommand "huge" = True+isFontSizeCommand "Huge" = True+isFontSizeCommand _ = False+ isBlockCommand :: Text -> Bool isBlockCommand s = s `M.member` (blockCommands :: M.Map Text (LP PandocPure Blocks))@@ -1862,7 +1877,6 @@ verbEnv :: PandocMonad m => Text -> LP m String verbEnv name = withVerbatimMode $ do- skipopts optional blankline res <- manyTill anyTok (end_ name) return $ T.unpack@@ -2105,7 +2119,8 @@ return () lbreak :: PandocMonad m => LP m Tok-lbreak = (controlSeq "\\" <|> controlSeq "tabularnewline") <* spaces+lbreak = (controlSeq "\\" <|> controlSeq "tabularnewline")+ <* skipopts <* spaces amp :: PandocMonad m => LP m Tok amp = symbol '&'
src/Text/Pandoc/Readers/LaTeX/Parsing.hs view
@@ -105,7 +105,7 @@ import Text.Pandoc.Logging import Text.Pandoc.Options import Text.Pandoc.Parsing hiding (blankline, many, mathDisplay, mathInline,- optional, space, spaces, withRaw, (<|>))+ space, spaces, withRaw, (<|>)) import Text.Pandoc.Readers.LaTeX.Types (ExpansionPoint (..), Macro (..), ArgSpec (..), Tok (..), TokType (..)) import Text.Pandoc.Shared@@ -668,13 +668,19 @@ dimenarg :: PandocMonad m => LP m Text dimenarg = try $ do+ optional sp ch <- option False $ True <$ symbol '='- Tok _ _ s <- satisfyTok isWordTok- guard $ T.take 2 (T.reverse s) `elem`+ Tok _ _ s1 <- satisfyTok isWordTok+ s2 <- option "" $ try $ do+ symbol '.'+ Tok _ _ t <- satisfyTok isWordTok+ return ("." <> t)+ let s = s1 <> s2+ guard $ T.takeEnd 2 s `elem` ["pt","pc","in","bp","cm","mm","dd","cc","sp"]- let num = T.take (T.length s - 2) s+ let num = T.dropEnd 2 s guard $ T.length num > 0- guard $ T.all isDigit num+ guard $ T.all (\c -> isDigit c || c == '.') num return $ T.pack ['=' | ch] <> s ignore :: (Monoid a, PandocMonad m) => String -> ParserT s u m a
src/Text/Pandoc/Readers/Markdown.hs view
@@ -1586,7 +1586,6 @@ <|> try (do lookAhead $ char '\\' notFollowedBy' (() <$ rawTeXBlock) char '\\')- updateLastStrPos return $ return $ B.str [result] -- parses inline code, between n `s and n `s@@ -1633,7 +1632,7 @@ 3 -> three c 2 -> two c mempty 1 -> one c mempty- _ -> updateLastStrPos >> return (return $ B.str cs)+ _ -> return (return $ B.str cs) ender :: PandocMonad m => Char -> Int -> MarkdownParser m () ender c n = try $ do@@ -1717,13 +1716,12 @@ str :: PandocMonad m => MarkdownParser m (F Inlines) str = do- canRelocateSpace <- notAfterString result <- many1 (alphaNum <|> try (char '.' <* notFollowedBy (char '.'))) updateLastStrPos (do guardEnabled Ext_smart abbrevs <- getOption readerAbbreviations if not (null result) && last result == '.' && result `Set.member` abbrevs- then try (do ils <- whitespace <|> endline+ then try (do ils <- whitespace -- ?? lookAhead alphaNum -- replace space after with nonbreaking space -- if softbreak, move before abbrev if possible (#4635)@@ -1732,8 +1730,6 @@ case B.toList ils' of [Space] -> return (B.str result <> B.str "\160")- [SoftBreak] | canRelocateSpace ->- return (ils' <> B.str result <> B.str "\160") _ -> return (B.str result <> ils')) <|> return (return (B.str result)) else return (return (B.str result)))
src/Text/Pandoc/Readers/MediaWiki.hs view
@@ -415,8 +415,7 @@ header :: PandocMonad m => MWParser m Blocks header = try $ do guardColumnOne- eqs <- many1 (char '=')- let lev = length eqs+ lev <- length <$> many1 (char '=') guard $ lev <= 6 contents <- trimInlines . mconcat <$> manyTill inline (count lev $ char '=') attr <- registerHeader nullAttr contents
src/Text/Pandoc/Readers/Muse.hs view
@@ -32,8 +32,6 @@ -} {- TODO:-- Org tables-- table.el tables - <cite> tag -} module Text.Pandoc.Readers.Muse (readMuse) where@@ -58,7 +56,7 @@ import Text.Pandoc.Logging import Text.Pandoc.Options import Text.Pandoc.Parsing hiding (F)-import Text.Pandoc.Shared (crFilter, underlineSpan)+import Text.Pandoc.Shared (crFilter, trimr, underlineSpan) -- | Read Muse from an input string and return a Pandoc document. readMuse :: PandocMonad m@@ -335,6 +333,7 @@ <|> playTag <|> verseTag <|> lineBlock+ <|> museGridTable <|> table <|> commentTag @@ -680,6 +679,36 @@ elementsToTable :: [MuseTableElement] -> MuseTable elementsToTable = foldr museAppendElement emptyTable where emptyTable = MuseTable mempty mempty mempty mempty++museGridPart :: PandocMonad m => MuseParser m Int+museGridPart = try $ length <$> many1 (char '-') <* char '+'++museGridTableHeader :: PandocMonad m => MuseParser m [Int]+museGridTableHeader = try $ char '+' *> many1 museGridPart <* manyTill spaceChar eol++museGridTableRow :: PandocMonad m+ => Int+ -> [Int]+ -> MuseParser m (F [Blocks])+museGridTableRow indent indices = try $ do+ lns <- many1 $ try (indentWith indent *> museGridTableRawLine indices)+ let cols = map (unlines . map trimr) $ transpose lns+ indentWith indent *> museGridTableHeader+ sequence <$> mapM (parseFromString parseBlocks) cols++museGridTableRawLine :: PandocMonad m+ => [Int]+ -> MuseParser m [String]+museGridTableRawLine indices =+ char '|' *> forM indices (\n -> count n anyChar <* char '|') <* manyTill spaceChar eol++museGridTable :: PandocMonad m => MuseParser m (F Blocks)+museGridTable = try $ do+ indent <- getIndent+ indices <- museGridTableHeader+ fmap rowsToTable . sequence <$> many1 (museGridTableRow indent indices)+ where rowsToTable rows = B.table mempty attrs [] rows+ where attrs = const (AlignDefault, 0.0) <$> transpose rows -- | Parse a table. table :: PandocMonad m => MuseParser m (F Blocks)
src/Text/Pandoc/Readers/Odt/Arrows/State.hs view
@@ -39,8 +39,6 @@ module Text.Pandoc.Readers.Odt.Arrows.State where import Prelude-import Prelude hiding (foldl, foldr)- import Control.Arrow import qualified Control.Category as Cat import Control.Monad
src/Text/Pandoc/Readers/Odt/ContentReader.hs view
@@ -54,6 +54,7 @@ import Text.Pandoc.Builder import Text.Pandoc.MediaBag (MediaBag, insertMedia) import Text.Pandoc.Shared+import Text.Pandoc.Extensions (extensionsFromList, Extension(..)) import Text.Pandoc.Readers.Odt.Base import Text.Pandoc.Readers.Odt.Namespaces@@ -253,7 +254,9 @@ getHeaderAnchor :: OdtReaderSafe Inlines Anchor getHeaderAnchor = proc title -> do state <- getExtraState -< ()- let anchor = uniqueIdent (toList title) (Set.fromList $ usedAnchors state)+ let exts = extensionsFromList [Ext_auto_identifiers]+ let anchor = uniqueIdent exts (toList title)+ (Set.fromList $ usedAnchors state) modifyExtraState (putPrettyAnchor anchor anchor) -<< anchor @@ -768,6 +771,7 @@ read_frame :: OdtReaderSafe Inlines Inlines read_frame = proc blocks -> do+ let exts = extensionsFromList [Ext_auto_identifiers] w <- ( findAttr' NsSVG "width" ) -< () h <- ( findAttr' NsSVG "height" ) -< () titleNodes <- ( matchChildContent' [ read_frame_title ] ) -< blocks@@ -776,7 +780,8 @@ _ <- updateMediaWithResource -< resource alt <- (matchChildContent [] read_plain_text) -< blocks arr (uncurry4 imageWith ) -<- (image_attributes w h, src, inlineListToIdentifier (toList titleNodes), alt)+ (image_attributes w h, src,+ inlineListToIdentifier exts (toList titleNodes), alt) image_attributes :: Maybe String -> Maybe String -> Attr image_attributes x y =
@@ -116,8 +116,9 @@ import qualified Control.Monad.State.Strict as S import qualified Data.ByteString.Lazy as BL import qualified Data.Bifunctor as Bifunctor-import Data.Char (isAlpha, isDigit, isLetter, isLower, isSpace, isUpper,- toLower)+import Data.Char (isAlpha, isLower, isSpace, isUpper, toLower, isAlphaNum,+ generalCategory, GeneralCategory(NonSpacingMark,+ SpacingCombiningMark, EnclosingMark, ConnectorPunctuation)) import Data.Data (Data, Typeable) import Data.List (find, intercalate, intersperse, stripPrefix) import qualified Data.Map as M@@ -137,7 +138,9 @@ import Text.Pandoc.Builder (Blocks, Inlines, ToMetaValue (..)) import qualified Text.Pandoc.Builder as B import Data.Time+import Text.Pandoc.Asciify (toAsciiChar) import Text.Pandoc.Definition+import Text.Pandoc.Extensions (Extensions, Extension(..), extensionEnabled) import Text.Pandoc.Generic (bottomUp) import Text.Pandoc.Pretty (charWidth) import Text.Pandoc.Walk@@ -483,18 +486,32 @@ query f (Blk x) = query f x query f (Sec _ _ _ ils elts) = query f ils `mappend` query f elts - -- | Convert Pandoc inline list to plain text identifier. HTML -- identifiers must start with a letter, and may contain only -- letters, digits, and the characters _-.-inlineListToIdentifier :: [Inline] -> String-inlineListToIdentifier =- dropWhile (not . isAlpha) . intercalate "-" . words .- map (nbspToSp . toLower) .- filter (\c -> isLetter c || isDigit c || c `elem` "_-. ") .- stringify- where nbspToSp '\160' = ' '- nbspToSp x = x+inlineListToIdentifier :: Extensions -> [Inline] -> String+inlineListToIdentifier exts =+ dropNonLetter . filterAscii . toIdent . stringify+ where+ dropNonLetter+ | extensionEnabled Ext_gfm_auto_identifiers exts = id+ | otherwise = dropWhile (not . isAlpha)+ filterAscii+ | extensionEnabled Ext_ascii_identifiers exts+ = mapMaybe toAsciiChar+ | otherwise = id+ toIdent+ | extensionEnabled Ext_gfm_auto_identifiers exts =+ filterPunct . spaceToDash . map toLower+ | otherwise = intercalate "-" . words . filterPunct . map toLower+ filterPunct = filter (\c -> isSpace c || isAlphaNum c || isAllowedPunct c)+ isAllowedPunct c+ | extensionEnabled Ext_gfm_auto_identifiers exts+ = c == '-' || c == '_' ||+ generalCategory c `elem` [NonSpacingMark, SpacingCombiningMark,+ EnclosingMark, ConnectorPunctuation]+ | otherwise = c == '_' || c == '-' || c == '.'+ spaceToDash = map (\c -> if isSpace c then '-' else c) -- | Convert list of Pandoc blocks into (hierarchical) list of Elements hierarchicalize :: [Block] -> [Element]@@ -515,10 +532,10 @@ sectionContents' <- hierarchicalizeWithIds sectionContents rest' <- hierarchicalizeWithIds rest return $ Sec level newnum attr title' sectionContents' : rest'-hierarchicalizeWithIds (Div ("",["references"],[])+hierarchicalizeWithIds (Div ("refs",classes',kvs') (Header level (ident,classes,kvs) title' : xs):ys) = hierarchicalizeWithIds (Header level (ident,"references":classes,kvs)- title' : (xs ++ ys))+ title' : Div ("refs",classes',kvs') xs : ys) hierarchicalizeWithIds (x:rest) = do rest' <- hierarchicalizeWithIds rest return $ Blk x : rest'@@ -530,17 +547,20 @@ -- | Generate a unique identifier from a list of inlines. -- Second argument is a list of already used identifiers.-uniqueIdent :: [Inline] -> Set.Set String -> String-uniqueIdent title' usedIdents- = let baseIdent = case inlineListToIdentifier title' of- "" -> "section"- x -> x- numIdent n = baseIdent ++ "-" ++ show n- in if baseIdent `Set.member` usedIdents- then case find (\x -> not $ numIdent x `Set.member` usedIdents) ([1..60000] :: [Int]) of- Just x -> numIdent x- Nothing -> baseIdent -- if we have more than 60,000, allow repeats- else baseIdent+uniqueIdent :: Extensions -> [Inline] -> Set.Set String -> String+uniqueIdent exts title' usedIdents =+ if baseIdent `Set.member` usedIdents+ then case find (\x -> not $ numIdent x `Set.member` usedIdents)+ ([1..60000] :: [Int]) of+ Just x -> numIdent x+ Nothing -> baseIdent+ -- if we have more than 60,000, allow repeats+ else baseIdent+ where+ baseIdent = case inlineListToIdentifier exts title' of+ "" -> "section"+ x -> x+ numIdent n = baseIdent ++ "-" ++ show n -- | True if block is a Header block. isHeaderBlock :: Block -> Bool
src/Text/Pandoc/Slides.hs view
@@ -57,8 +57,9 @@ splitHrule [] = [] extractRefsHeader bs = case reverse bs of- (Div ("",["references"],[]) (Header n attrs xs : ys) : zs)- -> reverse zs ++ (Header n attrs xs : [Div ("",["references"],[]) ys])+ (Div ("refs",classes,kvs) (Header n attrs xs : ys) : zs)+ -> reverse zs ++ [Header n attrs xs,+ Div ("refs",classes,kvs) ys] _ -> bs ensureStartWithH bs@(Header n _ _:_) | n <= slideLevel = bs
src/Text/Pandoc/Writers/AsciiDoc.hs view
@@ -40,7 +40,7 @@ module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc) where import Prelude import Control.Monad.State.Strict-import Data.Char (isPunctuation, isSpace)+import Data.Char (isPunctuation, isSpace, toLower) import Data.List (intercalate, intersperse, stripPrefix) import Data.Maybe (fromMaybe, isJust, listToMaybe) import qualified Data.Set as Set@@ -170,7 +170,7 @@ blockToAsciiDoc opts (Header level (ident,_,_) inlines) = do contents <- inlineListToAsciiDoc opts inlines ids <- gets autoIds- let autoId = uniqueIdent inlines ids+ let autoId = uniqueIdent (writerExtensions opts) inlines ids modify $ \st -> st{ autoIds = Set.insert autoId ids } let identifier = if null ident || (isEnabled Ext_auto_identifiers opts && ident == autoId)@@ -258,17 +258,18 @@ blockToAsciiDoc opts (BulletList items) = do contents <- mapM (bulletListItemToAsciiDoc opts) items return $ cat contents <> blankline-blockToAsciiDoc opts (OrderedList (_start, sty, _delim) items) = do- let sty' = case sty of- UpperRoman -> UpperAlpha- LowerRoman -> LowerAlpha- x -> x- let markers = orderedListMarkers (1, sty', Period) -- start num not used- let markers' = map (\m -> if length m < 3- then m ++ replicate (3 - length m) ' '- else m) markers- contents <- zipWithM (orderedListItemToAsciiDoc opts) markers' items- return $ cat contents <> blankline+blockToAsciiDoc opts (OrderedList (start, sty, _delim) items) = do+ let listStyle = case sty of+ DefaultStyle -> []+ Decimal -> ["arabic"]+ Example -> []+ _ -> [map toLower (show sty)]+ let listStart = if start == 1 then [] else ["start=" ++ show start]+ let listoptions = case intercalate ", " (listStyle ++ listStart) of+ [] -> empty+ x -> brackets (text x)+ contents <- mapM (orderedListItemToAsciiDoc opts) items+ return $ listoptions $$ cat contents <> blankline blockToAsciiDoc opts (DefinitionList items) = do contents <- mapM (definitionListItemToAsciiDoc opts) items return $ cat contents <> blankline@@ -281,40 +282,34 @@ bulletListItemToAsciiDoc :: PandocMonad m => WriterOptions -> [Block] -> ADW m Doc bulletListItemToAsciiDoc opts blocks = do- let addBlock :: PandocMonad m => Doc -> Block -> ADW m Doc- addBlock d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b- addBlock d b@(BulletList _) = do x <- blockToAsciiDoc opts b- return $ d <> cr <> chomp x- addBlock d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b- return $ d <> cr <> chomp x- addBlock d b = do x <- blockToAsciiDoc opts b- return $ d <> cr <> text "+" <> cr <> chomp x lev <- gets bulletListLevel modify $ \s -> s{ bulletListLevel = lev + 1 }- contents <- foldM addBlock empty blocks+ contents <- foldM (addBlock opts) empty blocks modify $ \s -> s{ bulletListLevel = lev } let marker = text (replicate lev '*') return $ marker <> text " " <> contents <> cr +addBlock :: PandocMonad m => WriterOptions -> Doc -> Block -> ADW m Doc+addBlock opts d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b+addBlock opts d b@(BulletList _) = do x <- blockToAsciiDoc opts b+ return $ d <> cr <> chomp x+addBlock opts d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b+ return $ d <> cr <> chomp x+addBlock opts d b = do x <- blockToAsciiDoc opts b+ return $ d <> cr <> text "+" <> cr <> chomp x+ -- | Convert ordered list item (a list of blocks) to asciidoc. orderedListItemToAsciiDoc :: PandocMonad m => WriterOptions -- ^ options- -> String -- ^ list item marker -> [Block] -- ^ list item (list of blocks) -> ADW m Doc-orderedListItemToAsciiDoc opts marker blocks = do- let addBlock d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b- addBlock d b@(BulletList _) = do x <- blockToAsciiDoc opts b- return $ d <> cr <> chomp x- addBlock d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b- return $ d <> cr <> chomp x- addBlock d b = do x <- blockToAsciiDoc opts b- return $ d <> cr <> text "+" <> cr <> chomp x+orderedListItemToAsciiDoc opts blocks = do lev <- gets orderedListLevel modify $ \s -> s{ orderedListLevel = lev + 1 }- contents <- foldM addBlock empty blocks+ contents <- foldM (addBlock opts) empty blocks modify $ \s -> s{ orderedListLevel = lev }- return $ text marker <> text " " <> contents <> cr+ let marker = text (replicate lev '.')+ return $ marker <> text " " <> contents <> cr -- | Convert definition list item (label, list of blocks) to asciidoc. definitionListItemToAsciiDoc :: PandocMonad m@@ -479,7 +474,11 @@ return $ text "footnote:[" <> contents <> "]" -- asciidoc can't handle blank lines in notes inlineToAsciiDoc _ (Note _) = return "[multiblock footnote omitted]"-inlineToAsciiDoc opts (Span (ident,_,_) ils) = do- let identifier = if null ident then empty else "[[" <> text ident <> "]]"+inlineToAsciiDoc opts (Span (ident,classes,_) ils) = do contents <- inlineListToAsciiDoc opts ils- return $ identifier <> contents+ if null ident && null classes+ then return contents+ else do+ let modifier = brackets $ text $ unwords $+ [ '#':ident | not (null ident)] ++ map ('.':) classes+ return $ modifier <> "#" <> contents <> "#"
src/Text/Pandoc/Writers/CommonMark.hs view
@@ -36,6 +36,7 @@ import Prelude import CMarkGFM import Control.Monad.State.Strict (State, get, modify, runState)+import Data.Char (isAscii) import Data.Foldable (foldrM) import Data.List (transpose) import Data.Monoid (Any (..))@@ -50,6 +51,7 @@ import Text.Pandoc.Walk (query, walk, walkM) import Text.Pandoc.Writers.HTML (writeHtml5String, tagWithAttributes) import Text.Pandoc.Writers.Shared+import Text.Pandoc.XML (toHtml5Entities) -- | Convert Pandoc to CommonMark. writeCommonMark :: PandocMonad m => WriterOptions -> Pandoc -> m Text@@ -238,7 +240,7 @@ inlinesToNodes opts = foldr (inlineToNodes opts) [] inlineToNodes :: WriterOptions -> Inline -> [Node] -> [Node]-inlineToNodes opts (Str s) = (node (TEXT (T.pack s')) [] :)+inlineToNodes opts (Str s) = stringToNodes opts s' where s' = if isEnabled Ext_smart opts then unsmartify opts s else s@@ -262,19 +264,21 @@ then ((node (HTML_INLINE (T.pack "<sup>")) [] : inlinesToNodes opts xs ++ [node (HTML_INLINE (T.pack "</sup>")) []]) ++ ) else case traverse toSuperscriptInline xs of- Nothing ->+ Just xs' | not (writerPreferAscii opts)+ -> (inlinesToNodes opts xs' ++)+ _ -> ((node (TEXT (T.pack "^(")) [] : inlinesToNodes opts xs ++ [node (TEXT (T.pack ")")) []]) ++ )- Just xs' -> (inlinesToNodes opts xs' ++) inlineToNodes opts (Subscript xs) = if isEnabled Ext_raw_html opts then ((node (HTML_INLINE (T.pack "<sub>")) [] : inlinesToNodes opts xs ++ [node (HTML_INLINE (T.pack "</sub>")) []]) ++ ) else case traverse toSubscriptInline xs of- Nothing ->+ Just xs' | not (writerPreferAscii opts)+ -> (inlinesToNodes opts xs' ++)+ _ -> ((node (TEXT (T.pack "_(")) [] : inlinesToNodes opts xs ++ [node (TEXT (T.pack ")")) []]) ++ )- Just xs' -> (inlinesToNodes opts xs' ++) inlineToNodes opts (SmallCaps xs) = if isEnabled Ext_raw_html opts then ((node (HTML_INLINE (T.pack "<span class=\"smallcaps\">")) []@@ -295,14 +299,18 @@ = (node (CUSTOM_INLINE (T.pack xs) T.empty) [] :) | otherwise = id inlineToNodes opts (Quoted qt ils) =- ((node (TEXT start) [] :- inlinesToNodes opts ils ++ [node (TEXT end) []]) ++)+ ((node (HTML_INLINE start) [] :+ inlinesToNodes opts ils ++ [node (HTML_INLINE end) []]) ++) where (start, end) = case qt of SingleQuote | isEnabled Ext_smart opts -> ("'","'")+ | writerPreferAscii opts ->+ ("‘", "’") | otherwise -> ("‘", "’") DoubleQuote | isEnabled Ext_smart opts -> ("\"", "\"")+ | writerPreferAscii opts ->+ ("“", "”") | otherwise -> ("“", "”") inlineToNodes _ (Code _ str) = (node (CODE (T.pack str)) [] :) inlineToNodes opts (Math mt str) =@@ -335,6 +343,21 @@ inlineToNodes opts (Cite _ ils) = (inlinesToNodes opts ils ++) inlineToNodes _ (Note _) = id -- should not occur -- we remove Note elements in preprocessing++stringToNodes :: WriterOptions -> String -> [Node] -> [Node]+stringToNodes opts s+ | not (writerPreferAscii opts) = (node (TEXT (T.pack s)) [] :)+ | otherwise = step s+ where+ step input =+ let (ascii, rest) = span isAscii input+ this = node (TEXT (T.pack ascii)) []+ nodes = case rest of+ [] -> id+ (nonAscii : rest') ->+ let escaped = toHtml5Entities (T.singleton nonAscii)+ in (node (HTML_INLINE escaped) [] :) . step rest'+ in (this :) . nodes toSubscriptInline :: Inline -> Maybe Inline toSubscriptInline Space = Just Space
src/Text/Pandoc/Writers/Docx.hs view
@@ -41,19 +41,21 @@ import Control.Monad.State.Strict import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL-import Data.Char (isSpace, ord, toLower)+import Data.Char (isSpace, ord, toLower, isLetter) import Data.List (intercalate, isPrefixOf, isSuffixOf) import qualified Data.Map as M import Data.Maybe (fromMaybe, isNothing, mapMaybe, maybeToList) import qualified Data.Set as Set import qualified Data.Text as T import Data.Time.Clock.POSIX+import Data.Digest.Pure.SHA (sha1, showDigest) import Skylighting import System.Random (randomR, StdGen, mkStdGen) import Text.Pandoc.BCP47 (getLang, renderLang) import Text.Pandoc.Class (PandocMonad, report, toLang) import qualified Text.Pandoc.Class as P import Data.Time+import Text.Pandoc.UTF8 (fromStringLazy) import Text.Pandoc.Definition import Text.Pandoc.Generic import Text.Pandoc.Highlighting (highlight)@@ -859,7 +861,7 @@ blockToOpenXML' :: (PandocMonad m) => WriterOptions -> Block -> WS m [Element] blockToOpenXML' _ Null = return []-blockToOpenXML' opts (Div (ident,classes,kvs) bs) = do+blockToOpenXML' opts (Div (ident,_classes,kvs) bs) = do stylemod <- case lookup dynamicStyleKey kvs of Just sty -> do modify $ \s ->@@ -871,22 +873,15 @@ Just "rtl" -> return $ local (\env -> env { envRTL = True }) Just "ltr" -> return $ local (\env -> env { envRTL = False }) _ -> return id- let (hs, bs') = if "references" `elem` classes+ let (hs, bs') = if ident == "refs" then span isHeaderBlock bs else ([], bs)- let bibmod = if "references" `elem` classes+ let bibmod = if ident == "refs" then withParaPropM (pStyleM "Bibliography") else id header <- dirmod $ stylemod $ blocksToOpenXML opts hs contents <- dirmod $ bibmod $ stylemod $ blocksToOpenXML opts bs'- if null ident- then return $ header ++ contents- else do- id' <- getUniqueId- let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')- ,("w:name",ident)] ()- let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()- return $ bookmarkStart : header ++ contents ++ [bookmarkEnd]+ wrapBookmark ident $ header ++ contents blockToOpenXML' opts (Header lev (ident,_,_) lst) = do setFirstPara paraProps <- withParaPropM (pStyleM ("Heading "++show lev)) $@@ -898,12 +893,8 @@ let bookmarkName = ident modify $ \s -> s{ stSectionIds = Set.insert bookmarkName $ stSectionIds s }- id' <- getUniqueId- let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')- ,("w:name",bookmarkName)] ()- let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()- return [mknode "w:p" [] (paraProps ++- [bookmarkStart] ++ contents ++ [bookmarkEnd])]+ bookmarkedContents <- wrapBookmark bookmarkName contents+ return [mknode "w:p" [] (paraProps ++ bookmarkedContents)] blockToOpenXML' opts (Plain lst) = withParaProp (pCustomStyle "Compact") $ blockToOpenXML opts (Para lst) -- title beginning with fig: indicates that the image is a figure@@ -945,10 +936,10 @@ p <- withParaPropM (pStyleM "Block Text") $ blocksToOpenXML opts blocks setFirstPara return p-blockToOpenXML' opts (CodeBlock attrs str) = do+blockToOpenXML' opts (CodeBlock attrs@(ident, _, _) str) = do p <- withParaProp (pCustomStyle "SourceCode") (blockToOpenXML opts $ Para [Code attrs str]) setFirstPara- return p+ wrapBookmark ident p blockToOpenXML' _ HorizontalRule = do setFirstPara return [@@ -1202,14 +1193,7 @@ else return id contents <- insmod $ delmod $ dirmod $ stylemod $ pmod $ inlinesToOpenXML opts ils- if null ident- then return contents- else do- id' <- getUniqueId- let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')- ,("w:name",ident)] ()- let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()- return $ bookmarkStart : contents ++ [bookmarkEnd]+ wrapBookmark ident contents inlineToOpenXML' opts (Strong lst) = withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst inlineToOpenXML' opts (Emph lst) =@@ -1286,7 +1270,8 @@ -- internal link: inlineToOpenXML' opts (Link _ txt ('#':xs,_)) = do contents <- withTextPropM (rStyleM "Hyperlink") $ inlinesToOpenXML opts txt- return [ mknode "w:hyperlink" [("w:anchor",xs)] contents ]+ return+ [ mknode "w:hyperlink" [("w:anchor", toBookmarkName xs)] contents ] -- external link: inlineToOpenXML' opts (Link _ txt (src,_)) = do contents <- withTextPropM (rStyleM "Hyperlink") $ inlinesToOpenXML opts txt@@ -1299,7 +1284,7 @@ M.insert src i extlinks } return i return [ mknode "w:hyperlink" [("r:id",id')] contents ]-inlineToOpenXML' opts (Image attr alt (src, title)) = do+inlineToOpenXML' opts (Image attr@(imgident, _, _) alt (src, title)) = do pageWidth <- asks envPrintWidth imgs <- gets stImages let@@ -1361,7 +1346,7 @@ in imgElt - case stImage of+ wrapBookmark imgident =<< case stImage of Just imgData -> return [generateImgElt imgData] Nothing -> ( do --try (img, mt) <- P.fetchItem src@@ -1440,3 +1425,23 @@ else flip local x $ \env -> env { envParaProperties = paraProps' , envTextProperties = textProps' }++wrapBookmark :: (PandocMonad m) => String -> [Element] -> WS m [Element]+wrapBookmark [] contents = return contents+wrapBookmark ident contents = do+ id' <- getUniqueId+ let bookmarkStart = mknode "w:bookmarkStart"+ [("w:id", id')+ ,("w:name", toBookmarkName ident)] ()+ bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()+ return $ bookmarkStart : contents ++ [bookmarkEnd]++-- Word imposes a 40 character limit on bookmark names and requires+-- that they begin with a letter. So we just use a hash of the+-- identifer when otherwise we'd have an illegal bookmark name.+toBookmarkName :: String -> String+toBookmarkName s =+ case s of+ (c:_) | isLetter c+ , length s <= 40 -> s+ _ -> 'X' : drop 1 (showDigest (sha1 (fromStringLazy s)))
src/Text/Pandoc/Writers/DokuWiki.hs view
@@ -42,7 +42,7 @@ module Text.Pandoc.Writers.DokuWiki ( writeDokuWiki ) where import Prelude import Control.Monad (zipWithM)-import Control.Monad.Reader (ReaderT, ask, local, runReaderT)+import Control.Monad.Reader (ReaderT, asks, local, runReaderT) import Control.Monad.State.Strict (StateT, evalStateT) import Data.Default (Default (..)) import Data.List (intercalate, intersect, isPrefixOf, transpose)@@ -135,8 +135,8 @@ return $ "{{" ++ prefix ++ src ++ imageDims opts attr ++ opt ++ "}}\n" blockToDokuWiki opts (Para inlines) = do- indent <- stIndent <$> ask- useTags <- stUseTags <$> ask+ indent <- asks stIndent+ useTags <- asks stUseTags contents <- inlineListToDokuWiki opts inlines return $ if useTags then "<HTML><p></HTML>" ++ contents ++ "<HTML></p></HTML>"@@ -211,9 +211,9 @@ unlines (map (renderRow "|") rows') blockToDokuWiki opts x@(BulletList items) = do- oldUseTags <- stUseTags <$> ask- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ oldUseTags <- asks stUseTags+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let useTags = oldUseTags || not (isSimpleList x) if useTags then do@@ -227,9 +227,9 @@ return $ vcat contents ++ if null indent then "\n" else "" blockToDokuWiki opts x@(OrderedList attribs items) = do- oldUseTags <- stUseTags <$> ask- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ oldUseTags <- asks stUseTags+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let useTags = oldUseTags || not (isSimpleList x) if useTags then do@@ -246,9 +246,9 @@ -- is a specific representation of them. -- TODO This creates double '; ; ' if there is a bullet or ordered list inside a definition list blockToDokuWiki opts x@(DefinitionList items) = do- oldUseTags <- stUseTags <$> ask- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ oldUseTags <- asks stUseTags+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let useTags = oldUseTags || not (isSimpleList x) if useTags then do@@ -278,7 +278,7 @@ listItemToDokuWiki :: PandocMonad m => WriterOptions -> [Block] -> DokuWiki m String listItemToDokuWiki opts items = do- useTags <- stUseTags <$> ask+ useTags <- asks stUseTags if useTags then do contents <- blockListToDokuWiki opts items@@ -288,8 +288,8 @@ let contents = case items of [_, CodeBlock _ _] -> concat bs _ -> vcat bs- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let indent' = if backSlash then drop 2 indent else indent return $ indent' ++ "* " ++ contents @@ -298,12 +298,12 @@ orderedListItemToDokuWiki :: PandocMonad m => WriterOptions -> [Block] -> DokuWiki m String orderedListItemToDokuWiki opts items = do contents <- blockListToDokuWiki opts items- useTags <- stUseTags <$> ask+ useTags <- asks stUseTags if useTags then return $ "<HTML><li></HTML>" ++ contents ++ "<HTML></li></HTML>" else do- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let indent' = if backSlash then drop 2 indent else indent return $ indent' ++ "- " ++ contents @@ -315,13 +315,13 @@ definitionListItemToDokuWiki opts (label, items) = do labelText <- inlineListToDokuWiki opts label contents <- mapM (blockListToDokuWiki opts) items- useTags <- stUseTags <$> ask+ useTags <- asks stUseTags if useTags then return $ "<HTML><dt></HTML>" ++ labelText ++ "<HTML></dt></HTML>\n" ++ intercalate "\n" (map (\d -> "<HTML><dd></HTML>" ++ d ++ "<HTML></dd></HTML>") contents) else do- indent <- stIndent <$> ask- backSlash <- stBackSlashLB <$> ask+ indent <- asks stIndent+ backSlash <- asks stBackSlashLB let indent' = if backSlash then drop 2 indent else indent return $ indent' ++ "* **" ++ labelText ++ "** " ++ concat contents @@ -403,7 +403,7 @@ -> [Block] -- ^ List of block elements -> DokuWiki m String blockListToDokuWiki opts blocks = do- backSlash <- stBackSlashLB <$> ask+ backSlash <- asks stBackSlashLB let blocks' = consolidateRawBlocks blocks if backSlash then backSlashLineBreaks <$> mapM (blockToDokuWiki opts) blocks'@@ -486,7 +486,7 @@ | otherwise = "" <$ report (InlineNotRendered il) inlineToDokuWiki _ LineBreak = do- backSlash <- stBackSlashLB <$> ask+ backSlash <- asks stBackSlashLB return $ if backSlash then "\n" else "\\\\\n"
src/Text/Pandoc/Writers/EPUB.hs view
@@ -110,6 +110,7 @@ , epubStylesheets :: [FilePath] , epubPageDirection :: Maybe ProgressionDirection , epubIbooksFields :: [(String, String)]+ , epubCalibreFields :: [(String, String)] } deriving Show data Date = Date{@@ -250,6 +251,18 @@ | name == "rights" = md { epubRights = Just $ strContent e } | otherwise = md where getAttr n = lookupAttr (opfName n) attrs+addMetadataFromXML e@(Element (QName "meta" _ _) attrs _ _) md =+ case getAttr "property" of+ Just s | "ibooks:" `isPrefixOf` s ->+ md{ epubIbooksFields = (drop 7 s, strContent e) :+ epubIbooksFields md }+ _ -> case getAttr "name" of+ Just s | "calibre:" `isPrefixOf` s ->+ md{ epubCalibreFields =+ (drop 8 s, fromMaybe "" $ getAttr "content") :+ epubCalibreFields md }+ _ -> md+ where getAttr n = lookupAttr (unqual n) attrs addMetadataFromXML _ md = md metaValueToString :: MetaValue -> String@@ -333,6 +346,7 @@ , epubStylesheets = stylesheets , epubPageDirection = pageDirection , epubIbooksFields = ibooksFields+ , epubCalibreFields = calibreFields } where identifiers = getIdentifier meta titles = getTitle meta@@ -364,6 +378,10 @@ Just (MetaMap mp) -> M.toList $ M.map metaValueToString mp _ -> []+ calibreFields = case lookupMeta "calibre" meta of+ Just (MetaMap mp)+ -> M.toList $ M.map metaValueToString mp+ _ -> [] -- | Produce an EPUB2 file from a Pandoc document. writeEPUB2 :: PandocMonad m@@ -495,7 +513,7 @@ -- body pages -- add level 1 header to beginning if none there- let blocks' = addIdentifiers+ let blocks' = addIdentifiers opts $ case blocks of (Header 1 _ _ : _) -> blocks _ -> Header 1 ("",["unnumbered"],[])@@ -504,13 +522,13 @@ let chapterHeaderLevel = writerEpubChapterLevel opts let isChapterHeader (Header n _ _) = n <= chapterHeaderLevel- isChapterHeader (Div ("",["references"],[]) (Header n _ _:_)) =+ isChapterHeader (Div ("refs",_,_) (Header n _ _:_)) = n <= chapterHeaderLevel isChapterHeader _ = False let toChapters :: [Block] -> State [Int] [Chapter] toChapters [] = return []- toChapters (Div ("",["references"],[]) bs@(Header 1 _ _:_) : rest) =+ toChapters (Div ("refs",_,_) bs@(Header 1 _ _:_) : rest) = toChapters (bs ++ rest) toChapters (Header n attr@(_,classes,_) ils : bs) = do nums <- get@@ -856,7 +874,7 @@ unode "metadata" ! [("xmlns:dc","http://purl.org/dc/elements/1.1/") ,("xmlns:opf","http://www.idpf.org/2007/opf")] $ mdNodes where mdNodes = identifierNodes ++ titleNodes ++ dateNodes- ++ languageNodes ++ ibooksNodes+ ++ languageNodes ++ ibooksNodes ++ calibreNodes ++ creatorNodes ++ contributorNodes ++ subjectNodes ++ descriptionNodes ++ typeNodes ++ formatNodes ++ publisherNodes ++ sourceNodes ++ relationNodes@@ -877,6 +895,9 @@ $ dateText x] ibooksNodes = map ibooksNode (epubIbooksFields md) ibooksNode (k, v) = unode "meta" ! [("property", "ibooks:" ++ k)] $ v+ calibreNodes = map calibreNode (epubCalibreFields md)+ calibreNode (k, v) = unode "meta" ! [("name", "calibre:" ++ k),+ ("content", v)] $ () languageNodes = [dcTag "language" $ epubLanguage md] creatorNodes = withIds "epub-creator" (toCreatorNode "creator") $ epubCreator md@@ -1056,12 +1077,12 @@ showChapter = printf "ch%03d.xhtml" -- Add identifiers to any headers without them.-addIdentifiers :: [Block] -> [Block]-addIdentifiers bs = evalState (mapM go bs) Set.empty+addIdentifiers :: WriterOptions -> [Block] -> [Block]+addIdentifiers opts bs = evalState (mapM go bs) Set.empty where go (Header n (ident,classes,kvs) ils) = do ids <- get let ident' = if null ident- then uniqueIdent ils ids+ then uniqueIdent (writerExtensions opts) ils ids else ident modify $ Set.insert ident' return $ Header n (ident',classes,kvs) ils
src/Text/Pandoc/Writers/HTML.hs view
@@ -125,7 +125,8 @@ strToHtml :: String -> Html strToHtml ('\'':xs) = preEscapedString "\'" `mappend` strToHtml xs-strToHtml xs@(_:_) = case break (=='\'') xs of+strToHtml ('"' :xs) = preEscapedString "\"" `mappend` strToHtml xs+strToHtml xs@(_:_) = case break (\c -> c == '\'' || c == '"') xs of (_ ,[]) -> toHtml xs (ys,zs) -> toHtml ys `mappend` strToHtml zs strToHtml [] = ""
src/Text/Pandoc/Writers/ICML.hs view
@@ -416,7 +416,7 @@ -- | Convert a list of inline elements to ICML. inlinesToICML :: PandocMonad m => WriterOptions -> Style -> [Inline] -> WS m Doc-inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (mergeSpaces lst)+inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (mergeStrings opts lst) -- | Convert an inline element to ICML. inlineToICML :: PandocMonad m => WriterOptions -> Style -> Inline -> WS m Doc@@ -427,8 +427,10 @@ inlineToICML opts style (Superscript lst) = inlinesToICML opts (superscriptName:style) lst inlineToICML opts style (Subscript lst) = inlinesToICML opts (subscriptName:style) lst inlineToICML opts style (SmallCaps lst) = inlinesToICML opts (smallCapsName:style) lst-inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $ [Str "‘"] ++ lst ++ [Str "’"]-inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $ [Str "“"] ++ lst ++ [Str "”"]+inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $+ mergeStrings opts $ [Str "‘"] ++ lst ++ [Str "’"]+inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $+ mergeStrings opts $ [Str "“"] ++ lst ++ [Str "”"] inlineToICML opts style (Cite _ lst) = inlinesToICML opts (citeName:style) lst inlineToICML _ style (Code _ str) = charStyle (codeName:style) $ text $ escapeStringForXML str inlineToICML _ style Space = charStyle style space@@ -474,18 +476,17 @@ $ inTags True "Footnote" [] $ number $$ intersperseBrs contents -- | Auxiliary function to merge Space elements into the adjacent Strs.-mergeSpaces :: [Inline] -> [Inline]-mergeSpaces (Str s:(x:(Str s':xs))) | isSp x =- mergeSpaces $ Str(s++" "++s') : xs-mergeSpaces (x:(Str s:xs)) | isSp x = mergeSpaces $ Str (" "++s) : xs-mergeSpaces (Str s:(x:xs)) | isSp x = mergeSpaces $ Str (s++" ") : xs-mergeSpaces (x:xs) = x : mergeSpaces xs-mergeSpaces [] = []+mergeStrings :: WriterOptions -> [Inline] -> [Inline]+mergeStrings opts = mergeStrings' . map spaceToStr+ where spaceToStr Space = Str " "+ spaceToStr SoftBreak = case writerWrapText opts of+ WrapPreserve -> Str "\n"+ _ -> Str " "+ spaceToStr x = x -isSp :: Inline -> Bool-isSp Space = True-isSp SoftBreak = True-isSp _ = False+ mergeStrings' (Str x : Str y : zs) = mergeStrings' (Str (x ++ y) : zs)+ mergeStrings' (x : xs) = x : mergeStrings' xs+ mergeStrings' [] = [] -- | Intersperse line breaks intersperseBrs :: [Doc] -> Doc
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -138,8 +138,8 @@ let method = writerCiteMethod options let blocks' = if method == Biblatex || method == Natbib then case reverse blocks of- Div (_,["references"],_) _:xs -> reverse xs- _ -> blocks+ Div ("refs",_,_) _:xs -> reverse xs+ _ -> blocks else blocks -- see if there are internal links let isInternalLink (Link _ _ ('#':xs,_)) = [xs]@@ -709,7 +709,7 @@ blockToLaTeX (OrderedList _ []) = return empty -- otherwise latex error blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do st <- get- let inc = if stIncremental st then "[<+->]" else ""+ let inc = if stBeamer st && stIncremental st then "[<+->]" else "" let oldlevel = stOLLevel st put $ st {stOLLevel = oldlevel + 1} items <- mapM listItemToLaTeX lst@@ -759,7 +759,8 @@ blockToLaTeX (DefinitionList []) = return empty blockToLaTeX (DefinitionList lst) = do incremental <- gets stIncremental- let inc = if incremental then "[<+->]" else ""+ beamer <- gets stBeamer+ let inc = if beamer && incremental then "[<+->]" else "" items <- mapM defListItemToLaTeX lst let spacing = if all isTightList (map snd lst) then text "\\tightlist"
src/Text/Pandoc/Writers/Markdown.hs view
@@ -217,8 +217,8 @@ -- Strip off final 'references' header if markdown citations enabled let blocks' = if isEnabled Ext_citations opts then case reverse blocks of- (Div (_,["references"],_) _):xs -> reverse xs- _ -> blocks+ (Div ("refs",_,_) _):xs -> reverse xs+ _ -> blocks else blocks body <- blockListToMarkdown opts blocks' notesAndRefs' <- notesAndRefs opts@@ -508,7 +508,7 @@ -- we calculate the id that would be used by auto_identifiers -- so we know whether to print an explicit identifier ids <- gets stIds- let autoId = uniqueIdent inlines ids+ let autoId = uniqueIdent (writerExtensions opts) inlines ids modify $ \st -> st{ stIds = Set.insert autoId ids } let attr' = case attr of ("",[],[]) -> empty
src/Text/Pandoc/Writers/Muse.hs view
@@ -49,6 +49,7 @@ import Data.Char (isAlphaNum, isAsciiLower, isAsciiUpper, isDigit, isSpace) import Data.Default import Data.List (intersperse, isInfixOf, transpose)+import Data.Monoid (Any (..)) import qualified Data.Set as Set import Data.Text (Text) import System.FilePath (takeExtension)@@ -61,6 +62,7 @@ import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Writers.Math import Text.Pandoc.Writers.Shared+import Text.Pandoc.Walk type Notes = [[Block]] @@ -80,12 +82,14 @@ data WriterState = WriterState { stNotes :: Notes+ , stNoteNum :: Int , stIds :: Set.Set String , stUseTags :: Bool -- ^ Use tags for emphasis, for example because previous character is a letter } instance Default WriterState where def = WriterState { stNotes = []+ , stNoteNum = 1 , stIds = Set.empty , stUseTags = False }@@ -127,7 +131,7 @@ (fmap render' . inlineListToMuse) meta body <- blockListToMuse blocks- notes <- fmap (reverse . stNotes) get >>= notesToMuse+ notes <- currentNotesToMuse let main = render colwidth $ body $+$ notes let context = defField "body" main metadata case writerTemplate opts of@@ -141,7 +145,7 @@ -> Int -- ^ Number of blank lines -> Muse m Doc catWithBlankLines (b : bs) n = do- b' <- blockToMuse b+ b' <- blockToMuseWithNotes b bs' <- flatBlockListToMuse bs return $ b' <> blanklines n <> bs' catWithBlankLines _ _ = error "Expected at least one block"@@ -169,25 +173,23 @@ -> [[TableCell]] -> Muse m Doc simpleTable caption headers rows = do+ topLevel <- asks envTopLevel caption' <- inlineListToMuse caption headers' <- mapM blockListToMuse headers rows' <- mapM (mapM blockListToMuse) rows- let noHeaders = all null headers- let numChars = maximum . map offset- let widthsInChars =- map numChars $ transpose (headers' : rows')+ let widthsInChars = maximum . map offset <$> transpose (headers' : rows') let hpipeBlocks sep blocks = hcat $ intersperse sep' blocks- where h = maximum (1 : map height blocks)- sep' = lblock (length sep) $ vcat (replicate h (text sep))- let makeRow sep = (" " <>) . hpipeBlocks sep . zipWith lblock widthsInChars+ where sep' = lblock (length sep) $ text sep+ let makeRow sep = hpipeBlocks sep . zipWith lblock widthsInChars let head' = makeRow " || " headers'- let rowSeparator = if noHeaders then " | " else " | " rows'' <- mapM (\row -> makeRow rowSeparator <$> mapM blockListToMuse row) rows let body = vcat rows''- return $ (if noHeaders then empty else head')- $$ body- $$ (if null caption then empty else " |+ " <> caption' <> " +|")+ return $ (if topLevel then nest 1 else id) ((if noHeaders then empty else head')+ $$ body+ $$ (if null caption then empty else "|+ " <> caption' <> " +|")) $$ blankline+ where noHeaders = all null headers+ rowSeparator = if noHeaders then " | " else " | " -- | Convert list of Pandoc block elements to Muse. blockListToMuse :: PandocMonad m@@ -225,7 +227,6 @@ let markers = take (length items) $ orderedListMarkers (start, style, Period) contents <- zipWithM orderedListItemToMuse markers items- -- ensure that sublists have preceding blank line topLevel <- asks envTopLevel return $ (if topLevel then nest 1 else id) (vcat contents) $$ blankline where orderedListItemToMuse :: PandocMonad m@@ -236,7 +237,6 @@ <$> blockListToMuse item blockToMuse (BulletList items) = do contents <- mapM bulletListItemToMuse items- -- ensure that sublists have preceding blank line topLevel <- asks envTopLevel return $ (if topLevel then nest 1 else id) (vcat contents) $$ blankline where bulletListItemToMuse :: PandocMonad m@@ -247,7 +247,6 @@ hang 2 "- " <$> blockListToMuse item blockToMuse (DefinitionList items) = do contents <- mapM definitionListItemToMuse items- -- ensure that sublists have preceding blank line topLevel <- asks envTopLevel return $ (if topLevel then nest 1 else id) (vcat contents) $$ blankline where definitionListItemToMuse :: PandocMonad m@@ -268,7 +267,7 @@ topLevel <- asks envTopLevel contents <- local (\env -> env { envOneLine = True }) $ inlineListToMuse' inlines ids <- gets stIds- let autoId = uniqueIdent inlines ids+ let autoId = uniqueIdent (writerExtensions opts) inlines ids modify $ \st -> st{ stIds = Set.insert autoId ids } let attr' = if null ident || (isEnabled Ext_auto_identifiers opts && ident == autoId)@@ -279,7 +278,7 @@ -- https://www.gnu.org/software/emacs-muse/manual/muse.html#Horizontal-Rules-and-Anchors blockToMuse HorizontalRule = return $ blankline $$ "----" $$ blankline blockToMuse (Table caption aligns widths headers rows) =- if all (== 0.0) widths+ if isSimple && numcols > 1 then simpleTable caption headers rows else do opts <- asks envOptions@@ -287,29 +286,74 @@ where blocksToDoc opts blocks = local (\env -> env { envOptions = opts }) $ blockListToMuse blocks+ numcols = maximum (length aligns : length widths : map length (headers:rows))+ hasSimpleCells = all isSimpleCell (concat (headers:rows))+ isLineBreak LineBreak = Any True+ isLineBreak _ = Any False+ hasLineBreak = getAny . query isLineBreak+ isSimple = hasSimpleCells && all (== 0) widths+ isSimpleCell [Plain ils] = not (hasLineBreak ils)+ isSimpleCell [Para ils ] = not (hasLineBreak ils)+ isSimpleCell [] = True+ isSimpleCell _ = False blockToMuse (Div _ bs) = flatBlockListToMuse bs blockToMuse Null = return empty +-- | Return Muse representation of notes collected so far.+currentNotesToMuse :: PandocMonad m+ => Muse m Doc+currentNotesToMuse = do+ notes <- reverse <$> gets stNotes+ modify $ \st -> st { stNotes = mempty }+ notesToMuse notes+ -- | Return Muse representation of notes. notesToMuse :: PandocMonad m => Notes -> Muse m Doc-notesToMuse notes = vsep <$> zipWithM noteToMuse [1 ..] notes+notesToMuse notes = do+ n <- gets stNoteNum+ modify $ \st -> st { stNoteNum = stNoteNum st + length notes }+ vsep <$> zipWithM noteToMuse [n ..] notes -- | Return Muse representation of a note. noteToMuse :: PandocMonad m => Int -> [Block] -> Muse m Doc-noteToMuse num note =- hang (length marker) (text marker) <$>+noteToMuse num note = do+ res <- hang (length marker) (text marker) <$> local (\env -> env { envInsideBlock = True , envInlineStart = True , envAfterSpace = True }) (blockListToMuse note)+ return $ res <> blankline where marker = "[" ++ show num ++ "] " +-- | Return Muse representation of block and accumulated notes.+blockToMuseWithNotes :: PandocMonad m+ => Block+ -> Muse m Doc+blockToMuseWithNotes blk = do+ topLevel <- asks envTopLevel+ opts <- asks envOptions+ let hdrToMuse hdr@Header{} = do+ b <- blockToMuse hdr+ if topLevel && writerReferenceLocation opts == EndOfSection+ then do+ notes <- currentNotesToMuse+ return $ notes $+$ b+ else+ return b+ hdrToMuse b = blockToMuse b+ b <- hdrToMuse blk+ if topLevel && writerReferenceLocation opts == EndOfBlock+ then do+ notes <- currentNotesToMuse+ return $ b $+$ notes <> blankline+ else return b+ -- | Escape special characters for Muse. escapeString :: String -> String escapeString s =@@ -659,7 +703,8 @@ modify $ \st -> st { stNotes = contents:notes , stUseTags = False }- let ref = show $ length notes + 1+ n <- gets stNoteNum+ let ref = show $ n + length notes return $ "[" <> text ref <> "]" inlineToMuse (Span (anchor,names,_) inlines) = do contents <- inlineListToMuse inlines
src/Text/Pandoc/Writers/ODT.hs view
@@ -51,11 +51,10 @@ import Text.Pandoc.Options (WrapOption (..), WriterOptions (..)) import Text.Pandoc.Pretty import Text.Pandoc.Shared (stringify, normalizeDate)-import Text.Pandoc.Writers.Shared (lookupMetaString)+import Text.Pandoc.Writers.Shared (lookupMetaString, fixDisplayMath) import Text.Pandoc.UTF8 (fromStringLazy, fromTextLazy, toStringLazy) import Text.Pandoc.Walk import Text.Pandoc.Writers.OpenDocument (writeOpenDocument)-import Text.Pandoc.Writers.Shared (fixDisplayMath) import Text.Pandoc.XML import Text.TeXMath import Text.XML.Light
src/Text/Pandoc/Writers/OpenDocument.hs view
@@ -601,7 +601,7 @@ listLevelStyle :: Int -> Doc listLevelStyle i =- let indent = show (0.5 * fromIntegral i :: Double) in+ let indent = show (0.25 + (0.25 * fromIntegral i :: Double)) in inTags True "style:list-level-properties" [ ("text:list-level-position-and-space-mode", "label-alignment")@@ -610,7 +610,7 @@ selfClosingTag "style:list-level-label-alignment" [ ("text:label-followed-by", "listtab") , ("text:list-tab-stop-position", indent ++ "in")- , ("fo:text-indent", "-0.1in")+ , ("fo:text-indent", "-0.25in") , ("fo:margin-left", indent ++ "in") ]
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs view
@@ -735,6 +735,7 @@ makeEndNotesSlideBlocks = do noteIds <- gets stNoteIds slideLevel <- asks envSlideLevel+ exts <- writerExtensions <$> asks envOpts meta <- asks envMetadata -- Get identifiers so we can give the notes section a unique ident. anchorSet <- M.keysSet <$> gets stAnchorMap@@ -743,7 +744,7 @@ else let title = case lookupMetaInlines "notes-title" meta of [] -> [Str "Notes"] ls -> ls- ident = Shared.uniqueIdent title anchorSet+ ident = Shared.uniqueIdent exts title anchorSet hdr = Header slideLevel (ident, [], []) title blks = concatMap (\(n, bs) -> makeNoteEntry n bs) $ M.toList noteIds
src/Text/Pandoc/Writers/RST.hs view
@@ -260,7 +260,8 @@ contents <- inlineListToRST inlines -- we calculate the id that would be used by auto_identifiers -- so we know whether to print an explicit identifier- let autoId = uniqueIdent inlines mempty+ opts <- gets stOptions+ let autoId = uniqueIdent (writerExtensions opts) inlines mempty isTopLevel <- gets stTopLevel if isTopLevel then do
src/Text/Pandoc/Writers/RTF.hs view
@@ -410,7 +410,7 @@ inlineToRTF il@(RawInline f str) | f == Format "rtf" = return str | otherwise = do- return $ InlineNotRendered il+ report $ InlineNotRendered il return "" inlineToRTF LineBreak = return "\\line " inlineToRTF SoftBreak = return " "
src/Text/Pandoc/Writers/Texinfo.hs view
@@ -231,7 +231,8 @@ node <- inlineListForNode lst txt <- inlineListToTexinfo lst idsUsed <- gets stIdentifiers- let id' = uniqueIdent lst idsUsed+ opts <- gets stOptions+ let id' = uniqueIdent (writerExtensions opts) lst idsUsed modify $ \st -> st{ stIdentifiers = Set.insert id' idsUsed } sec <- seccmd level return $ if (level > 0) && (level <= 4)@@ -328,7 +329,8 @@ lines' <- mapM makeMenuLine menu let menu' = if null lines' then empty- else text "@menu" $$+ else blankline $$+ text "@menu" $$ vcat lines' $$ text "@end menu" after' <- blockListToTexinfo after
src/Text/Pandoc/XML.hs view
@@ -42,10 +42,9 @@ import Data.Char (isAscii, isSpace, ord) import Data.Text (Text) import qualified Data.Text as T-import Text.HTML.TagSoup.Entity (lookupEntity)+import Text.HTML.TagSoup.Entity (lookupEntity, htmlEntities) import Text.Pandoc.Pretty import qualified Data.Map as M-import Text.HTML.TagSoup.Entity (htmlEntities) -- | Escape one character as needed for XML. escapeCharForXML :: Char -> String@@ -114,9 +113,16 @@ Nothing -> T.pack ("&#" ++ show (ord c) ++ ";") html5EntityMap :: M.Map Char Text-html5EntityMap = M.fromList [(c, T.takeWhile (/=';') (T.pack ent))- | (ent@(_:_), [c]) <- htmlEntities- , last ent == ';']+html5EntityMap = foldr go mempty htmlEntities+ where go (ent, s) entmap =+ case s of+ [c] -> M.insertWith+ (\new old -> if T.length new > T.length old+ then old+ else new) c ent' entmap+ where ent' = T.takeWhile (/=';') (T.pack ent)+ _ -> entmap+ -- Unescapes XML entities fromEntities :: String -> String
stack.yaml view
@@ -19,16 +19,16 @@ - foundation extra-dep: true extra-deps:-- pandoc-citeproc-0.14.8+- github: jgm/pandoc-citeproc+ commit: c2c7c43f1c37a6e5f571c500b9e6dd36011c493f - haddock-library-1.7.0-- HsYAML-0.1.1.1-- texmath-0.11.1.2-- yaml-0.9.0-- cmark-gfm-0.1.6+- HsYAML-0.1.1.2+- yaml-0.11.0.0+- libyaml-0.1.0.0 - hslua-1.0.1 - hslua-module-text-0.2.0 - skylighting-0.7.4 - skylighting-core-0.7.4 ghc-options: "$locals": -fhide-source-paths -XNoImplicitPrelude-resolver: lts-12.12+resolver: lts-12.18
test/Tests/Readers/Muse.hs view
@@ -976,6 +976,60 @@ [[plain "1", plain "2", plain "3"], [plain "4", mempty, plain "6"], [plain "7", plain "8", plain "9"]]+ , "Grid table" =:+ T.unlines+ [ "+-----+-----+"+ , "| foo | bar |"+ , "+-----+-----+"+ ] =?>+ table mempty [(AlignDefault, 0.0), (AlignDefault, 0.0)]+ []+ [[para "foo", para "bar"]]+ , "Grid table inside list" =:+ T.unlines+ [ " - +-----+-----+"+ , " | foo | bar |"+ , " +-----+-----+"+ ] =?>+ bulletList [table mempty [(AlignDefault, 0.0), (AlignDefault, 0.0)]+ []+ [[para "foo", para "bar"]]]+ , "Grid table with two rows" =:+ T.unlines+ [ "+-----+-----+"+ , "| foo | bar |"+ , "+-----+-----+"+ , "| bat | baz |"+ , "+-----+-----+"+ ] =?>+ table mempty [(AlignDefault, 0.0), (AlignDefault, 0.0)]+ []+ [[para "foo", para "bar"]+ ,[para "bat", para "baz"]]+ , "Grid table inside grid table" =:+ T.unlines+ [ "+-----+"+ , "|+---+|"+ , "||foo||"+ , "|+---+|"+ , "+-----+"+ ] =?>+ table mempty [(AlignDefault, 0.0)]+ []+ [[table mempty [(AlignDefault, 0.0)]+ []+ [[para "foo"]]]]+ , "Grid table with example" =:+ T.unlines+ [ "+------------+"+ , "| <example> |"+ , "| foo |"+ , "| </example> |"+ , "+------------+"+ ] =?>+ table mempty [(AlignDefault, 0.0)]+ []+ [[codeBlock "foo"]] ] , testGroup "Lists" [ "Bullet list" =:
test/Tests/Writers/Muse.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-} module Tests.Writers.Muse (tests) where import Prelude@@ -9,10 +10,13 @@ import Text.Pandoc.Arbitrary () import Text.Pandoc.Builder +defopts :: WriterOptions+defopts = def{ writerWrapText = WrapPreserve,+ writerExtensions = extensionsFromList [Ext_amuse,+ Ext_auto_identifiers] }+ muse :: (ToPandoc a) => a -> String-muse = museWithOpts def{ writerWrapText = WrapPreserve,- writerExtensions = extensionsFromList [Ext_amuse,- Ext_auto_identifiers] }+muse = museWithOpts defopts museWithOpts :: (ToPandoc a) => WriterOptions -> a -> String museWithOpts opts = unpack . purely (writeMuse opts) . toPandoc@@ -22,20 +26,98 @@ => String -> (a, String) -> TestTree (=:) = test muse +noteLocationTestDoc :: Blocks+noteLocationTestDoc =+ header 1 "First Header" <>+ para ("This is a footnote." <>+ note (para "First note.")) <>+ blockQuote (para ("A note inside a block quote." <>+ note (para "The second note.")) <>+ para "A second paragraph.") <>+ header 1 "Second Header" <>+ para "Some more text."++noteLocationTests :: TestTree+noteLocationTests = testGroup "note location"+ [ test (museWithOpts defopts {writerReferenceLocation=EndOfDocument})+ "footnotes at the end of document" $+ noteLocationTestDoc =?>+ unlines [ "* First Header"+ , ""+ , "This is a footnote.[1]"+ , ""+ , "<quote>"+ , "A note inside a block quote.[2]"+ , ""+ , "A second paragraph."+ , "</quote>"+ , ""+ , "* Second Header"+ , ""+ , "Some more text."+ , ""+ , "[1] First note."+ , ""+ , "[2] The second note."+ ]+ , test (museWithOpts defopts {writerReferenceLocation=EndOfBlock})+ "footnotes at the end of block" $+ noteLocationTestDoc =?>+ unlines [ "* First Header"+ , ""+ , "This is a footnote.[1]"+ , ""+ , "[1] First note."+ , ""+ , "<quote>"+ , "A note inside a block quote.[2]"+ , ""+ , "[2] The second note."+ , ""+ , "A second paragraph."+ , "</quote>"+ , ""+ , "* Second Header"+ , ""+ , "Some more text."+ ]+ , test (museWithOpts defopts {writerReferenceLocation=EndOfSection})+ "footnotes at the end of section" $+ noteLocationTestDoc =?>+ unlines [ "* First Header"+ , ""+ , "This is a footnote.[1]"+ , ""+ , "<quote>"+ , "A note inside a block quote.[2]"+ , ""+ , "A second paragraph."+ , "</quote>"+ , ""+ , "[1] First note."+ , ""+ , "[2] The second note."+ , ""+ , "* Second Header"+ , ""+ , "Some more text."+ ]+ ]+ tests :: [TestTree] tests = [ testGroup "block elements"- [ "plain" =: plain (text "Foo bar.") =?> "Foo bar."+ [ "plain" =: plain "Foo bar." =?> "Foo bar." , testGroup "paragraphs"- [ "single paragraph" =: para (text "Sample paragraph.")+ [ "single paragraph" =: para "Sample paragraph." =?> "Sample paragraph."- , "two paragraphs" =: para (text "First paragraph.") <>- para (text "Second paragraph.")+ , "two paragraphs" =: para "First paragraph." <>+ para "Second paragraph." =?> unlines [ "First paragraph." , "" , "Second paragraph." ] ]- , "line block" =: lineBlock [text "Foo", text "bar", text "baz"]+ , "line block" =: lineBlock ["Foo", "bar", "baz"] =?> unlines [ "> Foo" , "> bar" , "> baz"@@ -52,7 +134,7 @@ , "<hr>" , "</literal>" ]- , "block quote" =: blockQuote (para (text "Foo"))+ , "block quote" =: blockQuote (para "Foo") =?> unlines [ "<quote>" , "Foo" , "</quote>"@@ -60,9 +142,9 @@ , testGroup "lists" [ testGroup "simple lists" [- "ordered list" =: orderedList [ plain $ text "first"- , plain $ text "second"- , plain $ text "third"+ "ordered list" =: orderedList [ plain "first"+ , plain "second"+ , plain "third" ] =?> unlines [ " 1. first" , " 2. second"@@ -70,61 +152,62 @@ ] , "ordered list with Roman numerals" =: orderedListWith (1, UpperRoman, DefaultDelim)- [ plain $ text "first"- , plain $ text "second"- , plain $ text "third"+ [ plain "first"+ , plain "second"+ , plain "third" ] =?> unlines [ " I. first" , " II. second" , " III. third" ]- , "bullet list" =: bulletList [ plain $ text "first"- , plain $ text "second"- , plain $ text "third"+ , "bullet list" =: bulletList [ plain "first"+ , plain "second"+ , plain "third" ] =?> unlines [ " - first" , " - second" , " - third" ]- , "definition list" =: definitionList [ (text "first definition", [plain $ text "first description"])- , (text "second definition", [plain $ text "second description"])- , (text "third definition", [plain $ text "third description"])+ , "definition list" =: definitionList [ ("first definition", [plain "first description"])+ , ("second definition", [plain "second description"])+ , ("third definition", [plain "third description"]) ] =?> unlines [ " first definition :: first description" , " second definition :: second description" , " third definition :: third description" ] , "definition list with multiple descriptions" =:- definitionList [ (text "first definition", [plain $ text "first description"- ,plain $ text "second description"])- , (text "second definition", [plain $ text "third description"])+ definitionList [ ("first definition", [ plain "first description"+ , plain "second description"+ ])+ , ("second definition", [plain "third description"]) ] =?> unlines [ " first definition :: first description" , " :: second description" , " second definition :: third description" ] , "definition list with empty term" =:- definitionList [ (text "first definition", [plain $ text "first description"])- , (mempty, [plain $ text "second description"])- , (str "", [plain $ text "third description"])+ definitionList [ ("first definition", [plain "first description"])+ , (mempty, [plain "second description"])+ , (str "", [plain "third description"]) ] =?> unlines [ " first definition :: first description" , " <verbatim></verbatim> :: second description" , " <verbatim></verbatim> :: third description" ] , "definition list terms starting with space" =:- definitionList [ (text "first definition", [plain $ text "first description"])- , (space <> str "foo", [plain $ text "second description"])- , (str " > bar", [plain $ text "third description"])+ definitionList [ ("first definition", [plain "first description"])+ , (space <> str "foo", [plain "second description"])+ , (str " > bar", [plain "third description"]) ] =?> unlines [ " first definition :: first description" , " <verbatim></verbatim> foo :: second description" , " <verbatim></verbatim> > bar :: third description" ] , "definition list terms starting with list markers" =:- definitionList [ (text "first definition", [plain $ text "first description"])- , (str "-", [plain $ text "second description"])- , (str "1.", [plain $ text "third description"])+ definitionList [ ("first definition", [plain "first description"])+ , (str "-", [plain "second description"])+ , (str "1.", [plain "third description"]) ] =?> unlines [ " first definition :: first description" , " <verbatim></verbatim>- :: second description"@@ -134,12 +217,12 @@ -- Test that lists of the same type and style are separated with two blanklines , testGroup "sequential lists" [ "bullet lists" =:- bulletList [ para $ text "First"- , para $ text "Second"- , para $ text "Third"+ bulletList [ para "First"+ , para "Second"+ , para "Third" ] <>- bulletList [ para $ text "Fourth"- , para $ text "Fifth"+ bulletList [ para "Fourth"+ , para "Fifth" ] =?> unlines [ " - First" , " - Second"@@ -150,11 +233,11 @@ , " - Fifth" ] , "ordered lists of the same style" =:- orderedListWith (1, UpperRoman, DefaultDelim) [ para $ text "First"- , para $ text "Second"+ orderedListWith (1, UpperRoman, DefaultDelim) [ para "First"+ , para "Second" ] <>- orderedListWith (1, UpperRoman, DefaultDelim) [ para $ text "Third"- , para $ text "Fourth"+ orderedListWith (1, UpperRoman, DefaultDelim) [ para "Third"+ , para "Fourth" ] =?> unlines [ " I. First" , " II. Second"@@ -164,11 +247,11 @@ , " II. Fourth" ] , "ordered lists with equal styles" =:- orderedList [ para $ text "First"- , para $ text "Second"+ orderedList [ para "First"+ , para "Second" ] <>- orderedListWith (1, Decimal, DefaultDelim) [ para $ text "Third"- , para $ text "Fourth"+ orderedListWith (1, Decimal, DefaultDelim) [ para "Third"+ , para "Fourth" ] =?> unlines [ " 1. First" , " 2. Second"@@ -178,11 +261,11 @@ , " 2. Fourth" ] , "bullet and ordered lists" =:- bulletList [ para $ text "First"- , para $ text "Second"+ bulletList [ para "First"+ , para "Second" ] <>- orderedListWith (1, UpperRoman, DefaultDelim) [ para $ text "Third"- , para $ text "Fourth"+ orderedListWith (1, UpperRoman, DefaultDelim) [ para "Third"+ , para "Fourth" ] =?> unlines [ " - First" , " - Second"@@ -191,11 +274,11 @@ , " II. Fourth" ] , "different style ordered lists" =:- orderedListWith (1, UpperRoman, DefaultDelim) [ para $ text "First"- , para $ text "Second"+ orderedListWith (1, UpperRoman, DefaultDelim) [ para "First"+ , para "Second" ] <>- orderedListWith (1, Decimal, DefaultDelim) [ para $ text "Third"- , para $ text "Fourth"+ orderedListWith (1, Decimal, DefaultDelim) [ para "Third"+ , para "Fourth" ] =?> unlines [ " I. First" , " II. Second"@@ -205,12 +288,12 @@ ] ] , testGroup "nested lists"- [ "nested ordered list" =: orderedList [ plain $ text "First outer"- , plain (text "Second outer:") <>- orderedList [ plain $ text "first"- , plain $ text "second"+ [ "nested ordered list" =: orderedList [ plain "First outer"+ , plain "Second outer:" <>+ orderedList [ plain "first"+ , plain "second" ]- , plain $ text "Third outer"+ , plain "Third outer" ] =?> unlines [ " 1. First outer" , " 2. Second outer:"@@ -218,12 +301,12 @@ , " 2. second" , " 3. Third outer" ]- , "nested bullet lists" =: bulletList [ plain $ text "First outer"- , plain (text "Second outer:") <>- bulletList [ plain $ text "first"- , plain $ text "second"+ , "nested bullet lists" =: bulletList [ plain "First outer"+ , plain "Second outer:" <>+ bulletList [ plain "first"+ , plain "second" ]- , plain $ text "Third outer"+ , plain "Third outer" ] =?> unlines [ " - First outer" , " - Second outer:"@@ -231,13 +314,13 @@ , " - second" , " - Third outer" ]- , "nested definition lists" =: definitionList [ (text "first definition", [plain $ text "first description"])- , (text "second definition",- [ plain (text "second description") <>- definitionList [ ( text "first inner definition"- , [plain $ text "first inner description"])- , ( text "second inner definition"- , [plain $ text "second inner description"])+ , "nested definition lists" =: definitionList [ ("first definition", [plain "first description"])+ , ("second definition",+ [ plain "second description" <>+ definitionList [ ("first inner definition"+ , [plain "first inner description"])+ , ( "second inner definition"+ , [plain "second inner description"]) ] ] )@@ -247,12 +330,12 @@ , " first inner definition :: first inner description" , " second inner definition :: second inner description" ]- , "list item starting with list" =: bulletList [ bulletList [ plain $ text "foo"] ] =?> " - - foo"+ , "list item starting with list" =: bulletList [ bulletList [ plain "foo"] ] =?> " - - foo" ] -- Check that list is intended with one space even inside a quote- , "List inside block quote" =: blockQuote (orderedList [ plain $ text "first"- , plain $ text "second"- , plain $ text "third"+ , "List inside block quote" =: blockQuote (orderedList [ plain "first"+ , plain "second"+ , plain "third" ]) =?> unlines [ "<quote>" , " 1. first"@@ -263,32 +346,32 @@ ] , testGroup "headings" [ "normal heading" =:- header 1 (text "foo") =?> "* foo"+ header 1 "foo" =?> "* foo" , "heading levels" =:- header 1 (text "First level") <>- header 3 (text "Third level") =?>+ header 1 "First level" <>+ header 3 "Third level" =?> unlines [ "* First level" , "" , "*** Third level" ] , "heading with ID" =:- headerWith ("bar", [], []) 2 (text "Foo") =?>+ headerWith ("bar", [], []) 2 "Foo" =?> unlines [ "#bar" , "** Foo" ] , "empty heading" =: header 4 mempty =?> "**** <verbatim></verbatim>" ] , "horizontal rule" =: horizontalRule =?> "----"- , "escape horizontal rule" =: para (text "----") =?> "<verbatim></verbatim>----"- , "escape long horizontal rule" =: para (text "----------") =?> "<verbatim></verbatim>----------"- , "don't escape horizontal inside paragraph" =: para (text "foo ---- bar") =?> "foo ---- bar"- , "escape nonbreaking space" =: para (text "~~") =?> "<verbatim>~~</verbatim>"- , "escape > in the beginning of line" =: para (text "> foo bar") =?> "<verbatim></verbatim>> foo bar"+ , "escape horizontal rule" =: para "----" =?> "<verbatim></verbatim>----"+ , "escape long horizontal rule" =: para "----------" =?> "<verbatim></verbatim>----------"+ , "don't escape horizontal inside paragraph" =: para "foo ---- bar" =?> "foo ---- bar"+ , "escape nonbreaking space" =: para "~~" =?> "<verbatim>~~</verbatim>"+ , "escape > in the beginning of line" =: para "> foo bar" =?> "<verbatim></verbatim>> foo bar" , "escape string with > and space in the beginning of line" =: para (str "> foo bar") =?> "<verbatim></verbatim>> foo bar" , testGroup "tables" [ "table without header" =:- let rows = [[para $ text "Para 1.1", para $ text "Para 1.2"]- ,[para $ text "Para 2.1", para $ text "Para 2.2"]]+ let rows = [[para "Para 1.1", para "Para 1.2"]+ ,[para "Para 2.1", para "Para 2.2"]] in table mempty [(AlignDefault,0.0),(AlignDefault,0.0)] [mempty, mempty] rows =?>@@ -296,9 +379,9 @@ , " Para 2.1 | Para 2.2" ] , "table with header" =:- let headers = [plain $ text "header 1", plain $ text "header 2"]- rows = [[para $ text "Para 1.1", para $ text "Para 1.2"]- ,[para $ text "Para 2.1", para $ text "Para 2.2"]]+ let headers = [plain "header 1", plain "header 2"]+ rows = [[para "Para 1.1", para "Para 1.2"]+ ,[para "Para 2.1", para "Para 2.2"]] in simpleTable headers rows =?> unlines [ " header 1 || header 2"@@ -306,10 +389,10 @@ , " Para 2.1 | Para 2.2" ] , "table with header and caption" =:- let caption = text "Table 1"- headers = [plain $ text "header 1", plain $ text "header 2"]- rows = [[para $ text "Para 1.1", para $ text "Para 1.2"]- ,[para $ text "Para 2.1", para $ text "Para 2.2"]]+ let caption = "Table 1"+ headers = [plain "header 1", plain "header 2"]+ rows = [[para "Para 1.1", para "Para 1.2"]+ ,[para "Para 2.1", para "Para 2.2"]] in table caption [(AlignDefault,0.0),(AlignDefault,0.0)] headers rows =?> unlines [ " header 1 || header 2"@@ -317,9 +400,27 @@ , " Para 2.1 | Para 2.2" , " |+ Table 1 +|" ]+ , "table inside bullet list" =:+ bulletList [simpleTable [] [[para "foo", para "bar"]+ ,[para "bat", para "baz"]]]+ =?> unlines [ " - foo | bar"+ , " bat | baz"+ ]+ , "table with one column" =:+ let headers = []+ rows = [[para "Para 1"]+ ,[para "Para 2"]]+ in simpleTable headers rows+ =?>+ unlines [ "+--------+"+ , "| Para 1 |"+ , "+--------+"+ , "| Para 2 |"+ , "+--------+"+ ] ] , "div with bullet list" =:- divWith nullAttr (bulletList [para $ text "foo"]) =?>+ divWith nullAttr (bulletList [para "foo"]) =?> unlines [ " - foo" ] -- Making sure bullets are indented -- Null is trivial ]@@ -343,8 +444,8 @@ , "do not escape colon" =: str ":" =?> ":" , "escape - to avoid accidental unordered lists" =: text " - foo" =?> "<verbatim></verbatim> - foo" , "escape - inside a list to avoid accidental nested unordered lists" =:- bulletList [ para (text "foo") <>- para (text "- bar")+ bulletList [ para "foo" <>+ para "- bar" ] =?> unlines [ " - foo" , ""@@ -359,7 +460,7 @@ , " <verbatim></verbatim>- bar" ] , "escape - inside a note" =:- note (para (text "- foo")) =?>+ note (para "- foo") =?> unlines [ "[1]" , "" , "[1] <verbatim></verbatim>- foo"@@ -373,16 +474,16 @@ ] , "escape ; to avoid accidental comments" =: text "; foo" =?> "<verbatim></verbatim>; foo" , "escape strings starting with ; and space" =: str "; foo" =?> "<verbatim></verbatim>; foo"- , "escape ; after softbreak" =: text "foo" <> softbreak <> text "; bar" =?> "foo\n<verbatim></verbatim>; bar"- , "escape ; after linebreak" =: text "foo" <> linebreak <> text "; bar" =?> "foo<br>\n<verbatim></verbatim>; bar"+ , "escape ; after softbreak" =: "foo" <> softbreak <> "; bar" =?> "foo\n<verbatim></verbatim>; bar"+ , "escape ; after linebreak" =: "foo" <> linebreak <> "; bar" =?> "foo<br>\n<verbatim></verbatim>; bar" , "do not escape ; inside paragraph" =: text "foo ; bar" =?> "foo ; bar" , "escape newlines" =: str "foo\nbar" =?> "foo bar" ] , testGroup "emphasis"- [ "emphasis" =: emph (text "foo") =?> "*foo*"- , "emphasis inside word" =: text "foo" <> emph (text "bar") <> text "baz" =?> "foo<em>bar</em>baz"- , "emphasis before comma" =: emph (text "foo") <> text ", bar" =?> "*foo*, bar"- , "emphasis before period" =: emph (text "foobar") <> text "." =?> "*foobar*."+ [ "emphasis" =: emph "foo" =?> "*foo*"+ , "emphasis inside word" =: "foo" <> emph "bar" <> "baz" =?> "foo<em>bar</em>baz"+ , "emphasis before comma" =: emph "foo" <> ", bar" =?> "*foo*, bar"+ , "emphasis before period" =: emph "foobar" <> "." =?> "*foobar*." , "empty emphasis" =: emph mempty =?> "<em></em>" , "empty strong" =: strong mempty =?> "<strong></strong>" , "empty strong emphasis" =: strong (emph mempty) =?> "**<em></em>**"@@ -395,31 +496,31 @@ , "emphasized string ending with space" =: emph (str "foo ") =?> "<em>foo </em>" , "emphasized string with tab" =: emph (str "\t") =?> "<em>\t</em>" , "emphasized space between empty strings" =: emph (str "" <> space <> str "") =?> "<em> </em>"- , "strong" =: strong (text "foo") =?> "**foo**"- , "strong inside word" =: text "foo" <> strong (text "bar") <> text "baz" =?> "foo<strong>bar</strong>baz"- , "strong emphasis" =: strong (emph (text "foo")) =?> "***foo***"- , "strong after emphasis" =: emph (text "foo") <> strong (text "bar") =?> "*foo*<strong>bar</strong>"- , "strong emphasis after emphasis" =: emph (text "foo") <> strong (emph (text "bar")) =?> "*foo*<strong>*bar*</strong>"- , "strong in the end of emphasis" =: emph (text "foo" <> strong (text "bar")) =?> "*foo<strong>bar</strong>*"+ , "strong" =: strong "foo" =?> "**foo**"+ , "strong inside word" =: "foo" <> strong "bar" <> "baz" =?> "foo<strong>bar</strong>baz"+ , "strong emphasis" =: strong (emph "foo") =?> "***foo***"+ , "strong after emphasis" =: emph "foo" <> strong "bar" =?> "*foo*<strong>bar</strong>"+ , "strong emphasis after emphasis" =: emph "foo" <> strong (emph "bar") =?> "*foo*<strong>*bar*</strong>"+ , "strong in the end of emphasis" =: emph ("foo" <> strong "bar") =?> "*foo<strong>bar</strong>*" , "switch to lightweight markup after <em> tag" =: strong (str "foo") <> emph (str "bar") <> strong (str "baz") =?> "**foo**<em>bar</em>**baz**"- , "strikeout" =: strikeout (text "foo") =?> "<del>foo</del>"- , "space at the beginning of emphasis" =: emph (text " foo") =?> "<em> foo</em>"- , "space at the end of emphasis" =: emph (text "foo ") =?> "<em>foo </em>"- , "space at the beginning of strong" =: strong (text " foo") =?> "<strong> foo</strong>"- , "space at the end of strong" =: strong (text "foo ") =?> "<strong>foo </strong>"- , "space at the beginning of strong emphasis" =: strong (emph (text " foo")) =?> "**<em> foo</em>**"- , "space at the end of strong emphasis" =: strong (emph (text "foo ")) =?> "**<em>foo </em>**"- , "space at the beginning of emphasiszed strong" =: emph (strong (text " foo")) =?> "*<strong> foo</strong>*"- , "space at the end of emphasized strong" =: emph (strong (text "foo ")) =?> "*<strong>foo </strong>*"+ , "strikeout" =: strikeout "foo" =?> "<del>foo</del>"+ , "space at the beginning of emphasis" =: emph " foo" =?> "<em> foo</em>"+ , "space at the end of emphasis" =: emph "foo " =?> "<em>foo </em>"+ , "space at the beginning of strong" =: strong " foo" =?> "<strong> foo</strong>"+ , "space at the end of strong" =: strong "foo " =?> "<strong>foo </strong>"+ , "space at the beginning of strong emphasis" =: strong (emph " foo") =?> "**<em> foo</em>**"+ , "space at the end of strong emphasis" =: strong (emph "foo ") =?> "**<em>foo </em>**"+ , "space at the beginning of emphasiszed strong" =: emph (strong " foo") =?> "*<strong> foo</strong>*"+ , "space at the end of emphasized strong" =: emph (strong "foo ") =?> "*<strong>foo </strong>*" ]- , "superscript" =: superscript (text "foo") =?> "<sup>foo</sup>"- , "subscript" =: subscript (text "foo") =?> "<sub>foo</sub>"- , "smallcaps" =: smallcaps (text "foo") =?> "*foo*"+ , "superscript" =: superscript "foo" =?> "<sup>foo</sup>"+ , "subscript" =: subscript "foo" =?> "<sub>foo</sub>"+ , "smallcaps" =: smallcaps "foo" =?> "*foo*" , "smallcaps near emphasis" =: emph (str "foo") <> smallcaps (str "bar") =?> "*foobar*"- , "single quoted" =: singleQuoted (text "foo") =?> "‘foo’"- , "double quoted" =: doubleQuoted (text "foo") =?> "“foo”"+ , "single quoted" =: singleQuoted "foo" =?> "‘foo’"+ , "double quoted" =: doubleQuoted "foo" =?> "“foo”" -- Cite is trivial , testGroup "code" [ "simple" =: code "foo" =?> "=foo="@@ -437,21 +538,21 @@ , "strong code" =: strong (code "foo") =?> "**=foo=**" ] , testGroup "spaces"- [ "space" =: text "a" <> space <> text "b" =?> "a b"- , "soft break" =: text "a" <> softbreak <> text "b" =?> "a\nb"+ [ "space" =: "a" <> space <> "b" =?> "a b"+ , "soft break" =: "a" <> softbreak <> "b" =?> "a\nb" , test (museWithOpts def{ writerWrapText = WrapNone })- "remove soft break" $ text "a" <> softbreak <> text "b"- =?> "a b"- , "line break" =: text "a" <> linebreak <> text "b" =?> "a<br>\nb"- , "no newline after line break in header" =: header 1 (text "a" <> linebreak <> text "b") =?> "* a<br>b"- , "no softbreak in header" =: header 1 (text "a" <> softbreak <> text "b") =?> "* a b"+ "remove soft break" $ "a" <> softbreak <> "b"+ =?> ("a b" :: String)+ , "line break" =: "a" <> linebreak <> "b" =?> "a<br>\nb"+ , "no newline after line break in header" =: header 1 ("a" <> linebreak <> "b") =?> "* a<br>b"+ , "no softbreak in header" =: header 1 ("a" <> softbreak <> "b") =?> "* a b" ] , testGroup "math" [ "inline math" =: math "2^3" =?> "2<sup>3</sup>" , "display math" =: displayMath "2^3" =?> "2<sup>3</sup>" , "multiple letters in inline math" =: math "abc" =?> "*abc*" , "expand math before normalization" =: math "[" <> str "2]" =?> "<verbatim>[2]</verbatim>"- , "multiple math expressions inside one inline list" =: math "5_4" <> text ", " <> displayMath "3^2" =?> "5<sub>4</sub>, 3<sup>2</sup>"+ , "multiple math expressions inside one inline list" =: math "5_4" <> ", " <> displayMath "3^2" =?> "5<sub>4</sub>, 3<sup>2</sup>" ] , "raw inline" =: rawInline "html" "<mark>marked text</mark>"@@ -496,44 +597,45 @@ imageWith ("", ["align-right"], [("width", "60%")]) "image.png" "Image" (str "") =?> "[[image.png 60 r][Image]]" , "escape brackets in image title" =: image "image.png" "Foo]bar" (str "") =?> "[[image.png][<verbatim>Foo]bar</verbatim>]]"- , "note" =: note (plain (text "Foo"))+ , "note" =: note (plain "Foo") =?> unlines [ "[1]" , "" , "[1] Foo" ]- , "span with class" =: spanWith ("",["foobar"],[]) (text "Some text")+ , noteLocationTests+ , "span with class" =: spanWith ("",["foobar"],[]) "Some text" =?> "<class name=\"foobar\">Some text</class>"- , "span without class" =: spanWith ("",[],[]) (text "Some text")+ , "span without class" =: spanWith ("",[],[]) "Some text" =?> "<class>Some text</class>"- , "span with anchor" =: spanWith ("anchor", [], []) mempty <> text "Foo bar"+ , "span with anchor" =: spanWith ("anchor", [], []) mempty <> "Foo bar" =?> "#anchor Foo bar" , "empty span with anchor" =: spanWith ("anchor", [], []) mempty =?> "#anchor" , "empty span without class and anchor" =: spanWith ("", [], []) mempty =?> "<class></class>"- , "span with class and anchor" =: spanWith ("anchor", ["foo"], []) (text "bar")+ , "span with class and anchor" =: spanWith ("anchor", ["foo"], []) "bar" =?> "#anchor <class name=\"foo\">bar</class>" , "adjacent spans" =: spanWith ("", ["syllable"], []) (str "wa") <> spanWith ("", ["syllable"], []) (str "ter") =?> "<class name=\"syllable\">wa</class><class name=\"syllable\">ter</class>" , testGroup "combined" [ "emph word before" =:- para (text "foo" <> emph (text "bar")) =?>+ para ("foo" <> emph "bar") =?> "foo<em>bar</em>" , "emph word after" =:- para (emph (text "foo") <> text "bar") =?>+ para (emph "foo" <> "bar") =?> "<em>foo</em>bar" , "emph quoted" =:- para (doubleQuoted (emph (text "foo"))) =?>+ para (doubleQuoted (emph "foo")) =?> "“*foo*”" , "strong word before" =:- para (text "foo" <> strong (text "bar")) =?>+ para ("foo" <> strong "bar") =?> "foo<strong>bar</strong>" , "strong word after" =:- para (strong (text "foo") <> text "bar") =?>+ para (strong "foo" <> "bar") =?> "<strong>foo</strong>bar" , "strong quoted" =:- para (singleQuoted (strong (text "foo"))) =?>+ para (singleQuoted (strong "foo")) =?> "‘**foo**’" ] ]
test/command/4635.md view
@@ -19,7 +19,7 @@ cf. foo ^D-[Para [Str "cf.\160foo"]]+[Para [Str "cf.",SoftBreak,Str "foo"]] ``` ```@@ -27,5 +27,5 @@ a cf. foo ^D-[Para [Str "a",SoftBreak,Str "cf.\160foo"]]+[Para [Str "a",Space,Str "cf.",SoftBreak,Str "foo"]] ```
test/command/4742.md view
@@ -2,24 +2,28 @@ extension properly. ```-% pandoc -f commonmark+gfm_auto_identifiers+ascii_identifiers -t native+% pandoc -f commonmark+auto_identifiers+gfm_auto_identifiers+ascii_identifiers -t native # non ascii ⚠️ räksmörgås ^D [Header 1 ("non-ascii--raksmorgas",[],[]) [Str "non",Space,Str "ascii",Space,Str "\9888\65039",Space,Str "r\228ksm\246rg\229s"]] ``` +Note that the emoji here is actually a composite character,+formed from \9888 and \65039. The latter is a combining mark,+so it survives...+ ```-% pandoc -f commonmark+gfm_auto_identifiers-ascii_identifiers -t native+% pandoc -f commonmark+auto_identifiers+gfm_auto_identifiers-ascii_identifiers -t native # non ascii ⚠️ räksmörgås ^D [Header 1 ("non-ascii-\65039-r\228ksm\246rg\229s",[],[]) [Str "non",Space,Str "ascii",Space,Str "\9888\65039",Space,Str "r\228ksm\246rg\229s"]] ``` -`gfm` should have `ascii_identifiers` enabled by default.+`gfm` should have `ascii_identifiers` disabled by default. ``` % pandoc -f gfm -t native # non ascii ⚠️ räksmörgås ^D-[Header 1 ("non-ascii--raksmorgas",[],[]) [Str "non",Space,Str "ascii",Space,Str "\9888\65039",Space,Str "r\228ksm\246rg\229s"]]+[Header 1 ("non-ascii-\65039-r\228ksm\246rg\229s",[],[]) [Str "non",Space,Str "ascii",Space,Str "\9888\65039",Space,Str "r\228ksm\246rg\229s"]] ```
+ test/command/5014.md view
@@ -0,0 +1,19 @@+```+% pandoc -f html -t native+<table>+ <thead>+ <tr>+ <td>Name</td>+ </tr>+ </thead>+ <tbody>+ <tr>+ <td>Accounts</td>+ </tr>+ </tbody>+</table>+^D+[Table [] [AlignDefault] [0.0]+ [[Plain [Str "Name"]]]+ [[[Plain [Str "Accounts"]]]]]+```
+ test/command/5050.md view
@@ -0,0 +1,7 @@+```+pandoc -t rst+<unknown>+x+^D+x+```
+ test/command/5053.md view
@@ -0,0 +1,14 @@+```+% pandoc+—_legibility_—+^D+<p>—<em>legibility</em>—</p>+```++```+% pandoc+_filename_|_filetype_+^D+<p><em>filename</em>|<em>filetype</em></p>+```+
+ test/command/5072.md view
@@ -0,0 +1,14 @@+```+% pandoc -t latex -i+1. one+2. two+^D+\begin{enumerate}+\def\labelenumi{\arabic{enumi}.}+\tightlist+\item+ one+\item+ two+\end{enumerate}+```
+ test/command/5079.md view
@@ -0,0 +1,16 @@+```+% pandoc -f html -t native+<table>+<tfoot>+</tfoot>+<tbody>+<tr>+<td>Cell</td>+</tr>+</tbody>+</table>+^D+[Table [] [AlignDefault] [0.0]+ [[]]+ [[[Plain [Str "Cell"]]]]]+```
+ test/command/5080.md view
@@ -0,0 +1,13 @@+```+pandoc -t asciidoc+[foo *bar*]{.small .red key=val}+^D+[.small .red]#foo _bar_#+```++```+pandoc -f html -t asciidoc+<small>SMALL</small>+^D+[.small]#SMALL#+```
+ test/command/5099.md view
@@ -0,0 +1,13 @@+```+% pandoc -t native+(@citation+^D+[Para [Str "(",Cite [Citation {citationId = "citation", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@citation"]]]+```++```+% pandoc -t native+('asd')+^D+[Para [Str "(",Quoted SingleQuote [Str "asd"],Str ")"]]+```
test/command/ascii.md view
@@ -2,7 +2,7 @@ pandoc -t html --ascii äéıå ^D-<p>äéıå</p>+<p>äéıå</p> ``` ```@@ -48,6 +48,42 @@ pandoc -t markdown-smart --ascii "äéıå" ^D-“äéıå”+“äéıå” ``` +# CommonMark tests++```+% pandoc -f commonmark -t commonmark --ascii+hello … ok? … bye+^D+hello … ok? … bye+```++```+% pandoc -f commonmark+smart -t commonmark-smart --ascii --wrap=none+"hi"...dog's breath---cat 5--6+^D+“hi”…dog’s breath—cat 5–6+```++```+% pandoc -f commonmark+smart -t commonmark+smart --ascii+"hi"...dog's breath---cat 5--6+^D+"hi"...dog's breath---cat 5--6+```++```+% pandoc -f commonmark -t commonmark --ascii+foo Ӓ bar+^D+foo Ӓ bar+```++```+% pandoc -f commonmark -t commonmark --ascii+\[foo\](bar)+^D+\[foo\](bar)+```
test/command/md-abbrevs.md view
@@ -9,17 +9,6 @@ [Para [Str "Mr.\160Bob"]] ``` -Here pandoc readjusts the softbreak so that the nonbreaking-space can be inserted:--```-% pandoc -t native-Hi Mr.-Bob-^D-[Para [Str "Hi",SoftBreak,Str "Mr.\160Bob"]]-```- If you don't want this to happen you can escape the period: ```
test/docx/golden/nested_anchors_in_header.docx view
binary file changed (10251 → 10196 bytes)
test/markdown-citations.native view
@@ -7,9 +7,9 @@ ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.\160\&30,",Space,Str "with",Space,Str "suffix"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@item1",Space,Str "[p.",Space,Str "30,",Space,Str "with",Space,Str "suffix]"],Space,Str "says",Space,Str "blah."]] ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.\160\&30"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "see",Space,Str "also"], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "@item1",Space,Str "[-@item2",Space,Str "p.",Space,Str "30;",Space,Str "see",Space,Str "also",Space,Str "@\1087\1091\1085\1082\1090\&3]"],Space,Str "says",Space,Str "blah."]] ,[Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.\160\&12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@\1087\1091\1085\1082\1090\&3",Space,Str "[p.",Space,Str "12]"],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@\1087\1091\1085\1082\1090\&3]"],Str "."]]]]- ,[Para [Str "A",Space,Str "citation",Space,Str "group",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.\160\&34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "also",Space,Str "@\1087\1091\1085\1082\1090\&3",Space,Str "p.",Space,Str "34-35]"],Str "."]]+ ,[Para [Str "A",Space,Str "citation",Space,Str "group",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.\160\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.\160\&34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "also",Space,Str "@\1087\1091\1085\1082\1090\&3",Space,Str "p.",Space,Str "34-35]"],Str "."]] ,[Para [Str "Another",Space,Str "one",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.\160\&34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "p.",Space,Str "34-35]"],Str "."]]- ,[Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "@\1087\1091\1085\1082\1090\&3;",Space,Str "@item2]"],Str "."]]]]+ ,[Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.\160\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "@\1087\1091\1085\1082\1090\&3;",Space,Str "@item2]"],Str "."]]]] ,[Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.\160\&33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]] ,[Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]] ,[Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item1]"],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.\160\&44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item2",Space,Str "p.",Space,Str "44]"],Str "."]]]]
test/writer.asciidoc view
@@ -66,8 +66,9 @@ A list: -1. item one-2. item two+[arabic]+. item one+. item two Nested block quotes: @@ -156,35 +157,40 @@ Tight: -1. First-2. Second-3. Third+[arabic]+. First+. Second+. Third and: -1. One-2. Two-3. Three+[arabic]+. One+. Two+. Three Loose using tabs: -1. First-2. Second-3. Third+[arabic]+. First+. Second+. Third and using spaces: -1. One-2. Two-3. Three+[arabic]+. One+. Two+. Three Multiple paragraphs: -1. Item 1, graf one.+[arabic]+. Item 1, graf one. + Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.-2. Item 2.-3. Item 3.+. Item 2.+. Item 3. === Nested @@ -194,21 +200,23 @@ Here’s another: -1. First-2. Second:+[arabic]+. First+. Second: * Fee * Fie * Foe-3. Third+. Third Same thing but with paragraphs: -1. First-2. Second:+[arabic]+. First+. Second: * Fee * Fie * Foe-3. Third+. Third === Tabs and spaces @@ -219,27 +227,34 @@ === Fancy list markers -1. begins with 2-2. and now 3+[arabic, start=2]+. begins with 2+. and now 3 + with a continuation-a. sublist with roman numerals, starting with 4-b. more items-A. a subsublist-B. a subsublist+[lowerroman, start=4]+.. sublist with roman numerals, starting with 4+.. more items+[upperalpha]+... a subsublist+... a subsublist Nesting: -A. Upper Alpha-A. Upper Roman.-1. Decimal start with 6-a. Lower alpha with paren+[upperalpha]+. Upper Alpha+[upperroman]+.. Upper Roman.+[arabic, start=6]+... Decimal start with 6+[loweralpha, start=3]+.... Lower alpha with paren Autonumbering: -1. Autonumber.-2. More.-1. Nested.+. Autonumber.+. More.+.. Nested. Should not be a list item: @@ -326,8 +341,9 @@ orange:: orange fruit +- 1. sublist- 2. sublist+ [arabic]+ . sublist+ . sublist == HTML Blocks @@ -622,6 +638,7 @@ Notes can go in quotes.footnote:[In quote.] ___________________________________________ -1. And in list items.footnote:[In list.]+[arabic]+. And in list items.footnote:[In list.] This paragraph should not be part of the note, as it is not indented.
test/writer.icml view
@@ -945,10 +945,7 @@ <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/NumList > subParagraph > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</Content>+ <Content> Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br />@@ -1122,10 +1119,7 @@ <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/NumList > subParagraph > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>with a continuation</Content>+ <Content> with a continuation</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br />@@ -1897,13 +1891,7 @@ <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>“</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Hello,</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>”</Content>+ <Content>“Hello,”</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> said the spider. </Content>@@ -1912,55 +1900,28 @@ <Content>“</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Shelob</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> is my name.</Content>+ <Content>‘Shelob’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>”</Content>+ <Content> is my name.”</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>A</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘A’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content>, </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>B</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘B’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content>, and </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>C</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘C’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> are letters.</Content>@@ -1969,67 +1930,34 @@ <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Oak,</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘Oak,’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>elm,</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘elm,’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> and </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>beech</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘beech’</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> are names of trees. So is </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>pine.</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>’</Content>+ <Content>‘pine.’</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>‘</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>He said, </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>“</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>I want to go.</Content>+ <Content>‘He said, </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>”</Content>+ <Content>“I want to go.”</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content>’</Content>@@ -2231,13 +2159,7 @@ <Content> of money. So is $34,000. (It worked if </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>“</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>lot</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>”</Content>+ <Content>“lot”</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> is emphasized.)</Content>@@ -2818,13 +2740,7 @@ <Content>From </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>“</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Voyage dans la Lune</Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>”</Content>+ <Content>“Voyage dans la Lune”</Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle"> <Content> by Georges Melies (1902):</Content>@@ -2916,10 +2832,7 @@ </ParagraphStyleRange> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</Content>+ <Content> Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</Content> </CharacterStyleRange> </ParagraphStyleRange> </Footnote>@@ -2936,19 +2849,13 @@ </ParagraphStyleRange> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Here’s the long note. This one contains multiple blocks.</Content>+ <Content> Here’s the long note. This one contains multiple blocks.</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</Content>+ <Content> Subsequent blocks are indented to show that they belong to the footnote (as with list items).</Content> </CharacterStyleRange> </ParagraphStyleRange> <Br />@@ -2960,10 +2867,7 @@ <Br /> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</Content>+ <Content> If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</Content> </CharacterStyleRange> </ParagraphStyleRange> </Footnote>@@ -2986,10 +2890,7 @@ </ParagraphStyleRange> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>This is </Content>+ <Content> This is </Content> </CharacterStyleRange> <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/Italic"> <Content>easier</Content>@@ -3029,10 +2930,7 @@ </ParagraphStyleRange> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>In quote.</Content>+ <Content> In quote.</Content> </CharacterStyleRange> </ParagraphStyleRange> </Footnote>@@ -3052,10 +2950,7 @@ </ParagraphStyleRange> <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote > Paragraph"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content> </Content>- </CharacterStyleRange>- <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">- <Content>In list.</Content>+ <Content> In list.</Content> </CharacterStyleRange> </ParagraphStyleRange> </Footnote>
test/writer.opendocument view
@@ -7,1005 +7,1005 @@ <text:list-style style:name="L1"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L2"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L3"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L4"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L5"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L6"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L7"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L8"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L9"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L10"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L11"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L12"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L13"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L14"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L15"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L16"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L17"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L18"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L19"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L20"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L21"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L22"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="2" style:num-prefix="(" style:num-suffix=")"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-format="i" text:start-value="4" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="3" text:style-name="Numbering_20_Symbols" style:num-format="A" text:start-value="1" style:num-prefix="(" style:num-suffix=")"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L23"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="A" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-format="I" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="3" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="6" style:num-prefix="(" style:num-suffix=")"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="4" text:style-name="Numbering_20_Symbols" style:num-format="a" text:start-value="3" style:num-suffix=")"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L24"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L25"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style> <text:list-style style:name="L26"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L27"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L28"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L29"> <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.1in" fo:margin-left="1.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.75in" fo:text-indent="-0.25in" fo:margin-left="0.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.1in" fo:margin-left="1.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.0in" fo:text-indent="-0.25in" fo:margin-left="1.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.1in" fo:margin-left="2.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.25in" fo:text-indent="-0.25in" fo:margin-left="1.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.1in" fo:margin-left="2.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.5in" fo:text-indent="-0.25in" fo:margin-left="1.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.0in" fo:text-indent="-0.1in" fo:margin-left="3.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.75in" fo:text-indent="-0.25in" fo:margin-left="1.75in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.5in" fo:text-indent="-0.1in" fo:margin-left="3.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.0in" fo:text-indent="-0.25in" fo:margin-left="2.0in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="◦"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.0in" fo:text-indent="-0.1in" fo:margin-left="4.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.25in" fo:text-indent="-0.25in" fo:margin-left="2.25in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="▪"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.5in" fo:text-indent="-0.1in" fo:margin-left="4.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.5in" fo:text-indent="-0.25in" fo:margin-left="2.5in" /> </style:list-level-properties> </text:list-level-style-bullet> <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" style:num-suffix="." text:bullet-char="•"> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.0in" fo:text-indent="-0.1in" fo:margin-left="5.0in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.75in" fo:text-indent="-0.25in" fo:margin-left="2.75in" /> </style:list-level-properties> </text:list-level-style-bullet> </text:list-style> <text:list-style style:name="L30"> <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix="."> <style:list-level-properties text:list-level-position-and-space-mode="label-alignment" fo:text-align="right">- <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.1in" fo:margin-left="0.5in" />+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.25in" fo:margin-left="0.5in" /> </style:list-level-properties> </text:list-level-style-number> </text:list-style>
test/writer.texinfo view
@@ -27,6 +27,7 @@ @ifnottex ------------------------------------------------------------------------ @end ifnottex+ @menu * Headers:: * Level 1::@@ -48,6 +49,7 @@ @node Headers @chapter Headers @anchor{#headers}+ @menu * Level 2 with an embedded link:: @end menu@@ -55,6 +57,7 @@ @node Level 2 with an embedded link @section Level 2 with an @uref{/url,embedded link} @anchor{#level-2-with-an-embedded-link}+ @menu * Level 3 with emphasis:: @end menu@@ -62,6 +65,7 @@ @node Level 3 with emphasis @subsection Level 3 with @emph{emphasis} @anchor{#level-3-with-emphasis}+ @menu * Level 4:: @end menu@@ -74,6 +78,7 @@ @node Level 1 @chapter Level 1 @anchor{#level-1}+ @menu * Level 2 with emphasis:: * Level 2::@@ -82,6 +87,7 @@ @node Level 2 with emphasis @section Level 2 with @emph{emphasis} @anchor{#level-2-with-emphasis}+ @menu * Level 3:: @end menu@@ -203,6 +209,7 @@ @node Lists @chapter Lists @anchor{#lists}+ @menu * Unordered:: * Ordered::@@ -886,6 +893,7 @@ @node Links @chapter Links @anchor{#links}+ @menu * Explicit:: * Reference::
trypandoc/index.html view
@@ -45,6 +45,8 @@ }); }; $("#convert").click(newpage);+ $("#from").change(newpage);+ $("#to").change(newpage); }); </script> <style type="text/css">@@ -64,7 +66,7 @@ <div class="container"> <div class="row"> <div class="col-md-6">- <h1>Try <a href="http://pandoc.org">pandoc</a>!</h1>+ <h1>Try pandoc!</h1> </div> <div class="col-md-6"> <pre id="command"></pre>@@ -81,15 +83,16 @@ <option value="commonmark">CommonMark</option> <option value="creole">Creole</option> <option value="docbook">DocBook</option>- <option value="gfm">GitHub-Flavored Markdown</option> <option value="haddock">Haddock markup</option> <option value="html">HTML</option> <option value="latex">LaTeX</option>+ <option value="man">Man</option> <option value="markdown" selected>Markdown (pandoc)</option>- <option value="markdown_mmd">MultiMarkdown</option>+ <option value="gfm">Markdown (GitHub-flavored)</option> <option value="markdown_phpextra">Markdown (PHP Markdown Extra)</option> <option value="markdown_strict">Markdown (strict)</option> <option value="mediawiki">MediaWiki</option>+ <option value="markdown_mmd">MultiMarkdown</option> <option value="muse">Muse</option> <option value="native">Native (Pandoc AST)</option> <option value="opml">OPML</option>@@ -119,20 +122,20 @@ <option value="dokuwiki">DokuWiki</option> <option value="dzslides">DZSlides</option> <option value="dzslides">dzslides</option>- <option value="gfm">GitHub-Flavored Markdown</option> <option value="haddock">Haddock markup</option>- <option value="html4" selected>HTML 4</option>- <option value="html5">HTML 5</option>+ <option value="html4">HTML 4</option>+ <option value="html5" selected>HTML 5</option> <option value="icml">ICML</option> <option value="json">JSON</option> <option value="latex">LaTeX</option>- <option value="man">Groff man</option>- <option value="ms">Groff ms</option>+ <option value="man">Man</option>+ <option value="ms">Ms</option> <option value="markdown">Markdown (pandoc)</option>- <option value="markdown_mmd">MultiMarkdown</option>+ <option value="gfm">Markdown (GitHub-flavored)</option> <option value="markdown_phpextra">Markdown (PHP Markdown Extra)</option> <option value="markdown_strict">Markdown (strict)</option> <option value="mediawiki">MediaWiki</option>+ <option value="markdown_mmd">MultiMarkdown</option> <option value="muse">Muse</option> <option value="native">Native (Pandoc AST)</option> <option value="opendocument">OpenDocument</option>@@ -155,7 +158,7 @@ </div> <footer> <p class="version">pandoc <span id="version"></span></p>- <p>© 2013–2015 <a href="http://johnmacfarlane.net">John MacFarlane</a></p>+ <p><a href="https://pandoc.org">https://pandoc.org</a></p> </footer> </body> </html>