packages feed

pandoc 1.13.1 → 1.13.2

raw patch · 92 files changed

+2832/−596 lines, 92 filesdep ~JuicyPixelsdep ~blaze-htmldep ~blaze-markupbinary-addedPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: JuicyPixels, blaze-html, blaze-markup, filepath, highlighting-kate, network, random, texmath, text, time

API changes (from Hackage documentation)

+ Text.Pandoc: readTWiki :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc.Options: KaTeX :: String -> String -> HTMLMathMethod
+ Text.Pandoc.Readers.RST: readRSTWithWarnings :: ReaderOptions -> String -> (Pandoc, [String])
+ Text.Pandoc.Readers.TWiki: readTWiki :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc.Readers.TWiki: readTWikiWithWarnings :: ReaderOptions -> String -> (Pandoc, [String])

Files

INSTALL view
@@ -44,12 +44,7 @@      [Not sure where `$CABALDIR` is?](http://www.haskell.org/haskellwiki/Cabal-Install#The_cabal-install_configuration_file) -5.  Make sure the `$CABALDIR/share/man/man1` directory is in your `MANPATH`.-    You should now be able to access the `pandoc` man page:--        man pandoc--6.  If you want to process citations with pandoc, you will also need to+5.  If you want to process citations with pandoc, you will also need to     install a separate package, `pandoc-citeproc`.  This can be installed     using cabal: @@ -70,6 +65,20 @@        cabal install --extra-lib-dirs=/usr/local/Cellar/icu4c/51.1/lib \          --extra-include-dirs=/usr/local/Cellar/icu4c/51.1/include \          -funicode_collation text-icu pandoc-citeproc++The cabal installation procedure does not generate man pages.+To build the `pandoc` man pages, build pandoc with the+`make-pandoc-man-pages` flag, and then use the command+`make-pandoc-man-pages` from the pandoc source directory.+This will create the man pages in `man/man1` and `man/man5`.++To build the `pandoc-citeproc` man pages, go to the pandoc-citeproc+build directory, and++    cd man+    make++The man page will be created in the `man1` subdirectory.  [GHC]: http://www.haskell.org/ghc/ [Haskell platform]: http://hackage.haskell.org/platform/
Makefile view
@@ -5,6 +5,7 @@ endif setup=dist/setup/setup MANPAGES=man/man1/pandoc.1 man/man5/pandoc_markdown.5+PREFIX ?= /usr/local  quick: 	cabal configure --enable-tests --disable-optimization@@ -32,18 +33,18 @@ 	cabal copy 	cabal register -sdist: man-	# note: cabal sdist doesn't work well with preprocessors for some cabal versions-	${setup} sdist--dist: sdist+dist: man+	cabal sdist 	rm -rf "pandoc-${version}" 	tar xvzf dist/pandoc-${version}.tar.gz 	cd pandoc-${version} 	cabal configure ${CABALARGS} && cabal build && cabal test && cd .. && rm -rf "pandoc-${version}" -man: ${MANPAGES}+debpkg:+	./make_deb.sh +man: $(MANPAGES)+ osxpkg: 	./make_osx_package.sh @@ -55,6 +56,7 @@  clean: 	cabal clean-	-rm ${MANPAGES}+	-rm $(MANPAGES)+	-rm -rf $(BINDIST) $(BINDIST).tar.gz -.PHONY: deps quick full install man clean test bench haddock sdist osxpkg dist prof+.PHONY: deps quick full install man clean test bench haddock osxpkg dist bindist prof
README view
@@ -13,15 +13,16 @@ Pandoc is a [Haskell] library for converting from one markup format to another, and a command-line tool that uses this library. It can read [markdown] and (subsets of) [Textile], [reStructuredText], [HTML],-[LaTeX], [MediaWiki markup], [Haddock markup], [OPML], [Emacs-Org-mode], [DocBook], [txt2tags], [EPUB] and [Word docx]; and it can write plain text,-[markdown], [reStructuredText], [XHTML], [HTML 5], [LaTeX] (including-[beamer] slide shows), [ConTeXt], [RTF], [OPML], [DocBook],-[OpenDocument], [ODT], [Word docx], [GNU Texinfo], [MediaWiki markup],-[DokuWiki markup], [Haddock markup], [EPUB] (v2 or v3), [FictionBook2],-[Textile], [groff man] pages, [Emacs Org-Mode], [AsciiDoc], [InDesign ICML],-and [Slidy], [Slideous], [DZSlides], [reveal.js] or [S5] HTML slide shows.-It can also produce [PDF] output on systems where LaTeX is installed.+[LaTeX], [MediaWiki markup], [TWiki markup], [Haddock markup], [OPML],+[Emacs Org-mode], [DocBook], [txt2tags], [EPUB] and [Word docx]; and+it can write plain text, [markdown], [reStructuredText], [XHTML],+[HTML 5], [LaTeX] (including [beamer] slide shows), [ConTeXt], [RTF],+[OPML], [DocBook], [OpenDocument], [ODT], [Word docx], [GNU Texinfo],+[MediaWiki markup], [DokuWiki markup], [Haddock markup], [EPUB] (v2 or v3),+[FictionBook2], [Textile], [groff man] pages, [Emacs Org-Mode], [AsciiDoc],+[InDesign ICML], and [Slidy], [Slideous], [DZSlides], [reveal.js] or+[S5] HTML slide shows. It can also produce [PDF] output on systems where+LaTeX is installed.  Pandoc's enhanced version of markdown includes syntax for footnotes, tables, flexible ordered lists, definition lists, fenced code blocks,@@ -50,6 +51,15 @@      pandoc -o output.html input.txt +By default, pandoc produces a document fragment, not a standalone+document with a proper header and footer.  To produce a standalone+document, use the `-s` or `--standalone` flag:++    pandoc -s -o output.html input.txt++For more information on how standalone documents are produced, see+[Templates](#templates), below.+ Instead of a file, an absolute URI may be given.  In this case pandoc will fetch the content using HTTP: @@ -95,6 +105,11 @@      iconv -t utf-8 input.txt | pandoc | iconv -f utf-8 +Note that in some output formats (such as HTML, LaTeX, ConTeXt,+RTF, OPML, DocBook, and Texinfo), information about+the character encoding is included in the document header, which+will only be included if you use the `-s/--standalone` option.+ Creating a PDF -------------- @@ -147,8 +162,8 @@     `textile` (Textile), `rst` (reStructuredText), `html` (HTML),     `docbook` (DocBook), `t2t` (txt2tags), `docx` (docx), `epub` (EPUB),     `opml` (OPML), `org` (Emacs Org-mode), `mediawiki` (MediaWiki markup),-    `haddock` (Haddock markup), or `latex` (LaTeX).  If `+lhs` is appended-    to `markdown`, `rst`,+    `twiki` (TWiki markup), `haddock` (Haddock markup), or `latex` (LaTeX).+    If `+lhs` is appended to `markdown`, `rst`,     `latex`, or `html`, the input will be treated as literate Haskell     source: see [Literate Haskell support](#literate-haskell-support),     below. Markdown syntax extensions can be individually enabled or@@ -239,8 +254,8 @@     to curly quotes, `---` to em-dashes, `--` to en-dashes, and     `...` to ellipses. Nonbreaking spaces are inserted after certain     abbreviations, such as "Mr." (Note: This option is significant only when-    the input format is `markdown`, `markdown_strict`, or `textile`. It-    is selected automatically when the input format is `textile` or the+    the input format is `markdown`, `markdown_strict`, `textile` or `twiki`.+    It is selected automatically when the input format is `textile` or the     output format is `latex` or `context`, unless `--no-tex-ligatures`     is used.) @@ -710,6 +725,16 @@     formulas to images. The formula will be concatenated with the URL     provided. If *URL* is not specified, the Google Chart API will be used. +`--katex`[=*URL*]+:  Use [KaTeX] to display embedded TeX math in HTML output.+   The *URL* should point to the `katex.js` load script. If a *URL* is+   not provided, a link to the KaTeX CDN will be inserted.++`--katex-stylesheet=*URL*`+:  The *URL* should point to the `katex.css` stylesheet. If this option is+   not specified, a link to the KaTeX CDN will be inserted. Note that this+   option does not imply `--katex`.+ Options for wrapper scripts --------------------------- @@ -1652,7 +1677,7 @@  #### Extension: `table_captions` #### -A caption may optionally be provided with all 4 kinds of tables (as +A caption may optionally be provided with all 4 kinds of tables (as illustrated in the examples below). A caption is a paragraph beginning with the string `Table:` (or just `:`), which will be stripped off. It may appear either before or after the table.@@ -1928,6 +1953,11 @@ be combined through a *left-biased union*:  if two metadata blocks attempt to set the same field, the value from the first block will be taken. +When pandoc is used with `-t markdown` to create a markdown document,+a YAML metadata block will be produced only if the `-s/--standalone`+option is used.  All of the metadata will appear in a single block+at the beginning of the document.+ Note that YAML escaping rules must be followed. Thus, for example, if a title contains a colon, it must be quoted.  The pipe character (`|`) can be used to begin an indented block that will be interpreted@@ -2121,8 +2151,9 @@ #### Extension: `tex_math_dollars` ####  Anything between two `$` characters will be treated as TeX math.  The-opening `$` must have a character immediately to its right, while the-closing `$` must have a character immediately to its left.  Thus,+opening `$` must have a non-space character immediately to its right,+while the closing `$` must have a non-space character immediately to its+left, and must not be followed immediately by a digit.  Thus, `$20,000 and $30,000` won't parse as math.  If for some reason you need to enclose text in literal `$` characters, backslash-escape them and they won't be treated as math delimiters.@@ -2135,7 +2166,7 @@  reStructuredText   ~ It will be rendered using an interpreted text role `:math:`, as described-    [here](http://www.american.edu/econ/itex2mml/mathhack.rst).+    [here](http://docutils.sourceforge.net/docs/ref/rst/roles.html#math)  AsciiDoc   ~ It will be rendered as `latexmath:[...]`.@@ -2354,7 +2385,11 @@ There can be no space between the bracketed part and the parenthesized part. The link text can contain formatting (such as emphasis), but the title cannot. +Email addresses in inline links are not autodetected, so they have to be+prefixed with `mailto`: +    [Write me!](mailto:sam@green.eggs.ham)+ ### Reference links ###  An *explicit* reference link has two parts, the link itself and the link@@ -2365,7 +2400,9 @@ square brackets. (There can be space between the two.) The link definition consists of the bracketed label, followed by a colon and a space, followed by the URL, and optionally (after a space) a link title either in quotes or in-parentheses.+parentheses.  The label must not be parseable as a citation (assuming+the `citations` extension is enabled):  citations take precedence over+link labels.  Here are some examples: @@ -2533,9 +2570,10 @@ Note that `.bib` can generally be used with both BibTeX and BibLaTeX files, but you can use `.bibtex` to force BibTeX. -Alternatively you can use a `references` field in the document's YAML-metadata.  This should include an array of YAML-encoded references,-for example:+As an alternative to specifying a bibliography file, you can include+the citation data directly in the `references` field of the+document's YAML metadata. The field should contain an array of+YAML-encoded references, for example:      ---     references:@@ -2993,7 +3031,7 @@     - scheme: DOI       text: doi:10.234234.234/33     publisher:  My Press-    rights:  (c) 2007 John Smith, CC BY-NC+    rights: © 2007 John Smith, CC BY-NC     ...  The following fields are recognized:@@ -3157,6 +3195,7 @@ [Textile]: http://redcloth.org/textile [MediaWiki markup]: http://www.mediawiki.org/wiki/Help:Formatting [DokuWiki markup]: https://www.dokuwiki.org/dokuwiki+[TWiki markup]: http://twiki.org/cgi-bin/view/TWiki/TextFormattingRules [Haddock markup]: http://www.haskell.org/haddock/doc/html/ch03s08.html [groff man]: http://developer.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man7/groff_man.7.html [Haskell]:  http://www.haskell.org/@@ -3177,3 +3216,4 @@ [txt2tags]: http://txt2tags.org/ [EPUB]: http://idpf.org/epub [EPUBspine]: http://www.idpf.org/epub/301/spec/epub-publications.html#sec-spine-elem+[KaTeX]: https://github.com/Khan/KaTeX
changelog view
@@ -1,3 +1,344 @@+pandoc (1.13.2)++  * TWiki Reader: add new new twiki reader (API chaneg, Alexander Sulfrian).++  * Markdown reader:++    + Better handling of paragraph in div (#1591).+      Previously text that ended a div would be parsed as Plain+      unless there was a blank line before the closing div tag.+    + Don't treat a citation as a reference link label (#1763).+    + Fix autolinks with following punctuation (#1811).+      The price of this is that autolinked bare URIs can no longer+      contain `>` characters, but this is not a big issue.+    + Fix `Ext_lists_without_preceding_blankline` bug (#1636, Artyom).+    + Allow `startnum` to work without `fancy_lists`. Formerly+      `pandoc -f markdown-fancy_lists+startnum` did not work properly.++  * RST reader (all Daniel Bergey):++    + Parse quoted literal blocks (#65).  RST quoted literal blocks are+      the same as indented literal blocks (which pandoc already supports)+      except that the quote character is preserved in each line.+    + Parse RST class directives. The class directive accepts one or more+      class names, and creates a Div value with those classes.  If the+      directive has an indented body, the body is parsed as the children of+      the Div.  If not, the first block folowing the directive is made a+      child of the Div. This differs from the behavior of rst2xml, which+      does not create a Div element.  Instead, the specified classes are+      applied to each child of the directive.  However, most Pandoc Block+      constructors to not take an Attr argument, so we can't duplicate this+      behavior.+    + Warn about skipped directives.+    + Literal role now produces Code. Code role should have "code" class.+    + Improved support for custom roles++        - Added `sourceCode` to classes for `:code:` role, and anything+          inheriting from it.+        - Add the name of the custom role to classes if the Inline+          constructor supports Attr.+        - If the custom role directive does not specify a parent role,+          inherit from the `:span:` role.++      This differs somewhat from the `rst2xml.py` behavior.  If a custom+      role inherits from another custom role, Pandoc will attach both+      roles' names as classes.  `rst2xml.py` will only use the class of+      the directly invoked role (though in the case of inheriting from a+      `:code:` role with a `:language:` defined, it will also provide the+      inherited language as a class).+    + Warn about ignored fields in role directives.++  * LaTeX reader:++    + Parse label after caption into a span instead of+     inserting an additional paragraph of bracketed text (#1747).+    + Parse math environments as inline when possible (#1821).+    + Better handling of `\noindent` and `\greektext` (#1783).+    + Handle `\texorpdfstring` more gracefully.+    + Handle `\cref` and `\sep` (Wikiwide).+    + Support `\smartcite` and `\Smartcite` from biblatex.++  * HTML reader:++    + Retain display type of MathML output (#1719, Matthew Pickering).+    + Recognise `<br>` tags inside `<pre>` blocks (#1620, Matthew Pickering).+    + Make `embed` tag either block or inline (#1756).++  * DocBook reader:++    + Handle `keycombo`, `keycap` (#1815).+    + Get string content in inner tags for literal elements (#1816).+    + Handle `menuchoice` elements better, with a `>` between (#1817).+    + Include `id` on section headers (#1818).+    + Document/test "type" as implemented (Brian O'Sullivan).+    + Add support for calloutlist and callout (Brian O'Sullivan).+      We treat a calloutlist as a bulleted list. This works well in practice.+    + Add support for `classname` (Bryan O'Sullivan).++  * Docx reader:++    + Fix window path for image lookup (Jesse Rosenthal).+      Don't use os-sensitive "combine", since we always want the paths in our+      zip-archive to use forward-slashes.+    + Single-item headers in ordered lists are headers (Jesse Rosenthal).+      When users number their headers, Word understands that as a single item+      enumerated list. We make the assumption that such a list is, in fact,+      a header.+    + Rewrite rewriteLink to work with new headers (Jesse Rosenthal).+      There could be new top-level headers after making lists, so we have to+      rewrite links after that.+    + Use polyglot header list (Jesse Rosenthal).+      We're just keeping a list of header formats that different languages+      use as their default styles. At the moment, we have English, German,+      Danish, and French. We can continue to add to this.+      This is simpler than parsing the styles file, and perhaps less+      error-prone, since there seems to be some variations, even within a+      language, of how a style file will define headers.+    + Remove header class properly in other langs (Jesse Rosenthal).+      When we encounter one of the polyglot header styles, we want to remove+      that from the par styles after we convert to a header. To do that, we+      have to keep track of the style name, and remove it appropriately.+    + Account for external link URLs with anchors. Previously, if a URL+      had an anchor, the reader would incorrectly identify it as an+      internal link and return only the anchor as URL. (Caleb McDaniel)+    + Fix for Issue #1692 (i18n styles) (Nikolay Yakimov).++  * Org reader:++    + Added state changing blanklines (Jesse Rosenthal).+      This allows us to emphasize at the beginning of a new paragraph (or, in+      general, after blank lines).+    + Fixed bug with bulleted lists:++        - a+        - b+        * c++      was being parsed as a list, even though an unindented `*`+      should make a heading.  See+      <http://orgmode.org/manual/Plain-lists.html#fn-1>.+    + Org reader: absolute, relative paths in link (#1741, Albert+      Krewinkel). The org reader was too restrictive when parsing links;+      some relative links and links to files given as absolute paths+      were not recognized correctly.+    + Org reader:  allow empty links (jgm/gitit#471, Albert Krewinkel).+      This is important for use in gitit, which uses empty links+      for wikilinks.+    + Respect indent when parsing Org bullet lists (#1650, Timothy+      Humphries).  Fixes issue with top-level bullet list parsing.+    + Fix indent issue for definition lists (Timothy Humphries,+      see #1650, #1698, #1680).+    + Parse multi-inline terms correctly in definition list (#1649,+      Matthew Pickering).+    + Fix rules for emphasis recognition (Albert Krewinkel).+      Things like `/hello,/` or `/hi'/` were falsy recognized as emphasised+      strings.  This is wrong, as `,` and `'` are forbidden border chars and+      may not occur on the inner border of emphasized text.+    + Drop COMMENT document trees (Albert Krewinkel).+      Document trees under a header starting with the word `COMMENT` are+      comment trees and should not be exported.  Those trees are dropped+      silently (#1678).+    + Properly handle links to `file:target` (Albert Krewinkel).+      Org links like `[[file:target][title]]` were not handled correctly,+      parsing the link target verbatim.  The org reader is changed such that+      the leading `file:` is dropped from the link target (see #756, #1812).+    + Parse LaTeX-style MathML entities (#1657, Albert Krewinkel).+      Org supports special symbols which can be included using LaTeX syntax,+      but are actually MathML entities.  Examples for this are+      `\nbsp` (non-breaking space), `\Aacute` (the letter A with accent acute)+      or `\copy` (the copyright sign ©)++  * EPUB reader:++    + URI handling improvements. Now we outsource most of the work to+      `fetchItem'`. Also, do not include queries in file extensions (#1671).++  * LaTeX writer:++    + Use `\texorpdfstring` for section captions when needed (Vaclav Zeman).+    + Handle consecutive linebreaks (#1733).+    + Protect graphics in headers (Jesse Rosenthal).+      Graphics in `\section`/`\subsection` etc titles need to be `\protect`ed.+    + Put `~` before header in list item text (Jesse Rosenthal).+      Because of the built-in line skip, LaTeX can't handle a section header+      as the first element in a list item.+    + Avoid using reserved characters as `\lstinline` delimiters (#1595).+    + Better handling of display math in simple tables (#1754).+      We convert display math to inline math in simple tables,+      since LaTeX can't deal with display math in simple tables.+    + Escape spaces in code (#1694, Bjorn Buckwalter).++  * MediaWiki writer:++    + Fixed links with URL = text. Previously these were rendered as bare+      words, even if the URL was not an absolute URL (#1825).++  * ICML writer:++    + Don't force all citations into footnotes.++  * RTF writer:++    + Add blankline at end of output (#1732, Matthew Pickering).++  * RST writer:++    + Ensure blank line after figure.+    + Avoid exces whitespace after last list item (#1777).+    + Wrap line blocks with spaces before continuations (#1656).+    + Fixed double-rendering of footnotes in RST tables (#1769).++  * DokuWiki writer:++    + Better handling of block quotes. This change ensures that+      multiple paragraph blockquotes are rendered using native `>`+      rather than as HTML (#1738).+    + Fix external images (#1739). Preface relative links with ":",+      absolute URIs without. (Timothy Humphries)++  * HTML writer:++    + Use protocol-relative URL for mathjax.+    + Put newline btw img and caption paragraph.+    + MathML now outputted with tex annotation (#1635, Matthew Pickering).+    + Add support for KaTeX HTML math (#1626, Matthew Pickering).+      This adds `KaTeX` to `HTMLMathMethod` (API change).+    + Don't double render when `email-obfuscation=none` (#1625, Matthew+      Pickering).+    + Make header attributes work outside top level (#1711).+      Previously they only appeared on top level header elements.+      Now they work e.g. in blockquotes.++  * ODT writer:++    + Correctly handle images without extensions (#1729).+    + Strip querystring in ODT write (#1682, Todd Sifleet).++  * FB2 writer:++    + Add newline to output.++  * EPUB writer:++    + Don't add `sourceURL` to absolute URIs (#1669).+    + Don't use unsupported `opf:title-type` for epub2.+    + Include "landmarks" section in nav document for epub3 (#1757).+    + Removed playOrder from navpoint elements in ncx file (#1760).+      These aren't required, and they make manual modification of epubs+      difficult.+    + Extract title even from structured title.+    + Don't include nav node in spine unless `--toc` was requested.+      Previously we included it in the spine with `linear="no"`, leading+      to odd results in some readers (#1593).+    + Fixed absolute URI detection (#1672).+    + Correctly resolve relative URIs (#1671).+    + Use regular page template for `nav.xhtml`, including doctype (#1759).++  * Docx writer:++    + Put docx table captions above tables (#1641, Nikolay Yakimov).+    + Get the page width from the reference docx file, and use+      it to scale images that are too large to fit (Grégory Bataille).+    + Partial fix for #1607 (Nikolay Yakimov). International heading styles+      are inferred based on `<w:name val="heading #">` fallback, if there+      are no en-US "Heading#" styles+    + Look in user data dir for archive `reference.docx`.+    + Renumber header and footer relationships to avoid collisions (Jesse+      Rosenthal). We previously took the old relationship names of the+      headers and footer in secptr. That led to collisions. We now make+      a map of availabl names in the relationships file, and then rename+     in secptr.++  * ConTeXt writer:++    + Add function toLabel (Mark Szepieniec).+      This function can be used to sanitize reference labels so that+      they do not contain any of the illegal characters \#[]",{}%()|= .+      Currently only Links have their labels sanitized, because they+      are the only Elements that use passed labels.++  * `Text.Pandoc.Shared`:++    + Moved import of `toChunks` outside of CPP conditional (#1590).+    + Fix `inDirectory` to reset to the original directory in case+      an exception occurs (Freiric Barral).++  * Templates:++    + LaTeX template: load polyglossia before bibtex (jgm/pandoc-templates#70).+      Thanks to bluebirch.+    + LaTeX template: Added `\VerbatimFootnotes` if there is verbatim in notes+      (#1616).+    + LaTeX template:  Add shorthands=off to babel options (#1648).+    + EPUB, EPUB3 templates: Added `id="cover"` to body of cover page.+      This aids styling, making it possible for example to set 0 margins+      on the title page (#1758).+    + EPUB, EPUB3 templates:  Handle structured metadata on titlepage.+      Previously we just expected 'title', 'subtitle', 'author', 'date'.+      Now we still support those, but also support the format recommended+      for epub metadata in the pandoc README:++        ---+        title:+        - type: main+          text: My Book+        - type: subtitle+          text: An investigation of metadata+        creator:+        - role: author+          text: John Smith+        - role: editor+          text: Sarah Jones+        identifier:+        - scheme: DOI+          text: doi:10.234234.234/33+        publisher:  My Press+        rights:  (c) 2007 John Smith, CC BY-NC+        ...++  * `Text.Pandoc.Templates.getDefaultTemplate`:+    don't fail when called with "fb2" (#1660).++  * `Text.Pandoc.Parsing`:++    + Fixed `inlineMath` so it handles `\text{..}` containing `$`.+      For example: `$x = \text{the $n$th root of $y$}` (#1677).+    + Change `parseFromString` to fail if not all input is consumed.+      (Matthew Pickering)+    + Moved `addWarning` from Markdown reader to `Parsing`, so it can be+      used by more readers (API change, Daniel Bergey).++  * `Text.Pandoc.Pretty`:++    +  Improve performance of `realLength` (Matthew Pickering).+    +  Make CR + BLANKLINE = BLANKLINE. This fixes an extra blank line we+       were getting at the end of markdown fragments (as well as rst, org,+       etc.) (#1705).++  * `Text.Pandoc.MIME`:++    + Add mime type for WebVTT (Jason Ronallo).+    + Changed mime type for `otf` to `application/vnd.ms-opentype` (#1761).+      This is needed for epub3 validation.++  * `Text.Pandoc.MediaBag`:++    + Fix Windows specific path problems (#1597).++  * `Text.Pandoc.Shared`:++    + Make `collapseFilePath` OS-agnostic (Matthew Pickering).++  * Link the test suite using `-threaded`.+    This allows the test suite to be run using `+RTS -N`.++  * Added `network` dependency under `network-uri` flag in test section.++  * Give better error messages when someone tries to convert from+    pdf, doc, odt (#1683).++  * Added `track` to list of tags treated by `--self-contained` (#1664).+ pandoc (1.13.1)    * Fixed `--self-contained` with Windows paths (#1558).
data/templates/default.epub view
@@ -15,17 +15,32 @@   <link rel="stylesheet" type="text/css" href="$css$" /> $endfor$ </head>-<body>+<body$if(coverpage)$ id="cover"$endif$> $if(titlepage)$+$for(title)$+$if(title.text)$+  <h1 class="$title.type$">$title.text$</h1>+$else$   <h1 class="title">$title$</h1>+$endif$+$endfor$ $if(subtitle)$   <h1 class="subtitle">$subtitle$</h1> $endif$ $for(author)$   <h2 class="author">$author$</h2> $endfor$+$for(creator)$+  <h2 class="$creator.type$">$creator.text$</h2>+$endfor$+$if(publisher)$+  <p class="publisher">$publisher$</p>+$endif$ $if(date)$-  <h3 class="date">$date$</h3>+  <p class="date">$date$</p>+$endif$+$if(rights)$+  <p class="rights">$rights$</p> $endif$ $else$ $body$
data/templates/default.epub3 view
@@ -19,20 +19,35 @@   <link rel="stylesheet" type="text/css" href="$css$" /> $endfor$ </head>-<body>+<body$if(coverpage)$ id="cover"$endif$> $if(titlepage)$-  <section epub:type="titlepage">-    <h1 class="title">$title$</h1>+<section epub:type="titlepage">+$for(title)$+$if(title.type)$+  <h1 class="$title.type$">$title.text$</h1>+$else$+  <h1 class="title">$title$</h1>+$endif$+$endfor$ $if(subtitle)$-    <h1 class="subtitle">$subtitle$</h1>+  <h1 class="subtitle">$subtitle$</h1> $endif$ $for(author)$-    <h2 class="author">$author$</h2>+  <h2 class="author">$author$</h2> $endfor$+$for(creator)$+  <h2 class="$creator.type$">$creator.text$</h2>+$endfor$+$if(publisher)$+  <p class="publisher">$publisher$</p>+$endif$ $if(date)$-    <h3 class="date">$date$</h3>+  <p class="date">$date$</p> $endif$-  </section>+$if(rights)$+  <p class="rights">$rights$</p>+$endif$+</section> $else$ $body$ $endif$
data/templates/default.latex view
@@ -49,6 +49,14 @@ $if(geometry)$ \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} $endif$+$if(lang)$+\ifxetex+  \usepackage{polyglossia}+  \setmainlanguage{$mainlang$}+\else+  \usepackage[shorthands=off,$lang$]{babel}+\fi+$endif$ $if(natbib)$ \usepackage{natbib} \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}@@ -70,6 +78,7 @@ $endif$ $if(verbatim-in-note)$ \usepackage{fancyvrb}+\VerbatimFootnotes $endif$ $if(tables)$ \usepackage{longtable,booktabs}@@ -121,14 +130,6 @@ $endif$ $if(verbatim-in-note)$ \VerbatimFootnotes % allows verbatim text in footnotes-$endif$-$if(lang)$-\ifxetex-  \usepackage{polyglossia}-  \setmainlanguage{$mainlang$}-\else-  \usepackage[$lang$]{babel}-\fi $endif$  $if(title)$
+ dist/build/Text/Pandoc/Data.hs view
@@ -0,0 +1,8 @@+# 1 "src/Text/Pandoc/Data.hsb"+{-# LANGUAGE OverloadedStrings #-}+-- to be processed using hsb2hs+module Text.Pandoc.Data (dataFiles) where+import qualified Data.ByteString as B++dataFiles :: [(FilePath, B.ByteString)]+dataFiles = [("epub.css","/* This defines styles and classes used in the book */\nbody { margin: 5%; text-align: justify; font-size: medium; }\ncode { font-family: monospace; }\nh1 { text-align: left; }\nh2 { text-align: left; }\nh3 { text-align: left; }\nh4 { text-align: left; }\nh5 { text-align: left; }\nh6 { text-align: left; }\nh1.title { }\nh2.author { }\nh3.date { }\nol.toc { padding: 0; margin-left: 1em; }\nol.toc li { list-style-type: none; margin: 0; padding: 0; }\n"),("LaTeXMathML.js","/*\nLaTeXMathML.js from http://math.etsu.edu/LaTeXMathML/\nAdapted by Jeff Knisely and Douglas Woodall from ASCIIMathML.js v. 1.4.7,\n(c) 2005 Peter Jipsen http://www.chapman.edu/~jipsen.\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\nvar checkForMathML=true;var notifyIfNoMathML=true;var alertIfNoMathML=false;var mathcolor=\"\";var mathfontfamily=\"\";var showasciiformulaonhover=true;var isIE=document.createElementNS==null;if(document.getElementById==null)\nalert(\"This webpage requires a recent browser such as \\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer\")\nfunction AMcreateElementXHTML(t){if(isIE)return document.createElement(t);else return document.createElementNS(\"http://www.w3.org/1999/xhtml\",t);}\nfunction AMnoMathMLNote(){var nd=AMcreateElementXHTML(\"h3\");nd.setAttribute(\"align\",\"center\")\nnd.appendChild(AMcreateElementXHTML(\"p\"));nd.appendChild(document.createTextNode(\"To view the \"));var an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"LaTeXMathML\"));an.setAttribute(\"href\",\"http://www.maths.nott.ac.uk/personal/drw/lm.html\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" notation use Internet Explorer 6+\"));an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"MathPlayer\"));an.setAttribute(\"href\",\"http://www.dessci.com/en/products/mathplayer/download.htm\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" or Netscape/Mozilla/Firefox\"));nd.appendChild(AMcreateElementXHTML(\"p\"));return nd;}\nfunction AMisMathMLavailable(){if(navigator.appName.slice(0,8)==\"Netscape\")\nif(navigator.appVersion.slice(0,1)>=\"5\")return null;else return AMnoMathMLNote();else if(navigator.appName.slice(0,9)==\"Microsoft\")\ntry{var ActiveX=new ActiveXObject(\"MathPlayer.Factory.1\");return null;}catch(e){return AMnoMathMLNote();}\nelse return AMnoMathMLNote();}\nvar AMcal=[0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];var AMfrk=[0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];var AMbbb=[0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,TEXT=9,BIG=10,LONG=11,STRETCHY=12,MATRIX=13;var AMsqrt={input:\"\\\\sqrt\",tag:\"msqrt\",output:\"sqrt\",ttype:UNARY},AMroot={input:\"\\\\root\",tag:\"mroot\",output:\"root\",ttype:BINARY},AMfrac={input:\"\\\\frac\",tag:\"mfrac\",output:\"/\",ttype:BINARY},AMover={input:\"\\\\stackrel\",tag:\"mover\",output:\"stackrel\",ttype:BINARY},AMatop={input:\"\\\\atop\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMchoose={input:\"\\\\choose\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMsub={input:\"_\",tag:\"msub\",output:\"_\",ttype:INFIX},AMsup={input:\"^\",tag:\"msup\",output:\"^\",ttype:INFIX},AMtext={input:\"\\\\mathrm\",tag:\"mtext\",output:\"text\",ttype:TEXT},AMmbox={input:\"\\\\mbox\",tag:\"mtext\",output:\"mbox\",ttype:TEXT};var AMsymbols=[{input:\"\\\\alpha\",tag:\"mi\",output:\"\\u03B1\",ttype:CONST},{input:\"\\\\beta\",tag:\"mi\",output:\"\\u03B2\",ttype:CONST},{input:\"\\\\gamma\",tag:\"mi\",output:\"\\u03B3\",ttype:CONST},{input:\"\\\\delta\",tag:\"mi\",output:\"\\u03B4\",ttype:CONST},{input:\"\\\\epsilon\",tag:\"mi\",output:\"\\u03B5\",ttype:CONST},{input:\"\\\\varepsilon\",tag:\"mi\",output:\"\\u025B\",ttype:CONST},{input:\"\\\\zeta\",tag:\"mi\",output:\"\\u03B6\",ttype:CONST},{input:\"\\\\eta\",tag:\"mi\",output:\"\\u03B7\",ttype:CONST},{input:\"\\\\theta\",tag:\"mi\",output:\"\\u03B8\",ttype:CONST},{input:\"\\\\vartheta\",tag:\"mi\",output:\"\\u03D1\",ttype:CONST},{input:\"\\\\iota\",tag:\"mi\",output:\"\\u03B9\",ttype:CONST},{input:\"\\\\kappa\",tag:\"mi\",output:\"\\u03BA\",ttype:CONST},{input:\"\\\\lambda\",tag:\"mi\",output:\"\\u03BB\",ttype:CONST},{input:\"\\\\mu\",tag:\"mi\",output:\"\\u03BC\",ttype:CONST},{input:\"\\\\nu\",tag:\"mi\",output:\"\\u03BD\",ttype:CONST},{input:\"\\\\xi\",tag:\"mi\",output:\"\\u03BE\",ttype:CONST},{input:\"\\\\pi\",tag:\"mi\",output:\"\\u03C0\",ttype:CONST},{input:\"\\\\varpi\",tag:\"mi\",output:\"\\u03D6\",ttype:CONST},{input:\"\\\\rho\",tag:\"mi\",output:\"\\u03C1\",ttype:CONST},{input:\"\\\\varrho\",tag:\"mi\",output:\"\\u03F1\",ttype:CONST},{input:\"\\\\varsigma\",tag:\"mi\",output:\"\\u03C2\",ttype:CONST},{input:\"\\\\sigma\",tag:\"mi\",output:\"\\u03C3\",ttype:CONST},{input:\"\\\\tau\",tag:\"mi\",output:\"\\u03C4\",ttype:CONST},{input:\"\\\\upsilon\",tag:\"mi\",output:\"\\u03C5\",ttype:CONST},{input:\"\\\\phi\",tag:\"mi\",output:\"\\u03C6\",ttype:CONST},{input:\"\\\\varphi\",tag:\"mi\",output:\"\\u03D5\",ttype:CONST},{input:\"\\\\chi\",tag:\"mi\",output:\"\\u03C7\",ttype:CONST},{input:\"\\\\psi\",tag:\"mi\",output:\"\\u03C8\",ttype:CONST},{input:\"\\\\omega\",tag:\"mi\",output:\"\\u03C9\",ttype:CONST},{input:\"\\\\Gamma\",tag:\"mo\",output:\"\\u0393\",ttype:CONST},{input:\"\\\\Delta\",tag:\"mo\",output:\"\\u0394\",ttype:CONST},{input:\"\\\\Theta\",tag:\"mo\",output:\"\\u0398\",ttype:CONST},{input:\"\\\\Lambda\",tag:\"mo\",output:\"\\u039B\",ttype:CONST},{input:\"\\\\Xi\",tag:\"mo\",output:\"\\u039E\",ttype:CONST},{input:\"\\\\Pi\",tag:\"mo\",output:\"\\u03A0\",ttype:CONST},{input:\"\\\\Sigma\",tag:\"mo\",output:\"\\u03A3\",ttype:CONST},{input:\"\\\\Upsilon\",tag:\"mo\",output:\"\\u03A5\",ttype:CONST},{input:\"\\\\Phi\",tag:\"mo\",output:\"\\u03A6\",ttype:CONST},{input:\"\\\\Psi\",tag:\"mo\",output:\"\\u03A8\",ttype:CONST},{input:\"\\\\Omega\",tag:\"mo\",output:\"\\u03A9\",ttype:CONST},{input:\"\\\\frac12\",tag:\"mo\",output:\"\\u00BD\",ttype:CONST},{input:\"\\\\frac14\",tag:\"mo\",output:\"\\u00BC\",ttype:CONST},{input:\"\\\\frac34\",tag:\"mo\",output:\"\\u00BE\",ttype:CONST},{input:\"\\\\frac13\",tag:\"mo\",output:\"\\u2153\",ttype:CONST},{input:\"\\\\frac23\",tag:\"mo\",output:\"\\u2154\",ttype:CONST},{input:\"\\\\frac15\",tag:\"mo\",output:\"\\u2155\",ttype:CONST},{input:\"\\\\frac25\",tag:\"mo\",output:\"\\u2156\",ttype:CONST},{input:\"\\\\frac35\",tag:\"mo\",output:\"\\u2157\",ttype:CONST},{input:\"\\\\frac45\",tag:\"mo\",output:\"\\u2158\",ttype:CONST},{input:\"\\\\frac16\",tag:\"mo\",output:\"\\u2159\",ttype:CONST},{input:\"\\\\frac56\",tag:\"mo\",output:\"\\u215A\",ttype:CONST},{input:\"\\\\frac18\",tag:\"mo\",output:\"\\u215B\",ttype:CONST},{input:\"\\\\frac38\",tag:\"mo\",output:\"\\u215C\",ttype:CONST},{input:\"\\\\frac58\",tag:\"mo\",output:\"\\u215D\",ttype:CONST},{input:\"\\\\frac78\",tag:\"mo\",output:\"\\u215E\",ttype:CONST},{input:\"\\\\pm\",tag:\"mo\",output:\"\\u00B1\",ttype:CONST},{input:\"\\\\mp\",tag:\"mo\",output:\"\\u2213\",ttype:CONST},{input:\"\\\\triangleleft\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\triangleright\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\cdot\",tag:\"mo\",output:\"\\u22C5\",ttype:CONST},{input:\"\\\\star\",tag:\"mo\",output:\"\\u22C6\",ttype:CONST},{input:\"\\\\ast\",tag:\"mo\",output:\"\\u002A\",ttype:CONST},{input:\"\\\\times\",tag:\"mo\",output:\"\\u00D7\",ttype:CONST},{input:\"\\\\div\",tag:\"mo\",output:\"\\u00F7\",ttype:CONST},{input:\"\\\\circ\",tag:\"mo\",output:\"\\u2218\",ttype:CONST},{input:\"\\\\bullet\",tag:\"mo\",output:\"\\u2022\",ttype:CONST},{input:\"\\\\oplus\",tag:\"mo\",output:\"\\u2295\",ttype:CONST},{input:\"\\\\ominus\",tag:\"mo\",output:\"\\u2296\",ttype:CONST},{input:\"\\\\otimes\",tag:\"mo\",output:\"\\u2297\",ttype:CONST},{input:\"\\\\bigcirc\",tag:\"mo\",output:\"\\u25CB\",ttype:CONST},{input:\"\\\\oslash\",tag:\"mo\",output:\"\\u2298\",ttype:CONST},{input:\"\\\\odot\",tag:\"mo\",output:\"\\u2299\",ttype:CONST},{input:\"\\\\land\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\wedge\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\lor\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\vee\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\cap\",tag:\"mo\",output:\"\\u2229\",ttype:CONST},{input:\"\\\\cup\",tag:\"mo\",output:\"\\u222A\",ttype:CONST},{input:\"\\\\sqcap\",tag:\"mo\",output:\"\\u2293\",ttype:CONST},{input:\"\\\\sqcup\",tag:\"mo\",output:\"\\u2294\",ttype:CONST},{input:\"\\\\uplus\",tag:\"mo\",output:\"\\u228E\",ttype:CONST},{input:\"\\\\amalg\",tag:\"mo\",output:\"\\u2210\",ttype:CONST},{input:\"\\\\bigtriangleup\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\bigtriangledown\",tag:\"mo\",output:\"\\u25BD\",ttype:CONST},{input:\"\\\\dag\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\dagger\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\ddag\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\ddagger\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\lhd\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\rhd\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\unlhd\",tag:\"mo\",output:\"\\u22B4\",ttype:CONST},{input:\"\\\\unrhd\",tag:\"mo\",output:\"\\u22B5\",ttype:CONST},{input:\"\\\\sum\",tag:\"mo\",output:\"\\u2211\",ttype:UNDEROVER},{input:\"\\\\prod\",tag:\"mo\",output:\"\\u220F\",ttype:UNDEROVER},{input:\"\\\\bigcap\",tag:\"mo\",output:\"\\u22C2\",ttype:UNDEROVER},{input:\"\\\\bigcup\",tag:\"mo\",output:\"\\u22C3\",ttype:UNDEROVER},{input:\"\\\\bigwedge\",tag:\"mo\",output:\"\\u22C0\",ttype:UNDEROVER},{input:\"\\\\bigvee\",tag:\"mo\",output:\"\\u22C1\",ttype:UNDEROVER},{input:\"\\\\bigsqcap\",tag:\"mo\",output:\"\\u2A05\",ttype:UNDEROVER},{input:\"\\\\bigsqcup\",tag:\"mo\",output:\"\\u2A06\",ttype:UNDEROVER},{input:\"\\\\coprod\",tag:\"mo\",output:\"\\u2210\",ttype:UNDEROVER},{input:\"\\\\bigoplus\",tag:\"mo\",output:\"\\u2A01\",ttype:UNDEROVER},{input:\"\\\\bigotimes\",tag:\"mo\",output:\"\\u2A02\",ttype:UNDEROVER},{input:\"\\\\bigodot\",tag:\"mo\",output:\"\\u2A00\",ttype:UNDEROVER},{input:\"\\\\biguplus\",tag:\"mo\",output:\"\\u2A04\",ttype:UNDEROVER},{input:\"\\\\int\",tag:\"mo\",output:\"\\u222B\",ttype:CONST},{input:\"\\\\oint\",tag:\"mo\",output:\"\\u222E\",ttype:CONST},{input:\":=\",tag:\"mo\",output:\":=\",ttype:CONST},{input:\"\\\\lt\",tag:\"mo\",output:\"<\",ttype:CONST},{input:\"\\\\gt\",tag:\"mo\",output:\">\",ttype:CONST},{input:\"\\\\ne\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\neq\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\le\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leq\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leqslant\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\ge\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geq\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geqslant\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\equiv\",tag:\"mo\",output:\"\\u2261\",ttype:CONST},{input:\"\\\\ll\",tag:\"mo\",output:\"\\u226A\",ttype:CONST},{input:\"\\\\gg\",tag:\"mo\",output:\"\\u226B\",ttype:CONST},{input:\"\\\\doteq\",tag:\"mo\",output:\"\\u2250\",ttype:CONST},{input:\"\\\\prec\",tag:\"mo\",output:\"\\u227A\",ttype:CONST},{input:\"\\\\succ\",tag:\"mo\",output:\"\\u227B\",ttype:CONST},{input:\"\\\\preceq\",tag:\"mo\",output:\"\\u227C\",ttype:CONST},{input:\"\\\\succeq\",tag:\"mo\",output:\"\\u227D\",ttype:CONST},{input:\"\\\\subset\",tag:\"mo\",output:\"\\u2282\",ttype:CONST},{input:\"\\\\supset\",tag:\"mo\",output:\"\\u2283\",ttype:CONST},{input:\"\\\\subseteq\",tag:\"mo\",output:\"\\u2286\",ttype:CONST},{input:\"\\\\supseteq\",tag:\"mo\",output:\"\\u2287\",ttype:CONST},{input:\"\\\\sqsubset\",tag:\"mo\",output:\"\\u228F\",ttype:CONST},{input:\"\\\\sqsupset\",tag:\"mo\",output:\"\\u2290\",ttype:CONST},{input:\"\\\\sqsubseteq\",tag:\"mo\",output:\"\\u2291\",ttype:CONST},{input:\"\\\\sqsupseteq\",tag:\"mo\",output:\"\\u2292\",ttype:CONST},{input:\"\\\\sim\",tag:\"mo\",output:\"\\u223C\",ttype:CONST},{input:\"\\\\simeq\",tag:\"mo\",output:\"\\u2243\",ttype:CONST},{input:\"\\\\approx\",tag:\"mo\",output:\"\\u2248\",ttype:CONST},{input:\"\\\\cong\",tag:\"mo\",output:\"\\u2245\",ttype:CONST},{input:\"\\\\Join\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\bowtie\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\in\",tag:\"mo\",output:\"\\u2208\",ttype:CONST},{input:\"\\\\ni\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\owns\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\propto\",tag:\"mo\",output:\"\\u221D\",ttype:CONST},{input:\"\\\\vdash\",tag:\"mo\",output:\"\\u22A2\",ttype:CONST},{input:\"\\\\dashv\",tag:\"mo\",output:\"\\u22A3\",ttype:CONST},{input:\"\\\\models\",tag:\"mo\",output:\"\\u22A8\",ttype:CONST},{input:\"\\\\perp\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\smile\",tag:\"mo\",output:\"\\u2323\",ttype:CONST},{input:\"\\\\frown\",tag:\"mo\",output:\"\\u2322\",ttype:CONST},{input:\"\\\\asymp\",tag:\"mo\",output:\"\\u224D\",ttype:CONST},{input:\"\\\\notin\",tag:\"mo\",output:\"\\u2209\",ttype:CONST},{input:\"\\\\begin{eqnarray}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\begin{array}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\\\\\\",output:\"}&{\",ttype:DEFINITION},{input:\"\\\\end{eqnarray}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\end{array}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\big\",tag:\"mo\",output:\"X\",atval:\"1.2\",ieval:\"2.2\",ttype:BIG},{input:\"\\\\Big\",tag:\"mo\",output:\"X\",atval:\"1.6\",ieval:\"2.6\",ttype:BIG},{input:\"\\\\bigg\",tag:\"mo\",output:\"X\",atval:\"2.2\",ieval:\"3.2\",ttype:BIG},{input:\"\\\\Bigg\",tag:\"mo\",output:\"X\",atval:\"2.9\",ieval:\"3.9\",ttype:BIG},{input:\"\\\\left\",tag:\"mo\",output:\"X\",ttype:LEFTBRACKET},{input:\"\\\\right\",tag:\"mo\",output:\"X\",ttype:RIGHTBRACKET},{input:\"{\",output:\"{\",ttype:LEFTBRACKET,invisible:true},{input:\"}\",output:\"}\",ttype:RIGHTBRACKET,invisible:true},{input:\"(\",tag:\"mo\",output:\"(\",atval:\"1\",ttype:STRETCHY},{input:\"[\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrack\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\{\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrace\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\langle\",tag:\"mo\",output:\"\\u2329\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lfloor\",tag:\"mo\",output:\"\\u230A\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lceil\",tag:\"mo\",output:\"\\u2308\",atval:\"1\",ttype:STRETCHY},{input:\")\",tag:\"mo\",output:\")\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"]\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrack\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\}\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrace\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rangle\",tag:\"mo\",output:\"\\u232A\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rfloor\",tag:\"mo\",output:\"\\u230B\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rceil\",tag:\"mo\",output:\"\\u2309\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"|\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\|\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\vert\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\Vert\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\mid\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\parallel\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"/\",tag:\"mo\",output:\"/\",atval:\"1.01\",ttype:STRETCHY},{input:\"\\\\backslash\",tag:\"mo\",output:\"\\u2216\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\setminus\",tag:\"mo\",output:\"\\\\\",ttype:CONST},{input:\"\\\\!\",tag:\"mspace\",atname:\"width\",atval:\"-0.167em\",ttype:SPACE},{input:\"\\\\,\",tag:\"mspace\",atname:\"width\",atval:\"0.167em\",ttype:SPACE},{input:\"\\\\>\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\:\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\;\",tag:\"mspace\",atname:\"width\",atval:\"0.278em\",ttype:SPACE},{input:\"~\",tag:\"mspace\",atname:\"width\",atval:\"0.333em\",ttype:SPACE},{input:\"\\\\quad\",tag:\"mspace\",atname:\"width\",atval:\"1em\",ttype:SPACE},{input:\"\\\\qquad\",tag:\"mspace\",atname:\"width\",atval:\"2em\",ttype:SPACE},{input:\"\\\\prime\",tag:\"mo\",output:\"\\u2032\",ttype:CONST},{input:\"'\",tag:\"mo\",output:\"\\u02B9\",ttype:CONST},{input:\"''\",tag:\"mo\",output:\"\\u02BA\",ttype:CONST},{input:\"'''\",tag:\"mo\",output:\"\\u2034\",ttype:CONST},{input:\"''''\",tag:\"mo\",output:\"\\u2057\",ttype:CONST},{input:\"\\\\ldots\",tag:\"mo\",output:\"\\u2026\",ttype:CONST},{input:\"\\\\cdots\",tag:\"mo\",output:\"\\u22EF\",ttype:CONST},{input:\"\\\\vdots\",tag:\"mo\",output:\"\\u22EE\",ttype:CONST},{input:\"\\\\ddots\",tag:\"mo\",output:\"\\u22F1\",ttype:CONST},{input:\"\\\\forall\",tag:\"mo\",output:\"\\u2200\",ttype:CONST},{input:\"\\\\exists\",tag:\"mo\",output:\"\\u2203\",ttype:CONST},{input:\"\\\\Re\",tag:\"mo\",output:\"\\u211C\",ttype:CONST},{input:\"\\\\Im\",tag:\"mo\",output:\"\\u2111\",ttype:CONST},{input:\"\\\\aleph\",tag:\"mo\",output:\"\\u2135\",ttype:CONST},{input:\"\\\\hbar\",tag:\"mo\",output:\"\\u210F\",ttype:CONST},{input:\"\\\\ell\",tag:\"mo\",output:\"\\u2113\",ttype:CONST},{input:\"\\\\wp\",tag:\"mo\",output:\"\\u2118\",ttype:CONST},{input:\"\\\\emptyset\",tag:\"mo\",output:\"\\u2205\",ttype:CONST},{input:\"\\\\infty\",tag:\"mo\",output:\"\\u221E\",ttype:CONST},{input:\"\\\\surd\",tag:\"mo\",output:\"\\\\sqrt{}\",ttype:DEFINITION},{input:\"\\\\partial\",tag:\"mo\",output:\"\\u2202\",ttype:CONST},{input:\"\\\\nabla\",tag:\"mo\",output:\"\\u2207\",ttype:CONST},{input:\"\\\\triangle\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\therefore\",tag:\"mo\",output:\"\\u2234\",ttype:CONST},{input:\"\\\\angle\",tag:\"mo\",output:\"\\u2220\",ttype:CONST},{input:\"\\\\diamond\",tag:\"mo\",output:\"\\u22C4\",ttype:CONST},{input:\"\\\\Diamond\",tag:\"mo\",output:\"\\u25C7\",ttype:CONST},{input:\"\\\\neg\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\lnot\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\bot\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\top\",tag:\"mo\",output:\"\\u22A4\",ttype:CONST},{input:\"\\\\square\",tag:\"mo\",output:\"\\u25AB\",ttype:CONST},{input:\"\\\\Box\",tag:\"mo\",output:\"\\u25A1\",ttype:CONST},{input:\"\\\\wr\",tag:\"mo\",output:\"\\u2240\",ttype:CONST},{input:\"\\\\arccos\",tag:\"mi\",output:\"arccos\",ttype:UNARY,func:true},{input:\"\\\\arcsin\",tag:\"mi\",output:\"arcsin\",ttype:UNARY,func:true},{input:\"\\\\arctan\",tag:\"mi\",output:\"arctan\",ttype:UNARY,func:true},{input:\"\\\\arg\",tag:\"mi\",output:\"arg\",ttype:UNARY,func:true},{input:\"\\\\cos\",tag:\"mi\",output:\"cos\",ttype:UNARY,func:true},{input:\"\\\\cosh\",tag:\"mi\",output:\"cosh\",ttype:UNARY,func:true},{input:\"\\\\cot\",tag:\"mi\",output:\"cot\",ttype:UNARY,func:true},{input:\"\\\\coth\",tag:\"mi\",output:\"coth\",ttype:UNARY,func:true},{input:\"\\\\csc\",tag:\"mi\",output:\"csc\",ttype:UNARY,func:true},{input:\"\\\\deg\",tag:\"mi\",output:\"deg\",ttype:UNARY,func:true},{input:\"\\\\det\",tag:\"mi\",output:\"det\",ttype:UNARY,func:true},{input:\"\\\\dim\",tag:\"mi\",output:\"dim\",ttype:UNARY,func:true},{input:\"\\\\exp\",tag:\"mi\",output:\"exp\",ttype:UNARY,func:true},{input:\"\\\\gcd\",tag:\"mi\",output:\"gcd\",ttype:UNARY,func:true},{input:\"\\\\hom\",tag:\"mi\",output:\"hom\",ttype:UNARY,func:true},{input:\"\\\\inf\",tag:\"mo\",output:\"inf\",ttype:UNDEROVER},{input:\"\\\\ker\",tag:\"mi\",output:\"ker\",ttype:UNARY,func:true},{input:\"\\\\lg\",tag:\"mi\",output:\"lg\",ttype:UNARY,func:true},{input:\"\\\\lim\",tag:\"mo\",output:\"lim\",ttype:UNDEROVER},{input:\"\\\\liminf\",tag:\"mo\",output:\"liminf\",ttype:UNDEROVER},{input:\"\\\\limsup\",tag:\"mo\",output:\"limsup\",ttype:UNDEROVER},{input:\"\\\\ln\",tag:\"mi\",output:\"ln\",ttype:UNARY,func:true},{input:\"\\\\log\",tag:\"mi\",output:\"log\",ttype:UNARY,func:true},{input:\"\\\\max\",tag:\"mo\",output:\"max\",ttype:UNDEROVER},{input:\"\\\\min\",tag:\"mo\",output:\"min\",ttype:UNDEROVER},{input:\"\\\\Pr\",tag:\"mi\",output:\"Pr\",ttype:UNARY,func:true},{input:\"\\\\sec\",tag:\"mi\",output:\"sec\",ttype:UNARY,func:true},{input:\"\\\\sin\",tag:\"mi\",output:\"sin\",ttype:UNARY,func:true},{input:\"\\\\sinh\",tag:\"mi\",output:\"sinh\",ttype:UNARY,func:true},{input:\"\\\\sup\",tag:\"mo\",output:\"sup\",ttype:UNDEROVER},{input:\"\\\\tan\",tag:\"mi\",output:\"tan\",ttype:UNARY,func:true},{input:\"\\\\tanh\",tag:\"mi\",output:\"tanh\",ttype:UNARY,func:true},{input:\"\\\\gets\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\leftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\to\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\rightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\leftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:CONST},{input:\"\\\\uparrow\",tag:\"mo\",output:\"\\u2191\",ttype:CONST},{input:\"\\\\downarrow\",tag:\"mo\",output:\"\\u2193\",ttype:CONST},{input:\"\\\\updownarrow\",tag:\"mo\",output:\"\\u2195\",ttype:CONST},{input:\"\\\\Leftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:CONST},{input:\"\\\\Rightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:CONST},{input:\"\\\\Leftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:CONST},{input:\"\\\\iff\",tag:\"mo\",output:\"~\\\\Longleftrightarrow~\",ttype:DEFINITION},{input:\"\\\\Uparrow\",tag:\"mo\",output:\"\\u21D1\",ttype:CONST},{input:\"\\\\Downarrow\",tag:\"mo\",output:\"\\u21D3\",ttype:CONST},{input:\"\\\\Updownarrow\",tag:\"mo\",output:\"\\u21D5\",ttype:CONST},{input:\"\\\\mapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},{input:\"\\\\longleftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:LONG},{input:\"\\\\longrightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:LONG},{input:\"\\\\longleftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:LONG},{input:\"\\\\Longleftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:LONG},{input:\"\\\\Longrightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:LONG},{input:\"\\\\Longleftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:LONG},{input:\"\\\\longmapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},AMsqrt,AMroot,AMfrac,AMover,AMsub,AMsup,AMtext,AMmbox,AMatop,AMchoose,{input:\"\\\\acute\",tag:\"mover\",output:\"\\u00B4\",ttype:UNARY,acc:true},{input:\"\\\\grave\",tag:\"mover\",output:\"\\u0060\",ttype:UNARY,acc:true},{input:\"\\\\breve\",tag:\"mover\",output:\"\\u02D8\",ttype:UNARY,acc:true},{input:\"\\\\check\",tag:\"mover\",output:\"\\u02C7\",ttype:UNARY,acc:true},{input:\"\\\\dot\",tag:\"mover\",output:\".\",ttype:UNARY,acc:true},{input:\"\\\\ddot\",tag:\"mover\",output:\"..\",ttype:UNARY,acc:true},{input:\"\\\\mathring\",tag:\"mover\",output:\"\\u00B0\",ttype:UNARY,acc:true},{input:\"\\\\vec\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overrightarrow\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overleftarrow\",tag:\"mover\",output:\"\\u20D6\",ttype:UNARY,acc:true},{input:\"\\\\hat\",tag:\"mover\",output:\"\\u005E\",ttype:UNARY,acc:true},{input:\"\\\\widehat\",tag:\"mover\",output:\"\\u0302\",ttype:UNARY,acc:true},{input:\"\\\\tilde\",tag:\"mover\",output:\"~\",ttype:UNARY,acc:true},{input:\"\\\\widetilde\",tag:\"mover\",output:\"\\u02DC\",ttype:UNARY,acc:true},{input:\"\\\\bar\",tag:\"mover\",output:\"\\u203E\",ttype:UNARY,acc:true},{input:\"\\\\overbrace\",tag:\"mover\",output:\"\\uFE37\",ttype:UNARY,acc:true},{input:\"\\\\overbracket\",tag:\"mover\",output:\"\\u23B4\",ttype:UNARY,acc:true},{input:\"\\\\overline\",tag:\"mover\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\underbrace\",tag:\"munder\",output:\"\\uFE38\",ttype:UNARY,acc:true},{input:\"\\\\underbracket\",tag:\"munder\",output:\"\\u23B5\",ttype:UNARY,acc:true},{input:\"\\\\underline\",tag:\"munder\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\displaystyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"true\",ttype:UNARY},{input:\"\\\\textstyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"false\",ttype:UNARY},{input:\"\\\\scriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"1\",ttype:UNARY},{input:\"\\\\scriptscriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"2\",ttype:UNARY},{input:\"\\\\textrm\",tag:\"mstyle\",output:\"\\\\mathrm\",ttype:DEFINITION},{input:\"\\\\mathbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\textbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\mathit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\textit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\mathtt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\texttt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\mathsf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"sans-serif\",ttype:UNARY},{input:\"\\\\mathbb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"double-struck\",ttype:UNARY,codes:AMbbb},{input:\"\\\\mathcal\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"script\",ttype:UNARY,codes:AMcal},{input:\"\\\\mathfrak\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"fraktur\",ttype:UNARY,codes:AMfrk},{input:\"\\\\textcolor\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"mathcolor\",ttype:BINARY},{input:\"\\\\colorbox\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"background\",ttype:BINARY}];function compareNames(s1,s2){if(s1.input>s2.input)return 1\nelse return-1;}\nvar AMnames=[];function AMinitSymbols(){AMsymbols.sort(compareNames);for(i=0;i<AMsymbols.length;i++)AMnames[i]=AMsymbols[i].input;}\nvar AMmathml=\"http://www.w3.org/1998/Math/MathML\";function AMcreateElementMathML(t){if(isIE)return document.createElement(\"m:\"+t);else return document.createElementNS(AMmathml,t);}\nfunction AMcreateMmlNode(t,frag){if(isIE)var node=document.createElement(\"m:\"+t);else var node=document.createElementNS(AMmathml,t);node.appendChild(frag);return node;}\nfunction newcommand(oldstr,newstr){AMsymbols=AMsymbols.concat([{input:oldstr,tag:\"mo\",output:newstr,ttype:DEFINITION}]);}\nfunction AMremoveCharsAndBlanks(str,n){var st;st=str.slice(n);for(var i=0;i<st.length&&st.charCodeAt(i)<=32;i=i+1);return st.slice(i);}\nfunction AMposition(arr,str,n){if(n==0){var h,m;n=-1;h=arr.length;while(n+1<h){m=(n+h)>>1;if(arr[m]<str)n=m;else h=m;}\nreturn h;}else\nfor(var i=n;i<arr.length&&arr[i]<str;i++);return i;}\nfunction AMgetSymbol(str){var k=0;var j=0;var mk;var st;var tagst;var match=\"\";var more=true;for(var i=1;i<=str.length&&more;i++){st=str.slice(0,i);j=k;k=AMposition(AMnames,st,j);if(k<AMnames.length&&str.slice(0,AMnames[k].length)==AMnames[k]){match=AMnames[k];mk=k;i=match.length;}\nmore=k<AMnames.length&&str.slice(0,AMnames[k].length)>=AMnames[k];}\nAMpreviousSymbol=AMcurrentSymbol;if(match!=\"\"){AMcurrentSymbol=AMsymbols[mk].ttype;return AMsymbols[mk];}\nAMcurrentSymbol=CONST;k=1;st=str.slice(0,1);if(\"0\"<=st&&st<=\"9\")tagst=\"mn\";else tagst=((\"A\">st||st>\"Z\")&&(\"a\">st||st>\"z\")?\"mo\":\"mi\");return{input:st,tag:tagst,output:st,ttype:CONST};}\nvar AMpreviousSymbol,AMcurrentSymbol;function AMparseSexpr(str){var symbol,node,result,result2,i,st,newFrag=document.createDocumentFragment();str=AMremoveCharsAndBlanks(str,0);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];if(symbol.ttype==DEFINITION){str=symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];}\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);switch(symbol.ttype){case SPACE:node=AMcreateElementMathML(symbol.tag);node.setAttribute(symbol.atname,symbol.atval);return[node,str,symbol.tag];case UNDEROVER:if(isIE){if(symbol.input.substr(0,4)==\"\\\\big\"){str=\"\\\\\"+symbol.input.substr(4)+str;symbol=AMgetSymbol(str);symbol.ttype=UNDEROVER;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nreturn[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];case CONST:var output=symbol.output;if(isIE){if(symbol.input==\"'\")\noutput=\"\\u2032\";else if(symbol.input==\"''\")\noutput=\"\\u2033\";else if(symbol.input==\"'''\")\noutput=\"\\u2033\\u2032\";else if(symbol.input==\"''''\")\noutput=\"\\u2033\\u2033\";else if(symbol.input==\"\\\\square\")\noutput=\"\\u25A1\";else if(symbol.input.substr(0,5)==\"\\\\frac\"){var denom=symbol.input.substr(6,1);if(denom==\"5\"||denom==\"6\"){str=symbol.input.replace(/\\\\frac/,\"\\\\frac \")+str;return[node,str,symbol.tag];}}}\nnode=AMcreateMmlNode(symbol.tag,document.createTextNode(output));return[node,str,symbol.tag];case LONG:node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));node.setAttribute(\"minsize\",\"1.5\");node.setAttribute(\"maxsize\",\"1.5\");node=AMcreateMmlNode(\"mover\",node);node.appendChild(AMcreateElementMathML(\"mspace\"));return[node,str,symbol.tag];case STRETCHY:if(isIE&&symbol.input==\"\\\\backslash\")\nsymbol.output=\"\\\\\";node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(symbol.input==\"|\"||symbol.input==\"\\\\vert\"||symbol.input==\"\\\\|\"||symbol.input==\"\\\\Vert\"){node.setAttribute(\"lspace\",\"0em\");node.setAttribute(\"rspace\",\"0em\");}\nnode.setAttribute(\"maxsize\",symbol.atval);if(symbol.rtag!=null)\nreturn[node,str,symbol.rtag];else\nreturn[node,str,symbol.tag];case BIG:var atval=symbol.atval;if(isIE)\natval=symbol.ieval;symbol=AMgetSymbol(str);if(symbol==null)\nreturn[null,str,null];str=AMremoveCharsAndBlanks(str,symbol.input.length);node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",atval+\"ex\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}else{node.setAttribute(\"minsize\",atval);node.setAttribute(\"maxsize\",atval);}\nreturn[node,str,symbol.tag];case LEFTBRACKET:if(symbol.input==\"\\\\left\"){symbol=AMgetSymbol(str);if(symbol!=null){if(symbol.input==\".\")\nsymbol.invisible=true;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nresult=AMparseExpr(str,true,false);if(symbol==null||(typeof symbol.invisible==\"boolean\"&&symbol.invisible))\nnode=AMcreateMmlNode(\"mrow\",result[0]);else{node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));node=AMcreateMmlNode(\"mrow\",node);node.appendChild(result[0]);}\nreturn[node,result[1],result[2]];case MATRIX:if(symbol.input==\"\\\\begin{array}\"){var mask=\"\";symbol=AMgetSymbol(str);str=AMremoveCharsAndBlanks(str,0);if(symbol==null)\nmask=\"l\";else{str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"{\")\nmask=\"l\";else do{symbol=AMgetSymbol(str);if(symbol!=null){str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"}\")\nmask=mask+symbol.input;}}while(symbol!=null&&symbol.input!=\"\"&&symbol.input!=\"}\");}\nresult=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);mask=mask.replace(/l/g,\"left \");mask=mask.replace(/r/g,\"right \");mask=mask.replace(/c/g,\"center \");node.setAttribute(\"columnalign\",mask);node.setAttribute(\"displaystyle\",\"false\");if(isIE)\nreturn[node,result[1],null];var lspace=AMcreateElementMathML(\"mspace\");lspace.setAttribute(\"width\",\"0.167em\");var rspace=AMcreateElementMathML(\"mspace\");rspace.setAttribute(\"width\",\"0.167em\");var node1=AMcreateMmlNode(\"mrow\",lspace);node1.appendChild(node);node1.appendChild(rspace);return[node1,result[1],null];}else{result=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);if(isIE)\nnode.setAttribute(\"columnspacing\",\"0.25em\");else\nnode.setAttribute(\"columnspacing\",\"0.167em\");node.setAttribute(\"columnalign\",\"right center left\");node.setAttribute(\"displaystyle\",\"true\");node=AMcreateMmlNode(\"mrow\",node);return[node,result[1],null];}\ncase TEXT:if(str.charAt(0)==\"{\")i=str.indexOf(\"}\");else i=0;if(i==-1)\ni=str.length;st=str.slice(1,i);if(st.charAt(0)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nnewFrag.appendChild(AMcreateMmlNode(symbol.tag,document.createTextNode(st)));if(st.charAt(st.length-1)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nstr=AMremoveCharsAndBlanks(str,i+1);return[AMcreateMmlNode(\"mrow\",newFrag),str,null];case UNARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str];if(typeof symbol.func==\"boolean\"&&symbol.func){st=str.charAt(0);if(st==\"^\"||st==\"_\"||st==\",\"){return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}else{node=AMcreateMmlNode(\"mrow\",AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node.appendChild(space);}\nnode.appendChild(result[0]);return[node,result[1],symbol.tag];}}\nif(symbol.input==\"\\\\sqrt\"){if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",\"1.2ex\");space.setAttribute(\"width\",\"0em\");node=AMcreateMmlNode(symbol.tag,result[0])\nnode.appendChild(space);return[node,result[1],symbol.tag];}else\nreturn[AMcreateMmlNode(symbol.tag,result[0]),result[1],symbol.tag];}else if(typeof symbol.acc==\"boolean\"&&symbol.acc){node=AMcreateMmlNode(symbol.tag,result[0]);var output=symbol.output;if(isIE){if(symbol.input==\"\\\\hat\")\noutput=\"\\u0302\";else if(symbol.input==\"\\\\widehat\")\noutput=\"\\u005E\";else if(symbol.input==\"\\\\bar\")\noutput=\"\\u00AF\";else if(symbol.input==\"\\\\grave\")\noutput=\"\\u0300\";else if(symbol.input==\"\\\\tilde\")\noutput=\"\\u0303\";}\nvar node1=AMcreateMmlNode(\"mo\",document.createTextNode(output));if(symbol.input==\"\\\\vec\"||symbol.input==\"\\\\check\")\nnode1.setAttribute(\"maxsize\",\"1.2\");if(isIE&&symbol.input==\"\\\\bar\")\nnode1.setAttribute(\"maxsize\",\"0.5\");if(symbol.input==\"\\\\underbrace\"||symbol.input==\"\\\\underline\")\nnode1.setAttribute(\"accentunder\",\"true\");else\nnode1.setAttribute(\"accent\",\"true\");node.appendChild(node1);if(symbol.input==\"\\\\overbrace\"||symbol.input==\"\\\\underbrace\")\nnode.ttype=UNDEROVER;return[node,result[1],symbol.tag];}else{if(!isIE&&typeof symbol.codes!=\"undefined\"){for(i=0;i<result[0].childNodes.length;i++)\nif(result[0].childNodes[i].nodeName==\"mi\"||result[0].nodeName==\"mi\"){st=(result[0].nodeName==\"mi\"?result[0].firstChild.nodeValue:result[0].childNodes[i].firstChild.nodeValue);var newst=[];for(var j=0;j<st.length;j++)\nif(st.charCodeAt(j)>64&&st.charCodeAt(j)<91)newst=newst+\nString.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);else newst=newst+st.charAt(j);if(result[0].nodeName==\"mi\")\nresult[0]=AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst));else result[0].replaceChild(AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst)),result[0].childNodes[i]);}}\nnode=AMcreateMmlNode(symbol.tag,result[0]);node.setAttribute(symbol.atname,symbol.atval);if(symbol.input==\"\\\\scriptstyle\"||symbol.input==\"\\\\scriptscriptstyle\")\nnode.setAttribute(\"displaystyle\",\"false\");return[node,result[1],symbol.tag];}\ncase BINARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];result2=AMparseSexpr(result[1]);if(result2[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];if(symbol.input==\"\\\\textcolor\"||symbol.input==\"\\\\colorbox\"){var tclr=str.match(/\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\{\\s*[#\\w]+\\s*\\}/,\"\");if(tclr!=null){if(IsColorName.test(tclr[1].toLowerCase())){tclr=LaTeXColor[tclr[1].toLowerCase()];}else{tclr=tclr[1];}\nnode=AMcreateElementMathML(\"mstyle\");node.setAttribute(symbol.atval,tclr);node.appendChild(result2[0]);return[node,result2[1],symbol.tag];}}\nif(symbol.input==\"\\\\root\"||symbol.input==\"\\\\stackrel\")newFrag.appendChild(result2[0]);newFrag.appendChild(result[0]);if(symbol.input==\"\\\\frac\")newFrag.appendChild(result2[0]);return[AMcreateMmlNode(symbol.tag,newFrag),result2[1],symbol.tag];case INFIX:str=AMremoveCharsAndBlanks(str,symbol.input.length);return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output)),str,symbol.tag];default:return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}}\nfunction AMparseIexpr(str){var symbol,sym1,sym2,node,result,tag,underover;str=AMremoveCharsAndBlanks(str,0);sym1=AMgetSymbol(str);result=AMparseSexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(symbol.ttype==INFIX){str=AMremoveCharsAndBlanks(str,symbol.input.length);result=AMparseSexpr(str);if(result[0]==null)\nresult[0]=AMcreateMmlNode(\"mo\",document.createTextNode(\"\\u25A1\"));str=result[1];tag=result[2];if(symbol.input==\"_\"||symbol.input==\"^\"){sym2=AMgetSymbol(str);tag=null;underover=((sym1.ttype==UNDEROVER)||(node.ttype==UNDEROVER));if(symbol.input==\"_\"&&sym2.input==\"^\"){str=AMremoveCharsAndBlanks(str,sym2.input.length);var res2=AMparseSexpr(str);str=res2[1];tag=res2[2];node=AMcreateMmlNode((underover?\"munderover\":\"msubsup\"),node);node.appendChild(result[0]);node.appendChild(res2[0]);}else if(symbol.input==\"_\"){node=AMcreateMmlNode((underover?\"munder\":\"msub\"),node);node.appendChild(result[0]);}else{node=AMcreateMmlNode((underover?\"mover\":\"msup\"),node);node.appendChild(result[0]);}\nnode=AMcreateMmlNode(\"mrow\",node);}else{node=AMcreateMmlNode(symbol.tag,node);if(symbol.input==\"\\\\atop\"||symbol.input==\"\\\\choose\")\nnode.setAttribute(\"linethickness\",\"0ex\");node.appendChild(result[0]);if(symbol.input==\"\\\\choose\")\nnode=AMcreateMmlNode(\"mfenced\",node);}}\nreturn[node,str,tag];}\nfunction AMparseExpr(str,rightbracket,matrix){var symbol,node,result,i,tag,newFrag=document.createDocumentFragment();do{str=AMremoveCharsAndBlanks(str,0);result=AMparseIexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(node!=undefined){if((tag==\"mn\"||tag==\"mi\")&&symbol!=null&&typeof symbol.func==\"boolean\"&&symbol.func){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}\nnewFrag.appendChild(node);}}while((symbol.ttype!=RIGHTBRACKET)&&symbol!=null&&symbol.output!=\"\");tag=null;if(symbol.ttype==RIGHTBRACKET){if(symbol.input==\"\\\\right\"){str=AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol!=null&&symbol.input==\".\")\nsymbol.invisible=true;if(symbol!=null)\ntag=symbol.rtag;}\nif(symbol!=null)\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);var len=newFrag.childNodes.length;if(matrix&&len>0&&newFrag.childNodes[len-1].nodeName==\"mrow\"&&len>1&&newFrag.childNodes[len-2].nodeName==\"mo\"&&newFrag.childNodes[len-2].firstChild.nodeValue==\"&\"){var pos=[];var m=newFrag.childNodes.length;for(i=0;matrix&&i<m;i=i+2){pos[i]=[];node=newFrag.childNodes[i];for(var j=0;j<node.childNodes.length;j++)\nif(node.childNodes[j].firstChild.nodeValue==\"&\")\npos[i][pos[i].length]=j;}\nvar row,frag,n,k,table=document.createDocumentFragment();for(i=0;i<m;i=i+2){row=document.createDocumentFragment();frag=document.createDocumentFragment();node=newFrag.firstChild;n=node.childNodes.length;k=0;for(j=0;j<n;j++){if(typeof pos[i][k]!=\"undefined\"&&j==pos[i][k]){node.removeChild(node.firstChild);row.appendChild(AMcreateMmlNode(\"mtd\",frag));k++;}else frag.appendChild(node.firstChild);}\nrow.appendChild(AMcreateMmlNode(\"mtd\",frag));if(newFrag.childNodes.length>2){newFrag.removeChild(newFrag.firstChild);newFrag.removeChild(newFrag.firstChild);}\ntable.appendChild(AMcreateMmlNode(\"mtr\",row));}\nreturn[table,str];}\nif(typeof symbol.invisible!=\"boolean\"||!symbol.invisible){node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));newFrag.appendChild(node);}}\nreturn[newFrag,str,tag];}\nfunction AMparseMath(str){var result,node=AMcreateElementMathML(\"mstyle\");var cclr=str.match(/\\\\color\\s*\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\\\color\\s*\\{\\s*[#\\w]+\\s*\\}/g,\"\");if(cclr!=null){if(IsColorName.test(cclr[1].toLowerCase())){cclr=LaTeXColor[cclr[1].toLowerCase()];}else{cclr=cclr[1];}\nnode.setAttribute(\"mathcolor\",cclr);}else{if(mathcolor!=\"\")node.setAttribute(\"mathcolor\",mathcolor);};if(mathfontfamily!=\"\")node.setAttribute(\"fontfamily\",mathfontfamily);node.appendChild(AMparseExpr(str.replace(/^\\s+/g,\"\"),false,false)[0]);node=AMcreateMmlNode(\"math\",node);if(showasciiformulaonhover)\nnode.setAttribute(\"title\",str.replace(/\\s+/g,\" \"));if(false){var fnode=AMcreateElementXHTML(\"font\");fnode.setAttribute(\"face\",mathfontfamily);fnode.appendChild(node);return fnode;}\nreturn node;}\nfunction AMstrarr2docFrag(arr,linebreaks){var newFrag=document.createDocumentFragment();var expr=false;for(var i=0;i<arr.length;i++){if(expr)newFrag.appendChild(AMparseMath(arr[i]));else{var arri=(linebreaks?arr[i].split(\"\\n\\n\"):[arr[i]]);newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[0])));for(var j=1;j<arri.length;j++){newFrag.appendChild(AMcreateElementXHTML(\"p\"));newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[j])));}}\nexpr=!expr;}\nreturn newFrag;}\nfunction AMprocessNodeR(n,linebreaks){var mtch,str,arr,frg,i;if(n.childNodes.length==0){if((n.nodeType!=8||linebreaks)&&n.parentNode.nodeName!=\"form\"&&n.parentNode.nodeName!=\"FORM\"&&n.parentNode.nodeName!=\"textarea\"&&n.parentNode.nodeName!=\"TEXTAREA\"&&n.parentNode.nodeName!=\"pre\"&&n.parentNode.nodeName!=\"PRE\"){str=n.nodeValue;if(!(str==null)){str=str.replace(/\\r\\n\\r\\n/g,\"\\n\\n\");str=str.replace(/\\x20+/g,\" \");str=str.replace(/\\s*\\r\\n/g,\" \");mtch=(str.indexOf(\"\\$\")==-1?false:true);str=str.replace(/([^\\\\])\\$/g,\"$1 \\$\");str=str.replace(/^\\$/,\" \\$\");arr=str.split(\" \\$\");for(i=0;i<arr.length;i++)\narr[i]=arr[i].replace(/\\\\\\$/g,\"\\$\");if(arr.length>1||mtch){if(checkForMathML){checkForMathML=false;var nd=AMisMathMLavailable();AMnoMathML=nd!=null;if(AMnoMathML&&notifyIfNoMathML)\nif(alertIfNoMathML)\nalert(\"To view the ASCIIMathML notation use Internet Explorer 6 +\\nMathPlayer (free from www.dessci.com)\\nor Firefox/Mozilla/Netscape\");else AMbody.insertBefore(nd,AMbody.childNodes[0]);}\nif(!AMnoMathML){frg=AMstrarr2docFrag(arr,n.nodeType==8);var len=frg.childNodes.length;n.parentNode.replaceChild(frg,n);return len-1;}else return 0;}}}else return 0;}else if(n.nodeName!=\"math\"){for(i=0;i<n.childNodes.length;i++)\ni+=AMprocessNodeR(n.childNodes[i],linebreaks);}\nreturn 0;}\nfunction AMprocessNode(n,linebreaks,spanclassAM){var frag,st;if(spanclassAM!=null){frag=document.getElementsByTagName(\"span\")\nfor(var i=0;i<frag.length;i++)\nif(frag[i].className==\"AM\")\nAMprocessNodeR(frag[i],linebreaks);}else{try{st=n.innerHTML;}catch(err){}\nif(st==null||st.indexOf(\"\\$\")!=-1)\nAMprocessNodeR(n,linebreaks);}\nif(isIE){frag=document.getElementsByTagName('math');for(var i=0;i<frag.length;i++)frag[i].update()}}\nvar inAppendix=false;var sectionCntr=0;var IEcommentWarning=true;var biblist=[];var bibcntr=0;var LaTeXCounter=[];LaTeXCounter[\"definition\"]=0;LaTeXCounter[\"proposition\"]=0;LaTeXCounter[\"lemma\"]=0;LaTeXCounter[\"theorem\"]=0;LaTeXCounter[\"corollary\"]=0;LaTeXCounter[\"example\"]=0;LaTeXCounter[\"exercise\"]=0;LaTeXCounter[\"subsection\"]=0;LaTeXCounter[\"subsubsection\"]=0;LaTeXCounter[\"figure\"]=0;LaTeXCounter[\"equation\"]=0;LaTeXCounter[\"table\"]=0;var LaTeXColor=[];LaTeXColor[\"greenyellow\"]=\"#D9FF4F\";LaTeXColor[\"yellow\"]=\"#FFFF00\";LaTeXColor[\"goldenrod\"]=\"#FFE529\";LaTeXColor[\"dandelion\"]=\"#FFB529\";LaTeXColor[\"apricot\"]=\"#FFAD7A\";LaTeXColor[\"peach\"]=\"#FF804D\";LaTeXColor[\"melon\"]=\"#FF8A80\";LaTeXColor[\"yelloworange\"]=\"#FF9400\";LaTeXColor[\"orange\"]=\"#FF6321\";LaTeXColor[\"burntorange\"]=\"#FF7D00\";LaTeXColor[\"bittersweet\"]=\"#C20300\";LaTeXColor[\"redorange\"]=\"#FF3B21\";LaTeXColor[\"mahogany\"]=\"#A60000\";LaTeXColor[\"maroon\"]=\"#AD0000\";LaTeXColor[\"brickred\"]=\"#B80000\";LaTeXColor[\"red\"]=\"#FF0000\";LaTeXColor[\"orangered\"]=\"#FF0080\";LaTeXColor[\"rubinered\"]=\"#FF00DE\";LaTeXColor[\"wildstrawberry\"]=\"#FF0A9C\";LaTeXColor[\"salmon\"]=\"#FF789E\";LaTeXColor[\"carnationpink\"]=\"#FF5EFF\";LaTeXColor[\"magenta\"]=\"#FF00FF\";LaTeXColor[\"violetred\"]=\"#FF30FF\";LaTeXColor[\"rhodamine\"]=\"#FF2EFF\";LaTeXColor[\"mulberry\"]=\"#A314FA\";LaTeXColor[\"redviolet\"]=\"#9600A8\";LaTeXColor[\"fuchsia\"]=\"#7303EB\";LaTeXColor[\"lavender\"]=\"#FF85FF\";LaTeXColor[\"thistle\"]=\"#E069FF\";LaTeXColor[\"orchid\"]=\"#AD5CFF\";LaTeXColor[\"darkorchid\"]=\"#9933CC\";LaTeXColor[\"purple\"]=\"#8C24FF\";LaTeXColor[\"plum\"]=\"#8000FF\";LaTeXColor[\"violet\"]=\"#361FFF\";LaTeXColor[\"royalpurple\"]=\"#401AFF\";LaTeXColor[\"blueviolet\"]=\"#1A0DF5\";LaTeXColor[\"periwinkle\"]=\"#6E73FF\";LaTeXColor[\"cadetblue\"]=\"#616EC4\";LaTeXColor[\"cornflowerblue\"]=\"#59DEFF\";LaTeXColor[\"midnightblue\"]=\"#007091\";LaTeXColor[\"navyblue\"]=\"#0F75FF\";LaTeXColor[\"royalblue\"]=\"#0080FF\";LaTeXColor[\"blue\"]=\"#0000FF\";LaTeXColor[\"cerulean\"]=\"#0FE3FF\";LaTeXColor[\"cyan\"]=\"#00FFFF\";LaTeXColor[\"processblue\"]=\"#0AFFFF\";LaTeXColor[\"skyblue\"]=\"#61FFE0\";LaTeXColor[\"turquoise\"]=\"#26FFCC\";LaTeXColor[\"tealblue\"]=\"#1FFAA3\";LaTeXColor[\"aquamarine\"]=\"#2EFFB2\";LaTeXColor[\"bluegreen\"]=\"#26FFAB\";LaTeXColor[\"emerald\"]=\"#00FF80\";LaTeXColor[\"junglegreen\"]=\"#03FF7A\";LaTeXColor[\"seagreen\"]=\"#4FFF80\";LaTeXColor[\"green\"]=\"#00FF00\";LaTeXColor[\"forestgreen\"]=\"#00E000\";LaTeXColor[\"pinegreen\"]=\"#00BF29\";LaTeXColor[\"limegreen\"]=\"#80FF00\";LaTeXColor[\"yellowgreen\"]=\"#8FFF42\";LaTeXColor[\"springgreen\"]=\"#BDFF3D\";LaTeXColor[\"olivegreen\"]=\"#009900\";LaTeXColor[\"rawsienna\"]=\"#8C0000\";LaTeXColor[\"sepia\"]=\"#4D0000\";LaTeXColor[\"brown\"]=\"#660000\";LaTeXColor[\"tan\"]=\"#DB9470\";LaTeXColor[\"gray\"]=\"#808080\";LaTeXColor[\"grey\"]=\"#808080\";LaTeXColor[\"black\"]=\"#000000\";LaTeXColor[\"white\"]=\"#FFFFFF\";var IsColorName=/^(?:greenyellow|yellow|goldenrod|dandelion|apricot|peach|melon|yelloworange|orange|burntorange|bittersweet|redorange|mahogany|maroon|brickred|red|orangered|rubinered|wildstrawberry|salmon|carnationpink|magenta|violetred|rhodamine|mulberry|redviolet|fuchsia|lavender|thistle|orchid|darkorchid|purple|plum|violet|royalpurple|blueviolet|periwinkle|cadetblue|cornflowerblue|midnightblue|navyblue|royalblue|blue|cerulean|cyan|processblue|skyblue|turquoise|tealblue|aquamarine|bluegreen|emerald|junglegreen|seagreen|green|forestgreen|pinegreen|limegreen|yellowgreen|springgreen|olivegreen|rawsienna|sepia|brown|tan|gray|grey|black|white)$/;var IsCounter=/^(?:definition|proposition|lemma|theorem|corollary|example|exercise|subsection|subsubsection|figure|equation|table)$/;var IsLaTeXElement=/^(?:displayequation|title|author|address|date|abstract|keyword|section|subsection|subsubsection|ref|cite|thebibliography|definition|proposition|lemma|theorem|corollary|example|exercise|itemize|enumerate|enddefinition|endproposition|endlemma|endtheorem|endcorollary|endexample|endexercise|enditemize|endenumerate|LaTeXMathMLlabel|LaTeXMathML|smallskip|medskip|bigskip|quote|quotation|endquote|endquotation|center|endcenter|description|enddescription|inlinemath)$/;var IsTextOnlyArea=/^(?:form|textarea|pre)$/i;var tableid=0;function makeNumberString(cntr){if(sectionCntr>0){if(inAppendix){return\"A\"+sectionCntr+\".\"+cntr;}else{return sectionCntr+\".\"+cntr;}}else{return\"\"+cntr;}};function LaTeXpreProcess(thebody){var TheBody=thebody;if(TheBody.hasChildNodes()){if(!(IsLaTeXElement.test(TheBody.className)))\n{for(var i=0;i<TheBody.childNodes.length;i++){LaTeXpreProcess(TheBody.childNodes[i])}}}\nelse{if(TheBody.nodeType==3&&!(IsTextOnlyArea.test(TheBody.parentNode.nodeName)))\n{var str=TheBody.nodeValue;if(!(str==null)){str=str.replace(/\\\\%/g,\"<per>\");str=str.replace(/%[^\\n]*(?=\\n)/g,\"\");str=str.replace(/%[^\\r]*(?=\\r)/g,\"\");str=str.replace(/%[^\\n]*$/,\"\")\nif(isIE&&str.match(/%/g)!=null&&IEcommentWarning){alert(\"Comments may not have parsed properly.  Try putting in <pre class='LaTeX><div>..</div></pre> structure.\");IEcommentWarning=false;}\nstr=str.replace(/<per>/g,\"%\");if(str.match(/XXX[\\s\\S]*/)!=null){var tmp=str.match(/XXX[\\s\\S]*/)[0];var tmpstr=tmp.charCodeAt(7)+\"::\"+tmp.charCodeAt(8)+\"::\"+tmp.charCodeAt(9)+\"::\"+tmp.charCodeAt(10)+\"::\"+tmp.charCodeAt(11)+\"::\"+tmp.charCodeAt(12)+\"::\"+tmp.charCodeAt(13);alert(tmpstr);}\nstr=str.replace(/([^\\\\])\\\\(\\s)/g,\"$1\\u00A0$2\");str=str.replace(/\\\\quad/g,\"\\u2001\");str=str.replace(/\\\\qquad/g,\"\\u2001\\u2001\");str=str.replace(/\\\\enspace/g,\"\\u2002\");str=str.replace(/\\\\;/g,\"\\u2004\");str=str.replace(/\\\\:/g,\"\\u2005\");str=str.replace(/\\\\,/g,\"\\u2006\");str=str.replace(/\\\\thinspace/g,\"\\u200A\");str=str.replace(/([^\\\\])~/g,\"$1\\u00A0\");str=str.replace(/\\\\~/g,\"~\");str=str.replace(/\\\\\\[/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\\\]/g,\"}$ <DEQ> \");str=str.replace(/\\$\\$/g,\"${$<DEQ>$}$\");str=str.replace(/\\\\begin\\s*\\{\\s*array\\s*\\}/g,\"\\\\begin{array}\");str=str.replace(/\\\\end\\s*\\{\\s*array\\s*\\}/g,\"\\\\end{array}\");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\s*\\}/g,\"  <DEQ>eqno$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"  <DEQ>$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*displaymath\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*displaymath\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\}/g,\" <DEQ>eqno$\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\}/g,\"}$ <DEQ> \");str=str.split(\"<DEQ>\");var newFrag=document.createDocumentFragment();for(var i=0;i<str.length;i++){if(i%2){var DEQtable=document.createElement(\"table\");DEQtable.className='displayequation';var DEQtbody=document.createElement(\"tbody\");var DEQtr=document.createElement(\"tr\");var DEQtdeq=document.createElement(\"td\");DEQtdeq.className='eq';str[i]=str[i].replace(/\\$\\}\\$/g,\"$\\\\displaystyle{\");str[i]=str[i].replace(/\\$\\{\\$/g,\"}\");var lbl=str[i].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);var ISeqno=str[i].match(/^eqno/);str[i]=str[i].replace(/^eqno/,\" \");str[i]=str[i].replace(/\\\\label\\s*\\{\\s*\\w+\\s*\\}/,\" \");DEQtdeq.appendChild(document.createTextNode(str[i]));DEQtr.appendChild(DEQtdeq);str[i]=str[i].replace(/\\\\nonumber/g,\"\");if(ISeqno!=null||lbl!=null){var DEQtdno=document.createElement(\"td\");DEQtdno.className='eqno';LaTeXCounter[\"equation\"]++;var eqnoString=makeNumberString(LaTeXCounter[\"equation\"]);var DEQanchor=document.createElement(\"a\");if(lbl!=null){DEQanchor.id=lbl[1]};DEQanchor.className=\"eqno\";var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"eqno\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(eqnoString));DEQanchor.appendChild(anchorSpan);DEQtdno.appendChild(DEQanchor);var DEQspan=document.createElement(\"span\");DEQspan.className=\"eqno\";DEQspan.appendChild(document.createTextNode(\"(\"+eqnoString+\")\"));DEQtdno.appendChild(DEQspan);DEQtr.appendChild(DEQtdno);}\nDEQtbody.appendChild(DEQtr);DEQtable.appendChild(DEQtbody);newFrag.appendChild(DEQtable);}\nelse{str[i]=str[i].replace(/\\$\\}\\$/g,\"\");str[i]=str[i].replace(/\\$\\{\\$/g,\"\");str[i]=str[i].replace(/\\\\maketitle/g,\"\");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\documentclass[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\usepackage[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\noindent/g,\"\");str[i]=str[i].replace(/\\\\notag/g,\"\");str[i]=str[i].replace(/\\\\ref\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[ref\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\url\\s*\\{\\s*([^\\}\\n]+)\\}/g,\" \\\\[url\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\href\\s*\\{\\s*([^\\}]+)\\}\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[href\\\\]$1\\\\]$2\\\\[ \");str[i]=str[i].replace(/\\\\cite\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[cite\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\qed/g,\"\\u220E\");str[i]=str[i].replace(/\\\\endproof/g,\"\\u220E\");str[i]=str[i].replace(/\\\\proof/g,\"\\\\textbf{Proof: }\");str[i]=str[i].replace(/\\\\n(?=\\s)/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\newline/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\linebreak/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\smallskip/g,\" \\\\[logicalbreak\\\\]smallskip\\\\[ \");str[i]=str[i].replace(/\\\\medskip/g,\" \\\\[logicalbreak\\\\]medskip\\\\[ \");str[i]=str[i].replace(/\\\\bigskip/g,\" \\\\[logicalbreak\\\\]bigskip\\\\[ \");str[i]=str[i].replace(/[\\n\\r]+[ \\f\\n\\r\\t\\v\\u2028\\u2029]*[\\n\\r]+/g,\" \\\\[logicalbreak\\\\]LaTeXMathML\\\\[ \");if(isIE){str[i]=str[i].replace(/\\r/g,\" \");}\nstr[i]=str[i].replace(/\\\\bibitem\\s*([^\\{]*\\{\\s*\\w*\\s*\\})/g,\" \\\\[bibitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\bibitem\\s*/g,\" \\\\[bibitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\item\\s*\\[\\s*(\\w+)\\s*\\]/g,\" \\\\[alistitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\item\\s*/g,\" \\\\[alistitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\appendix/g,\" \\\\[appendix\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*figure\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*figure\\s*\\}/g,\" \\\\[figure\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*table\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*table\\s*\\}/g,\" \\\\[table\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[theorem\\\\]Theorem \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[endtheorem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[definition\\\\]Definition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[enddefinition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[lemma\\\\]Lemma \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[endlemma\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[corollary\\\\]Corollary \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[endcorollary\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[proposition\\\\]Proposition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[endproposition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*example\\s*\\}/g,\" \\\\[example\\\\]Example \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*example\\s*\\}/g,\" \\\\[endexample\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[exercise\\\\]Exercise \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[endexercise\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}\\s*\\{\\s*\\w+\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[endthebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[proof\\\\]Proof: \\\\[ \");if(isIE){str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\"\\u220E \\\\[endproof\\\\] \\\\[ \");}else{str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[endproof\\\\] \\\\[ \");}\nstr[i]=str[i].replace(/\\\\title\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[title\\\\] \\\\[$1 \\\\[endtitle\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\author\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[author\\\\] \\\\[$1 \\\\[endauthor\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\address\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[address\\\\] \\\\[$1 \\\\[endaddress\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\date\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[date\\\\] \\\\[$1 \\\\[enddate\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[keyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[endkeyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[abstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[endabstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[$1\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[end$1\\\\] \\\\[ \");var sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\section\\s*\\{/,\" \\\\[section\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsection\\s*\\{/,\" \\\\[subsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsubsection\\s*\\{/,\" \\\\[subsubsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nvar CatToNextEven=\"\";var strtmp=str[i].split(\"\\\\[\");for(var j=0;j<strtmp.length;j++){if(j%2){var strtmparray=strtmp[j].split(\"\\\\]\");switch(strtmparray[0]){case\"section\":var nodeTmp=document.createElement(\"H2\");nodeTmp.className='section';sectionCntr++;for(var div in LaTeXCounter){LaTeXCounter[div]=0};var nodeAnchor=document.createElement(\"a\");if(inAppendix){nodeAnchor.className='appendixsection';}else{nodeAnchor.className='section';}\nvar nodeNumString=makeNumberString(\"\");var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"section\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='section';nodeSpan.appendChild(document.createTextNode(nodeNumString+\" \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsection\":var nodeTmp=document.createElement(\"H3\");nodeTmp.className='subsection';LaTeXCounter[\"subsection\"]++;LaTeXCounter[\"subsubsection\"]=0;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsubsection\":var nodeTmp=document.createElement(\"H4\");nodeTmp.className='subsubsection';LaTeXCounter[\"subsubsection\"]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsubsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]+\".\"+LaTeXCounter[\"subsubsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsubsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsubsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"href\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"url\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"figure\":var nodeTmp=document.createElement(\"table\");nodeTmp.className='figure';var FIGtbody=document.createElement(\"tbody\");var FIGlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var FIGcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;FIGcap=tmp.substring(capstart,pos);break}}}\nvar FIGtr2=document.createElement(\"tr\");var FIGtd2=document.createElement(\"td\");FIGtd2.className=\"caption\";var FIGanchor=document.createElement(\"a\");FIGanchor.className=\"figure\";if(FIGlbl!=null){FIGanchor.id=FIGlbl[1];}\nLaTeXCounter[\"figure\"]++;var fignmbr=makeNumberString(LaTeXCounter[\"figure\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"figure\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(fignmbr));FIGanchor.appendChild(anchorSpan);FIGtd2.appendChild(FIGanchor);var FIGspan=document.createElement(\"span\");FIGspan.className=\"figure\";FIGspan.appendChild(document.createTextNode(\"Figure \"+fignmbr+\". \"));FIGtd2.appendChild(FIGspan);FIGtd2.appendChild(document.createTextNode(\"\"+FIGcap));FIGtr2.appendChild(FIGtd2);FIGtbody.appendChild(FIGtr2);var IsSpecial=false;var FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\{([^\\}]+)\\}/);if(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\[[^\\]]*\\]\\s*\\{\\s*([^\\}]+)\\s*\\}/);}\nif(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\special\\s*\\{\\s*([^\\}]+)\\}/);IsSpecial=true};if(FIGinfo!=null){var FIGtr1=document.createElement(\"tr\");var FIGtd1=document.createElement(\"td\");FIGtd1.className=\"image\";var FIGimg=document.createElement(\"img\");var FIGsrc=FIGinfo[1];FIGimg.src=FIGsrc;FIGimg.alt=\"Figure \"+FIGsrc+\" did not load\";FIGimg.title=\"Figure \"+fignmbr+\". \"+FIGcap;FIGimg.id=\"figure\"+fignmbr;FIGtd1.appendChild(FIGimg);FIGtr1.appendChild(FIGtd1);FIGtbody.appendChild(FIGtr1);}\nnodeTmp.appendChild(FIGtbody);newFrag.appendChild(nodeTmp);break;case\"table\":var nodeTmp=document.createElement(\"table\");if(strtmparray[1].search(/\\\\centering/)>=0){nodeTmp.className='LaTeXtable centered';nodeTmp.align=\"center\";}else{nodeTmp.className='LaTeXtable';};tableid++;nodeTmp.id=\"LaTeXtable\"+tableid;var TABlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var TABcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;TABcap=tmp.substring(capstart,pos);break}}}\nif(TABcap!=\"\"){var TABtbody=document.createElement(\"tbody\");var TABcaption=document.createElement(\"caption\");TABcaption.className=\"LaTeXtable centered\";var TABanchor=document.createElement(\"a\");TABanchor.className=\"LaTeXtable\";if(TABlbl!=null){TABanchor.id=TABlbl[1];}\nLaTeXCounter[\"table\"]++;var tabnmbr=makeNumberString(LaTeXCounter[\"table\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"LaTeXtable\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(tabnmbr));TABanchor.appendChild(anchorSpan);TABcaption.appendChild(TABanchor);var TABspan=document.createElement(\"span\");TABspan.className=\"LaTeXtable\";TABspan.appendChild(document.createTextNode(\"Table \"+tabnmbr+\". \"));TABcaption.appendChild(TABspan);TABcaption.appendChild(document.createTextNode(\"\"+TABcap));nodeTmp.appendChild(TABcaption);}\nvar TABinfo=strtmparray[1].match(/\\\\begin\\s*\\{\\s*tabular\\s*\\}([\\s\\S]+)\\\\end\\s*\\{\\s*tabular\\s*\\}/);if(TABinfo!=null){var TABtbody=document.createElement('tbody');var TABrow=null;var TABcell=null;var row=0;var col=0;var TABalign=TABinfo[1].match(/^\\s*\\{([^\\}]+)\\}/);TABinfo=TABinfo[1].replace(/^\\s*\\{[^\\}]+\\}/,\"\");TABinfo=TABinfo.replace(/\\\\hline/g,\"\");TABalign[1]=TABalign[1].replace(/\\|/g,\"\");TABalign[1]=TABalign[1].replace(/\\s/g,\"\");TABinfo=TABinfo.split(\"\\\\\\\\\");for(row=0;row<TABinfo.length;row++){TABrow=document.createElement(\"tr\");TABinfo[row]=TABinfo[row].split(\"&\");for(col=0;col<TABinfo[row].length;col++){TABcell=document.createElement(\"td\");switch(TABalign[1].charAt(col)){case\"l\":TABcell.align=\"left\";break;case\"c\":TABcell.align=\"center\";break;case\"r\":TABcell.align=\"right\";break;default:TABcell.align=\"left\";};TABcell.appendChild(document.createTextNode(TABinfo[row][col]));TABrow.appendChild(TABcell);}\nTABtbody.appendChild(TABrow);}\nnodeTmp.appendChild(TABtbody);}\nnewFrag.appendChild(nodeTmp);break;case\"logicalbreak\":var nodeTmp=document.createElement(\"p\");nodeTmp.className=strtmparray[1];nodeTmp.appendChild(document.createTextNode(\"\\u00A0\"));newFrag.appendChild(nodeTmp);break;case\"appendix\":inAppendix=true;sectionCntr=0;break;case\"alistitem\":var EndDiv=document.createElement(\"div\");EndDiv.className=\"endlistitem\";newFrag.appendChild(EndDiv);var BegDiv=document.createElement(\"div\");BegDiv.className=\"listitem\";if(strtmparray[1]!=\" \"){var BegSpan=document.createElement(\"span\");BegSpan.className=\"listitemmarker\";var boldBegSpan=document.createElement(\"b\");boldBegSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"));BegSpan.appendChild(boldBegSpan);BegDiv.appendChild(BegSpan);}\nnewFrag.appendChild(BegDiv);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"bibitem\":newFrag.appendChild(document.createElement(\"br\"));var nodeTmp=document.createElement(\"a\");nodeTmp.className='bibitem';var nodeSpan=document.createElement(\"span\");nodeSpan.className='bibitem';bibcntr++;var lbl=strtmparray[1].match(/\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\s*\\{\\s*\\w+\\s*\\}/g,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s*\\[/,\"\");strtmparray[1]=strtmparray[1].replace(/\\s*\\]$/,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s+|\\s+$/g,\"\");if(lbl==null){biblist[bibcntr]=\"bibitem\"+bibcntr}else{biblist[bibcntr]=lbl[1];};nodeTmp.name=biblist[bibcntr];nodeTmp.id=biblist[bibcntr];if(strtmparray[1]!=\"\"){nodeSpan.appendChild(document.createTextNode(strtmparray[1]));}else{nodeSpan.appendChild(document.createTextNode(\"[\"+bibcntr+\"]\"));}\nnodeTmp.appendChild(nodeSpan);newFrag.appendChild(nodeTmp);break;case\"cite\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='cite';nodeTmp.name='cite';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;case\"ref\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='ref';nodeTmp.name='ref';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"div\");nodeTmp.className=strtmparray[0];if(IsCounter.test(strtmparray[0])){LaTeXCounter[strtmparray[0]]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className=strtmparray[0];var divnum=makeNumberString(LaTeXCounter[strtmparray[0]]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=strtmparray[0];anchorSpan.appendChild(document.createTextNode(divnum));anchorSpan.style.display=\"none\";nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"+divnum+\". \"));nodeTmp.appendChild(nodeSpan);}\nif(isIE){if(strtmparray[0]==(\"thebibliography\"||\"abstract\"||\"keyword\"||\"proof\")){var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]));nodeTmp.appendChild(nodeSpan);}}\nif(strtmparray[0]==\"endenumerate\"||strtmparray[0]==\"enditemize\"||strtmparray[0]==\"enddescription\"){var endDiv=document.createElement(\"div\");endDiv.className=\"endlistitem\";newFrag.appendChild(endDiv);}\nnewFrag.appendChild(nodeTmp);if(strtmparray[0]==\"enumerate\"||strtmparray[0]==\"itemize\"||strtmparray[0]==\"description\"){var endDiv=document.createElement(\"div\");endDiv.className=\"listitem\";newFrag.appendChild(endDiv);}}}else{strtmp[j]=strtmp[j].replace(/\\\\\\$/g,\"<per>\");strtmp[j]=strtmp[j].replace(/\\$([^\\$]+)\\$/g,\" \\\\[$1\\\\[ \");strtmp[j]=strtmp[j].replace(/<per>/g,\"\\\\$\");strtmp[j]=strtmp[j].replace(/\\\\begin\\s*\\{\\s*math\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*math\\s*\\}/g,\" \\\\[$1\\\\[ \");var strtmptmp=strtmp[j].split(\"\\\\[\");for(var jjj=0;jjj<strtmptmp.length;jjj++){if(jjj%2){var nodeTmp=document.createElement(\"span\");nodeTmp.className='inlinemath';nodeTmp.appendChild(document.createTextNode(\"$\"+strtmptmp[jjj]+\"$\"));newFrag.appendChild(nodeTmp);}else{var TagIndex=strtmptmp[jjj].search(/\\\\\\w+/);var tmpIndex=TagIndex;while(tmpIndex>-1){if(/^\\\\textcolor/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\textcolor\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[textcolor\\\\]$1\\\\]|\");}else{if(/^\\\\colorbox/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\colorbox\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[colorbox\\\\]$1\\\\]|\");}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).replace(/\\\\\\s*(\\w+)\\s*/,\" \\\\[$1\\\\]|\");}}\nTagIndex+=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\|/);TagIndex++;strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\]\\|/,\"\\\\] \");if(strtmptmp[jjj].charAt(TagIndex)==\"{\"){strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);var delimcnt=1;for(var kk=TagIndex;kk<strtmptmp[jjj].length;kk++){if(strtmptmp[jjj].charAt(kk)==\"{\"){delimcnt++};if(strtmptmp[jjj].charAt(kk)==\"}\"){delimcnt--};if(delimcnt==0){break;}}\nstrtmptmp[jjj]=strtmptmp[jjj].substring(0,kk)+\"\\\\[ \"+strtmptmp[jjj].substring(kk+1,strtmptmp[jjj].length);TagIndex=kk+3;}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+\"\\\\[ \"+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);TagIndex=TagIndex+3;}\nif(TagIndex<strtmptmp[jjj].length){tmpIndex=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\\\\\w+/);}\nelse{tmpIndex=-1};TagIndex+=tmpIndex;}\nstrtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\\\s*\\\\\\\\/g,\"\\\\\\\\\");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\/g,\" \\\\[br\\\\] \\\\[ \");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/g,\" \\\\[a\\\\]$1\\\\[ \");var strlbls=strtmptmp[jjj].split(\"\\\\[\");for(var jj=0;jj<strlbls.length;jj++){if(jj%2){var strtmparray=strlbls[jj].split(\"\\\\]\");switch(strtmparray[0]){case\"textcolor\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.color=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.color=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"colorbox\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.background=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.background=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"a\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathMLlabel';nodeTmp.id=strtmparray[1];nodeTmp.style.display=\"none\";newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"span\");nodeTmp.className=strtmparray[0];nodeTmp.appendChild(document.createTextNode(strtmparray[1]))\nnewFrag.appendChild(nodeTmp);}}else{newFrag.appendChild(document.createTextNode(strlbls[jj]));}}}}}}}};TheBody.parentNode.replaceChild(newFrag,TheBody);}}}\nreturn TheBody;}\nfunction LaTeXDivsAndRefs(thebody){var TheBody=thebody;var EndDivClass=null;var AllDivs=TheBody.getElementsByTagName(\"div\");var lbl2id=\"\";var lblnode=null;for(var i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){EndDivClass=EndDivClass[0];var DivClass=EndDivClass.substring(3,EndDivClass.length);var EndDivNode=AllDivs[i];break;}}\nwhile(EndDivClass!=null){var newFrag=document.createDocumentFragment();var RootNode=EndDivNode.parentNode;var ClassCount=1;while(EndDivNode.previousSibling!=null&&ClassCount>0){switch(EndDivNode.previousSibling.className){case EndDivClass:ClassCount++;newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);break;case DivClass:if(EndDivNode.previousSibling.nodeName==\"DIV\"){ClassCount--;if(lbl2id!=\"\"){EndDivNode.previousSibling.id=lbl2id;lbl2id=\"\"}\nif(ClassCount==0){RootNode=EndDivNode.previousSibling;}else{newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}};break;case'LaTeXMathMLlabel':lbl2id=EndDivNode.previousSibling.id;EndDivNode.parentNode.removeChild(EndDivNode.previousSibling);break;default:newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}}\nRootNode.appendChild(newFrag);EndDivNode.parentNode.removeChild(EndDivNode);AllDivs=TheBody.getElementsByTagName(\"DIV\");for(i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){ClassCount=0;EndDivClass=EndDivClass[0];DivClass=EndDivClass.substring(3,EndDivClass.length);EndDivNode=AllDivs[i];RootNode=EndDivNode.parentNode;break;}}}\nvar AllDivs=TheBody.getElementsByTagName(\"div\");var DIV2LI=null;for(var i=0;i<AllDivs.length;i++){if(AllDivs[i].className==\"itemize\"||AllDivs[i].className==\"enumerate\"||AllDivs[i].className==\"description\"){if(AllDivs[i].className==\"itemize\"){RootNode=document.createElement(\"UL\");}else{RootNode=document.createElement(\"OL\");}\nRootNode.className='LaTeXMathML';if(AllDivs[i].hasChildNodes()){AllDivs[i].removeChild(AllDivs[i].firstChild)};while(AllDivs[i].hasChildNodes()){if(AllDivs[i].firstChild.hasChildNodes()){DIV2LI=document.createElement(\"LI\");while(AllDivs[i].firstChild.hasChildNodes()){DIV2LI.appendChild(AllDivs[i].firstChild.firstChild);}\nif(DIV2LI.firstChild.className==\"listitemmarker\"){DIV2LI.style.listStyleType=\"none\";}\nRootNode.appendChild(DIV2LI)}\nAllDivs[i].removeChild(AllDivs[i].firstChild);}\nAllDivs[i].appendChild(RootNode);}}\nvar AllAnchors=TheBody.getElementsByTagName(\"a\");for(var i=0;i<AllAnchors.length;i++){if(AllAnchors[i].className==\"ref\"||AllAnchors[i].className==\"cite\"){var label=AllAnchors[i].href.match(/\\#(\\w+)/);if(label!=null){var labelNode=document.getElementById(label[1]);if(labelNode!=null){var TheSpans=labelNode.getElementsByTagName(\"SPAN\");if(TheSpans!=null){var refNode=TheSpans[0].cloneNode(true);refNode.style.display=\"inline\"\nrefNode.className=AllAnchors[i].className;AllAnchors[i].appendChild(refNode);}}}}}\nreturn TheBody;}\nvar AMbody;var AMnoMathML=false,AMtranslated=false;function translate(spanclassAM){if(!AMtranslated){AMtranslated=true;AMinitSymbols();var LaTeXContainers=[];var AllContainers=document.getElementsByTagName('*');var ExtendName=\"\";for(var k=0,l=0;k<AllContainers.length;k++){ExtendName=\" \"+AllContainers[k].className+\" \";if(ExtendName.match(/\\sLaTeX\\s/)!=null){LaTeXContainers[l]=AllContainers[k];l++;}};if(LaTeXContainers.length>0){for(var m=0;m<LaTeXContainers.length;m++){AMbody=LaTeXContainers[m];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nif(AMbody.tagName==\"PRE\"){var PreChilds=document.createDocumentFragment();var DivChilds=document.createElement(\"DIV\");while(AMbody.hasChildNodes()){DivChilds.appendChild(AMbody.firstChild);}\nPreChilds.appendChild(DivChilds);AMbody.parentNode.replaceChild(PreChilds,AMbody);AMbody=DivChilds;}\nAMprocessNode(AMbody,false,spanclassAM);}}else{AMbody=document.getElementsByTagName(\"body\")[0];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nAMprocessNode(AMbody,false,spanclassAM);}}}\nif(isIE){document.write(\"<object id=\\\"mathplayer\\\" classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");}\nfunction generic()\n{translate();};if(typeof window.addEventListener!='undefined')\n{window.addEventListener('load',generic,false);}\nelse if(typeof document.addEventListener!='undefined')\n{document.addEventListener('load',generic,false);}\nelse if(typeof window.attachEvent!='undefined')\n{window.attachEvent('onload',generic);}\nelse\n{if(typeof window.onload=='function')\n{var existing=onload;window.onload=function()\n{existing();generic();};}\nelse\n{window.onload=generic;}}\n"),("MathMLinHTML.js","/*\nMarch 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\n\nfunction convertMath(node) {// for Gecko\n  if (node.nodeType==1) {\n    var newnode =\n      document.createElementNS(\"http://www.w3.org/1998/Math/MathML\",\n        node.nodeName.toLowerCase());\n    for(var i=0; i < node.attributes.length; i++)\n      newnode.setAttribute(node.attributes[i].nodeName,\n        node.attributes[i].value);\n    for (var i=0; i<node.childNodes.length; i++) {\n      var st = node.childNodes[i].nodeValue;\n      if (st==null || st.slice(0,1)!=\" \" && st.slice(0,1)!=\"\\n\")\n        newnode.appendChild(convertMath(node.childNodes[i]));\n    }\n    return newnode;\n  }\n  else return node;\n}\n\nfunction convert() {\n  var mmlnode = document.getElementsByTagName(\"math\");\n  var st,str,node,newnode;\n  for (var i=0; i<mmlnode.length; i++)\n    if (document.createElementNS!=null)\n      mmlnode[i].parentNode.replaceChild(convertMath(mmlnode[i]),mmlnode[i]);\n    else { // convert for IE\n      str = \"\";\n      node = mmlnode[i];\n      while (node.nodeName!=\"/MATH\") {\n        st = node.nodeName.toLowerCase();\n        if (st==\"#text\") str += node.nodeValue;\n        else {\n          str += (st.slice(0,1)==\"/\" ? \"</m:\"+st.slice(1) : \"<m:\"+st);\n          if (st.slice(0,1)!=\"/\")\n             for(var j=0; j < node.attributes.length; j++)\n               if (node.attributes[j].value!=\"italic\" &&\n                 node.attributes[j].value!=\"\" &&\n                 node.attributes[j].value!=\"inherit\" &&\n                 node.attributes[j].value!=undefined)\n                 str += \" \"+node.attributes[j].nodeName+\"=\"+\n                     \"\\\"\"+node.attributes[j].value+\"\\\"\";\n          str += \">\";\n        }\n        node = node.nextSibling;\n        node.parentNode.removeChild(node.previousSibling);\n      }\n      str += \"</m:math>\";\n      newnode = document.createElement(\"span\");\n      node.parentNode.replaceChild(newnode,node);\n      newnode.innerHTML = str;\n    }\n}\n\nif (document.createElementNS==null) {\n  document.write(\"<object id=\\\"mathplayer\\\"\\\n  classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");\n  document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");\n}\nif(typeof window.addEventListener != 'undefined'){\n  window.addEventListener('load', convert, false);\n}\nif(typeof window.attachEvent != 'undefined') {\n  window.attachEvent('onload', convert);\n}\n"),("reference.docx","PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\224\171\193D\185\190\SI8^\SOH\NUL\NUL%\ACK\NUL\NUL\DC3\NUL\FS\NUL[Content_Types].xmlUT\t\NUL\ETX\ETX\254\139S\ACK\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\181\148\203j\195\&0\DLEE\247\249\n\163m\177\149tQJ\137\147E\US\203\&6\208\244\ETX\DC4y\156\136\234\133\&4y\253}\199vcJ\tv\200cc\176g\230\222\163\203\200\227\233\206\232d\ETX!*gs6\202\134,\SOH+]\161\236\&2g_\243\183\244\145M'\131\241|\239!&\212kc\206V\136\254\137\243(W`D\204\156\aK\149\210\ENQ#\144^\195\146{!\191\197\DC2\248\253p\248\192\165\179\b\SYNS\172\&4\216d\252\STX\165XkL^w\244\185\241\165q\150<7}\149U\206\132\247ZI\129T\230u\149\US\GS\f\160c\199\228\198\SYN\255\240\210_\180\140&\235\158\184R>\222\GS,>(\138\160\nHf\"\224\187\&0\164\199\183.\DC4|\v\139O@\164Xb\214M{\196\211\149\165\146P8\185\&64\146U\130>8\t1\146\158\209\217\US\241~\DC2\187\&6\v\b\212{}\142V\186\159\"\222,\140xr\DC2H\251\a\205st1G-\211\239Y\146\195\\,4\\\255\224\173t'\ENQ\205\207\130\243\145\147\219\197\fP\221\164\STX\138\148@<\EOTT\208\GS{k.]8#\129\195\221\171\166O\181l\182\r\247\SUBn\177k\181n\191\DEL\171pu\130\182b\132\178\167\172\159C\235\240\SYNY\180\210-\ENQ\175\255\250\147\193\SIPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\142\236\DC2\EM\220\NUL\NUL\NUL?\STX\NUL\NUL\v\NUL\NUL\NUL_rels/.rels\173\146\207J\ETXA\f\135\239>\197\144{7\219*\"\210\221^\164\208\155H}\128\&0\147\221\GS\236\252!\DC3\181\190\189#\136Z\169\165\a\143\147\249\229\203G\200r\181\SI;\243\194R|\138\GS\204\155\SYN\fG\155\156\143c\a\143\219\245\236\ACKV\253\197\242\129w\164\&5R&\159\139\169=\177t0\169\230[\196b'\SOT\154\148\&9\214\159!I \173O\EM1\147}\162\145q\209\182\215(?\EM\208\US0\205\198u \ESC7\a\179}\203|\SO;\r\131\183|\151\236s\224\168GF\252JT2\201\200\218\193k\DC2\135\238\179\220T,\CAN<\174s\245\159:\188W\142\142\221,K\237\ETB\245\\\190\157\170\206}-\ETB\164\156O*]\158\175\244\247\246\&1\176\146#%\180I\248\180\208G\226\203\b\SI\SO\161\DEL\aPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\247\171\193D\232\150\&1\DC2\v\SOH\NUL\NUL\209\STX\NUL\NUL\DC1\NUL\FS\NULword/document.xmlUT\t\NUL\ETX2\254\139S2\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157\146MN\196\&0\f\133\247s\138*\251\&6\GS\SYN\bUmg3B\FS\NUL\SO\DLERw\SUB)\137#'m\225\246\164?\SOH\177\NULU\179yVd\191O\182\227\250\242at6\SOHy\133\182a\231\162d\EMX\137\157\178\183\134\189\189>\231O\236\210\158\234\185\234P\142\ACKl\200\162\193\250jn\216\DLE\130\171\&8\247r\NUL#|\129\SOl\204\245HF\132\248\164\ESC\159\145:G(\193\251\200\&3\154?\148\229#7BY\182c\204\DC1\f\246\189\146p\221\ESCH\144\&0$\b\221\v!\208\"\196\193\253\160\156O4l\216H\182\218Q\185Q\146\208c\USr\137\166\218({H\142\233?\199dt\170\155\207\229\SOH\246\178\180\228\DLEG&\235H\204\DEL\172\215)y\a!\186\194H\223\227\205\238\SO\198\239\175\191nI\214\198Cz\199\238s\137n\DC1Zd\189\169\202;!\161a\142\192\ETXM\192\218\ETB\208\SUB\179\b\210]Q\243X\214.J\171\186U7\DC4\255\&9\206\246\244\ENQPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\232\171\193D\208\179\r$\252\NUL\NUL\NUL1\EOT\NUL\NUL\FS\NUL\FS\NULword/_rels/document.xml.relsUT\t\NUL\ETX\DC3\254\139S\DC3\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\181\211OO\195 \CAN\ACK\240\251>\ENQy\239\150v\234\&4\203\218]\140\201\174Z?\NULm\223\254\137\ENQ\SUBx\167\238\219K\220\STX\204x\240\194\145<\240\240\131\192n\255%g\246\129\198NZ\149Pd90T\173\238&5\148\240V?\223<\194\190Z\237^p\SYN\228\166\216qZ,sk\148-a$Z\182\156\219vD)l\166\ETBT.\233\181\145\130\220\208\f|\DC1\237\187\CAN\144\175\243|\195M\220\SOH\213U'\171O\v\254\167Q\247\253\212\226\147n\143\DC2\NAK\253Q\204\213Q6h\156\US\216\161+\193\FS\186\STXX-\204\128T\130\SI3\215\v\140'SX:\205h=a\GS\b\231$\249\254H\228\142\EM\EOT\183\145\224\146\165\&6|b\243\250\155q\ETB\CANQ\156Z\210kE\181hf\244\142\251\224\240aj\ENQ\185\181A\176\t\130\159\224\FS\ETB\233\175B\147\210\DC4\189\205\135\248*.\161W\240\171\159_\173\190\SOHPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\141\231\194\&4o\NUL\NUL\NUL}\NUL\NUL\NUL\GS\NUL\NUL\NULword/_rels/footnotes.xml.relsM\140A\SO\STX!\fE\247\158\130t\239\DC4]\CANc\134\153\157\a0z\128\ACK+\DLE\135B(1\RS_\150.\DEL\222{\DEL^\191y3\USn\154\138\&88L\SYN\f\139/\207$\193\193\227~\221\159a]v\243\141\&7\234C\209\152\170\154\209\136:\136\189\215\v\162\250\200\153t*\149e\144Wi\153\250\152-`%\255\166\192x\180\246\132\237\255\ETX\f.?PK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194DO\174i\165h\SOH\NUL\NUL\204\ACK\NUL\NUL\DC2\NUL\NUL\NULword/numbering.xml\197\149\205n\131\&0\f\199\239{\n\148\251\SUB\190FiU\218[\165N\211\180C\247\NUL\SOH\210\&6R\DC2P\DC2h\247\246s\178B\215\RSP\197\133\v&\246\223\142\DEL\160\196\171\205Ep\175\165J\179Jf(\152\249\200\163\178\168J&\143\EM\250\222o_S\180Y\191\172\206K\217\136\156*p{\144!\245\242\156\161\147\&1\245\DC2c]\156\168 zV\213TB\236P)A\f,\213\DC1\159+U\214\170*\168\214\144)8\SO}?\193\130\&0\137\214P\147\228\218(R\152\207Fxw\171]\153!\223I\164f%\196Z\194\&3D\131\249!Y\228\EOTy\216\134D\195\r\251\160-\229\251\159\154v\"\231\229\214{\149\241\150C\140\129\233k6b+L\151\144\&7\156Ss\DC3\239\233\165\143y7\247{\209\&99=t\242\250KYc\160\245\171\237D\176\a\130\247\186\210vW\171\198\&7\GS\147\150\201\214\201P\156\250Vx\"\242\232\190\185[\255\201]u\236v\DEL\EOT\t&\SOH\153\135\131(\SOH\252\221\DC1,\225$,A\FS\SI\195,\194\&10\209$0a\144\f\194\132I<\ACK&\158\ACK&M\aa\162(\EM\ETX\243\&6\t\f\244:|\252\253Q\231?\153\EOT&\142\134/\NUL\232\253\&9\CAN|w\219_Q<\247\180W\DEL\240\&8\GSv\253\f\232\235I\155\135\255\205\165\245/PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\b\157\ETBE\FS\165\153\197!\ACK\NUL\NUL\222\&2\NUL\NUL\SI\NUL\FS\NULword/styles.xmlUT\t\NUL\ETX\144P\249S\144P\249Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237Z]w\155\&8\DLE}\239\175\224\240\222\SUBc'qs\226\246\&8N}\154\179\253Hk\167}\150A\182U\ETXb%\145\143\253\245;\STX\132\SOH\v\236`6I\187\233K\163\185\131tgt5\DC2\194g\239\239|\207\184\193\140\DC3\SUB\f\205\238\ESC\203\&4p\224P\151\EOT\203\161y=\155\188\RS\152\239\223\189:\187=\229\226\222\195\220\NUL\247\128\159\178\161\185\DC2\"<\237t\184\179\194>\226oh\136\ETX\192\SYN\148\249H@\147-;t\177 \SO\190\160N\228\227@tl\203:\238\&0\236!\SOHC\241\NAK\t\185\153\246v\187Oo\183\148\185!\163\SO\230\FS\184\249^\210\159\143H`\190{e\CAN\192\208\165\206\ENQ^\160\200\DC3\\Zb\ESC\187b\169-1)\163j%\237\t\r\EOT7nO\DC1w\b\153\SOH\ENQ<4}\DC2P\246q\DC4pb\STX\130\DC1\ETB#N\144\SYN\\\201?\180\136\195E\206|N\\\176v\nc\243\DEL\192\237\ACKyC\211\238occ^\141z(X*\DC4\a\175\175\167y\158\&9\211\FSF\GS\154\136\189\158\142r]\156uryH\ESC\133L\193\b\161.ya)y<D\SO\137\153\160\133\192 \f\152\151\210\&8a~\156b\167\210R\154\183\&84\SOH\138\153&\138\ETX\a\188\248D\157\&5v\167\STX\128\161i\153\137\241\250\242\138\DC1\202\136\184\223\216\166\216'\US\137\235\226 \231\ETB\172\136\139\DEL\174pp\205\177\187\177\DEL\155\196\250J\r\SO\141\STX\248\219>9N\233+\209\ETX&\238C\CAN7D\f-\EM\nW\233\243\146\&2\172\EM\217\138\GS/\161\239/\178K\207\204r\CAN \US\171YJ1\149\FS@\255N\CAN\228,\185\244\SYN\146;\199\176\CAN\128Cw\DLE\147Ms\GS\183:\133\228\170\172\198\140v\135\145\DC1\USS\US\ACK\DC3z\230\n\204\DC1\157#\200\229\215\160\205\216z\199\185\208z\199mE6#\194\195\250\184\DC2\232!Q\ENQ\248N4\143y\141q\248E\246\208)\EM?\145\NUL\164\222\169MO\191\&0\245v\191\176\204nO\DEL9\138\151\ETX\139\a3]\250\202\229\175\178\248\161_5\197O\130\USR\219V\253+<\185\169\DEL\210\\\170\DEL2\221\197\214\184\152\STX\135z\148\169\160z\253\163\209`$;\141\187\FSK\f\202\154#\131\237f\230\233\n\185\&0\220\249Qq\156M\149\205\201j\171\198\150$\199\182%\183\167\226\166\209\\$\162\&3\234\254\233\DC4\153=Z-\202-\209>\161&c\NAK\182\174\201\220tY5\211ei\166\171I\129\CANEbE\153\190B\164\216Sd{\159\228\&5\t\247\STX6Q}\176\&1\242'\133:\154s\193*w\181\f\253M6\128\158\149_l=K\187\247\215.'\187f9\217\186\229\212(\235\231d\238\DC1\SUB\219\239\245\153/x4\205~U'\218\&9\200\181\152j5\137\237#F\242\221\168\171\143+E\141n\139\146\138\136:\229*\159\183Ot\228(\137\135F\194\131>>\221x\138\216\190\130\252\191\157\&9\236\154M\204nk\213\165\218\179\235\149i?\158\&2\163\194k\215\163\157H\172\aI\182\251\135I\182?\EMt\207/*%\251\f\EOT\218\171\ETBh\239E\160/\STX-\v\212\RS\212\156[\ACK-\v\180_/\208\254\139@_\EOT\186%\208~\141@\251-\v\244\168^\160G/\STX\253\253\EOTJ\138\173\223T\160\231\RSu\214\223\"Zu\193\DLE\227F\226\240\252E\170\185}/(\175\187\247\ESC\248\211\214\190\146\152\RS\251:`B\169\b`\198g0\137zY(\SI#vi*\140\194\&8m\203\163>pg\133\228E\146\188\184\170\252\&2\148~\227\186R9\146\146\168\184\134K<\141\204\213\136}s\212x\246\149kG \245\180\ENQ\154\203\155\228J\202\&3\137\239\254\162e\204\146~\SUB\240\171X\135b\238\NAK\214\SI\180/\ETX\ETBF\189M?\214%\252\221;T\DC40\248\141\177\231}F\197o\148\130\134;\158\141\221<\188\DLE\137_\215\SUB\212z\206\169\DLE\212\223\167OF\150\171\221\157\202i*sOm\a\220\243\226\ENQ\t\136\252\218>\195\204\175\148Z\234c\196NM\215\222\166\US\179\178\156\&6\218\243\183\&6\249\250B;o\169f\229\226\217\145\183}S\214h;\165\238}u\213\148\232\195+&\FS\142\214\249\RSd\ac(_\213\243\182\&5\EM]\187\181\175\206q\229\CAN\163\176:\211\177\135\161\\\RS+R\181\225\ETB\182{}\216\SUB\NAK\146\150Tx\233\163e}vb\143?>;\133\237\213\137\&8\212\222\248\199!\229\253\170\DLEG\253\154\&1\202\177\150\DC2\166\221\173w\164o\175\149\190o,?0\155#A\252\234X\148\199\174P\170f\183\238\136*\DEL\242\DC1p\234!\158\157=\243\166\138\227d\131\171\194}\211\161\SOw\223\241b\199\EMRz\FS\154\140\ESC\204\196\200#\203\236\&1\RS\133\152q\135\145P\252w1\194>\184\214\a\ETB#\135\ACK\213\224%R\USb}\245\170\tpJ#\230\192X.\188\RS\150\"L #\198`\244\186\nVZ}\133\133\146\192\178\246\192\DEL\242'\131?\129\150\242\164\139X\EM\170:m\"j<c\DEL\225{9\200\140\174\183\STX\202A\218x4\180YB\187\&0O\150ub%\149\&5=\221\168)i\129\253\ENQ\DC2h\ACKO\232\232\231\177C\248\191\ENQ\246\201kr\155\196\177\243\ETXyZ\218\EMr\b\233\190\133 \237-\147>\a*_t\156\&3\224\217Q\158x\DC4\t\GS\229\fxv\148\229\152:\198\202~\CAN\225\DC3\160\220\&2\225\169`p\168\210Q\222 \207\142\244\152\250\242\&7\221\218Do\160Ch\US\ETX\233\185\170{\164]\246_a\203\211\138$\ETXZ\170\216\237Q\RSyp\"\209Q\206\128C(/\SYN\150*\210\173o2\147(p\226;\b]\EM\201a\a\165\252\216\RS\156\224\150S\254\GS/\129\218g\196\214z\177\148\241\a\EOT\144\DC2=\144\224\a\198\168\150Y\ACK<WM$g9\GS\245\r\210\&8\157\234/\254\238\213\191PK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D(\130*b\219\NUL\NUL\NULs\STX\NUL\NUL\DC2\NUL\NUL\NULword/footnotes.xml\157\209\193j\196 \DLE\ACK\224{\159\"x\207\154\221C)\178\217\189,}\130\246\SOH\196\232F\136\142\204L\226>~-\ESC\v=\180\132\156D\198\255\131\DEL<_\USaj\SYN\139\228!\246\226x\232Dc\163\129\193\199{/>?\222\219\&7q\189\188\156\179r\NUL\FS\129-5%\DC1I\229^\140\204IIIf\180A\211\SOH\146\141e\230\NUL\131\230r\197\187\204\128CB0\150\168\128a\146\167\174{\149A\251(V&la\192\&9o\236\r\204\FSl\228\138\240X\DC1\220\139\160\157\&4\151\230\&4\250DU\131^\204\CAN\213J\181\193\ESC\EOT\STX\199\173\129\160\158\202z\212\196\242_b\tS}\151\143\221\ACK\251{i5\161\183\&4\ESCP\231?\214\155\188\217!\148\DC4\207\248S/\167\GS\198\239\175\191=\135\162\145\151/PK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\128\221u\231\218\NUL\NUL\NUL\137\SOH\NUL\NUL\DC1\NUL\NUL\NULdocProps/core.xmlm\144MK\196@\f\134\239\254\138\&2\247\&6\237\n\"\165\237\222<\185 \168\224u\200\196\238\176\157\SI2\209\174\255\222\177j+\184\183$\239\147\135\153t\251\179\155\138w\226d\131\239US\213\170 \143\193X?\246\234\249\233\174\188U\251\225\170\195\216b`z\224\DLE\137\197R*\242\158O-\198^\GSEb\v\144\240HN\167*\DC3>\135\175\129\157\150\220\242\bQ\227I\143\EOT\187\186\190\SOHG\162\141\SYN\r_\194\&2\174F\245\163\&4\184*\227\ESCO\139\192 \208D\142\188$h\170\ACK6V\136]\186\184\176$\DELHg\229#\210E\244\&7\\\233s\178+8\207s5_/h~\DEL\ETX/\135\251\199\229\171\165\245I\180GRCg\176\NAK+\DC3\r\GSle\174\144IK\224\239\241\214\252;\231\240\tPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\SOHdNFd\SOH\NUL\NUL\212\STX\NUL\NUL\DLE\NUL\NUL\NULdocProps/app.xml\157R\203N\195\&0\DLE\188\247+\162\220\137Ky\170r]!\DLE\226\NUL\b\169)\156-{\147X8\182e\ESC\EOT\DEL\207n\211\134 8\145\211\238\204\206\236f\DC2\190\254\232m\241\SO1\EM\239V\229q5/\vp\202k\227\218U\185\173o\143.\203\181\152\241\167\232\ETX\196l \NAK(piUv9\135%cIu\208\203T!\237\144i|\236e\198\&6\182\204\&7\141Qp\227\213[\SI.\179\197|~\206\224#\131\211\160\143\194hX\SO\142\203\247\252_S\237\NAK\221\151\158\235\207\128~bV\DC4\252\197G\157\196\229\tgCE\216\166\147\DC14jE#m\STX\206\190\SOH\162\239P\GS\173q\175\233\186\147\174\ENQ}\CAN\251M\208\248\189q\144\196\241\130\179\161\"\236*\132\231!K$\170\&9>\156M\176\189\236\&5mC\237od\134\195\134\159\224\222\201\SUB%3\201\RS\140\138>\249&\ETB\244.\ENQ9W\131\241\&8B\DC2<.J\149q\215\139\201\221&H\133W\157Q\EOT\DEL2$\169\161\SI\150V>R\196\182\210>\247\156\141(\141`:\ESCPo\209\228O\129K\167\237\206\193gik\211\131\&8G\225\216\236\226V\210\194\&5~\152\&1\238\DC1\248y\174\&8\189\&8\155\RS\185\163\159\176k\163\f\GS~E\206&\221@\182\148=\225T\204\176\CAN\255'\241\ENQPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D=\149\n\180\EM\ACK\NUL\NUL\250\GS\NUL\NUL\NAK\NUL\NUL\NULword/theme/theme1.xml\237YMo\219\&6\CAN\190\239W\DLE\186\183\178l+u\130:E\236\216\237\214\166\r\DC2\183C\143\180DKl(Q \233$\190\r\237q\192\128a\221\176\195\n\236\182\195\176\173@\v\236\210\253\154l\GS\182\SO\232_\CANE\201\DC2eS\141\147\182\219\138\&5\aG\164\158\231\253\230K\210\190|\229\&8\"\224\DLE1\142i\220\181\156\139\r\v\160\216\163>\142\131\174u{4\188\208\177\174l~p\EMn\136\DLEE\bHt\204\&7`\215\n\133H6l\155{r\SUB\242\139\&4A\177|7\161,\130B\SOY`\251\f\RSI)\DC1\177\155\141\198\154\GSA\FS[ \134\DC1\234Z\183&\DC3\236!0JEZ\155s\225\ETX\"?b\193\211\t\143\176}Oi\212\EM\n\235\US8\233?>\227}\194\192!$]K\234\241\233\209\b\GS\v\v\DLE\200\133|\209\181\SUB\234\207\STX\246\230e\187`\DC1QC\214\136C\245\&7'\230\f\255\160\169\136,\CAN\ETBLg\216^\191\180]jhf\SUB\150\129\131\193\160?pJ\137\n\SOH=Oz\235,\129\219\195\142\211+\164j\168\236qYz\191\225\&6\218\v\EOTMCk\137\176\222\235\245\220\245*\161U\DC2\218K\132Nc\173\189\213\172\DC2\218%\193]\246\161\183\213\239\175U\tnIX[\"\f/\173\175\181\ETB\b\n\NAK\DC2\FS\US,\193\211\204\150)*0\DC3J\174\EM\241\GS\137\239\DC4\181P\194l\173\210\&2\SOH\177\168\171\187\b\222\163l(\SOH*\203P\224\CAN\136Y\130&\208\147\184>$x\204\176\210\NUL7\DLE\212^\229s\RS_\158K\213\SOH\238\&1\156\136\174\245Q\STX\229\STX)1/\159\253\240\242\217\DC3pr\255\233\201\253\159O\RS<8\185\255\147\137v\r\198\129N{\241\221\231\DEL=\250\EOT\252\249\228\219\ETB\SI\191\172!p\157\240\219\143\159\254\250\203\ETB5H\161#\159\DEL\245\248\247\167\143\159\DEL\253\217\US\223?4\225\183\CAN\FS\235\248\DC1\142\DLE\a7\209\DC1\216\163Q\234\156A\ENQ\SUB\179\&3RF!\196:e+\SO8\140aJ2\193\a\"\172\192o\206 \129&`\SIU\ETXy\135\201\198`D^\157\222\171\CAN\189\US\178\169\192&\228\245\&0\170 w(%=\202\204\142]W\234\180XL\227\160F?\155\234\192=\b\SI\141\234\251\v\169\RSL\DC3Y\219\216(\180\US\162\138\169\187Df\US\ACK(F\STX\164\239\232\SOHB&\222]\140+\241\221\193\RS\163\156N\EOT\184\139A\SIbs`Fx,\204\172k8\146\t\154\EMm\148\169\175Dh\231\SO\232QbT\176\141\SO\171P\185L 1\nE\164\DC2\205\171p*`d\182\SUBFD\135\222\128\"4\SUB\186?c^%\240\\\200\164\a\136P0\240\DC1\231F\210-6\171\152|]\246\148\154\n\216!\179\168\ne\STX\US\CAN\161\&7 \165:t\155\RS\244C\CAN%f\187q\FS\234\224\SI\249\129\172X\bv\169\&0\219A\171k&\GS\203\132\192\184>\243w0\DC2g\\\241\183q\DLE\154\139%}3e\243\190^\233\208\DC1\142_\213\174#\217\173\225[h\215\178;>\255\230\209;\214\168\183d,\140kc\177=\215\STX\ETB\155r\159\&2\US\191\ESC=y\ESCN\227]\148\214\253\251\150\252\190%\191o\201\175X\229+7\226\178\247\218\250\161Z\t\140jO\216\DC3L\200\190\152\DC1t\131\171\174\205\165\221\254PN\170\129\"\NAK'\250$\148\143s}\NAK`\192\160z\ACK\140\138\143\177\b\247C\152H=\142R\DC1\240\\v\192AB\185\188IX\181\194\213\197\DC4K\247\213\156[\220&%\FS\138\GS\234g\243\173\202\&5\179\DLE\164F\SOH\215U\181R\DC1\171\170k]z]uN\134\\Q\159\227\214\232s_\173\207\214b*\215\ACK\128\233\247\ACK\206Z37\147{\144 ?\141~.a\158\157\183\152)\167\161\167*\132>2\205k>:\173\183\DC3S\247\140v\188\161X7\150cm//.\DC2WG\224\168k\173\187M\215\STX\RSL\186\214D\RS\153\228c\148H\129<\237(\144\EOTq\215\242D\230\228\233Ks\193\233\245\154\250r\SUBn\173\207\NAK%\t\227b\ESC\242\&0\163\169W\197\ETB*q\233B\211m\167\226\222\140\SI\166\246\178\162\GS\173\142\243\175\218a/f\CANM&\200\DC353\229\&0\DELG\167\STX\177\253\208?\STXc2e{PZ\222\206\170\204\199\\\238\EOT\205\249\128\201\&2o\231\ENQX]\198\249\&2Y\252\218&_>\144$!\204\203\190\163W@\134W\207\133\DC1j\164\217g\215\CAN\DELN_Zo\208\ETB\247\255\236KZ\190\242t\218\242\213\rJn\239\f\130\180N\187\SYNe\"\164\178\US%!\246\134L\RS\b\148\&2i\CAN\144kC\181,\146~\255\156\SUB\139\SO\181\SYN\150\t\201\SUB^\DLE\138=\FS\NUL\134e\215\DC3!ChW\228\158\158\"\205\153w\200|y\228\146\242\142S\CAN\204\147\236\255\CAN\GS\"2J\ETB\241Z\SUB\STX\v\132E[\201c\161\128\139\137\179Mkl\FS\f\255\203\135\154\246\&9w\162RU\251,\ESCb[\223\EOT\180\189a\253u\173Xe_\214\DC46k\220n\186\245\155\209\226\ACK\156\200\139\ACKH?d#\199\204#\229\DC1vD\247d\NAK\128\242\NUL K\242B'_\138\197\228XZ\221\209\253Ke\253SG\164N]\222\223\232\233R\139x\171.\226\167(<\DEL\196]C\192\221S\226m//X[\187\177\168\209\210OUt|O*\223\150W\162)\201fx\"G\217\195.\203|\RSS\DEL6\DEL&<k\DC1y4\230}\158\196{h\STX\176\DEL<O\239B\\\243_\130\202M~/S\146\ACK\160`\182V`\230\132ro)\216\205\NAK\216\ENQe~;,\216\234\214g\146@4\221\EM!\203v\209\&7\139\128\145\248\&5#\183\138\a\230\200\EMky\229\200\173\146\177sDN\FS\159\DC2\185<`\182\169\f\209\177`\176?\255yKVs.IU\240\230\223PK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D{\220H:\155\SOH\NUL\NUL\190\t\NUL\NUL\DC2\NUL\NUL\NULword/fontTable.xml\237\149]O\131\&0\DC4\134\239\247+HM\188s\DC4\134\147\225\216\226Gv\233\133\206x]X\EMMhK\218\&2\220\191\247\192\152\SO\182\136\&1\241\202\145\&4)o\223\158\158<9\167\157\206\223yfm\168\210L\138\DLE9C\140,*b\185bb\GS\162\215\229\226\202G\243\217`Z\ACK\137\DC4F[\224\SYN:P!J\141\201\ETX\219\214qJ9\209C\153S\SOHk\137T\156\CAN\248Uk[&\t\139\233\163\140\vN\133\177]\140\199\182\162\EM1p\146NY\174Q\DC3\173\252I\180R\170U\174dL\181\134\212x\182\139\199\t\DC3h6\184\188\152\220\&6)Ze \b\167!z\217\242Hf\205bc\200\137\144\154:\224\217\144,D\CANb\224k\220\250\144e\183\182\196)Q\154\154\175-]CB8\203\182\251uR\CAN\217u\228\204\196\233\222\176!\138\145(\163]\147fk\176\DC4:\194p\200g.\181\226\FS)n\173\&8\a\202\168\237\137\235\&8~[i\197iN\159\218;l\167\EM.\EM\167\218z\162\165\245,9\DC1}0]<\198#\NUL\234\193pa\230\245\193<\162\253w0G=0\SI\149\147\&0\ESC\193\249\&5\204\aY(FU\133\179\SI\228\r\192\155\212@+\144\222\EMd\v\228\ESC\\\NUL\213\253\164\191\199X\161s\234\225\ETXB\US\160\250\231\230>\172G\194#H\183\175\SYN\171f\222\&5u\213\220\238\185\SYN;\DLE3\ACK\DC4\251 .\234jtk\156g\136]\136w\144k\239K}\SI\245\231\&5\DLE\221\DEL\141p?\211\179\SIPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\210\159V\SOH\235\STX\NUL\NUL\242\a\NUL\NUL\DC1\NUL\NUL\NULword/settings.xml\157UMo\226\&0\DLE\189\247WD9/%|\135\bZ-P\218C\187BM\187w\199\153\128\133\GSG\182!K\DEL\253N N\178j\161hO\216\239\205\ESC\143'\158\199\228\254\143\224\206\RS\148f2\157\186\157[\207u \165\&2f\233z\234\190\191-[\190{\DELw3\201\ETX\r\198 \168\GS\DC4\164:\144Sw\167\210@\211\r\b\162[\130Q%\181LL\139J\DC1\200$a\DC4\202\US\183T\168\169\187\&1&\v\218\237Rt+3H\145K\164\DC2\196\224V\173\219'\201B\210\157\128\212\180\187\158\&7l+\224\196`yz\195\&2m\179\137\255\205\134\228\198&\217_\186\196^p\ESC\151w\188+\174\155K\NAKW\138k\202+\EOT\153\146\DC4\180\198\206\nn\vd\169M\163\249\&5yN\212\&3\139\DC4Q\135F\146\187\ESC\199\193/\247!\165p\242 \ETXE\177\vSw\140\223\184]r \"\136\195\131\&6 \150\&25\186\"\176.\153\132\134\CAN@\169\206\128\243\227\139\160\FS\bV\151\akE\132 \170B\172N\155\ETX\135\NAKIay,p\201\184\SOH\133\241{\130W\241<\175_\135\198\242\151\&4o\138\208\237\139\220C}t\f\t\217q\243F\162\208\200\204jG\221F\217\177\"9\214\243\168X\252$\NAK\251\192\210\t\SI3B\DC1\180\130\222\240k\193oP\134\209o\194\153\206\&89\212\185\ETB\181\254\SOH\167\229P\221\232\147\198\166\191BA7\EOTo\143\253)K\153\227QJr\ESCy\236\207\\\138L\225\ETXit\152\236a\165`\207 _1jv\n*\n\167\&8\214\197\186\218\189Ji\234\238\SI\198\222\194\ESC\149\169\170\152\198\215\233t\230\254\236<\223\DEL\232\142g\189\243\252w\249G~\DEL1\240\207\243\254b\232\SI/\228\159\249\195\217hp\129\159\247\253\197\ENQ~\222\ESCvG\227\243\252C\175\&3\248i\207\159\180\ESC\r\157\136\160\&0\142\149*\149\167m12\142\&8\169\159w\148\197\196yT$\141\161>B\EOT\145\218\206Xj\195\"\192\201\253\130\SIw\145\ri\181\154\180\SYN\132\243%\190\DC3K'\132\235\DEL\DC2\DC4\SIo\SOH\201Y\158\191\DLE\181\174+\240\154\156\186\192\229\138d\175l\189\&1\r\140\165\230\153\t\ESC\174wQ\184\203\154\154\DC4\GS\232\\\192\164\221l\"6\223\160mA\209\195gR\207!\164\173\247\176\&1#\\\133\133\189\193\v\201\178\211\184F\235\206\212\229Ea\157\194\137\f\238b\162\182\199M\180\238\150\\\247\200uO\220qCh\225\DEL\CAN].j\172k\177F\\\207b\189\SUB\235[\172_c\ETX\139\rjlh\177a\129m\SOh\189h\159[\244r\187,\240Dr.s\136\159j\254\DC3\212\176\ETB\160\f\159Bx\DLEQm\DC1\183\&5\207\153\&6!d\232(FV\134\251\227\200\ETB/\217\254}\223\253\ENQPK\ETX\EOT\DC4\NUL\STX\b\b\NUL\171\FS\194D\133\FST\206\156\NUL\NUL\NUL\199\NUL\NUL\NUL\DC4\NUL\NUL\NULword/webSettings.xml]\142;\SO\194\&0\DLED\251\156\194rOl(\DLE\138\242\DC1M\232\"\164\192\SOHL\178$\150lo\228\181\DC2\142\207BAA9\243\244FS6/\239\196\n\145,\134J\238s-\ENQ\132\SOHG\ESC\166J\222o\237\238$\155:+\ETX\233b\131G\SI)1!\193V\160\130\219J\206)-\133R4\204\224\r\229\184@`\250\196\232M\226\CAN'\181a\FS\151\136\ETX\DLE\177\236\157:h}T\222\216 \235L\136\239\184q\SO\183kw\DC1\234W\141\216a\234\205\ng\234\217s\208Z\a\US^\170\191;\245\ESCPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\224\171\193D\185\190\SI8^\SOH\NUL\NUL%\ACK\NUL\NUL\DC3\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\NUL\NUL\NUL\NUL[Content_Types].xmlUT\ENQ\NUL\ETX\ETX\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\142\236\DC2\EM\220\NUL\NUL\NUL?\STX\NUL\NUL\v\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\171\SOH\NUL\NUL_rels/.relsPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\247\171\193D\232\150\&1\DC2\v\SOH\NUL\NUL\209\STX\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\176\STX\NUL\NULword/document.xmlUT\ENQ\NUL\ETX2\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\232\171\193D\208\179\r$\252\NUL\NUL\NUL1\EOT\NUL\NUL\FS\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\ACK\EOT\NUL\NULword/_rels/document.xml.relsUT\ENQ\NUL\ETX\DC3\254\139Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\141\231\194\&4o\NUL\NUL\NUL}\NUL\NUL\NUL\GS\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULX\ENQ\NUL\NULword/_rels/footnotes.xml.relsPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194DO\174i\165h\SOH\NUL\NUL\204\ACK\NUL\NUL\DC2\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\STX\ACK\NUL\NULword/numbering.xmlPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\b\157\ETBE\FS\165\153\197!\ACK\NUL\NUL\222\&2\NUL\NUL\SI\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\182\129\154\a\NUL\NULword/styles.xmlUT\ENQ\NUL\ETX\144P\249Sux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D(\130*b\219\NUL\NUL\NULs\STX\NUL\NUL\DC2\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\EOT\SO\NUL\NULword/footnotes.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\128\221u\231\218\NUL\NUL\NUL\137\SOH\NUL\NUL\DC1\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SI\SI\NUL\NULdocProps/core.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\SOHdNFd\SOH\NUL\NUL\212\STX\NUL\NUL\DLE\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\DLE\NUL\NULdocProps/app.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D=\149\n\180\EM\ACK\NUL\NUL\250\GS\NUL\NUL\NAK\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\170\DC1\NUL\NULword/theme/theme1.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D{\220H:\155\SOH\NUL\NUL\190\t\NUL\NUL\DC2\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\246\ETB\NUL\NULword/fontTable.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\210\159V\SOH\235\STX\NUL\NUL\242\a\NUL\NUL\DC1\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\193\EM\NUL\NULword/settings.xmlPK\SOH\STX\NUL\NUL\DC4\NUL\STX\b\b\NUL\171\FS\194D\133\FST\206\156\NUL\NUL\NUL\199\NUL\NUL\NUL\DC4\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\219\FS\NUL\NULword/webSettings.xmlPK\ENQ\ACK\NUL\NUL\NUL\NUL\SO\NUL\SO\NUL\236\ETX\NUL\NUL\169\GS\NUL\NUL\NUL\NUL"),("reference.odt","PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\NUL\NULmimetypeapplication/vnd.oasis.opendocument.textPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL;\138\vC\163\159\SOHAJ\SOH\NUL\NUL\STX\ETX\NUL\NUL\b\NUL\FS\NULmeta.xmlUT\t\NUL\ETX\177)\bR\177)\bRux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\141R\203v\131 \DLE\221\231+<t\173\168\201\162\225\168\217u\221E\251\SOH\EOT'J\171\224\SOH\140\249\252\STXF\139I\ETBu\199}\204\220\153\177\&8\221\250.\186\130\210\\\138\DC2eI\138\"\DLEL\214\\4%\250\252x\139_\209\169\218\NAK\242r\225\fH-\217\216\131\&0q\SI\134\238\"\251Y\187\208d\166K4*A$\213\\\DC3A{\208\196\&0\"\a\DLE\139\141\132j\226\154\ENQ5n\GS\ETB\223%j\141\EM\b\198\211\&4%\211>\145\170\193\217\241x\196\158\r\229\&5[\181\195\168:\175\172\EM\134\SO\\'\141\179$\195\161\222%\254o@\167}\140'\165\\\ESC:\203<\132o\155\167\233\SOH\207\239\208\209\168\186\238\254\SUB\200\234\247\216\166\165\134\198W\SO\211\203\236\186\175%8F\142*\203,\203w\169*\175,|\192\245\CAN\218P\195\181\225\204\147Q\228YC\207\GS\196L\142\194\148\200^\213\131\188\167\205\DC3(\207_\192\204/\SUBV\EM\STX}\134\SYNL\209F\209\161]\136\252NLR\213\v\182\223\148a\173\245\&0\ETXj\173u\216\240B\138xj\185\SOH=Pf\ESC>\201s\132\195\209\ESC\DLE\160\168\145\170z\167\238x\ENQ~\128\221\218\240fo\235s\243\SIW\187\USPK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\"\STX\240\214\207\ENQ\NUL\NUL\138&\NUL\NUL\f\NUL\NUL\NULsettings.xml\181Z]s\218:\DLE}\191\191\"\227\247\148\144\228\&67LB\aHiiI`\128\&6s\251&\236\ENQt#k=\146\FS\224\223\223\149\fi\n8\165\182\245\148\137?v\165\213\238\158s\214\220|X\197\226\228\EM\148\230(o\131\250\187\179\224\EOTd\136\DC1\151\243\219\224\219\164{\250O\240\161\249\215\r\206f<\132F\132a\SUB\131\&4\167\SUB\140\161G\244\t\189.u#\187}\ESC\164J6\144i\174\ESC\146\197\160\ESC&l`\STXr\251Z\227\245\211\r\231,\187\178\DC2\\>\221\ACK\vc\146F\173\182\\.\223-/\222\161\154\215\234\215\215\215\&5ww\251h\136r\198\231\199\186\202\158~\237\n\DC1_\FS\217\ETB\178\197\&8g\231gg\151\181\236\255\224d\179\200W\161\&9\SI\154\219\&8l\183\223\188\217\&8\200\254\156r\ETX\177\141\205\201\230\178]\218m@.\ESC\207\FS\150/Q\v\SO\189\247\235;\223\233\249\150\STX6\193$\216\222\&1\235\132\238pi\130\230\217Mm\223\194\241V\251\&03\RS\204>\242\200,\SO\217=\175_]^\149\179\253\EM\248|qp\209\245\179\DEL\174.\139\EM\US/p9\130\136\242\v:\v&\231\160w\FSL\DC1\ENQ0\EM4\141J\161\152\143\158l+\\j\184\199\b\242\172\207\152\208G\155?\141Yr\202e\EOT+\136\246cu8\185\220;T\SYNj}\\\196{\209\206R\181Q\148\185A\211\230\241y\241\147\204K\188\139\179\203zq\171\&9ER\198\168\230S\SOH\149\151\137\179ZuI;\163\163\188\234\176\165\247w)\211m4\ACK\227\188\202\187(f\251\ab<!K\187i\182@U\174\SI\245\217\SUBS\211A\145\198r\183\154\171\178\222F|\170\172\156\247\227\210e\161Aux\237\245\179\130\171\239\233\&1\b\b\rD]E\ETB\n,\253\192\197\215m%\239\246\166S\GS~\128\DLE\241x\f\205.\164\138\EMB\228?\SOHS\234\237\202\180R\131\223\146\136\153\220\189\151\232\241\186\207\166 \238\&6\228\195C^\220\&3\179h3\r\SYN\170Z\130\207\165'?#\205w[\DELV\234\151W\ETBW\245\235bF\a\169\177\235\238\195\&3\136\DEL9\136H?\164\241\DC4\FS\162T\191\133!\217\&5\182u\SI\153\ETB@\191\195\a4_Rm\248l\221\167m\233Gn\SYN\247L\166L\180\137\168<y\216RG\240$\129h\200C\147\170\252=\149\240\224rj\194\166c\131\201\DLE5\183%V}\232\220\209L`e\134\130\133\176@\DC1\193n\159\171b3\223\&4\fD\228\&3\199:\169RT\128w\204\176)Ue\a\227\152\201\FS\206T;&.h\168\&7wQ\237\226le\ENQ\209\166\136?uQ\SUB\US\217\227<\208&tB\187\CANM\250\RS\\\180i\249s\133\169\140\134L\177\SOH\233\178;\197\150\SO\NUL\170w\214\NAK\200\f\GS\173\128\a\140\153\154\243=*Q\133\151q\204\132\232\176D\SIA\133\148M\212\174\222\191\247u:\GS:z\133\194C?\252He\SYN\141\215\154n\248\202/\v\224D\138@Q\161%\212\NUL\173$\175\156=\186\&0}\230Q\EOT\210\182(?}\201\150\&8(k\255Q\177$\241\211\157z\250+(\217\210\156\201a*\t3\216[\237\188\170\186\247e\255c\156\152\245\155X^\230H\228\212b\182+\245-^x\241\179=\250\193\244?\138\213\SYNb=\161\DC3J\162q?\211l \201+\185\244\224jb#7\194\229W\128]U[Y\STX\140\192N\225`\ETB^+Z\190\RS\129\160\250x&]\222#\169\146\207\170K\210\RS\167\208=Q\210\172\SOY\STX\170\171\&0\RS\131I}\FSF+\202\180\227`6#\241\229\133\133F\SO\221\199\t\v\169\&2&\232\178\171\ETX\194\aleZ\208\198k\STXq\"\188\232B\218\207\199\NAK\193\150d\162\SI,z\163\218K\158\253\152L\v\248\130So\236\SO\148\173\SO;a\167\DC2\201\198 9#\194\ENQ%\250)\129\&4\138\212\182\184\226:t\132xx\224[F\139\146b{\202\142\254\192\EOTg;d)\DC1\167\150\148h\FS\222\230\219/HP\168\SUB,\239\189w\132\212\155l\218\156\246=\208q\134>\210i3p\223h\RS\n\212WX\239\186!M\245\254\178\205%S\235\227\244\147[\243\193\198\247\135\166zs\137\n\186\\ic\197}\ACK\t=\233UL\162\DLE\164\STX\192\DC1\GS\219\237l\SI\244\212(@=\236O\255\142\ETB\170\142\235\251b\249=I\217m\218\168\136\186l \192\ESCg%\FS\254\169(=\205\136H\218\217q\141\213\169\196\191\244@Z\175~H\140\237\v3\129K\SI\DLE\150$bM\157A\217YG\245\230i\237-7\172\203\n\141\&8\178M\254\&9\145\214\133\238\201>\215^t\152\\\145\163\DLE~\128B\194\231\223@s\EM\133\207\158\225{\246\ENQy ;\STX\181\143\227w\t\221e\171R\133=6k\SOH\250\SOH\239`\198R\225#\232\ESCn\231(\221o\170\187d\143\251\221`\168\184\249>\178hD\217\130R\236AVU'\249\201\230\254\ESC\200[|\245];z\247\249\EM\164%\168\ENQ\185M\DLE\DC3\237\&0\EM\130\240\192\219\183J\218\194\179?\152\176\165\251I\224\148\189|\213\177\204\209\203p\235\215Y\178\253;\198T\133\197\139\&9\227\&0V\219\182d\212\SYN\140\214M!\179\241\234\&0\DC1\166\194\215\&8\232\240T\252\192\160\174\204\ao\a\173# \ENQj\219I\203\CANe7G\252\204\210\DC2O\223^Z\250e\STX\217\146!\145x\136\RS\NAK=\170\186b\237$\177\&7\217\229\218\165\135^p\160\ESC\183\204\216\&0U`\252\145\251a\183\182\247s\169Z\222\SI\201\154\255\ETXPK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\250+^\183\175\ETX\NUL\NUL+\SO\NUL\NUL\v\NUL\NUL\NULcontent.xml\165W\223o\219\&6\DLE~\223_\161i@\223\CAN\198\241\ACK4j\236bhQl@2\fM\138\245\149!)\155\ESCE\170$e\217\255\253\142\164EK\142e\v\240\139l\241\190\239\238x\191H=|\220V2\219pc\133V\139|vs\155g\\Q\205\132Z-\242o/_\208\251\252\227\242\167\a]\150\130\242\130i\218T\\9D\181r\240\155\SOH[\217\"J\ETBycT\161\137\NAK\182P\164\226\182p\180\208\&5W\GS\171\232\163\139`+\174X\183\147\147\233\SOH\220g;\190uS\201\RS;\224\146\215\233\150\ETX\184\207f\134\180S\201\RS\vA\237\211K=\149\188\181\DC2\149\SUB\162^\213\196\137#/\182R\168\255\SYN\249\218\185\186\192\184m\219\155v~\163\205\n\207\238\239\239q\144&\135i\194\213\141\145\SOH\197(\230\146{c\SYN\207nf\184\195V\220\145\169\254yl\223%\213T\175\220L\SO\rq\228MV\237f5\185\"6\171\145\208\208\&51\147k#\128\135\233\157\179\233\233\157\179>\183\"n=\146\147\247\248\t\132\225\241\244x\168\ENQSM\181\229\177\131PQ#\234\201\219\140\232>_k\157\\\245\132\216\160\193\221\187\219\219_q|\239\161\219\179\240\214\b\199M\SIN\207\194)\145\&4E\\W\167\130\ACK\184\EM\ACK\EOT\226\ESC_\166\169\240} \236\b\225\SOGq\STX[6\170\250\251\211\227\&3]\243\138\FS\192\226\&2\CAN\te\GSQ\135\200\CAN\159\132\209\157\254\134\r\175\181q)0\229\244\129\t\217\186K\190\173]%\199\219\221K;\232\202\&0v\DC2\n\238\204\&1\180>4\RS\218\b\222\254\146\SI&\249\249\130\184?*\136\&0\SYN/Q\STX\168?7\207\DC2f\183\216cR\ESCC\137\FS\134\188Y\165s\168\212\141\130M\192\217\181\SI \223\214\220\b/\"2\208\138\129\134\193\244\NAK\\v\237\157\236\159R\ETX\158\162\202B\182\161\170u]\244\216\195an\170\237\&4u\190\146\&5+\143\&5\RSu5\181v\238N%\239\229+\246\&2\228\207\&2\152\214{K\189\&3\252._v\avlv\139\211B\t\a7*\t\229\136q*\237\242!\SO\222\180\156\197w\239\247\"\DELv\196<\239\170W\r\NAK\ENQC\182CUB\238\ACKB|^\205\vY\235\138\204N\232\136\146K\252O\186\&1\130\155\236/\222\158\208\241\142\212\218~\232a\226B\158\rTz,Zq\ENQy\128qTi\198\141\SUB@j\225(L\236Rl9\187\184!\200\165\245\166\178\175\224\190\SUBu\234\b7\193\&1\179\215\247\198\175\r1\"\180\208\ENQ\215~\a\216\169lu\235\227\166m+\172\189\198\244cC\ENQ#\217\&3Q6\251\166\EOT\\\"\249hdN`'D\199\238\172\227\213\&5>\238\vn\180\DC2\175\183\142\199\SUBm\191N\SUB\a\134\156\160(\232I\GS\CAN\158\ETX_\255\158%[{'kb\200\202\144z\221\t`\193\223\198\195\v\138\172/Z\251\211\183S\155(\168\134Q\195\141\DC3P\145\165\SO\ETBaD\164X\193\196\160\\\133\ETX;2\254m\172\DC3\229\SOY\184\173\130\214V\ESC\152\146%\145\&6n\175\231\237a\179o7\181\ETB\188j\182K/\222\230\242!\\\193-\255\209\192wF\n\206\219\197,,1akIvH7\SO\238\177\FSI\184\SOH\192\137\ACKC2\136\227\150\255\148\DC2|6\225\FS\240>^\165\236\165K\228uZ\224\239\213J>\199O\134\DLE\246\241\168\213\145\210\175\SOH\CAN\205p,\SUB\150/\255\224R\234\236\USm$\251y\175\164>\164-&\EOT\SIr\133G>\245\150\255\ETXPK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vCq\197\131\202\DC1\ETX\NUL\NUL\DC1\ETX\NUL\NUL\CAN\NUL\NUL\NULThumbnails/thumbnail.png\137PNG\r\n\SUB\n\NUL\NUL\NUL\rIHDR\NUL\NUL\NUL\198\NUL\NUL\SOH\NUL\b\STX\NUL\NUL\NULg?\158\ETB\NUL\NUL\STX\216IDATx\156\237\214A\n\194\&0\DC4\NULQ\ETX\222\255\202_\161 E\DLE\186\CANQ\235{\139\240\179j\SYNC\210\235\204\\\160s\253\244\SOH8\ESCI\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC4\177,\169\181\214\204\220\215m\251\152\183\225i\173>\202\ETB*o\169GO\251y\ESC\246+\231\246\222\135o\DELo\241'\178\164^=g\158\185\DEL\227\247\156\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\234\144\181\214\204|\250\DC4\191AR\135\232\233\&8I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC4\177\ESC\b\SUB(\EOTp\211\ESCp\NUL\NUL\NUL\NULIEND\174B`\130PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\180\247h\210\ENQ\SOH\NUL\NUL\131\ETX\NUL\NUL\f\NUL\NUL\NULmanifest.rdf\205\147\205n\131\&0\DLE\132\239<\133e\206\216@/\ENQ\ENQr(\202\185j\159\192\&5\134X\ENQ/\242\154\DC2\222\190\142\147VQ\164\170\234\159\212\227\174F3\223\142\180\155\237a\FS\200\139\178\168\193T4c)%\202Hh\181\233+:\187.\185\165\219:\218\216\182+\US\154\GS\241j\131\165\159*\186wn*9_\150\133-7\fl\207\179\162(x\154\243<O\188\"\193\213\&8qH\f\198\180\142\b\t\RS\141Bi\245\228|\SUB9\206\226\tfWQt\235\160\144y\247 =\139\221:\169\160\178\na\182R\189\135\182 \145\129@\141\tL\202\132t\131\FS\186NK\197\&3\150\243Q9\193\161\237\226\199`\189\211\131\162<`\240+\142\207\216\222\136\f\166\229^\224\189\176\238\\\131\223|\149hz\238czu\211\197\241\223#\148`\156\&2\238O\234\187;y\255\231\254.\207\255\EM\226\175\180vDl@\206\163g\250\144\231\180\242\USUG\175PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\US\NUL\NUL\NULConfigurations2/images/Bitmaps/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/popupmenu/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/toolpanel/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/statusbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\FS\NUL\NUL\NULConfigurations2/progressbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/toolbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/menubar/PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\NUL\NUL\NUL\NUL\STX\NUL\NUL\NUL\NUL\NUL\NUL\NUL'\NUL\NUL\NULConfigurations2/accelerator/current.xml\ETX\NULPK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/floater/PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\205f\"DQ}\226,\EM\DC2\NUL\NUL;\213\NUL\NUL\n\NUL\FS\NULstyles.xmlUT\t\NUL\ETX\STX\210\197R\STX\210\197Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237]\205\142\235\182\NAK\222\231)\f_\EOTE\ETB\178%\249\DEL\144i\144\166-R\224\166Mso\214\ENQ-\209\182\SUBY\DC4(j<\147U\SYNE\247E\129\182\139\162@\251h}\128<CI\234\143\250\&5m\209c\206\140\DC3 \185\SYN\SI\201\195\239\FS\RS\158\143\"u?\251\252q\239\SI\RS \142<\DC4\220\SI\173\145\&9\FS\192\192A\174\ETBl\239\135\&1\217\CAN\203\225\231\191\248\228\&3\180\217x\SO\188s\145\DC3\239a@\140\136<\249\&0\SUB\208\202At\151\DC4Rq\FS\220!\DLEy\209]\NUL\246\&0\186#\206\GS\na\144U\186\DC3\165\239XW\159$Oxc\178\213\185\176X\155\192G\"[\153\201\150\234\130\181|\207\\X\172\237bp\144\173\204d)\166b\245\r\146\173\252\CAN\249\198\ACK\EM\SO\218\135\128x\NAK-\RS}/\248\254~\184#$\188\ESC\143\SI\135\195\232\&0\EM!\188\GS[\171\213j\204Ks\133\157\\.\140\177\207\165\\g\f}\200:\139\198\214\200\SUBg\178{H\128\172~LVT)\136\247k\136\165\161\SOH\EOT\212\172\SUB=l\165=\226a\219\STX\141\179\ETXX\218\&7\184p\217\188\DC3W\222\188\DC3W\172\187\ad\215b\147\229\248kZ\200\255\243\245\251\194\ETB\240^\182/&[\130\202\193^(=\204DZ\172\143\DLE\202Ue\NAK\146\t\202\213\181Ms:N~\v\210\135N\241\ETX\246\b\196\130\184\211)\238\NUL\223\201\DC1G\251&\208\168\156\&5\166\DC2\ACK|`n\154Ic6\232\214\150gc\fC\132I\174\200F>@Qt\236|z\237\200\222o\159^\172\&4\DC3\221b\215m\DC4\165\234L\198t\170QG7\RS<xxW(\197T\238\&6\192\170b\NUL\RS\134\142U\225Bb\156\234\172`\153c&\147O\ESCj\146\"\168\226m\RS\246\&7(\SO\232 \232R\145\STX\b\USC\136=V\EOT|^\237\174\212Bi.F\209\132\&4\129\243\241\219\&1+3Xl\RS\SI\a\233\242 ,I\246\240\ETB\159\f\ACK\217\DC2\180At\249\217\NUL\a\SUB.t\252\136\NAK\209\194$~\228e\131\228\&7S\242~\248\129\NUL\252\225i\191F\212PL\152\198\139Lr\239\249O%\129\193X\162\193\143`\135\246\192ji-)\149k\233K\DC4c\SI\226\193\239\224\161\165\181\159\t\"?Ke\196\ACK\153\148\177\133\SOH5\ETX\157g{\228B\FS\fE\145\208#\SO\rE\ESC\239\DC1\186\146\195\163\ACK\141X\DEL\131o\233@\130\&6\197*b\199\149\195Bk5\253\RS\NUL\246\184\207J\169\248\ENQ\NAK\166\198\170)\149<?\166Ht\240\162H\141\"\239c\199s\193\224\ETX\b\162\193w\129G\DC3'\216\134W\131\232q\204\162\167\136\192\189\SUB]3\199l\243X\165\186|6n\159\175\217TN\146\200\146\230.\220\128\216O\243\203\172\151T\205-\ACK\225\206s\134I\133\188J\250\216\b1\141k\152x\212)7\232\238@\159\SUB($<\134\176\US\195\180\SYN\vtw\209\SO\184\232`P=\"H\140\199\251\161\&9\178\172\165\229\ENQ\GSROmR4z\DLE\131\166Y\208\136B\224\208$\207\216!\236\253\128XPL\234X\211\227u\RS\152\238Nk\r\186J\157\216G\173F{\SI)\206>\GS\236\193#;#I\169\&7\192\143\n\215\202\241\SO\SOH\ACK\FSs\DC1\241\164\136\213\&3@L\DLE\235\146z\156\231B\148\136\STX?\220\129rw\\\183\&5\134\128&\175\DC1\161\RSF\178\184\197\&2\b\166\&0\139f\247C\US\ESCd]\209\148\249\148\ETB\184\144-\222\140\142\136\227\204\DC4\207\212\206\NAK\167k\"\245+\DC4F\194\144\198\237c\170\f\155\143\173\&6\226\&8\130\DC4\178\128\185\tW\202A>\162\137/\193\&1\204T\166\206\200\139\"\239\a:\SUB\203\SO\233\&8\233\&3\US\EOT\219\CANl\233#\CAN\240\a\SO]\\\t\166^\246\221\135\nP\144\208\132\202\248\158Fv><\222\184\136\EOTk\217\160i\r\b\210\246\203\213\211\142\&2\137\US\RS\US\179\218i\151YI\128\STX\216\NUL4o\158%\216>|\204\ACKPi:/e\141\151Z\200\186\200%x'y\188\SUB7L{\233\128\144[\173\SUB\DC2\SUB]\148B\188{\nw0\224\t\140\225\ETX\151\174\149\ACK\215\143iE}h\239U\160;\201\159\195\&8pH\156\&4\206\STX\SO\205u(<\212b\195v\135/\247\150\250\167\225z4>\EOT\172Cs4]\217\179\234D-\207\143\144\SUB\160>K\207vW\193\240\205\233@\147C\ETB\174\222\233\214]\SO\221\220}\230\154\173\235l\221S\197\137\208\&1\ENQ\SUB\189T\156\b5Ur\ETB\SYN\215\203\139\207\DC4\193ma\SYN\218\n\184E\143\198p\SI\188\192`<6sk\187E4\140\163]EP\205\148LxG\213\ETB\217C\209\EM\147\157\148\&5\194l\ACK2/\166k\DC2uE\US\132\DC1\159/\234T10:4\171C\v*\209\225{\bC\131\160-$;\182y\193\230\253\t\170\136*\228\188\131\178%\236\SO[\195\150\144J9>\136\"\170\&4\157\182\213l\174\222\242W\DLE\184B`\233l\152>\204\&7\236\140\138b\130X\192\226\133(\244\145>\248\163m\254q\141\220\167a\131\146\146!w\SI0\141\129\DC4\214\144\167\GS\243\185\DLE\205\138\226\&5\"\132q\DELsd.'L\"\159\DC3\SOH\235,\ACK~uu/\154\224f\227iK\192\211\SYN\224\US\192S$\ESC\DC1\133@'\144\135\218\170=\173\174\170*\"\212\180\136\SI=\162\fo\165\226\166\&2\238Y2\176\224\tt\245\t}\240$\184\193@\244\129\179\157M\149\SI\153\179\213\242\136\SI\149$\142y\210\&9\216\189\167+\244\185\128tL,\159\&5{\154\219V\253\197:k<_\STX\206\148\DC4\219\152j\142\193\153FN\194\128\186@\193w\254\147}i\206\SYN\162\220\252\188\132\231f\217\182\181y<xt\230@I\t\171GSFJ\208(g\149O\215\139\202\153L\218DK\248\169\217_*-i\235\&2\151\202\244>\195\153~K9\217\163bW\242x\155\&2\174\212jh\209\DC1N5\247E&]\186\138\179X`\181\a\224Tj`\157\139h\150,H/\246\162*i\186\131b\194!\243\225\ETX\203\213,\137`~d\198X\179O\171\&3\230\NUL\189\237\142.\224k\228\187\237\DC3F\168(\136$u3\161\230\SYN\138\EM\208\217F.\150\180\210\207\176\246q\195\218\SUB\EM\214\238o\216\233\209P\216h\239\DC3S%\185\NULy\154W4\231x\205q\241y\188gr\220{&\SUBy\207\228\"\222#\ETB\SYN\154\141\167\194\SOH.a\216\233q\195N52\236\180\183a\151\245p\223?*\176F/\FS\DC4\150\141+\197\&5c\194\236\184\235\204\&4r\157\217%\\G*$4\155N\129\245/a\213\249q\171\206\&5\178\234\188\183U\ETBgZu\209\223\170\157M\244\183\234\USbD\248.k\164\152\ETX\241\163&\167\177i\USn\b#\203\147\213d\209D\167q\130x.\208\176c\215\205\194\173\211\246\234\184Ox\252\157\GS\173]\212e{\173F\169\240\252\189\153o0d'\164\NUL!\208e.\205\\\187}v\137\210\ETX.zu\163%\200w\226.\131\250\233\ESC\160\181\211(\181mP\179i\199\&2\157u\r\181\219\146\&5\179}75\159\DEL\DC2\205\NAK\153\155y\230\RS\232\175\224\198\v<6Y\DC3O\193\251vO)d\a\\\176\175\159t\133\227\178^\197\175\151\187c\218:\"\EM\188\155\197\235\200\247D\189\180\b\158\ETBh\ESC7-\179(\155\ACK\216Z\DLE,\193\174\&2\DC4~do\186\216\136\190d\182\228G'\219\208\230\162\131\\\238\250\ESC\193\EM\162\166\189Zu.]\169@\SId\251l\EM\158e\142\134\140\172\201\SUB=_\243uZ\255\SUB\150\161,i\ESC\176\179\SI\NULW\226\255\159\226\136x\155'\131\189\254\165\250\US\DLEvs\235\156o\215\212\SO\252\DC4W\249t\203\133\222\ACK\FS\225\174\rY\234\ENQ\243\208\223 D\STXD\160Fs\217Z5\191\254\237\n\144F\181\218\ENQ'\179\236.Us\254\"\145\226(J[\152i!\190\154a\207\129\184\253\&4^QR+\203\198\128\"/9\200\&9\EM\137\167\161\138Q\146\167\144\SO\204\161#e\176\140Oir>\234h\145;f\169\193\204L5\245\143\US%\236\151\152\242\255sud3\212AM\\y\198\212\150\213\NAK\202\158\151\176.\154W\SYN!a-I<g\194z\154\GSD\147(\177\198\229\210R\181\236\243y9\255\175\128\130u\238\\j\208\186X\176\210^o\210\191\136\201\SO)\139\243\245\217\203P\DC3\218\216\131\136\157\203d\aJS\t)w\203\138\182E\188/\157\157{\ACK\160\190\202\SI\195\&3#\189\247\STX\216>;\v\217\SOH\ETB|6\183y\142\141\161,W\146\157\159\137Xz\DC2\147/\217\a\207%;1\210\154\230\210\v\ACK\244\SI\214$\253\ETX\DEL\"(\DC1\STX7\185/\156\133\146\172=\RS}\242c\172\233\211\&4\236\136\233xQ\200\135X\173\145)c\141,+$\ETX\ETB\197\140\GS\189[\154\236\223\243R\250\&2\251@\FSB\214\151\244\230Y9#\156\USM\b\231\213\ETB\216\165Lp~n\"\232\225\136;X\163\215\150\253\158\203\SOj\139\205U\SO\143\RS=\225\250;n\169\244\229Hr7\175c\243\"\151\RSd\162\149\193\201u\250\203\216\247!\145\234\&1\DC1\237\236\238\212\221\215\234\&5\197\234\230\235\170c\239\181^\183\197\rW\DC2;\175\199\ESC\203EWg\250\237\175\247\225\142\221\195=\a\184\230U\163AS\238\143\199\222\ACK'R*\142\189} \CAN%\254\154\143\174\213}\DC2\217\129\n\CAN\180\218s\160\227\242\190\135(\174\189E\145\159\DC1\252)\143\214d\135Q\188\221e\134\142\144\239\157\169UL\187H\238\189\247\212\171\160\141\DC1ks0[~z\166Fk\229\250\172\207\214\230K/ya\249\154f\227GH\227\&3\229\240JBs\247\187(\249\151`\237o\184\206;gK\179\245 Y\176\146\175|\180\133\155Lr\192\197\206\179rzU\236\157\201\210\191J\STX\197\197c\202\226pr\DC1S\156\176]\130<\215L\217B\151\\\218wqe\173\215\134h\177\192w$K\169\236 \251.\192\&9\249\132\216!\b\FSF\229\142w\152\n\234\DC1\167\132\ETBo\157\b\240\DC4;;#Ro\230\247II1\128\146<?S\146\214Jr\245\202)c\154\182\ESC\201Kz\129\145\230Z\179K\DC3i\ESC\213=\202=\219\STX\SOHkZ\"^\169\180\&8A\DC2\238\NUL\183is\154\186\246\203Rw\242\178\212\157\190,ug/K\221\249\203Rw\241\178\212]\190,uW/K]\171\146\140\\W\235J\185X\146\238CE\164a\133,\237wt\220\ACK*v:\172\202j*\f,\201\162\147\205\174\202\138*n\150\165b\237\251-\STX\160Q\188\217x4g\GS\181cm\157\tv\154\EOT\SYN[\151U\172[Fv\250\240m}\134\207?(a\172\217\217\195\196\203V\v[|\ry5\140&\250bT>\196zE\140\166\250b4[\153+-0\154\233\139\209b\185\152j\129\209\\_\140V\203\233\\\v\140\SYN\186bd\141\172\165\&5\211\STX\163\165\190\CANM\232d\211\STX\163\149\190\CAN\205\SYN3=\214~\203\212\ETB\164\197\194\190\\\208\SYNe\206\202\216;\174y\ETB\EM\187\253\172\EM\251[H\203\139\&1\150[`\USW|\NUL~\fY\227\253\210\242\185\RS!\254\252\180\\\STX\163I\207\180\220\150J9\179+f\SUB\166\229\DC2\CANM{\166\156s\169t*\253\218\159\142i\185\EOTF\179^\DC1\222^\172,\EM\140(\197\177\&5M\203%0\154\247\194h9_Md0Z\152\FSK\GS\211r\t\140\SYN=0\178i:\181\148\194he\206tM\203%0Z\246\192h2\154.'\DC21\219\SUB\153\246d\174iZ.\129\209\170\aF\211\209\204\\H\172\253\148\ACK\154\246R\215\180\\\STX$\171\225n\134\&4J\179\209\220\&2%\200\v\141\238\&6\223\152z\230\188\188\227\ETX:E^>y\137y9\223~\184l\140\215\&6/\151\221zy\ACK\140\180\205\203\237\209dnK\228\156\207\128\145\182y\249d4\155N%r\206g\192H\219\188|:Z\216\&2\219S\207\128\145\182y\249\140\230\146s\137\156\243\EM0\210\&6/_\140\204\229b\169\ENQF\218\230\229\203\145=_J\229\229\ETB\199H\219\188|5\154\234\177\242k\156\149[\230h>\185`\130\212;-\239\248\252a\145\150O\159\&5-\151x\129\241\219W\188\147.5\252\vl\175\191\133S/\141\192\245\221s\DEL\vGa\SUB\129\235\183\DC1\255\&6\206\199\&4\STX\215\135\ENQ\188\149C3\141\192\245\161\ACKo\229$M#p}\248\194[9^\211\b\\\US\DC2\241V\206\220\&4\STX\215\135Y\188\153\131\&8\141\200\245#\FS\154\US\207\233\248fv\193\&7f\186\241\141\254'wf\139\ETB\204\&7\172f\190!\246\152\153\146\171\DC3\245f#\v96b\207\248f\159\206l\228\231\237\176\STX\245ld:\153H\157\220H\SOHV\EOT\220:\249\EOTG\US6\194\197\146v\248\223\134x?\252\223\143\255\237\ENQ\197|b\201\241\139Y\229\240A\222\EM\171!\251\157\144\227H&\131;\GS\201S\233\137z$\165\t\135\230H\158\202W\212#\185\154\202\GS\208\211\GS\201S\t\140j$\173\145\185ZJ\188\194\208\US\201S\EM\141z$\237\217T\234\144\150\238H\158Jq\212#95W\175\194'O\230<\234\161\156\205g\218.9\231p\160\247^\242q\184\142\251\196L\228\248U\226&s=\187\181d\b\142f>}*?R\191\246S\132$\215~\189\145<\149\DC2\169GrbI\238\227j\142\228\245\&9\210Tv\175Hs$\175\207\145\230\165\191\129\225\229\"y}\142\180\144:\156\164?\146\215\230H\140m\202\FS\208\209\US\201\235s$\203|\GSq\242\250\FS\201\158\201r$\189\145\212\128#M\173\133\220\203\197+@\217\135#u\220\224\230\FS\233\232\229\237\vq\164\191\245\230H\214\210\210\217\167Up\164\211@\170q\164\EOT\161\227.\173\&9\146*8R?$\237\201\\\238\ENQ\186\230H\170\224H\253\144\156\204d.h\234\143\164\n\142\212\SI\201\169\228\DC1S\205\129TA\145\250\SOH\153\222\187\DEL\241H\170\160H\253\144Lo\231\191x$UP\164~H.\237\215\&1\187UP\164~H\174\166\&3\185\ETBr\154#\169\132\"\245\129\210\SUBI\221\ENQ\188\SO\146}\CANR\199]z\206\144\142^\163\191\fC\250\231_\251\191E\210\251\205\168\STX\134\244\247\255\244|\139\&4\147\220\211\211\ESCI\ENQ\f\233\245\187\155\STX\242ss7U\228\231\245\187\155\STXbss7U\196\230\245\187\155\STX\206rs7U\156\229\245\187\155\n:\242\138\253\173\SI\US\233\248\136\NUL\231#G\191\USp\EM>\242\239\219\169\182\163 \253\244\227_n\167\218\148\240\145\159~\252\243\237T\155\DC2\210\210\ETB\201\219\169\&6UH\222N\181\169B\242v\170M\NAK\146\183Smj\144\188\157jS\135\228\237T\155\&2(_\235\169\182\142\SI\USp\142t\244\155\a\151\225H\255\250\199\141#\169\ACK\233\198\145.\133\228\141#\169B\242\198\145T!y\227H\170\144\188q$UH\222\&8\146\SUB$o\FSI\GS\146\&7\142\164\f\202\ETB\203\145\STXD`d8(\216x\219\CAN\ETX\226\161`\144\ETB\CAN\142\SI\162\232~\184A\136\176\223\201\248x\177\227\DC1.l\136h\255&\149+\192n\170\177F\238Sk5\DLE8;\132Efv\244\179g\166\208I\166id\132(\242Xw\247\195\DLElE\205\147\186A\230\CAN\ACKk\215EN\188\135\SOH\201\145=\SOH\FS\CAN\184\ENQ6u\149\189f\149\203\GS\249^\NUL\v\141\154:\228\133\ACK\147c\246\NUL~$\SO\tm6\DC1$\226'\EOT\155\160+\228\211\214\n\136|\184!\169\158^\224`\200\176`\153\\\162\229gc\218\129\231\192dfE\252Q\250\EOT\196\EOT\209\230=\199(\202r\151\174S\239\175\191\177\&2\221\&6`\239\249O\204:\CANl1\bw\"\128\244!\213\160\230$\DLE\ETB\148<\ETBLj\139Sg\131\146\217\EOT|oK\a\231\208\166 .\DEL\244\237OqD\188\ruC\138\&7\237\226\128\176\155\193\154[f,\140\162\&4.\230Ptb?\161\152\148G\ETB\238\173\186\130\185lEE^\146\ACK\134\229HH\SO\178\178\GS\244\182;f9\171\211\162\&9f\212w\136\129\176G\135\vR\207G\152`\224Q\211\210\&6\247\NULoi@\"(\164UK\189\165%kD\168\&1\147B\225\&1\243\141\150\SUB8U\176\208\239\128\169GQ\ETB\222#\151\STX\226c\131\172\203Zf\DC3\212\216\131\199|\132&m\160\SYN\DLEs\201\b\134Y\235Y\CAN5\205E\233\146@\190\135Ch\252\200\226\&2\171\200\133'\229e\174\"\f6\212;*\178\131l\SOH\b`\226\132\247\195\NUL\ENQ\176\218\ACKp\153\US%\147%\153B\201s\\\132|{\246i\181\150\131|D\151\156w&\255\167\DC4\204\187|\166\226X;\b\\\166\&7\159c\227J\225\134O\SYN1\218\215k\166\&2e\167dKVn\149Q)\207\170z\132Yv\DC3\\\152\178\161\n\247:sd\ETB\216\186Ot\210\176\184AWR\234\&1\213\217W\160Q\USK\ETXN\165\&0\213\DC4\148\178\128\181\aQ\222Z9Z\165%\172\209\210\172\166\235n\224\STX\236\150\227Sa\161\246\185\159h.\224\207\ETXlX\207RXX,\196rA\214\137\248\ENQ\204\b\250\208!\\C\SUB\213b\204bd\169\158\149.\245BM\161\247\180\172\EM\223\&2\178\STX\SYN%d+\232\229\207\179\245\&3/\249?PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC_\197\128\&2\FS\SOH\NUL\NUL>\EOT\NUL\NUL\NAK\NUL\NUL\NULMETA-INF/manifest.xml\173TKn\195 \DLE\221\231\DC4\SYN\219\202\208fU\161\&8YT\234\t\210\ETXP<v\144`\176`\136\226\219\ETB[M\236\170Je\171\217\&1\191\247\222|\196\238pq\182\&8C\136\198c\197^\248\&3+\NUL\181\175\r\182\NAK\251\&8\190\151\175\236\176\223\236\156B\211@$y}\DC4\185\SO\227\205\172X\n(\189\138&JT\SO\162$-}\aX{\157\FS \201\159\249rd\186Y3\SOH[\182\223\DC4\DC3_c,\148\185>\244Sv\147\172-;E\167\138\137{ \147\219AmTI}\a\NAKS]g\141V\148\211\196\EMk>\n\230s\157\156\224BL\172\209\224\128\DC4\207\237\221\225\FS\NUL\197\DLE^\ENQ\SUB\129(\239 >\FSX{\164\161\207G\227\RSO\201}\162\&26\n\186>y\135\237\GS\DC2\227T\vb\136\175\155\245\183\143\135\186Y\176\227\156\245\180\186\147\&7\143\141iS\CAN!\226V(\173\193B6}\DLE:\133\240\247\244\254\199\181\240nc\194A\STXO\134\235\&9\194\202\ESC\163\222\194\210\v\219\137_\DEL\192\254\vPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULmimetypePK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL;\138\vC\163\159\SOHAJ\SOH\NUL\NUL\STX\ETX\NUL\NUL\b\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\182\129M\NUL\NUL\NULmeta.xmlUT\ENQ\NUL\ETX\177)\bRux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\"\STX\240\214\207\ENQ\NUL\NUL\138&\NUL\NUL\f\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\217\SOH\NUL\NULsettings.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\250+^\183\175\ETX\NUL\NUL+\SO\NUL\NUL\v\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\210\a\NUL\NULcontent.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vCq\197\131\202\DC1\ETX\NUL\NUL\DC1\ETX\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\170\v\NUL\NULThumbnails/thumbnail.pngPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\180\247h\210\ENQ\SOH\NUL\NUL\131\ETX\NUL\NUL\f\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\241\SO\NUL\NULmanifest.rdfPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\US\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL \DLE\NUL\NULConfigurations2/images/Bitmaps/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL]\DLE\NUL\NULConfigurations2/popupmenu/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\149\DLE\NUL\NULConfigurations2/toolpanel/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\205\DLE\NUL\NULConfigurations2/statusbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\FS\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\DC1\NUL\NULConfigurations2/progressbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL?\DC1\NUL\NULConfigurations2/toolbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULu\DC1\NUL\NULConfigurations2/menubar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\NUL\NUL\NUL\NUL\STX\NUL\NUL\NUL\NUL\NUL\NUL\NUL'\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\171\DC1\NUL\NULConfigurations2/accelerator/current.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\242\DC1\NUL\NULConfigurations2/floater/PK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\205f\"DQ}\226,\EM\DC2\NUL\NUL;\213\NUL\NUL\n\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\182\129(\DC2\NUL\NULstyles.xmlUT\ENQ\NUL\ETX\STX\210\197Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC_\197\128\&2\FS\SOH\NUL\NUL>\EOT\NUL\NUL\NAK\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\133$\NUL\NULMETA-INF/manifest.xmlPK\ENQ\ACK\NUL\NUL\NUL\NUL\DC1\NUL\DC1\NUL\160\EOT\NUL\NUL\212%\NUL\NUL\NUL\NUL"),("sample.lua","-- This is a sample custom writer for pandoc.  It produces output\n-- that is very similar to that of pandoc's HTML writer.\n-- There is one new feature: code blocks marked with class 'dot'\n-- are piped through graphviz and images are included in the HTML\n-- output using 'data:' URLs.\n--\n-- Invoke with: pandoc -t sample.lua\n--\n-- Note:  you need not have lua installed on your system to use this\n-- custom writer.  However, if you do have lua installed, you can\n-- use it to test changes to the script.  'lua sample.lua' will\n-- produce informative error messages if your code contains\n-- syntax errors.\n\n-- Character escaping\nlocal function escape(s, in_attribute)\n  return s:gsub(\"[<>&\\\"']\",\n    function(x)\n      if x == '<' then\n        return '&lt;'\n      elseif x == '>' then\n        return '&gt;'\n      elseif x == '&' then\n        return '&amp;'\n      elseif x == '\"' then\n        return '&quot;'\n      elseif x == \"'\" then\n        return '&#39;'\n      else\n        return x\n      end\n    end)\nend\n\n-- Helper function to convert an attributes table into\n-- a string that can be put into HTML tags.\nlocal function attributes(attr)\n  local attr_table = {}\n  for x,y in pairs(attr) do\n    if y and y ~= \"\" then\n      table.insert(attr_table, ' ' .. x .. '=\"' .. escape(y,true) .. '\"')\n    end\n  end\n  return table.concat(attr_table)\nend\n\n-- Run cmd on a temporary file containing inp and return result.\nlocal function pipe(cmd, inp)\n  local tmp = os.tmpname()\n  local tmph = io.open(tmp, \"w\")\n  tmph:write(inp)\n  tmph:close()\n  local outh = io.popen(cmd .. \" \" .. tmp,\"r\")\n  local result = outh:read(\"*all\")\n  outh:close()\n  os.remove(tmp)\n  return result\nend\n\n-- Table to store footnotes, so they can be included at the end.\nlocal notes = {}\n\n-- Blocksep is used to separate block elements.\nfunction Blocksep()\n  return \"\\n\\n\"\nend\n\n-- This function is called once for the whole document. Parameters:\n-- body is a string, metadata is a table, variables is a table.\n-- This gives you a fragment.  You could use the metadata table to\n-- fill variables in a custom lua template.  Or, pass `--template=...`\n-- to pandoc, and pandoc will add do the template processing as\n-- usual.\nfunction Doc(body, metadata, variables)\n  local buffer = {}\n  local function add(s)\n    table.insert(buffer, s)\n  end\n  add(body)\n  if #notes > 0 then\n    add('<ol class=\"footnotes\">')\n    for _,note in pairs(notes) do\n      add(note)\n    end\n    add('</ol>')\n  end\n  return table.concat(buffer,'\\n')\nend\n\n-- The functions that follow render corresponding pandoc elements.\n-- s is always a string, attr is always a table of attributes, and\n-- items is always an array of strings (the items in a list).\n-- Comments indicate the types of other variables.\n\nfunction Str(s)\n  return escape(s)\nend\n\nfunction Space()\n  return \" \"\nend\n\nfunction LineBreak()\n  return \"<br/>\"\nend\n\nfunction Emph(s)\n  return \"<em>\" .. s .. \"</em>\"\nend\n\nfunction Strong(s)\n  return \"<strong>\" .. s .. \"</strong>\"\nend\n\nfunction Subscript(s)\n  return \"<sub>\" .. s .. \"</sub>\"\nend\n\nfunction Superscript(s)\n  return \"<sup>\" .. s .. \"</sup>\"\nend\n\nfunction SmallCaps(s)\n  return '<span style=\"font-variant: small-caps;\">' .. s .. '</span>'\nend\n\nfunction Strikeout(s)\n  return '<del>' .. s .. '</del>'\nend\n\nfunction Link(s, src, tit)\n  return \"<a href='\" .. escape(src,true) .. \"' title='\" ..\n         escape(tit,true) .. \"'>\" .. s .. \"</a>\"\nend\n\nfunction Image(s, src, tit)\n  return \"<img src='\" .. escape(src,true) .. \"' title='\" ..\n         escape(tit,true) .. \"'/>\"\nend\n\nfunction Code(s, attr)\n  return \"<code\" .. attributes(attr) .. \">\" .. escape(s) .. \"</code>\"\nend\n\nfunction InlineMath(s)\n  return \"\\\\(\" .. escape(s) .. \"\\\\)\"\nend\n\nfunction DisplayMath(s)\n  return \"\\\\[\" .. escape(s) .. \"\\\\]\"\nend\n\nfunction Note(s)\n  local num = #notes + 1\n  -- insert the back reference right before the final closing tag.\n  s = string.gsub(s,\n          '(.*)</', '%1 <a href=\"#fnref' .. num ..  '\">&#8617;</a></')\n  -- add a list item with the note to the note table.\n  table.insert(notes, '<li id=\"fn' .. num .. '\">' .. s .. '</li>')\n  -- return the footnote reference, linked to the note.\n  return '<a id=\"fnref' .. num .. '\" href=\"#fn' .. num ..\n            '\"><sup>' .. num .. '</sup></a>'\nend\n\nfunction Span(s, attr)\n  return \"<span\" .. attributes(attr) .. \">\" .. s .. \"</span>\"\nend\n\nfunction Cite(s, cs)\n  local ids = {}\n  for _,cit in ipairs(cs) do\n    table.insert(ids, cit.citationId)\n  end\n  return \"<span class=\\\"cite\\\" data-citation-ids=\\\"\" .. table.concat(ids, \",\") ..\n    \"\\\">\" .. s .. \"</span>\"\nend\n\nfunction Plain(s)\n  return s\nend\n\nfunction Para(s)\n  return \"<p>\" .. s .. \"</p>\"\nend\n\n-- lev is an integer, the header level.\nfunction Header(lev, s, attr)\n  return \"<h\" .. lev .. attributes(attr) ..  \">\" .. s .. \"</h\" .. lev .. \">\"\nend\n\nfunction BlockQuote(s)\n  return \"<blockquote>\\n\" .. s .. \"\\n</blockquote>\"\nend\n\nfunction HorizontalRule()\n  return \"<hr/>\"\nend\n\nfunction CodeBlock(s, attr)\n  -- If code block has class 'dot', pipe the contents through dot\n  -- and base64, and include the base64-encoded png as a data: URL.\n  if attr.class and string.match(' ' .. attr.class .. ' ',' dot ') then\n    local png = pipe(\"base64\", pipe(\"dot -Tpng\", s))\n    return '<img src=\"data:image/png;base64,' .. png .. '\"/>'\n  -- otherwise treat as code (one could pipe through a highlighter)\n  else\n    return \"<pre><code\" .. attributes(attr) .. \">\" .. escape(s) ..\n           \"</code></pre>\"\n  end\nend\n\nfunction BulletList(items)\n  local buffer = {}\n  for _, item in pairs(items) do\n    table.insert(buffer, \"<li>\" .. item .. \"</li>\")\n  end\n  return \"<ul>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</ul>\"\nend\n\nfunction OrderedList(items)\n  local buffer = {}\n  for _, item in pairs(items) do\n    table.insert(buffer, \"<li>\" .. item .. \"</li>\")\n  end\n  return \"<ol>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</ol>\"\nend\n\n-- Revisit association list STackValue instance.\nfunction DefinitionList(items)\n  local buffer = {}\n  for _,item in pairs(items) do\n    for k, v in pairs(item) do\n      table.insert(buffer,\"<dt>\" .. k .. \"</dt>\\n<dd>\" ..\n                        table.concat(v,\"</dd>\\n<dd>\") .. \"</dd>\")\n    end\n  end\n  return \"<dl>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</dl>\"\nend\n\n-- Convert pandoc alignment to something HTML can use.\n-- align is AlignLeft, AlignRight, AlignCenter, or AlignDefault.\nfunction html_align(align)\n  if align == 'AlignLeft' then\n    return 'left'\n  elseif align == 'AlignRight' then\n    return 'right'\n  elseif align == 'AlignCenter' then\n    return 'center'\n  else\n    return 'left'\n  end\nend\n\n-- Caption is a string, aligns is an array of strings,\n-- widths is an array of floats, headers is an array of\n-- strings, rows is an array of arrays of strings.\nfunction Table(caption, aligns, widths, headers, rows)\n  local buffer = {}\n  local function add(s)\n    table.insert(buffer, s)\n  end\n  add(\"<table>\")\n  if caption ~= \"\" then\n    add(\"<caption>\" .. caption .. \"</caption>\")\n  end\n  if widths and widths[1] ~= 0 then\n    for _, w in pairs(widths) do\n      add('<col width=\"' .. string.format(\"%d%%\", w * 100) .. '\" />')\n    end\n  end\n  local header_row = {}\n  local empty_header = true\n  for i, h in pairs(headers) do\n    local align = html_align(aligns[i])\n    table.insert(header_row,'<th align=\"' .. align .. '\">' .. h .. '</th>')\n    empty_header = empty_header and h == \"\"\n  end\n  if empty_header then\n    head = \"\"\n  else\n    add('<tr class=\"header\">')\n    for _,h in pairs(header_row) do\n      add(h)\n    end\n    add('</tr>')\n  end\n  local class = \"even\"\n  for _, row in pairs(rows) do\n    class = (class == \"even\" and \"odd\") or \"even\"\n    add('<tr class=\"' .. class .. '\">')\n    for i,c in pairs(row) do\n      add('<td align=\"' .. html_align(aligns[i]) .. '\">' .. c .. '</td>')\n    end\n    add('</tr>')\n  end\n  add('</table')\n  return table.concat(buffer,'\\n')\nend\n\nfunction Div(s, attr)\n  return \"<div\" .. attributes(attr) .. \">\\n\" .. s .. \"</div>\"\nend\n\n-- The following code will produce runtime warnings when you haven't defined\n-- all of the functions you need for the custom writer, so it's useful\n-- to include when you're working on a writer.\nlocal meta = {}\nmeta.__index =\n  function(_, key)\n    io.stderr:write(string.format(\"WARNING: Undefined function '%s'\\n\",key))\n    return function() return \"\" end\n  end\nsetmetatable(_G, meta)\n\n"),("dzslides/template.html","<!DOCTYPE html>\n\n<meta charset=\"utf-8\">\n<title>The Title Of Your Presentation</title>\n\n<!-- Your Slides -->\n<!-- One section is one slide -->\n\n<section>\n    <!-- This is the first slide -->\n    <h1>My Presentation</h1>\n    <footer>by John Doe</footer>\n</section>\n\n<section>\n    <p>Some random text: But I've never been to the moon! You can see how I lived before I met you. Also Zoidberg.\n    I could if you hadn't turned on the light and shut off my stereo.</p>\n</section>\n\n<section>\n    <h3>An incremental list</h3>\n    <ul class=\"incremental\">\n      <li>Item 1\n      <li>Item 2\n      <li>Item 3\n    </ul>\n    <details>Some notes. They are only visible using onstage shell.</details>\n</section>\n\n<section>\n  <q>\n    Who's brave enough to fly into something we all keep calling a death sphere?\n  </q>\n</section>\n\n<section>\n    <h2>Part two</h2>\n</section>\n\n<section>\n    <figure> <!-- Figures are used to display images and videos fullpage -->\n      <img src=\"http://placekitten.com/g/800/600\">\n      <figcaption>An image</figcaption>\n    </figure>\n    <details>Kittens are so cute!</details>\n</section>\n\n<section>\n    <figure> <!-- Videos are automatically played -->\n      <video src=\"http://videos-cdn.mozilla.net/brand/Mozilla_Firefox_Manifesto_v0.2_640.webm\" poster=\"http://www.mozilla.org/images/about/poster.jpg\"></video>\n      <figcaption>A video</figcaption>\n    </figure>\n</section>\n\n<section>\n    <h2>End!</h2>\n</section>\n\n<!-- Your Style -->\n<!-- Define the style of your presentation -->\n\n<!-- Maybe a font from http://www.google.com/webfonts ? -->\n<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'>\n\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      /* The font from Google */\n      font-family: 'Oswald', arial, serif;\n      font-size: 30px;\n  }\n  h1, h2 {\n    margin-top: 200px;\n    text-align: center;\n    font-size: 80px;\n  }\n  h3 {\n    margin: 100px 0 50px 100px;\n  }\n\n  ul {\n      margin: 50px 200px;\n  }\n\n  p {\n    margin: 75px;\n    font-size: 50px;\n  }\n\n  q {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: black;\n    color: white;\n    font-size: 60px;\n    padding: 50px;\n  }\n\n  /* Figures are displayed full-page, with the caption\n     on top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n    font-size: 50px;\n  }\n\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0; }\n\n  /* The progressbar, at the bottom of the slides, show the global\n     progress of the presentation. */\n  #progress-bar {\n    height: 2px;\n    background: #AAA;\n  }\n</style>\n\n<!-- {{{{ dzslides core\n#\n#\n#     __  __  __       .  __   ___  __\n#    |  \\  / /__` |    | |  \\ |__  /__`\n#    |__/ /_ .__/ |___ | |__/ |___ .__/ core :\226\130\172\n#\n#\n# The following block of code is not supposed to be edited.\n# But if you want to change the behavior of these slides,\n# feel free to hack it!\n#\n-->\n\n<div id=\"progress-bar\"></div>\n\n<!-- Default Style -->\n<style>\n  * { margin: 0; padding: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }\n  details { display: none; }\n  body {\n    width: 800px; height: 600px;\n    margin-left: -400px; margin-top: -300px;\n    position: absolute; top: 50%; left: 50%;\n    overflow: hidden;\n  }\n  section {\n    position: absolute;\n    pointer-events: none;\n    width: 100%; height: 100%;\n  }\n  section[aria-selected] { pointer-events: auto; }\n  html { overflow: hidden; }\n  body { display: none; }\n  body.loaded { display: block; }\n  .incremental {visibility: hidden; }\n  .incremental[active] {visibility: visible; }\n  #progress-bar{\n    bottom: 0;\n    position: absolute;\n    -moz-transition: width 400ms linear 0s;\n    -webkit-transition: width 400ms linear 0s;\n    -ms-transition: width 400ms linear 0s;\n    transition: width 400ms linear 0s;\n  }\n  figure {\n    width: 100%;\n    height: 100%;\n  }\n  figure > * {\n    position: absolute;\n  }\n  figure > img, figure > video {\n    width: 100%; height: 100%;\n  }\n</style>\n\n<script>\n  var Dz = {\n    remoteWindows: [],\n    idx: -1,\n    step: 0,\n    slides: null,\n    progressBar : null,\n    params: {\n      autoplay: \"1\"\n    }\n  };\n\n  Dz.init = function() {\n    document.body.className = \"loaded\";\n    this.slides = $$(\"body > section\");\n    this.progressBar = $(\"#progress-bar\");\n    this.setupParams();\n    this.onhashchange();\n    this.setupTouchEvents();\n    this.onresize();\n  }\n  \n  Dz.setupParams = function() {\n    var p = window.location.search.substr(1).split('&');\n    p.forEach(function(e, i, a) {\n      var keyVal = e.split('=');\n      Dz.params[keyVal[0]] = decodeURIComponent(keyVal[1]);\n    });\n  // Specific params handling\n    if (!+this.params.autoplay)\n      $$.forEach($$(\"video\"), function(v){ v.controls = true });\n  }\n\n  Dz.onkeydown = function(aEvent) {\n    // Don't intercept keyboard shortcuts\n    if (aEvent.altKey\n      || aEvent.ctrlKey\n      || aEvent.metaKey\n      || aEvent.shiftKey) {\n      return;\n    }\n    if ( aEvent.keyCode == 37 // left arrow\n      || aEvent.keyCode == 38 // up arrow\n      || aEvent.keyCode == 33 // page up\n    ) {\n      aEvent.preventDefault();\n      this.back();\n    }\n    if ( aEvent.keyCode == 39 // right arrow\n      || aEvent.keyCode == 40 // down arrow\n      || aEvent.keyCode == 34 // page down\n    ) {\n      aEvent.preventDefault();\n      this.forward();\n    }\n    if (aEvent.keyCode == 35) { // end\n      aEvent.preventDefault();\n      this.goEnd();\n    }\n    if (aEvent.keyCode == 36) { // home\n      aEvent.preventDefault();\n      this.goStart();\n    }\n    if (aEvent.keyCode == 32) { // space\n      aEvent.preventDefault();\n      this.toggleContent();\n    }\n    if (aEvent.keyCode == 70) { // f\n      aEvent.preventDefault();\n      this.goFullscreen();\n    }\n  }\n\n  /* Touch Events */\n\n  Dz.setupTouchEvents = function() {\n    var orgX, newX;\n    var tracking = false;\n\n    var db = document.body;\n    db.addEventListener(\"touchstart\", start.bind(this), false);\n    db.addEventListener(\"touchmove\", move.bind(this), false);\n\n    function start(aEvent) {\n      aEvent.preventDefault();\n      tracking = true;\n      orgX = aEvent.changedTouches[0].pageX;\n    }\n\n    function move(aEvent) {\n      if (!tracking) return;\n      newX = aEvent.changedTouches[0].pageX;\n      if (orgX - newX > 100) {\n        tracking = false;\n        this.forward();\n      } else {\n        if (orgX - newX < -100) {\n          tracking = false;\n          this.back();\n        }\n      }\n    }\n  }\n\n  /* Adapt the size of the slides to the window */\n\n  Dz.onresize = function() {\n    var db = document.body;\n    var sx = db.clientWidth / window.innerWidth;\n    var sy = db.clientHeight / window.innerHeight;\n    var transform = \"scale(\" + (1/Math.max(sx, sy)) + \")\";\n\n    db.style.MozTransform = transform;\n    db.style.WebkitTransform = transform;\n    db.style.OTransform = transform;\n    db.style.msTransform = transform;\n    db.style.transform = transform;\n  }\n\n\n  Dz.getDetails = function(aIdx) {\n    var s = $(\"section:nth-of-type(\" + aIdx + \")\");\n    var d = s.$(\"details\");\n    return d ? d.innerHTML : \"\";\n  }\n\n  Dz.onmessage = function(aEvent) {\n    var argv = aEvent.data.split(\" \"), argc = argv.length;\n    argv.forEach(function(e, i, a) { a[i] = decodeURIComponent(e) });\n    var win = aEvent.source;\n    if (argv[0] === \"REGISTER\" && argc === 1) {\n      this.remoteWindows.push(win);\n      this.postMsg(win, \"REGISTERED\", document.title, this.slides.length);\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n      return;\n    }\n    if (argv[0] === \"BACK\" && argc === 1)\n      this.back();\n    if (argv[0] === \"FORWARD\" && argc === 1)\n      this.forward();\n    if (argv[0] === \"START\" && argc === 1)\n      this.goStart();\n    if (argv[0] === \"END\" && argc === 1)\n      this.goEnd();\n    if (argv[0] === \"TOGGLE_CONTENT\" && argc === 1)\n      this.toggleContent();\n    if (argv[0] === \"SET_CURSOR\" && argc === 2)\n      window.location.hash = \"#\" + argv[1];\n    if (argv[0] === \"GET_CURSOR\" && argc === 1)\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n    if (argv[0] === \"GET_NOTES\" && argc === 1)\n      this.postMsg(win, \"NOTES\", this.getDetails(this.idx));\n  }\n\n  Dz.toggleContent = function() {\n    // If a Video is present in this new slide, play it.\n    // If a Video is present in the previous slide, stop it.\n    var s = $(\"section[aria-selected]\");\n    if (s) {\n      var video = s.$(\"video\");\n      if (video) {\n        if (video.ended || video.paused) {\n          video.play();\n        } else {\n          video.pause();\n        }\n      }\n    }\n  }\n\n  Dz.setCursor = function(aIdx, aStep) {\n    // If the user change the slide number in the URL bar, jump\n    // to this slide.\n    aStep = (aStep != 0 && typeof aStep !== \"undefined\") ? \".\" + aStep : \".0\";\n    window.location.hash = \"#\" + aIdx + aStep;\n  }\n\n  Dz.onhashchange = function() {\n    var cursor = window.location.hash.split(\"#\"),\n        newidx = 1,\n        newstep = 0;\n    if (cursor.length == 2) {\n      newidx = ~~cursor[1].split(\".\")[0];\n      newstep = ~~cursor[1].split(\".\")[1];\n      if (newstep > Dz.slides[newidx - 1].$$('.incremental > *').length) {\n        newstep = 0;\n        newidx++;\n      }\n    }\n    this.setProgress(newidx, newstep);\n    if (newidx != this.idx) {\n      this.setSlide(newidx);\n    }\n    if (newstep != this.step) {\n      this.setIncremental(newstep);\n    }\n    for (var i = 0; i < this.remoteWindows.length; i++) {\n      this.postMsg(this.remoteWindows[i], \"CURSOR\", this.idx + \".\" + this.step);\n    }\n  }\n\n  Dz.back = function() {\n    if (this.idx == 1 && this.step == 0) {\n      return;\n    }\n    if (this.step == 0) {\n      this.setCursor(this.idx - 1,\n                     this.slides[this.idx - 2].$$('.incremental > *').length);\n    } else {\n      this.setCursor(this.idx, this.step - 1);\n    }\n  }\n\n  Dz.forward = function() {\n    if (this.idx >= this.slides.length &&\n        this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n        return;\n    }\n    if (this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n      this.setCursor(this.idx + 1, 0);\n    } else {\n      this.setCursor(this.idx, this.step + 1);\n    }\n  }\n\n  Dz.goStart = function() {\n    this.setCursor(1, 0);\n  }\n\n  Dz.goEnd = function() {\n    var lastIdx = this.slides.length;\n    var lastStep = this.slides[lastIdx - 1].$$('.incremental > *').length;\n    this.setCursor(lastIdx, lastStep);\n  }\n\n  Dz.setSlide = function(aIdx) {\n    this.idx = aIdx;\n    var old = $(\"section[aria-selected]\");\n    var next = $(\"section:nth-of-type(\"+ this.idx +\")\");\n    if (old) {\n      old.removeAttribute(\"aria-selected\");\n      var video = old.$(\"video\");\n      if (video) {\n        video.pause();\n      }\n    }\n    if (next) {\n      next.setAttribute(\"aria-selected\", \"true\");\n      var video = next.$(\"video\");\n      if (video && !!+this.params.autoplay) {\n        video.play();\n      }\n    } else {\n      // That should not happen\n      this.idx = -1;\n      // console.warn(\"Slide doesn't exist.\");\n    }\n  }\n\n  Dz.setIncremental = function(aStep) {\n    this.step = aStep;\n    var old = this.slides[this.idx - 1].$('.incremental > *[aria-selected]');\n    if (old) {\n      old.removeAttribute('aria-selected');\n    }\n    var incrementals = $$('.incremental');\n    if (this.step <= 0) {\n      $$.forEach(incrementals, function(aNode) {\n        aNode.removeAttribute('active');\n      });\n      return;\n    }\n    var next = this.slides[this.idx - 1].$$('.incremental > *')[this.step - 1];\n    if (next) {\n      next.setAttribute('aria-selected', true);\n      next.parentNode.setAttribute('active', true);\n      var found = false;\n      $$.forEach(incrementals, function(aNode) {\n        if (aNode != next.parentNode)\n          if (found)\n            aNode.removeAttribute('active');\n          else\n            aNode.setAttribute('active', true);\n        else\n          found = true;\n      });\n    } else {\n      setCursor(this.idx, 0);\n    }\n    return next;\n  }\n\n  Dz.goFullscreen = function() {\n    var html = $('html'),\n        requestFullscreen = html.requestFullscreen || html.requestFullScreen || html.mozRequestFullScreen || html.webkitRequestFullScreen;\n    if (requestFullscreen) {\n      requestFullscreen.apply(html);\n    }\n  }\n  \n  Dz.setProgress = function(aIdx, aStep) {\n    var slide = $(\"section:nth-of-type(\"+ aIdx +\")\");\n    if (!slide)\n      return;\n    var steps = slide.$$('.incremental > *').length + 1,\n        slideSize = 100 / (this.slides.length - 1),\n        stepSize = slideSize / steps;\n    this.progressBar.style.width = ((aIdx - 1) * slideSize + aStep * stepSize) + '%';\n  }\n  \n  Dz.postMsg = function(aWin, aMsg) { // [arg0, [arg1...]]\n    aMsg = [aMsg];\n    for (var i = 2; i < arguments.length; i++)\n      aMsg.push(encodeURIComponent(arguments[i]));\n    aWin.postMessage(aMsg.join(\" \"), \"*\");\n  }\n  \n  function init() {\n    Dz.init();\n    window.onkeydown = Dz.onkeydown.bind(Dz);\n    window.onresize = Dz.onresize.bind(Dz);\n    window.onhashchange = Dz.onhashchange.bind(Dz);\n    window.onmessage = Dz.onmessage.bind(Dz);\n  }\n\n  window.onload = init;\n</script>\n\n\n<script> // Helpers\n  if (!Function.prototype.bind) {\n    Function.prototype.bind = function (oThis) {\n\n      // closest thing possible to the ECMAScript 5 internal IsCallable\n      // function \n      if (typeof this !== \"function\")\n      throw new TypeError(\n        \"Function.prototype.bind - what is trying to be fBound is not callable\"\n      );\n\n      var aArgs = Array.prototype.slice.call(arguments, 1),\n          fToBind = this,\n          fNOP = function () {},\n          fBound = function () {\n            return fToBind.apply( this instanceof fNOP ? this : oThis || window,\n                   aArgs.concat(Array.prototype.slice.call(arguments)));\n          };\n\n      fNOP.prototype = this.prototype;\n      fBound.prototype = new fNOP();\n\n      return fBound;\n    };\n  }\n\n  var $ = (HTMLElement.prototype.$ = function(aQuery) {\n    return this.querySelector(aQuery);\n  }).bind(document);\n\n  var $$ = (HTMLElement.prototype.$$ = function(aQuery) {\n    return this.querySelectorAll(aQuery);\n  }).bind(document);\n\n  $$.forEach = function(nodeList, fun) {\n    Array.prototype.forEach.call(nodeList, fun);\n  }\n\n</script>\n<!-- vim: set fdm=marker: }}} -->\n"),("templates/default.asciidoc","$if(titleblock)$\n$title$\n$for(author)$\n:author: $author$\n$endfor$\n$if(date)$\n:date: $date$\n$endif$\n$if(toc)$\n:toc:\n$endif$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.beamer","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}\n$if(theme)$\n\\usetheme{$theme$}\n$endif$\n$if(colortheme)$\n\\usecolortheme{$colortheme$}\n$endif$\n$if(fonttheme)$\n\\usefonttheme{$fonttheme$}\n$endif$\n\\setbeamertemplate{caption}[numbered]\n\\setbeamertemplate{caption label separator}{:}\n\\setbeamercolor{caption name}{fg=normal text.fg}\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n\\usepackage{lmodern}\n\\ifxetex\n  \\usepackage{fontspec,xltxtra,xunicode}\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\newcommand{\\euro}{\226\130\172}\n\\else\n  \\ifluatex\n    \\usepackage{fontspec}\n    \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n    \\newcommand{\\euro}{\226\130\172}\n  \\else\n    \\usepackage[T1]{fontenc}\n    \\usepackage[utf8]{inputenc}\n    $if(euro)$\n      \\usepackage{eurosym}\n    $endif$\n  \\fi\n\\fi\n% use upquote if available, for straight quotes in verbatim environments\n\\IfFileExists{upquote.sty}{\\usepackage{upquote}}{}\n% use microtype if available\n\\IfFileExists{microtype.sty}{\\usepackage{microtype}}{}\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{plainnat}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n$endif$\n$if(tables)$\n\\usepackage{longtable,booktabs}\n\\usepackage{caption}\n% These lines are needed to make table captions work with longtable:\n\\makeatletter\n\\def\\fnum@table{\\tablename~\\thetable}\n\\makeatother\n$endif$\n$if(url)$\n\\usepackage{url}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n\\makeatletter\n\\def\\maxwidth{\\ifdim\\Gin@nat@width>\\linewidth\\linewidth\\else\\Gin@nat@width\\fi}\n\\def\\maxheight{\\ifdim\\Gin@nat@height>\\textheight0.8\\textheight\\else\\Gin@nat@height\\fi}\n\\makeatother\n% Scale images if necessary, so that they will not overflow the page\n% margins by default, and it is still possible to overwrite the defaults\n% using explicit options in \\includegraphics[width, height, ...]{}\n\\setkeys{Gin}{width=\\maxwidth,height=\\maxheight,keepaspectratio}\n$endif$\n\n% Comment these out if you don't want a slide with just the\n% part/section/subsection/subsubsection title:\n\\AtBeginPart{\n  \\let\\insertpartnumber\\relax\n  \\let\\partname\\relax\n  \\frame{\\partpage}\n}\n\\AtBeginSection{\n  \\let\\insertsectionnumber\\relax\n  \\let\\sectionname\\relax\n  \\frame{\\sectionpage}\n}\n\\AtBeginSubsection{\n  \\let\\insertsubsectionnumber\\relax\n  \\let\\subsectionname\\relax\n  \\frame{\\subsectionpage}\n}\n\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n$if(lang)$\n\\usepackage[$lang$]{babel}\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n\\title{$title$}\n$endif$\n$if(subtitle)$\n\\subtitle{$subtitle$}\n$endif$\n$if(author)$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n$endif$\n\\date{$date$}\n\n\\begin{document}\n$if(title)$\n\\frame{\\titlepage}\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n\\begin{frame}\n\\tableofcontents[hideallsubsections]\n\\end{frame}\n\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\begin{frame}[allowframebreaks]{$biblio-title$}\n\\bibliography{$biblio-files$}\n\\end{frame}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\begin{frame}[allowframebreaks]{$biblio-title$}\n\\printbibliography[heading=none]\n\\end{frame}\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.context","\\startmode[*mkii]\n  \\enableregime[utf-8]  \n  \\setupcolors[state=start]\n\\stopmode\n$if(mainlang)$\n\\mainlanguage[$mainlang$]\n$endif$\n\n% Enable hyperlinks\n\\setupinteraction[state=start, color=middleblue]\n\n\\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$]\n\\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,\n                 height=middle, topspace=0.75in, bottomspace=0.75in]\n\n\\setuppagenumbering[location={footer,center}]\n\n\\setupbodyfont[11pt]\n\n\\setupwhitespace[medium]\n\n\\setuphead[chapter]      [style=\\tfd]\n\\setuphead[section]      [style=\\tfc]\n\\setuphead[subsection]   [style=\\tfb]\n\\setuphead[subsubsection][style=\\bf]\n\n$if(number-sections)$\n$else$\n\\setuphead[chapter, section, subsection, subsubsection][number=no]\n$endif$\n\n\\definedescription\n  [description]\n  [headstyle=bold, style=normal, location=hanging, width=broad, margin=1cm]\n\n\\setupitemize[autointro]    % prevent orphan list intro\n\\setupitemize[indentnext=no]\n\n\\setupfloat[figure][default={here,nonumber}]\n\\setupfloat[table][default={here,nonumber}]\n\n\\setupthinrules[width=15em] % width of horizontal rules\n\n\\setupdelimitedtext\n  [blockquote]\n  [before={\\blank[medium]},\n   after={\\blank[medium]},\n   indentnext=no,\n  ]\n\n$if(toc)$\n\\setupcombinedlist[content][list={$placelist$}]\n\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n\\starttext\n$if(title)$\n\\startalignment[center]\n  \\blank[2*big]\n  {\\tfd $title$}\n$if(author)$\n  \\blank[3*medium]\n  {\\tfa $for(author)$$author$$sep$\\crlf $endfor$}\n$endif$\n$if(date)$\n  \\blank[2*medium]\n  {\\tfa $date$}\n$endif$\n  \\blank[3*medium]\n\\stopalignment\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$if(toc)$\n\\placecontent\n$endif$\n\n$body$\n\n$for(include-after)$\n$include-after$\n$endfor$\n\\stoptext\n"),("templates/default.docbook","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n$if(mathml)$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook EBNF Module V1.1CR1//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd\">\n$else$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook XML V4.5//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\">\n$endif$\n<article>\n  <articleinfo>\n    <title>$title$</title>\n$if(author)$\n    <authorgroup>\n$for(author)$\n      <author>\n        $author$\n      </author>\n$endfor$\n    </authorgroup>\n$endif$\n$if(date)$\n    <date>$date$</date>\n$endif$\n  </articleinfo>\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</article>\n"),("templates/default.dokuwiki","$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n__TOC__\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.dzslides","<!DOCTYPE html>\n<head>\n<meta charset=\"utf-8\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$if(css)$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$else$\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      font-family: Arial, serif;\n      font-size: 20pt;\n    }\n  address, blockquote, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ol, p, pre, table, ul, dl { padding: 10px 20px 10px 20px; }\n  h1, h2, h3 {\n    text-align: center;\n    margin: 10pt 10pt 20pt 10pt;\n  }\n  ul, ol {\n    margin: 10px 10px 10px 50px;\n  }\n  section.titleslide h1 { margin-top: 200px; }\n  h1.title { margin-top: 150px; }\n  h1 { font-size: 180%; }\n  h2 { font-size: 120%; }\n  h3 { font-size: 100%; }\n  q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  blockquote { font-style: italic }\n  /* Figures are displayed full-page, with the caption on\n     top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n  }\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { color: red; opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0.2; }\n</style>\n$endif$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$if(title)$\n<section class=\"title\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n  <h3 class=\"date\">$date$</h3>\n</section>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$dzslides-core$\n</body>\n</html>\n"),("templates/default.epub","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"$css$\" />\n$endfor$\n</head>\n<body$if(coverpage)$ id=\"cover\"$endif$>\n$if(titlepage)$\n$for(title)$\n$if(title.text)$\n  <h1 class=\"$title.type$\">$title.text$</h1>\n$else$\n  <h1 class=\"title\">$title$</h1>\n$endif$\n$endfor$\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$for(creator)$\n  <h2 class=\"$creator.type$\">$creator.text$</h2>\n$endfor$\n$if(publisher)$\n  <p class=\"publisher\">$publisher$</p>\n$endif$\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n$if(rights)$\n  <p class=\"rights\">$rights$</p>\n$endif$\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.epub3","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(quotes)$\n  <style type=\"text/css\">\n    q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  </style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"$css$\" />\n$endfor$\n</head>\n<body$if(coverpage)$ id=\"cover\"$endif$>\n$if(titlepage)$\n<section epub:type=\"titlepage\">\n$for(title)$\n$if(title.type)$\n  <h1 class=\"$title.type$\">$title.text$</h1>\n$else$\n  <h1 class=\"title\">$title$</h1>\n$endif$\n$endfor$\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$for(creator)$\n  <h2 class=\"$creator.type$\">$creator.text$</h2>\n$endfor$\n$if(publisher)$\n  <p class=\"publisher\">$publisher$</p>\n$endif$\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n$if(rights)$\n  <p class=\"rights\">$rights$</p>\n$endif$\n</section>\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.haddock","$body$\n"),("templates/default.html","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div id=\"$idprefix$header\">\n<h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n<h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</div>\n$endif$\n$if(toc)$\n<div id=\"$idprefix$TOC\">\n$toc$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.html5","<!DOCTYPE html>\n<html$if(lang)$ lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"generator\" content=\"pandoc\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\">\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\">\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n  <![endif]-->\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\">\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<header>\n<h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n<h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</header>\n$endif$\n$if(toc)$\n<nav id=\"$idprefix$TOC\">\n$toc$\n</nav>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.icml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<?aid style=\"50\" type=\"snippet\" readerVersion=\"6.0\" featureSet=\"513\" product=\"8.0(370)\" ?>\n<?aid SnippetType=\"InCopyInterchange\"?>\n<Document DOMVersion=\"8.0\" Self=\"pandoc_doc\">\n    <RootCharacterStyleGroup Self=\"pandoc_character_styles\">\n      <CharacterStyle Self=\"$$ID/NormalCharacterStyle\" Name=\"Default\" />\n      $charStyles$ \n    </RootCharacterStyleGroup>\n    <RootParagraphStyleGroup Self=\"pandoc_paragraph_styles\">\n      <ParagraphStyle Self=\"$$ID/NormalParagraphStyle\" Name=\"$$ID/NormalParagraphStyle\"\n          SpaceBefore=\"6\" SpaceAfter=\"6\"> <!-- paragraph spacing -->\n        <Properties>\n          <TabList type=\"list\">\n            <ListItem type=\"record\">\n              <Alignment type=\"enumeration\">LeftAlign</Alignment>\n              <AlignmentCharacter type=\"string\">.</AlignmentCharacter>\n              <Leader type=\"string\"></Leader>\n              <Position type=\"unit\">10</Position> <!-- first tab stop -->\n            </ListItem>\n          </TabList>\n        </Properties>\n      </ParagraphStyle>\n      $parStyles$ \n    </RootParagraphStyleGroup>\n    <RootTableStyleGroup Self=\"pandoc_table_styles\">\n      <TableStyle Self=\"TableStyle/Table\" Name=\"Table\" />\n    </RootTableStyleGroup>\n    <RootCellStyleGroup Self=\"pandoc_cell_styles\">\n      <CellStyle Self=\"CellStyle/Cell\" AppliedParagraphStyle=\"ParagraphStyle/$$ID/[No paragraph style]\" Name=\"Cell\" />\n    </RootCellStyleGroup>\n  <Story Self=\"pandoc_story\"\n      TrackChanges=\"false\"\n      StoryTitle=\"$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$\"\n      AppliedTOCStyle=\"n\"\n      AppliedNamedGrid=\"n\" >\n    <StoryPreference OpticalMarginAlignment=\"true\" OpticalMarginSize=\"12\" />\n\n<!-- body needs to be non-indented, otherwise code blocks are indented too far -->\n$body$\n\n  </Story>\n  $hyperlinks$\n</Document>\n"),("templates/default.latex","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}\n$if(fontfamily)$\n\\usepackage{$fontfamily$}\n$else$\n\\usepackage{lmodern}\n$endif$\n$if(linestretch)$\n\\usepackage{setspace}\n\\setstretch{$linestretch$}\n$endif$\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n\\ifnum 0\\ifxetex 1\\fi\\ifluatex 1\\fi=0 % if pdftex\n  \\usepackage[T1]{fontenc}\n  \\usepackage[utf8]{inputenc}\n$if(euro)$\n  \\usepackage{eurosym}\n$endif$\n\\else % if luatex or xelatex\n  \\ifxetex\n    \\usepackage{mathspec}\n    \\usepackage{xltxtra,xunicode}\n  \\else\n    \\usepackage{fontspec}\n  \\fi\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\newcommand{\\euro}{\226\130\172}\n$if(mainfont)$\n    \\setmainfont{$mainfont$}\n$endif$\n$if(sansfont)$\n    \\setsansfont{$sansfont$}\n$endif$\n$if(monofont)$\n    \\setmonofont[Mapping=tex-ansi]{$monofont$}\n$endif$\n$if(mathfont)$\n    \\setmathfont(Digits,Latin,Greek){$mathfont$}\n$endif$\n\\fi\n% use upquote if available, for straight quotes in verbatim environments\n\\IfFileExists{upquote.sty}{\\usepackage{upquote}}{}\n% use microtype if available\n\\IfFileExists{microtype.sty}{%\n\\usepackage{microtype}\n\\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts\n}{}\n$if(geometry)$\n\\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}\n$endif$\n$if(lang)$\n\\ifxetex\n  \\usepackage{polyglossia}\n  \\setmainlanguage{$mainlang$}\n\\else\n  \\usepackage[shorthands=off,$lang$]{babel}\n\\fi\n$endif$\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n\\VerbatimFootnotes\n$endif$\n$if(tables)$\n\\usepackage{longtable,booktabs}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n\\makeatletter\n\\def\\maxwidth{\\ifdim\\Gin@nat@width>\\linewidth\\linewidth\\else\\Gin@nat@width\\fi}\n\\def\\maxheight{\\ifdim\\Gin@nat@height>\\textheight\\textheight\\else\\Gin@nat@height\\fi}\n\\makeatother\n% Scale images if necessary, so that they will not overflow the page\n% margins by default, and it is still possible to overwrite the defaults\n% using explicit options in \\includegraphics[width, height, ...]{}\n\\setkeys{Gin}{width=\\maxwidth,height=\\maxheight,keepaspectratio}\n$endif$\n\\ifxetex\n  \\usepackage[setpagesize=false, % page size defined by xetex\n              unicode=false, % unicode breaks when used with xetex\n              xetex]{hyperref}\n\\else\n  \\usepackage[unicode=true]{hyperref}\n\\fi\n\\hypersetup{breaklinks=true,\n            bookmarks=true,\n            pdfauthor={$author-meta$},\n            pdftitle={$title-meta$},\n            colorlinks=true,\n            citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,\n            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,\n            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,\n            pdfborder={0 0 0}}\n\\urlstyle{same}  % don't use monospace font for urls\n$if(links-as-notes)$\n% Make links footnotes instead of hotlinks:\n\\renewcommand{\\href}[2]{#2\\footnote{\\url{#1}}}\n$endif$\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n\\setcounter{secnumdepth}{5}\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n\n$if(title)$\n\\title{$title$$if(subtitle)$\\\\\\vspace{0.5em}{\\large $subtitle$}$endif$}\n$endif$\n$if(author)$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n$endif$\n\\date{$date$}\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n\\begin{document}\n$if(title)$\n\\maketitle\n$endif$\n$if(abstract)$\n\\begin{abstract}\n$abstract$\n\\end{abstract}\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n{\n\\hypersetup{linkcolor=black}\n\\setcounter{tocdepth}{$toc-depth$}\n\\tableofcontents\n}\n$endif$\n$if(lot)$\n\\listoftables\n$endif$\n$if(lof)$\n\\listoffigures\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\bibliography{$biblio-files$}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.man","$if(has-tables)$\n.\\\"t\n$endif$\n.TH \"$title$\" \"$section$\" \"$date$\" \"$footer$\" \"$header$\"\n$for(header-includes)$\n$header-includes$\n$endfor$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$if(author)$\n.SH AUTHORS\n$for(author)$$author$$sep$; $endfor$.\n$endif$\n"),("templates/default.markdown","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.mediawiki","$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n__TOC__\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.opendocument","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:ooo=\"http://openoffice.org/2004/office\" xmlns:ooow=\"http://openoffice.org/2004/writer\" xmlns:oooc=\"http://openoffice.org/2004/calc\" xmlns:dom=\"http://www.w3.org/2001/xml-events\" xmlns:xforms=\"http://www.w3.org/2002/xforms\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" office:version=\"1.2\">\n  <office:font-face-decls>\n    <style:font-face style:name=\"Courier New\" style:font-family-generic=\"modern\" style:font-pitch=\"fixed\" svg:font-family=\"'Courier New'\" />\n  </office:font-face-decls>\n  $automatic-styles$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n<office:body>\n<office:text>\n$if(title)$\n<text:h text:style-name=\"Title\">$title$</text:h>\n$endif$\n$for(author)$\n<text:p text:style-name=\"Author\">$author$</text:p>\n$endfor$\n$if(date)$\n<text:p text:style-name=\"Date\">$date$</text:p>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</office:text>\n</office:body>\n</office:document-content>\n"),("templates/default.opml","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<opml version=\"2.0\">\n  <head>\n    <title>$title$</title>\n    <dateModified>$date$</dateModified>\n    <ownerName>$for(author)$$author$$sep$; $endfor$</ownerName>\n  </head>\n  <body>\n$body$\n  </body>\n</opml>\n"),("templates/default.org","$if(title)$\n#+TITLE: $title$\n\n$endif$\n$if(author)$\n#+AUTHOR: $for(author)$$author$$sep$; $endfor$\n$endif$\n$if(date)$\n#+DATE: $date$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.plain","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.revealjs","<!DOCTYPE html>\n<html$if(lang)$ lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"generator\" content=\"pandoc\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n  <link rel=\"stylesheet\" href=\"$revealjs-url$/css/reveal.min.css\"/>\n    <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n    <style type=\"text/css\">\n$highlighting-css$\n    </style>\n$endif$\n$if(css)$\n$for(css)$\n    <link rel=\"stylesheet\" href=\"$css$\"/>\n$endfor$\n$else$\n    <link rel=\"stylesheet\" href=\"$revealjs-url$/css/theme/simple.css\" id=\"theme\">\n$endif$\n    <!-- If the query includes 'print-pdf', include the PDF print sheet -->\n    <script>\n      if( window.location.search.match( /print-pdf/gi ) ) {\n        var link = document.createElement( 'link' );\n        link.rel = 'stylesheet';\n        link.type = 'text/css';\n        link.href = '$revealjs-url$/css/print/pdf.css';\n        document.getElementsByTagName( 'head' )[0].appendChild( link );\n      }\n    </script>\n    <!--[if lt IE 9]>\n    <script src=\"$revealjs-url$/lib/js/html5shiv.js\"></script>\n    <![endif]-->\n$if(math)$\n    $math$\n$endif$\n$for(header-includes)$\n    $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n  <div class=\"reveal\">\n    <div class=\"slides\">\n\n$if(title)$\n<section>\n    <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n    <h2 class=\"author\">$author$</h2>\n$endfor$\n    <h3 class=\"date\">$date$</h3>\n</section>\n$endif$\n$if(toc)$\n<section id=\"$idprefix$TOC\">\n$toc$\n</section>\n$endif$\n\n$body$\n    </div>\n  </div>\n\n\n  <script src=\"$revealjs-url$/lib/js/head.min.js\"></script>\n  <script src=\"$revealjs-url$/js/reveal.min.js\"></script>\n\n  <script>\n\n      // Full list of configuration options available here:\n      // https://github.com/hakimel/reveal.js#configuration\n      Reveal.initialize({\n        controls: true,\n        progress: true,\n        history: true,\n        center: true,\n        theme: $if(theme)$'$theme$'$else$Reveal.getQueryHash().theme$endif$, // available themes are in /css/theme\n        transition: $if(transition)$'$transition$'$else$Reveal.getQueryHash().transition || 'default'$endif$, // default/cube/page/concave/zoom/linear/fade/none\n\n        // Optional libraries used to extend on reveal.js\n        dependencies: [\n          { src: '$revealjs-url$/lib/js/classList.js', condition: function() { return !document.body.classList; } },\n          { src: '$revealjs-url$/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },\n          { src: '$revealjs-url$/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },\n//          { src: '$revealjs-url$/plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; }, }\n//          { src: '$revealjs-url$/plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }\n]});\n    </script>\n  $for(include-after)$\n  $include-after$\n  $endfor$\n  </body>\n</html>\n"),("templates/default.rst","$if(title)$\n$title$\n\n$endif$\n$for(author)$\n:Author: $author$\n$endfor$\n$if(date)$\n:Date:   $date$\n$endif$\n$if(author)$\n\n$else$\n$if(date)$\n\n$endif$\n$endif$\n$if(math)$\n.. role:: math(raw)\n   :format: html latex\n..\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n.. contents::\n   :depth: $toc-depth$\n..\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.rtf","{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}\n{\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}\n\\widowctrl\\hyphauto\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0 \\b \\fs36 $title$\\par}\n$endif$\n$for(author)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $author$\\par}\n$endfor$\n$if(date)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $date$\\par}\n$endif$\n$if(spacer)$\n{\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 \\par}\n$endif$\n$if(toc)$\n$toc$\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n}\n"),("templates/default.s5","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!-- configuration parameters -->\n  <meta name=\"defaultView\" content=\"slideshow\" />\n  <meta name=\"controlVis\" content=\"hidden\" />\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" type=\"text/css\" />\n$endfor$\n  <!-- style sheet links -->\n  <link rel=\"stylesheet\" href=\"$s5-url$/slides.css\" type=\"text/css\" media=\"projection\" id=\"slideProj\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/outline.css\" type=\"text/css\" media=\"screen\" id=\"outlineStyle\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/print.css\" type=\"text/css\" media=\"print\" id=\"slidePrint\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/opera.css\" type=\"text/css\" media=\"projection\" id=\"operaFix\" />\n  <!-- S5 JS -->\n  <script src=\"$s5-url$/slides.js\" type=\"text/javascript\"></script>\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div class=\"layout\">\n<div id=\"controls\"></div>\n<div id=\"currentSlide\"></div>\n<div id=\"header\"></div>\n<div id=\"footer\">\n  <h1>$date$</h1>\n  <h2>$title$</h2>\n</div>\n</div>\n<div class=\"presentation\">\n$if(title)$\n<div class=\"titleslide slide\">\n  <h1>$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <h2>$for(author)$$author$$sep$<br/>$endfor$</h2>\n  <h3>$date$</h3>\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</div>\n</body>\n</html>\n"),("templates/default.slideous","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slideous-url$/slideous.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slideous-url$/slideous.js\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div id=\"statusbar\">\n<span style=\"float:right;\">\n<span style=\"margin-right:4em;font-weight:bold;\"><span id=\"slideidx\"></span> of {$$slidecount}</span>\n<button id=\"homebutton\" title=\"first slide\">1</button>\n<button id=\"prevslidebutton\" title=\"previous slide\">&laquo;</button>\n<button id=\"previtembutton\" title=\"previous item\">&lsaquo;</button>\n<button id=\"nextitembutton\" title=\"next item\">&rsaquo;</button>\n<button id=\"nextslidebutton\" title=\"next slide\">&raquo;</button>\n<button id=\"endbutton\" title=\"last slide\">{$$slidecount}</button>\n<button id=\"incfontbutton\" title=\"content\">A+</button>\n<button id=\"decfontbutton\" title=\"first slide\">A-</button>\n<select id=\"tocbox\" size=\"1\"><option></option></select>\n</span>\n<span id=\"eos\">&frac12;</span>\n<span title=\"{$$location}, {$$date}\">{$$title}, {$$author}</span>\n</div>\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.slidy","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slidy-url$/styles/slidy.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slidy-url$/scripts/slidy.js\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.texinfo","\\input texinfo\n@documentencoding UTF-8\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(strikeout)$\n@macro textstrikeout{text}\n~~\\text\\~~\n@end macro\n\n$endif$\n$if(subscript)$\n@macro textsubscript{text}\n@iftex\n@textsubscript{\\text\\}\n@end iftex\n@ifnottex\n_@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n$if(superscript)$\n@macro textsuperscript{text}\n@iftex\n@textsuperscript{\\text\\}\n@end iftex\n@ifnottex\n^@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n@ifnottex\n@paragraphindent 0\n@end ifnottex\n$if(titlepage)$\n@titlepage\n@title $title$\n$for(author)$\n@author $author$\n$endfor$\n$if(date)$\n$date$\n$endif$\n@end titlepage\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n@contents\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n\n@bye\n"),("templates/default.textile","$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/README.markdown","Templates for [pandoc](http://github.com/jgm/pandoc).\n\nIf you use custom templates, we recommend forking this repository,\nso that you can integrate changes to the default templates in future\npandoc releases.\n\nAll of the templates in this repository are dual licensed, under both\nthe GPL (v2 or higher, same as pandoc) and the BSD 3-clause license\n(included below).\n\n----\n\nCopyright (c) 2014, John MacFarlane\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of John MacFarlane nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n")]
man/man1/pandoc.1 view
@@ -1,4 +1,4 @@-.TH PANDOC 1 "August 30, 2014" "1.13.1"+.TH PANDOC 1 "August 30, 2014" "1.13.2" .SH NAME pandoc - general markup converter .SH SYNOPSIS@@ -9,14 +9,14 @@ Pandoc is a Haskell library for converting from one markup format to another, and a command\-line tool that uses this library. It can read markdown and (subsets of) Textile, reStructuredText, HTML,-LaTeX, MediaWiki markup, Haddock markup, OPML, Emacs Org\-mode, DocBook,-txt2tags, EPUB and Word docx; and it can write plain text, markdown,-reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide shows),-ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo,-MediaWiki markup, DokuWiki markup, Haddock markup, EPUB (v2 or v3),-FictionBook2, Textile, groff man pages, Emacs Org\-Mode, AsciiDoc,-InDesign ICML, and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide-shows.+LaTeX, MediaWiki markup, TWiki markup, Haddock markup, OPML, Emacs+Org\-mode, DocBook, txt2tags, EPUB and Word docx; and it can write plain+text, markdown, reStructuredText, XHTML, HTML 5, LaTeX (including beamer+slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx,+GNU Texinfo, MediaWiki markup, DokuWiki markup, Haddock markup, EPUB (v2+or v3), FictionBook2, Textile, groff man pages, Emacs Org\-Mode,+AsciiDoc, InDesign ICML, and Slidy, Slideous, DZSlides, reveal.js or S5+HTML slide shows. It can also produce PDF output on systems where LaTeX is installed. .PP Pandoc\[aq]s enhanced version of markdown includes syntax for footnotes,@@ -51,6 +51,20 @@ \f[] .fi .PP+By default, pandoc produces a document fragment, not a standalone+document with a proper header and footer.+To produce a standalone document, use the \f[C]\-s\f[] or+\f[C]\-\-standalone\f[] flag:+.IP+.nf+\f[C]+pandoc\ \-s\ \-o\ output.html\ input.txt+\f[]+.fi+.PP+For more information on how standalone documents are produced, see+Templates, below.+.PP Instead of a file, an absolute URI may be given. In this case pandoc will fetch the content using HTTP: .IP@@ -123,6 +137,11 @@ iconv\ \-t\ utf\-8\ input.txt\ |\ pandoc\ |\ iconv\ \-f\ utf\-8 \f[] .fi+.PP+Note that in some output formats (such as HTML, LaTeX, ConTeXt, RTF,+OPML, DocBook, and Texinfo), information about the character encoding is+included in the document header, which will only be included if you use+the \f[C]\-s/\-\-standalone\f[] option. .SS Creating a PDF .PP Earlier versions of pandoc came with a program, \f[C]markdown2pdf\f[],@@ -174,8 +193,8 @@ (Textile), \f[C]rst\f[] (reStructuredText), \f[C]html\f[] (HTML), \f[C]docbook\f[] (DocBook), \f[C]t2t\f[] (txt2tags), \f[C]docx\f[] (docx), \f[C]epub\f[] (EPUB), \f[C]opml\f[] (OPML), \f[C]org\f[] (Emacs-Org\-mode), \f[C]mediawiki\f[] (MediaWiki markup), \f[C]haddock\f[]-(Haddock markup), or \f[C]latex\f[] (LaTeX).+Org\-mode), \f[C]mediawiki\f[] (MediaWiki markup), \f[C]twiki\f[] (TWiki+markup), \f[C]haddock\f[] (Haddock markup), or \f[C]latex\f[] (LaTeX). If \f[C]+lhs\f[] is appended to \f[C]markdown\f[], \f[C]rst\f[], \f[C]latex\f[], or \f[C]html\f[], the input will be treated as literate Haskell source: see Literate Haskell support, below.@@ -305,7 +324,8 @@ en\-dashes, and \f[C]\&...\f[] to ellipses. Nonbreaking spaces are inserted after certain abbreviations, such as "Mr." (Note: This option is significant only when the input format is-\f[C]markdown\f[], \f[C]markdown_strict\f[], or \f[C]textile\f[].+\f[C]markdown\f[], \f[C]markdown_strict\f[], \f[C]textile\f[] or+\f[C]twiki\f[]. It is selected automatically when the input format is \f[C]textile\f[] or the output format is \f[C]latex\f[] or \f[C]context\f[], unless \f[C]\-\-no\-tex\-ligatures\f[] is used.)@@ -971,6 +991,18 @@ If \f[I]URL\f[] is not specified, the Google Chart API will be used. .RS .RE+.PP+\f[C]\-\-katex\f[][=\f[I]URL\f[]] : Use KaTeX to display embedded TeX+math in HTML output.+The \f[I]URL\f[] should point to the \f[C]katex.js\f[] load script.+If a \f[I]URL\f[] is not provided, a link to the KaTeX CDN will be+inserted.+.PP+\f[C]\-\-katex\-stylesheet=*URL*\f[] : The \f[I]URL\f[] should point to+the \f[C]katex.css\f[] stylesheet.+If this option is not specified, a link to the KaTeX CDN will be+inserted.+Note that this option does not imply \f[C]\-\-katex\f[]. .SS Options for wrapper scripts .TP .B \f[C]\-\-dump\-args\f[]@@ -1553,7 +1585,7 @@ \-\ scheme:\ DOI \ \ text:\ doi:10.234234.234/33 publisher:\ \ My\ Press-rights:\ \ (c)\ 2007\ John\ Smith,\ CC\ BY\-NC+rights:\ ©\ 2007\ John\ Smith,\ CC\ BY\-NC \&... \f[] .fi
man/man5/pandoc_markdown.5 view
@@ -1,5 +1,5 @@ .\"t-.TH PANDOC_MARKDOWN 5 "August 30, 2014" "1.13.1"+.TH PANDOC_MARKDOWN 5 "August 30, 2014" "1.13.2" .SH NAME pandoc_markdown - markdown syntax for pandoc(1) .SH DESCRIPTION@@ -1277,6 +1277,12 @@ union\f[]: if two metadata blocks attempt to set the same field, the value from the first block will be taken. .PP+When pandoc is used with \f[C]\-t\ markdown\f[] to create a markdown+document, a YAML metadata block will be produced only if the+\f[C]\-s/\-\-standalone\f[] option is used.+All of the metadata will appear in a single block at the beginning of+the document.+.PP Note that YAML escaping rules must be followed. Thus, for example, if a title contains a colon, it must be quoted. The pipe character (\f[C]|\f[]) can be used to begin an indented block@@ -1530,9 +1536,10 @@ .SS Extension: \f[C]tex_math_dollars\f[] .PP Anything between two \f[C]$\f[] characters will be treated as TeX math.-The opening \f[C]$\f[] must have a character immediately to its right,-while the closing \f[C]$\f[] must have a character immediately to its-left.+The opening \f[C]$\f[] must have a non\-space character immediately to+its right, while the closing \f[C]$\f[] must have a non\-space character+immediately to its left, and must not be followed immediately by a+digit. Thus, \f[C]$20,000\ and\ $30,000\f[] won\[aq]t parse as math. If for some reason you need to enclose text in literal \f[C]$\f[] characters, backslash\-escape them and they won\[aq]t be treated as math@@ -1548,7 +1555,7 @@ .TP .B reStructuredText It will be rendered using an interpreted text role \f[C]:math:\f[], as-described here.+described here .RS .RE .TP@@ -1813,6 +1820,15 @@ part. The link text can contain formatting (such as emphasis), but the title cannot.+.PP+Email addresses in inline links are not autodetected, so they have to be+prefixed with \f[C]mailto\f[]:+.IP+.nf+\f[C]+[Write\ me!](mailto:sam\@green.eggs.ham)+\f[]+.fi .SS Reference links .PP An \f[I]explicit\f[] reference link has two parts, the link itself and@@ -1825,6 +1841,9 @@ the bracketed label, followed by a colon and a space, followed by the URL, and optionally (after a space) a link title either in quotes or in parentheses.+The label must not be parseable as a citation (assuming the+\f[C]citations\f[] extension is enabled): citations take precedence over+link labels. .PP Here are some examples: .IP@@ -2085,9 +2104,11 @@ Note that \f[C]\&.bib\f[] can generally be used with both BibTeX and BibLaTeX files, but you can use \f[C]\&.bibtex\f[] to force BibTeX. .PP-Alternatively you can use a \f[C]references\f[] field in the+As an alternative to specifying a bibliography file, you can include the+citation data directly in the \f[C]references\f[] field of the document\[aq]s YAML metadata.-This should include an array of YAML\-encoded references, for example:+The field should contain an array of YAML\-encoded references, for+example: .IP .nf \f[C]
pandoc.cabal view
@@ -1,5 +1,5 @@ Name:            pandoc-Version:         1.13.1+Version:         1.13.2 Cabal-Version:   >= 1.10 Build-Type:      Custom License:         GPL@@ -16,14 +16,15 @@ Description:     Pandoc is a Haskell library for converting from one markup                  format to another, and a command-line tool that uses                  this library. It can read markdown and (subsets of) HTML,-                 reStructuredText, LaTeX, DocBook, MediaWiki markup, Haddock-                 markup, OPML, Emacs Org-Mode, txt2tags and Textile, and it can write-                 markdown, reStructuredText, HTML, LaTeX, ConTeXt, Docbook,-                 OPML, OpenDocument, ODT, Word docx, RTF, MediaWiki, DokuWiki,-                 Textile, groff man pages, plain text, Emacs Org-Mode, AsciiDoc,-                 Haddock markup, EPUB (v2 and v3), FictionBook2,-                 InDesign ICML, and several kinds of HTML/javascript-                 slide shows (S5, Slidy, Slideous, DZSlides, reveal.js).+                 reStructuredText, LaTeX, DocBook, MediaWiki markup, TWiki+                 markup, Haddock markup, OPML, Emacs Org-Mode, txt2tags and+                 Textile, and it can write markdown, reStructuredText, XHTML,+                 HTML 5, LaTeX, ConTeXt, DocBook, OPML, OpenDocument, ODT,+                 Word docx, RTF, MediaWiki, DokuWiki, Textile, groff man+                 pages, plain text, Emacs Org-Mode, AsciiDoc, Haddock markup,+                 EPUB (v2 and v3), FictionBook2, InDesign ICML, and several+                 kinds of HTML/javascript slide shows (S5, Slidy, Slideous,+                 DZSlides, reveal.js).                  .                  Pandoc extends standard markdown syntax with footnotes,                  embedded LaTeX, definition lists, tables, and other@@ -169,6 +170,8 @@                  tests/lhs-test.html+lhs                  tests/lhs-test.fragment.html+lhs                  tests/pipe-tables.txt+		 tests/dokuwiki_external_images.dokuwiki+		 tests/dokuwiki_external_images.native                  tests/dokuwiki_multiblock_table.dokuwiki                  tests/dokuwiki_multiblock_table.native                  tests/fb2/*.markdown@@ -182,6 +185,7 @@                  tests/epub/*.epub                  tests/epub/*.native                  tests/txt2tags.t2t+                 tests/twiki-reader.twiki  Source-repository head   type:          git@@ -204,9 +208,13 @@   Default:       False  Flag network-uri-  Description: Get Network.URI from the network-uri package-  Default: True+  Description:   Get Network.URI from the network-uri package+  Default:       True +Flag old-locale+  Description:   Use old-locale and time < 1.5+  Default:       True+ Library   Build-Depends: base >= 4.2 && <5,                  syb >= 0.1 && < 0.5,@@ -219,21 +227,19 @@                  process >= 1 && < 1.3,                  directory >= 1 && < 1.3,                  bytestring >= 0.9 && < 0.11,-                 text >= 0.11 && < 1.2,+                 text >= 0.11 && < 1.3,                  zip-archive >= 0.2.3.4 && < 0.3,-                 old-locale >= 1 && < 1.1,-                 time >= 1.2 && < 1.5,                  HTTP >= 4000.0.5 && < 4000.3,-                 texmath >= 0.8 && < 0.9,+                 texmath >= 0.8.0.1 && < 0.9,                  xml >= 1.3.12 && < 1.4,-                 random >= 1 && < 1.1,+                 random >= 1 && < 1.2,                  extensible-exceptions >= 0.1 && < 0.2,                  pandoc-types >= 1.12.4 && < 1.13,                  aeson >= 0.7 && < 0.9,                  tagsoup >= 0.13.1 && < 0.14,                  base64-bytestring >= 0.1 && < 1.1,                  zlib >= 0.5 && < 0.6,-                 highlighting-kate >= 0.5.8.5 && < 0.6,+                 highlighting-kate >= 0.5.11.1 && < 0.6,                  data-default >= 0.4 && < 0.6,                  temporary >= 1.1 && < 1.3,                  blaze-html >= 0.5 && < 0.8,@@ -247,13 +253,18 @@                  haddock-library >= 1.1 && < 1.2,                  old-time,                  deepseq-generics >= 0.1 && < 0.2,-                 JuicyPixels >= 3.1.6.1 && < 3.2+                 JuicyPixels >= 3.1.6.1 && < 3.3+  if flag(old-locale)+     Build-Depends: old-locale >= 1 && < 1.1,+                    time >= 1.2 && < 1.5+  else+     Build-Depends: time >= 1.5 && < 1.6   if flag(network-uri)      Build-Depends: network-uri >= 2.6 && < 2.7, network >= 2.6   else      Build-Depends: network >= 2 && < 2.6   if flag(https)-     Build-Depends: http-client >= 0.3.2 && < 0.4,+     Build-Depends: http-client >= 0.3.2 && < 0.5,                     http-client-tls >= 0.2 && < 0.3,                     http-types >= 0.8 && < 0.9      cpp-options:   -DHTTP_CLIENT@@ -289,6 +300,7 @@                    Text.Pandoc.Readers.Textile,                    Text.Pandoc.Readers.Native,                    Text.Pandoc.Readers.Haddock,+                   Text.Pandoc.Readers.TWiki,                    Text.Pandoc.Readers.Docx,                    Text.Pandoc.Readers.EPUB,                    Text.Pandoc.Writers.Native,@@ -334,6 +346,7 @@                    Text.Pandoc.ImageSize,                    Text.Pandoc.Slides,                    Text.Pandoc.Highlighting,+                   Text.Pandoc.Compat.Locale,                    Text.Pandoc.Compat.Monoid,                    Text.Pandoc.Compat.Except,                    Text.Pandoc.Compat.TagSoupEntity,@@ -348,16 +361,16 @@                  base >= 4.2 && <5,                  directory >= 1 && < 1.3,                  filepath >= 1.1 && < 1.4,-                 text >= 0.11 && < 1.2,+                 text >= 0.11 && < 1.3,                  bytestring >= 0.9 && < 0.11,                  extensible-exceptions >= 0.1 && < 0.2,-                 highlighting-kate >= 0.5.8.5 && < 0.6,+                 highlighting-kate >= 0.5.11.1 && < 0.6,                  aeson >= 0.7.0.5 && < 0.9,                  yaml >= 0.8.8.2 && < 0.9,                  containers >= 0.1 && < 0.6,                  HTTP >= 4000.0.5 && < 4000.3   if flag(network-uri)-     Build-Depends: network-uri >= 2.6 && < 2.7+     Build-Depends: network-uri >= 2.6 && < 2.7, network >= 2.6   else      Build-Depends: network >= 2 && < 2.6   Ghc-Options:   -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind@@ -393,7 +406,7 @@                  directory >= 1 && < 1.3,                  filepath >= 1.1 && < 1.4,                  old-time >= 1.0 && < 1.2,-                 time >= 1.2 && < 1.5+                 time >= 1.2 && < 1.6   Default-Language: Haskell98   if flag(make-pandoc-man-pages)     Buildable:   True@@ -409,11 +422,11 @@                   pandoc,                   pandoc-types >= 1.12.4 && < 1.13,                   bytestring >= 0.9 && < 0.11,-                  text >= 0.11 && < 1.2,+                  text >= 0.11 && < 1.3,                   directory >= 1 && < 1.3,                   filepath >= 1.1 && < 1.4,                   process >= 1 && < 1.3,-                  highlighting-kate >= 0.5.8.5 && < 0.6,+                  highlighting-kate >= 0.5.11.1 && < 0.6,                   Diff >= 0.2 && < 0.4,                   test-framework >= 0.3 && < 0.9,                   test-framework-hunit >= 0.2 && < 0.4,@@ -444,7 +457,7 @@                   Tests.Writers.Plain                   Tests.Writers.AsciiDoc                   Tests.Writers.LaTeX-  Ghc-Options:  -rtsopts -Wall -fno-warn-unused-do-bind+  Ghc-Options:  -rtsopts -Wall -fno-warn-unused-do-bind -threaded   Default-Language: Haskell98  benchmark benchmark-pandoc
pandoc.hs view
@@ -58,7 +58,7 @@ import Control.Exception.Extensible ( throwIO ) import qualified Text.Pandoc.UTF8 as UTF8 import Control.Monad (when, unless, (>=>))-import Data.Maybe (isJust)+import Data.Maybe (isJust, fromMaybe) import Data.Foldable (foldrM) import Network.URI (parseURI, isURI, URI(..)) import qualified Data.ByteString.Lazy as B@@ -68,7 +68,7 @@ import Data.Yaml (decode) import qualified Data.Yaml as Yaml import qualified Data.Text as T-import Control.Applicative ((<$>))+import Control.Applicative ((<$>), (<|>)) import Text.Pandoc.Readers.Txt2Tags (getT2TMeta) import Data.Monoid @@ -205,6 +205,8 @@     , optExtractMedia      :: Maybe FilePath -- ^ Path to extract embedded media     , optTrace             :: Bool       -- ^ Print debug information     , optTrackChanges      :: TrackChanges -- ^ Accept or reject MS Word track-changes.+    , optKaTeXStylesheet   :: Maybe String     -- ^ Path to stylesheet for KaTeX+    , optKaTeXJS           :: Maybe String     -- ^ Path to js file for KaTeX     }  -- | Defaults for command-line options.@@ -263,6 +265,8 @@     , optExtractMedia          = Nothing     , optTrace                 = False     , optTrackChanges          = AcceptChanges+    , optKaTeXStylesheet       = Nothing+    , optKaTeXJS               = Nothing     }  -- | A list of functions, each transforming the options data structure@@ -814,11 +818,26 @@                   (\arg opt -> do                       let url' = case arg of                                       Just u   -> u-                                      Nothing  -> "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"+                                      Nothing  -> "//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"                       return opt { optHTMLMathMethod = MathJax url'})                   "URL")                  "" -- "Use MathJax for HTML math"+    , Option "" ["katex"]+                 (OptArg+                  (\arg opt ->+                      return opt+                        { optKaTeXJS =+                           arg <|> Just "http://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.1.0/katex.min.js"})+                  "URL")+                  "" -- Use KaTeX for HTML Math +    , Option "" ["katex-stylesheet"]+                 (ReqArg+                  (\arg opt ->+                      return opt { optKaTeXStylesheet = Just arg })+                 "URL")+                 "" -- Set the KaTeX Stylesheet location+     , Option "" ["gladtex"]                  (NoArg                   (\opt -> return opt { optHTMLMathMethod = GladTeX }))@@ -860,6 +879,7 @@      ] + addMetadata :: String -> MetaValue -> M.Map String MetaValue             -> M.Map String MetaValue addMetadata k v m = case M.lookup k m of@@ -910,6 +930,9 @@     ".docx"     -> "docx"     ".t2t"      -> "t2t"     ".epub"     -> "epub"+    ".odt"      -> "odt"  -- so we get an "unknown reader" error+    ".pdf"      -> "pdf"  -- so we get an "unknown reader" error+    ".doc"      -> "doc"  -- so we get an "unknown reader" error     _           -> defaultReaderName fallback xs  -- Returns True if extension of first source is .lhs@@ -950,6 +973,7 @@     ".pdf"      -> "latex"     ".fb2"      -> "fb2"     ".opml"     -> "opml"+    ".icml"     -> "icml"     ['.',y] | y `elem` ['1'..'9'] -> "man"     _           -> "html" @@ -1027,7 +1051,7 @@               , optHighlight             = highlight               , optHighlightStyle        = highlightStyle               , optChapters              = chapters-              , optHTMLMathMethod        = mathMethod+              , optHTMLMathMethod        = mathMethod'               , optReferenceODT          = referenceODT               , optReferenceDocx         = referenceDocx               , optEpubStylesheet        = epubStylesheet@@ -1056,6 +1080,8 @@               , optExtractMedia          = mbExtractMedia               , optTrace                 = trace               , optTrackChanges          = trackChanges+              , optKaTeXStylesheet       = katexStylesheet+              , optKaTeXJS               = katexJS              } = opts    when dumpArgs $@@ -1063,6 +1089,13 @@        mapM_ (\arg -> UTF8.hPutStrLn stdout arg) args        exitWith ExitSuccess +  let csscdn = "http://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.1.0/katex.min.css"+  let mathMethod =+        case (katexJS, katexStylesheet) of+            (Nothing, _) -> mathMethod'+            (Just js, ss) -> KaTeX js (fromMaybe csscdn ss)++   -- --bibliography implies -F pandoc-citeproc for backwards compatibility:   let needsCiteproc = isJust (M.lookup "bibliography" metadata) &&                       optCiteMethod opts `notElem` [Natbib, Biblatex] &&@@ -1119,7 +1152,15 @@                       (getT2TMeta sources outputFile)               else case getReader readerName' of                 Right r  -> return r-                Left e   -> err 7 e+                Left e   -> err 7 e'+                  where e' = case readerName' of+                                  "odt" -> e +++                                    "\nPandoc can convert to ODT, but not from ODT.\nTry using LibreOffice to export as HTML, and convert that with pandoc."+                                  "pdf" -> e +++                                     "\nPandoc can convert to PDF, but not from PDF."+                                  "doc" -> e +++                                     "\nPandoc can convert from DOCX, but not from DOC.\nTry using Word to save your DOC file as DOCX, and convert that with pandoc."+                                  _ -> e    let standalone' = standalone || not (isTextFormat writerName') || pdfOutput 
src/Text/Pandoc.hs view
@@ -77,6 +77,7 @@                , readHaddock                , readNative                , readJSON+               , readTWiki                , readTxt2Tags                , readTxt2TagsNoMacros                , readEPUB@@ -133,6 +134,7 @@ import Text.Pandoc.Readers.Textile import Text.Pandoc.Readers.Native import Text.Pandoc.Readers.Haddock+import Text.Pandoc.Readers.TWiki import Text.Pandoc.Readers.Docx import Text.Pandoc.Readers.Txt2Tags import Text.Pandoc.Readers.EPUB@@ -199,19 +201,18 @@                         '-'  -> Set.delete ext                         _    -> Set.insert ext --- auxiliary function for readers:-markdown :: ReaderOptions -> String -> IO Pandoc-markdown o s = do-  let (doc, warnings) = readMarkdownWithWarnings o s-  mapM_ warn warnings-  return doc- data Reader = StringReader (ReaderOptions -> String -> IO Pandoc)               | ByteStringReader (ReaderOptions -> BL.ByteString -> IO (Pandoc, MediaBag))  mkStringReader :: (ReaderOptions -> String -> Pandoc) -> Reader mkStringReader r = StringReader (\o s -> return $ r o s) +mkStringReaderWithWarnings :: (ReaderOptions -> String -> (Pandoc, [String])) -> Reader+mkStringReaderWithWarnings r  = StringReader $ \o s -> do+    let (doc, warnings) = r o s+    mapM_ warn warnings+    return doc+ mkBSReader :: (ReaderOptions -> BL.ByteString -> (Pandoc, MediaBag)) -> Reader mkBSReader r = ByteStringReader (\o s -> return $ r o s) @@ -219,12 +220,12 @@ readers :: [(String, Reader)] readers = [ ("native"       , StringReader $ \_ s -> return $ readNative s)            ,("json"         , mkStringReader readJSON )-           ,("markdown"     , StringReader  markdown)-           ,("markdown_strict" , StringReader markdown)-           ,("markdown_phpextra" , StringReader markdown)-           ,("markdown_github" , StringReader markdown)-           ,("markdown_mmd",  StringReader markdown)-           ,("rst"          , mkStringReader readRST )+           ,("markdown"     , mkStringReaderWithWarnings readMarkdownWithWarnings)+           ,("markdown_strict" , mkStringReaderWithWarnings readMarkdownWithWarnings)+           ,("markdown_phpextra" , mkStringReaderWithWarnings readMarkdownWithWarnings)+           ,("markdown_github" , mkStringReaderWithWarnings readMarkdownWithWarnings)+           ,("markdown_mmd",  mkStringReaderWithWarnings readMarkdownWithWarnings)+           ,("rst"          , mkStringReaderWithWarnings readRSTWithWarnings )            ,("mediawiki"    , mkStringReader readMediaWiki)            ,("docbook"      , mkStringReader readDocBook)            ,("opml"         , mkStringReader readOPML)@@ -233,6 +234,7 @@            ,("html"         , mkStringReader readHtml)            ,("latex"        , mkStringReader readLaTeX)            ,("haddock"      , mkStringReader readHaddock)+           ,("twiki"        , mkStringReader readTWiki)            ,("docx"         , mkBSReader readDocx)            ,("t2t"          , mkStringReader readTxt2TagsNoMacros)            ,("epub"         , mkBSReader readEPUB)
+ src/Text/Pandoc/Compat/Locale.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE CPP #-}+module Text.Pandoc.Compat.Locale ( defaultTimeLocale )+where++#if MIN_VERSION_time(1,5,0)+import Data.Time.Format ( defaultTimeLocale )+#else+import System.Locale ( defaultTimeLocale )+#endif
src/Text/Pandoc/MIME.hs view
@@ -328,7 +328,7 @@            ,("oth","application/vnd.oasis.opendocument.text-web")            ,("otp","application/vnd.oasis.opendocument.presentation-template")            ,("ots","application/vnd.oasis.opendocument.spreadsheet-template")-           ,("otf","application/x-font-opentype")+           ,("otf","application/vnd.ms-opentype")            ,("ott","application/vnd.oasis.opendocument.text-template")            ,("oza","application/x-oz-application")            ,("p","text/x-pascal")@@ -477,6 +477,7 @@            ,("vrml","model/vrml")            ,("vs","text/plain")            ,("vsd","application/vnd.visio")+           ,("vtt","text/vtt")            ,("wad","application/x-doom")            ,("wav","audio/x-wav")            ,("wax","audio/x-ms-wax")
src/Text/Pandoc/MediaBag.hs view
@@ -51,7 +51,7 @@ -- mime types.  Note that a 'MediaBag' is a Monoid, so 'mempty' -- can be used for an empty 'MediaBag', and '<>' can be used to append -- two 'MediaBag's.-newtype MediaBag = MediaBag (M.Map String (MimeType, BL.ByteString))+newtype MediaBag = MediaBag (M.Map [String] (MimeType, BL.ByteString))         deriving (Monoid)  instance Show MediaBag where@@ -65,7 +65,7 @@             -> MediaBag             -> MediaBag insertMedia fp mbMime contents (MediaBag mediamap) =-  MediaBag (M.insert fp (mime, contents) mediamap)+  MediaBag (M.insert (splitPath fp) (mime, contents) mediamap)   where mime = fromMaybe fallback mbMime         fallback = case takeExtension fp of                         ".gz"   -> getMimeTypeDef $ dropExtension fp@@ -75,14 +75,14 @@ lookupMedia :: FilePath             -> MediaBag             -> Maybe (MimeType, BL.ByteString)-lookupMedia fp (MediaBag mediamap) = M.lookup fp mediamap+lookupMedia fp (MediaBag mediamap) = M.lookup (splitPath fp) mediamap  -- | Get a list of the file paths stored in a 'MediaBag', with -- their corresponding mime types and the lengths in bytes of the contents. mediaDirectory :: MediaBag -> [(String, MimeType, Int)] mediaDirectory (MediaBag mediamap) =   M.foldWithKey (\fp (mime,contents) ->-      ((fp, mime, fromIntegral $ BL.length contents):)) [] mediamap+      (((joinPath fp), mime, fromIntegral $ BL.length contents):)) [] mediamap  -- | Extract contents of MediaBag to a given directory.  Print informational -- messages if 'verbose' is true.@@ -93,7 +93,7 @@ extractMediaBag verbose dir (MediaBag mediamap) = do   sequence_ $ M.foldWithKey      (\fp (_ ,contents) ->-        ((writeMedia verbose dir (fp, contents)):)) [] mediamap+        ((writeMedia verbose dir (joinPath fp, contents)):)) [] mediamap  writeMedia :: Bool -> FilePath -> (FilePath, BL.ByteString) -> IO () writeMedia verbose dir (subpath, bs) = do
src/Text/Pandoc/Options.hs view
@@ -251,6 +251,7 @@                     | WebTeX String               -- url of TeX->image script.                     | MathML (Maybe String)       -- url of MathMLinHTML.js                     | MathJax String              -- url of MathJax.js+                    | KaTeX String String -- url of stylesheet and katex.js                     deriving (Show, Read, Eq)  data CiteMethod = Citeproc                        -- use citeproc to render them
src/Text/Pandoc/Parsing.hs view
@@ -65,6 +65,7 @@                              widthsFromIndices,                              gridTableWith,                              readWith,+                             readWithWarnings,                              readWithM,                              testStringWith,                              guardEnabled,@@ -162,6 +163,7 @@                              setSourceColumn,                              setSourceLine,                              newPos,+                             addWarning                              ) where @@ -312,12 +314,14 @@   return (firstChar:rest)  -- | Parse contents of 'str' using 'parser' and return result.-parseFromString :: Stream s m t => ParserT s st m a -> s -> ParserT s st m a+parseFromString :: Monad m => ParserT String st m a -> String -> ParserT String st m a parseFromString parser str = do   oldPos <- getPosition   oldInput <- getInput   setInput str   result <- parser+  spaces+  eof   setInput oldInput   setPosition oldPos   return result@@ -452,7 +456,7 @@   let percentEscaped = try $ char '%' >> skipMany1 (satisfy isHexDigit)   let entity = () <$ characterReference   let punct = skipMany1 (char ',')-          <|> () <$ (satisfy (\c -> not (isSpace c) && c /= '<'))+          <|> () <$ (satisfy (\c -> not (isSpace c) && c /= '<' && c /= '>'))   let uriChunk =  skipMany1 wordChar               <|> percentEscaped               <|> entity@@ -472,7 +476,12 @@   string op   notFollowedBy space   words' <- many1Till (count 1 (noneOf " \t\n\\")-                   <|> (char '\\' >> anyChar >>= \c -> return ['\\',c])+                   <|> (char '\\' >>+                           -- This next clause is needed because \text{..} can+                           -- contain $, \(\), etc.+                           (try (string "text" >>+                                 (("\\text" ++) <$> inBalancedBraces 0 ""))+                            <|>  (\c -> ['\\',c]) <$> anyChar))                    <|> do (blankline <* notFollowedBy' blankline) <|>                              (oneOf " \t" <* skipMany (oneOf " \t"))                           notFollowedBy (char '$')@@ -480,6 +489,23 @@                     ) (try $ string cl)   notFollowedBy digit  -- to prevent capture of $5   return $ concat words'+ where+  inBalancedBraces :: Stream s m Char => Int -> String -> ParserT s st m String+  inBalancedBraces 0 "" = do+    c <- anyChar+    if c == '{'+       then inBalancedBraces 1 "{"+       else mzero+  inBalancedBraces 0 s = return $ reverse s+  inBalancedBraces numOpen ('\\':xs) = do+    c <- anyChar+    inBalancedBraces numOpen (c:'\\':xs)+  inBalancedBraces numOpen xs = do+    c <- anyChar+    case c of+         '}' -> inBalancedBraces (numOpen - 1) (c:xs)+         '{' -> inBalancedBraces (numOpen + 1) (c:xs)+         _   -> inBalancedBraces numOpen (c:xs)  mathDisplayWith :: Stream s m Char => String -> String -> ParserT s st m String mathDisplayWith op cl = try $ do@@ -858,6 +884,15 @@          -> a readWith p t inp = runIdentity $ readWithM p t inp +readWithWarnings :: Parser [Char] ParserState a+                    -> ParserState+                    -> String+                    -> (a, [String])+readWithWarnings p = readWith $ do+         doc <- p+         warnings <- stateWarnings <$> getState+         return (doc, warnings)+ -- | Parse a string with @parser@ (for testing). testStringWith :: (Show a, Stream [Char] Identity Char)                => ParserT [Char] ParserState Identity a@@ -888,10 +923,9 @@       stateHasChapters     :: Bool,          -- ^ True if \chapter encountered       stateMacros          :: [Macro],       -- ^ List of macros defined so far       stateRstDefaultRole  :: String,        -- ^ Current rST default interpreted text role-      stateRstCustomRoles  :: M.Map String (String, Maybe String, Attr -> (String, Attr)), -- ^ Current rST custom text roles+      stateRstCustomRoles  :: M.Map String (String, Maybe String, Attr), -- ^ Current rST custom text roles       -- Triple represents: 1) Base role, 2) Optional format (only for :raw:-      -- roles), 3) Source language annotation for code (could be used to-      -- annotate role classes too).+      -- roles), 3) Additional classes (rest of Attr is unused)).       stateCaption         :: Maybe Inlines, -- ^ Caption in current environment       stateInHtmlBlock     :: Maybe String,  -- ^ Tag type of HTML block being parsed       stateMarkdownAttribute :: Bool,        -- ^ True if in markdown=1 context@@ -1223,3 +1257,10 @@      then do macros <- extractMacros <$> getState              return $ applyMacros macros target      else return target++-- | Append a warning to the log.+addWarning :: Maybe SourcePos -> String -> Parser [Char] ParserState ()+addWarning mbpos msg =+  updateState $ \st -> st{+    stateWarnings = (msg ++ maybe "" (\pos -> " " ++ show pos) mbpos) :+                     stateWarnings st }
src/Text/Pandoc/Pretty.hs view
@@ -286,6 +286,9 @@        | otherwise -> replicateM_ (1 + num - newlines st) (outp (-1) "\n")   renderList xs +renderList (CarriageReturn : BlankLines m : xs) =+  renderList (BlankLines m : xs)+ renderList (CarriageReturn : xs) = do   st <- get   if newlines st > 0 || null xs@@ -531,4 +534,4 @@ -- | Get real length of string, taking into account combining and double-wide -- characters. realLength :: String -> Int-realLength = sum . map charWidth+realLength = foldr (\a b -> charWidth a + b) 0
src/Text/Pandoc/Readers/DocBook.hs view
@@ -70,8 +70,8 @@ [x] book - A book [x] bookinfo - Meta-information for a Book [x] bridgehead - A free-floating heading-[ ] callout - A “called out” description of a marked Area-[ ] calloutlist - A list of Callouts+[x] callout - A “called out” description of a marked Area+[x] calloutlist - A list of Callouts [x] caption - A caption [x] caution - A note of caution [x] chapter - A chapter, as of a book@@ -81,7 +81,7 @@ [ ] citerefentry - A citation to a reference page [ ] citetitle - The title of a cited work [ ] city - The name of a city in an address-[ ] classname - The name of a class, in the object-oriented programming sense+[x] classname - The name of a class, in the object-oriented programming sense [ ] classsynopsis - The syntax summary for a class definition [ ] classsynopsisinfo - Information supplementing the contents of     a ClassSynopsis@@ -169,9 +169,9 @@ [ ] guibutton - The text on a button in a GUI [ ] guiicon - Graphic and/or text appearing as a icon in a GUI [ ] guilabel - The text of a label in a GUI-[ ] guimenu - The name of a menu in a GUI-[ ] guimenuitem - The name of a terminal menu item in a GUI-[ ] guisubmenu - The name of a submenu in a GUI+[x] guimenu - The name of a menu in a GUI+[x] guimenuitem - The name of a terminal menu item in a GUI+[x] guisubmenu - The name of a submenu in a GUI [ ] hardware - A physical part of a computer system [ ] highlights - A summary of the main points of the discussed component [ ] holder - The name of the individual or organization that holds a copyright@@ -206,10 +206,10 @@     other dingbat [ ] itermset - A set of index terms in the meta-information of a document [ ] jobtitle - The title of an individual in an organization-[ ] keycap - The text printed on a key on a keyboard+[x] keycap - The text printed on a key on a keyboard [ ] keycode - The internal, frequently numeric, identifier for a key     on a keyboard-[ ] keycombo - A combination of input actions+[x] keycombo - A combination of input actions [ ] keysym - The symbolic name of a key on a keyboard [ ] keyword - One of a set of keywords describing the content of a document [ ] keywordset - A set of keywords describing the content of a document@@ -237,7 +237,7 @@ [x] mediaobject - A displayed media object (video, audio, image, etc.) [ ] mediaobjectco - A media object that contains callouts [x] member - An element of a simple list-[ ] menuchoice - A selection or series of selections from a menu+[x] menuchoice - A selection or series of selections from a menu [ ] methodname - The name of a method [ ] methodparam - Parameters to a method [ ] methodsynopsis - A syntax summary for a method@@ -471,7 +471,7 @@ [ ] token - A unit of information [x] tr - A row in an HTML table [ ] trademark - A trademark-[ ] type - The classification of a value+[x] type - The classification of a value [x] ulink - A link that addresses its target by means of a URL     (Uniform Resource Locator) [x] uri - A Uniform Resource Identifier@@ -603,7 +603,7 @@            "important","caution","note","tip","warning","qandadiv",            "question","answer","abstract","itemizedlist","orderedlist",            "variablelist","article","book","table","informaltable",-           "screen","programlisting","example"]+           "screen","programlisting","example","calloutlist"] isBlockElement _ = False  -- Trim leading and trailing newline characters@@ -712,6 +712,7 @@         "question" -> addToStart (strong (str "Q:") <> str " ") <$> getBlocks e         "answer" -> addToStart (strong (str "A:") <> str " ") <$> getBlocks e         "abstract" -> blockQuote <$> getBlocks e+        "calloutlist" -> bulletList <$> callouts         "itemizedlist" -> bulletList <$> listitems         "orderedlist" -> do           let listStyle = case attrValue "numeration" e of@@ -772,11 +773,6 @@                                 x    -> [x]            return $ codeBlockWith (attrValue "id" e, classes', [])                   $ trimNl $ strContentRecursive e-         strContentRecursive = strContent . (\e' -> e'{ elContent =-                                               map elementToStr $ elContent e' })-         elementToStr :: Content -> Content-         elementToStr (Elem e') = Text $ CData CDataText (strContentRecursive e') Nothing-         elementToStr x = x          parseBlockquote = do             attrib <- case filterChild (named "attribution") e of                              Nothing  -> return mempty@@ -785,6 +781,7 @@             contents <- getBlocks e             return $ blockQuote (contents <> attrib)          listitems = mapM getBlocks $ filterChildren (named "listitem") e+         callouts = mapM getBlocks $ filterChildren (named "callout") e          deflistitems = mapM parseVarListEntry $ filterChildren                      (named "varlistentry") e          parseVarListEntry e' = do@@ -871,13 +868,22 @@                                       Nothing -> return mempty                      modify $ \st -> st{ dbSectionLevel = n }                      b <- getBlocks e+                     let ident = attrValue "id" e                      modify $ \st -> st{ dbSectionLevel = n - 1 }-                     return $ header n' headerText <> b+                     return $ headerWith (ident,[],[]) n' headerText <> b          metaBlock = acceptingMetadata (getBlocks e) >> return mempty  getInlines :: Element -> DB Inlines getInlines e' = (trimInlines . mconcat) <$> (mapM parseInline $ elContent e') +strContentRecursive :: Element -> String+strContentRecursive = strContent .+  (\e' -> e'{ elContent = map elementToStr $ elContent e' })++elementToStr :: Content -> Content+elementToStr (Elem e') = Text $ CData CDataText (strContentRecursive e') Nothing+elementToStr x = x+ parseInline :: Content -> DB Inlines parseInline (Text (CData _ s _)) = return $ text s parseInline (CRef ref) =@@ -901,6 +907,7 @@                         else doubleQuoted contents         "simplelist" -> simpleList         "segmentedlist" -> segmentedList+        "classname" -> codeWithLang         "code" -> codeWithLang         "filename" -> codeWithLang         "literal" -> codeWithLang@@ -920,6 +927,10 @@         "constant" -> codeWithLang         "userinput" -> codeWithLang         "varargs" -> return $ code "(...)"+        "keycap" -> return (str $ strContent e)+        "keycombo" -> keycombo <$> (mapM parseInline $ elContent e)+        "menuchoice" -> menuchoice <$> (mapM parseInline $+                                        filter isGuiMenu $ elContent e)         "xref" -> return $ str "?" -- so at least you know something is there         "email" -> return $ link ("mailto:" ++ strContent e) ""                           $ str $ strContent e@@ -959,7 +970,7 @@            let classes' = case attrValue "language" e of                                "" -> []                                l  -> [l]-           return $ codeWith (attrValue "id" e,classes',[]) $ strContent e+           return $ codeWith (attrValue "id" e,classes',[]) $ strContentRecursive e          simpleList = (mconcat . intersperse (str "," <> space)) <$> mapM getInlines                          (filterChildren (named "member") e)          segmentedList = do@@ -974,3 +985,10 @@                          then mempty                          else strong tit <> linebreak            return $ linebreak <> tit' <> segs+         keycombo = spanWith ("",["keycombo"],[]) .+                    mconcat . intersperse (str "+")+         menuchoice = spanWith ("",["menuchoice"],[]) .+                    mconcat . intersperse (text " > ")+         isGuiMenu (Elem x) = named "guimenu" x || named "guisubmenu" x ||+                              named "guimenuitem" x+         isGuiMenu _        = False
src/Text/Pandoc/Readers/Docx.hs view
@@ -84,8 +84,7 @@ import Text.Pandoc.Readers.Docx.Reducible import Text.Pandoc.Shared import Text.Pandoc.MediaBag (insertMedia, MediaBag)-import Data.Maybe (isJust)-import Data.List (delete, stripPrefix, (\\), intersect)+import Data.List (delete, (\\), intersect) import Data.Monoid import Text.TeXMath (writeTeX) import Data.Default (Default)@@ -197,9 +196,6 @@ codeStyles :: [String] codeStyles = ["VerbatimChar"] -blockQuoteDivs :: [String]-blockQuoteDivs = ["Quote", "BlockQuote", "BlockQuotation"]- codeDivs :: [String] codeDivs = ["SourceCode"] @@ -427,9 +423,9 @@       let pPr' = pPr { pStyle = cs, indentation = Nothing}       in        (divWith ("", [c], [])) . (parStyleToTransform pPr')-  | (c:cs) <- pStyle pPr-  , c `elem` blockQuoteDivs =-    let pPr' = pPr { pStyle = cs \\ blockQuoteDivs }+  | (_:cs) <- pStyle pPr+  , Just True <- pBlockQuote pPr =+    let pPr' = pPr { pStyle = cs }     in      blockQuote . (parStyleToTransform pPr')   | (_:cs) <- pStyle pPr =@@ -460,13 +456,11 @@     $ parStyleToTransform pPr     $ codeBlock     $ concatMap parPartToString parparts-  | (c : cs) <- filter (isJust . isHeaderClass) $ pStyle pPr-  , Just n <- isHeaderClass c = do+  | Just (style, n) <- pHeading pPr = do     ils <- local (\s-> s{docxInHeaderBlock=True}) $            (concatReduce <$> mapM parPartToInlines parparts)-     makeHeaderAnchor $-      headerWith ("", delete ("Heading" ++ show n) cs, []) n ils+      headerWith ("", delete style (pStyle pPr), []) n ils   | otherwise = do     ils <- concatReduce <$> mapM parPartToInlines parparts >>=            (return . fromList . trimLineBreaks . normalizeSpaces . toList)@@ -535,34 +529,21 @@     Nothing        -> l rewriteLink' il = return il -rewriteLink :: Blocks -> DocxContext Blocks-rewriteLink ils = case viewl $ unMany ils of-  (x :< xs) -> do-    x' <- walkM rewriteLink' x-    xs' <- rewriteLink $ Many xs-    return $ (singleton x') <> xs'-  EmptyL -> return ils+rewriteLinks :: [Block] -> DocxContext [Block]+rewriteLinks = mapM (walkM rewriteLink')  bodyToOutput :: Body -> DocxContext (Meta, [Block], MediaBag) bodyToOutput (Body bps) = do   let (metabps, blkbps) = sepBodyParts bps   meta <- bodyPartsToMeta metabps   blks <- concatReduce <$> mapM bodyPartToBlocks blkbps-  blks' <- rewriteLink blks+  blks' <- rewriteLinks $ blocksToDefinitions $ blocksToBullets $ toList blks   mediaBag <- gets docxMediaBag   return $ (meta,-            blocksToDefinitions $ blocksToBullets $ toList blks',+            blks',             mediaBag)  docxToOutput :: ReaderOptions -> Docx -> (Meta, [Block], MediaBag) docxToOutput opts (Docx (Document _ body)) =   let dEnv   = def { docxOptions  = opts} in    evalDocxContext (bodyToOutput body) dEnv def--isHeaderClass :: String -> Maybe Int-isHeaderClass s | Just s' <- stripPrefix "Heading" s =-  case reads s' :: [(Int, String)] of-    [] -> Nothing-    ((n, "") : []) -> Just n-    _       -> Nothing-isHeaderClass _ = Nothing
src/Text/Pandoc/Readers/Docx/Lists.hs view
@@ -160,8 +160,14 @@ flatToBullets :: [Block] -> [Block] flatToBullets elems = flatToBullets' (-1) elems +singleItemHeaderToHeader :: Block -> Block+singleItemHeaderToHeader (OrderedList _ [[h@(Header _ _ _)]]) = h+singleItemHeaderToHeader blk = blk++ blocksToBullets :: [Block] -> [Block] blocksToBullets blks =+  map singleItemHeaderToHeader $   bottomUp removeListDivs $   flatToBullets $ (handleListParagraphs blks) @@ -221,7 +227,3 @@  blocksToDefinitions :: [Block] -> [Block] blocksToDefinitions = blocksToDefinitions' [] []----
src/Text/Pandoc/Readers/Docx/Parse.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE PatternGuards, ViewPatterns #-}+{-# LANGUAGE PatternGuards, ViewPatterns, FlexibleInstances #-}  {- Copyright (C) 2014 Jesse Rosenthal <jrosenthal@jhu.edu>@@ -65,7 +65,7 @@ import Text.TeXMath.Readers.OMML (readOMML) import Text.Pandoc.Readers.Docx.Fonts (getUnicode, Font(..)) import Text.TeXMath (Exp)-import Data.Char (readLitChar, ord, chr)+import Data.Char (readLitChar, ord, chr, isDigit)  data ReaderEnv = ReaderEnv { envNotes         :: Notes                            , envNumbering     :: Numbering@@ -73,6 +73,7 @@                            , envMedia         :: Media                            , envFont          :: Maybe Font                            , envCharStyles    :: CharStyleMap+                           , envParStyles     :: ParStyleMap                            }                deriving Show @@ -122,8 +123,12 @@  type CharStyle = (String, RunStyle) +type ParStyle = (String, ParStyleData)+ type CharStyleMap = M.Map String RunStyle +type ParStyleMap = M.Map String ParStyleData+ data Numbering = Numbering NameSpaces [Numb] [AbstractNumb]                  deriving Show @@ -152,6 +157,8 @@ data ParagraphStyle = ParagraphStyle { pStyle :: [String]                                      , indentation :: Maybe ParIndentation                                      , dropCap     :: Bool+                                     , pHeading    :: Maybe (String, Int)+                                     , pBlockQuote :: Maybe Bool                                      }                       deriving Show @@ -159,6 +166,8 @@ defaultParagraphStyle = ParagraphStyle { pStyle = []                                        , indentation = Nothing                                        , dropCap     = False+                                       , pHeading    = Nothing+                                       , pBlockQuote = Nothing                                        }  @@ -213,6 +222,11 @@                          , rStyle :: Maybe CharStyle}                 deriving Show +data ParStyleData = ParStyleData { headingLev :: Maybe (String, Int)+                                 , isBlockQuote :: Maybe Bool+                                 , psStyle :: Maybe ParStyle}+                    deriving Show+ defaultRunStyle :: RunStyle defaultRunStyle = RunStyle { isBold = Nothing                            , isItalic = Nothing@@ -242,8 +256,8 @@       numbering = archiveToNumbering archive       rels      = archiveToRelationships archive       media     = archiveToMedia archive-      styles    = archiveToStyles archive-      rEnv = ReaderEnv notes numbering rels media Nothing styles+      (styles, parstyles) = archiveToStyles archive+      rEnv = ReaderEnv notes numbering rels media Nothing styles parstyles   doc <- runD (archiveToDocument archive) rEnv   return $ Docx doc @@ -263,47 +277,69 @@   (\bps -> return $ Body bps) elemToBody _ _ = throwError WrongElem -archiveToStyles :: Archive -> CharStyleMap+archiveToStyles :: Archive -> (CharStyleMap, ParStyleMap) archiveToStyles zf =   let stylesElem = findEntryByPath "word/styles.xml" zf >>=                    (parseXMLDoc . UTF8.toStringLazy . fromEntry)   in    case stylesElem of-     Nothing -> M.empty+     Nothing -> (M.empty, M.empty)      Just styElem ->        let namespaces = mapMaybe attrToNSPair (elAttribs styElem)        in-        M.fromList $ buildBasedOnList namespaces styElem Nothing+        ( M.fromList $ buildBasedOnList namespaces styElem+            (Nothing :: Maybe CharStyle),+          M.fromList $ buildBasedOnList namespaces styElem+            (Nothing :: Maybe ParStyle) ) -isBasedOnStyle :: NameSpaces -> Element -> Maybe CharStyle -> Bool+isBasedOnStyle :: (ElemToStyle a) => NameSpaces -> Element -> Maybe a -> Bool isBasedOnStyle ns element parentStyle   | isElem ns "w" "style" element-  , Just "character" <- findAttr (elemName ns "w" "type") element+  , Just styleType <- findAttr (elemName ns "w" "type") element+  , styleType == cStyleType parentStyle   , Just basedOnVal <- findChild (elemName ns "w" "basedOn") element >>=                        findAttr (elemName ns "w" "val")-  , Just (parentId, _) <- parentStyle = (basedOnVal == parentId)+  , Just ps <- parentStyle = (basedOnVal == getStyleId ps)   | isElem ns "w" "style" element-  , Just "character" <- findAttr (elemName ns "w" "type") element+  , Just styleType <- findAttr (elemName ns "w" "type") element+  , styleType == cStyleType parentStyle   , Nothing <- findChild (elemName ns "w" "basedOn") element   , Nothing <- parentStyle = True   | otherwise = False -elemToCharStyle :: NameSpaces -> Element -> Maybe CharStyle -> Maybe CharStyle-elemToCharStyle ns element parentStyle-  | isElem ns "w" "style" element-  , Just "character" <- findAttr (elemName ns "w" "type") element-  , Just styleId <- findAttr (elemName ns "w" "styleId") element =-    Just (styleId, elemToRunStyle ns element parentStyle)-  | otherwise = Nothing+class ElemToStyle a where+  cStyleType  :: Maybe a -> String+  elemToStyle :: NameSpaces -> Element -> Maybe a -> Maybe a+  getStyleId     :: a -> String -getStyleChildren :: NameSpaces -> Element -> Maybe CharStyle -> [CharStyle]+instance ElemToStyle CharStyle where+  cStyleType _ = "character"+  elemToStyle ns element parentStyle+    | isElem ns "w" "style" element+    , Just "character" <- findAttr (elemName ns "w" "type") element+    , Just styleId <- findAttr (elemName ns "w" "styleId") element =+      Just (styleId, elemToRunStyle ns element parentStyle)+    | otherwise = Nothing+  getStyleId s = fst s++instance ElemToStyle ParStyle where+  cStyleType _ = "paragraph"+  elemToStyle ns element parentStyle+    | isElem ns "w" "style" element+    , Just "paragraph" <- findAttr (elemName ns "w" "type") element+    , Just styleId <- findAttr (elemName ns "w" "styleId") element =+      Just (styleId, elemToParStyleData ns element parentStyle)+    | otherwise = Nothing+  getStyleId s = fst s++getStyleChildren :: (ElemToStyle a) => NameSpaces -> Element -> Maybe a -> [a] getStyleChildren ns element parentStyle   | isElem ns "w" "styles" element =-    mapMaybe (\e -> elemToCharStyle ns e parentStyle) $+    mapMaybe (\e -> elemToStyle ns e parentStyle) $     filterChildren (\e' -> isBasedOnStyle ns e' parentStyle) element   | otherwise = [] -buildBasedOnList :: NameSpaces -> Element -> Maybe CharStyle -> [CharStyle]+buildBasedOnList :: (ElemToStyle a) => NameSpaces -> Element -> Maybe a -> [a] buildBasedOnList ns element rootStyle =   case (getStyleChildren ns element rootStyle) of     [] -> []@@ -543,7 +579,8 @@ elemToBodyPart ns element   | isElem ns "w" "p" element   , Just (numId, lvl) <- elemToNumInfo ns element = do-    let parstyle = elemToParagraphStyle ns element+    sty <- asks envParStyles+    let parstyle = elemToParagraphStyle ns element sty     parparts <- mapD (elemToParPart ns) (elChildren element)     num <- asks envNumbering     case lookupLevel numId lvl num of@@ -551,7 +588,8 @@       Nothing         -> throwError WrongElem elemToBodyPart ns element   | isElem ns "w" "p" element = do-    let parstyle = elemToParagraphStyle ns element+    sty <- asks envParStyles+    let parstyle = elemToParagraphStyle ns element sty     parparts <- mapD (elemToParPart ns) (elChildren element)     return $ Paragraph parstyle parparts elemToBodyPart ns element@@ -584,7 +622,7 @@   target <- asks (lookupRelationship s . envRelationships)   case target of     Just filepath -> do-      bytes <- asks (lookup (combine "word" filepath) . envMedia)+      bytes <- asks (lookup ("word/" ++ filepath) . envMedia)       case bytes of         Just bs -> return (filepath, bs)         Nothing -> throwError DocxError@@ -625,17 +663,20 @@     return $ BookMark bmId bmName elemToParPart ns element   | isElem ns "w" "hyperlink" element-  , Just anchor <- findAttr (elemName ns "w" "anchor") element = do+  , Just relId <- findAttr (elemName ns "r" "id") element = do     runs <- mapD (elemToRun ns) (elChildren element)-    return $ InternalHyperLink anchor runs+    rels <- asks envRelationships+    case lookupRelationship relId rels of+      Just target -> do+         case findAttr (elemName ns "w" "anchor") element of+             Just anchor -> return $ ExternalHyperLink (target ++ '#':anchor) runs+             Nothing -> return $ ExternalHyperLink target runs+      Nothing     -> return $ ExternalHyperLink "" runs elemToParPart ns element   | isElem ns "w" "hyperlink" element-  , Just relId <- findAttr (elemName ns "r" "id") element = do+  , Just anchor <- findAttr (elemName ns "w" "anchor") element = do     runs <- mapD (elemToRun ns) (elChildren element)-    rels <- asks envRelationships-    return $ case lookupRelationship relId rels of-      Just target -> ExternalHyperLink target runs-      Nothing     -> ExternalHyperLink "" runs+    return $ InternalHyperLink anchor runs elemToParPart ns element   | isElem ns "m" "oMath" element =     (eitherToD $ readOMML $ showElement element) >>= (return . PlainOMath)@@ -684,14 +725,30 @@     return $ Run runStyle runElems elemToRun _ _ = throwError WrongElem -elemToParagraphStyle :: NameSpaces -> Element -> ParagraphStyle-elemToParagraphStyle ns element+getParentStyleValue :: (ParStyleData -> Maybe a) -> ParStyleData -> Maybe a+getParentStyleValue field style+  | Just value <- field style = Just value+  | Just parentStyle <- psStyle style+                      = getParentStyleValue field (snd parentStyle)+getParentStyleValue _ _ = Nothing++getParStyleField :: (ParStyleData -> Maybe a) -> ParStyleMap -> [String] ->+                                                                        Maybe a+getParStyleField field stylemap styles+  | x     <- mapMaybe (\x -> M.lookup x stylemap) styles+  , (y:_) <- mapMaybe (getParentStyleValue field) x+           = Just y+getParStyleField _ _ _ = Nothing++elemToParagraphStyle :: NameSpaces -> Element -> ParStyleMap -> ParagraphStyle+elemToParagraphStyle ns element sty   | Just pPr <- findChild (elemName ns "w" "pPr") element =-    ParagraphStyle-      {pStyle =+    let style =           mapMaybe           (findAttr (elemName ns "w" "val"))           (findChildren (elemName ns "w" "pStyle") pPr)+    in ParagraphStyle+      {pStyle = style       , indentation =           findChild (elemName ns "w" "ind") pPr >>=           elemToParIndentation ns@@ -703,8 +760,10 @@             Just "none" -> False             Just _      -> True             Nothing     -> False+      , pHeading = getParStyleField headingLev sty style+      , pBlockQuote = getParStyleField isBlockQuote sty style       }-elemToParagraphStyle _ _ =  defaultParagraphStyle+elemToParagraphStyle _ _ _ =  defaultParagraphStyle  checkOnOff :: NameSpaces -> Element -> QName -> Maybe Bool checkOnOff ns rPr tag@@ -757,6 +816,45 @@       , rStyle = parentStyle         } elemToRunStyle _ _ _ = defaultRunStyle++isNumericNotNull :: String -> Bool+isNumericNotNull str = (str /= []) && (all isDigit str)++getHeaderLevel :: NameSpaces -> Element -> Maybe (String,Int)+getHeaderLevel ns element+  | Just styleId <- findAttr (elemName ns "w" "styleId") element+  , Just index   <- stripPrefix "Heading" styleId+  , isNumericNotNull index = Just (styleId, read index)+  | Just styleId <- findAttr (elemName ns "w" "styleId") element+  , Just index   <- findChild (elemName ns "w" "name") element >>=+                    findAttr (elemName ns "w" "val") >>=+                    stripPrefix "heading "+  , isNumericNotNull index = Just (styleId, read index)+getHeaderLevel _ _ = Nothing++blockQuoteStyleIds :: [String]+blockQuoteStyleIds = ["Quote", "BlockQuote", "BlockQuotation"]++blockQuoteStyleNames :: [String]+blockQuoteStyleNames = ["Quote", "Block Text"]++getBlockQuote :: NameSpaces -> Element -> Maybe Bool+getBlockQuote ns element+  | Just styleId <- findAttr (elemName ns "w" "styleId") element+  , styleId `elem` blockQuoteStyleIds = Just True+  | Just styleName <- findChild (elemName ns "w" "name") element >>=+                      findAttr (elemName ns "w" "val")+  , styleName `elem` blockQuoteStyleNames = Just True+getBlockQuote _ _ = Nothing++elemToParStyleData :: NameSpaces -> Element -> Maybe ParStyle -> ParStyleData+elemToParStyleData ns element parentStyle =+    ParStyleData+      {+        headingLev = getHeaderLevel ns element+      , isBlockQuote = getBlockQuote ns element+      , psStyle = parentStyle+        }  elemToRunElem :: NameSpaces -> Element -> D RunElem elemToRunElem ns element
src/Text/Pandoc/Readers/HTML.hs view
@@ -440,7 +440,7 @@ pCodeBlock = try $ do   TagOpen _ attr <- pSatisfy (~== TagOpen "pre" [])   contents <- manyTill pAnyTag (pCloses "pre" <|> eof)-  let rawText = concatMap fromTagText $ filter isTagText contents+  let rawText = concatMap tagToString contents   -- drop leading newline if any   let result' = case rawText of                      '\n':xs  -> xs@@ -451,6 +451,11 @@                     _        -> result'   return $ B.codeBlockWith (mkAttr attr) result +tagToString :: Tag String -> String+tagToString (TagText s) = s+tagToString (TagOpen "br" _) = "\n"+tagToString _ = ""+ inline :: TagParser Inlines inline = choice            [ eNoteref@@ -735,7 +740,7 @@ --  eitherBlockOrInline :: [String]-eitherBlockOrInline = ["audio", "applet", "button", "iframe",+eitherBlockOrInline = ["audio", "applet", "button", "iframe", "embed",                        "del", "ins",                        "progress", "map", "area", "noscript", "script",                        "object", "svg", "video", "source"]@@ -753,7 +758,7 @@ blockHtmlTags = ["?xml", "!DOCTYPE", "address", "article", "aside",                  "blockquote", "body", "button", "canvas",                  "caption", "center", "col", "colgroup", "dd", "dir", "div",-                 "dl", "dt", "embed", "fieldset", "figcaption", "figure",+                 "dl", "dt", "fieldset", "figcaption", "figure",                  "footer", "form", "h1", "h2", "h3", "h4",                  "h5", "h6", "head", "header", "hgroup", "hr", "html",                  "isindex", "menu", "noframes", "ol", "output", "p", "pre",
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -191,6 +191,7 @@      <|> (space  <$ sp)      <|> inlineText      <|> inlineCommand+     <|> inlineEnvironment      <|> inlineGroup      <|> (char '-' *> option (str "-")            ((char '-') *> option (str "–") (str "—" <$ char '-')))@@ -304,7 +305,7 @@   , ("item", skipopts *> loose_item)   , ("documentclass", skipopts *> braced *> preamble)   , ("centerline", (para . trimInlines) <$> (skipopts *> tok))-  , ("caption", skipopts *> tok >>= setCaption)+  , ("caption", skipopts *> setCaption)   , ("PandocStartInclude", startInclude)   , ("PandocEndInclude", endInclude)   , ("bibliography", mempty <$ (skipopts *> braced >>=@@ -336,9 +337,16 @@ splitBibs :: String -> [Inlines] splitBibs = map (str . flip replaceExtension "bib" . trim) . splitBy (==',') -setCaption :: Inlines -> LP Blocks-setCaption ils = do-  updateState $ \st -> st{ stateCaption = Just ils }+setCaption :: LP Blocks+setCaption = do+  ils <- tok+  mblabel <- option Nothing $+               try $ spaces >> controlSeq "label" >> (Just <$> tok)+  let ils' = case mblabel of+                  Just lab -> ils <> spanWith+                                ("",[],[("data-label", stringify lab)]) mempty+                  Nothing  -> ils+  updateState $ \st -> st{ stateCaption = Just ils' }   return mempty  resetCaption :: LP ()@@ -394,6 +402,24 @@ isBlockCommand :: String -> Bool isBlockCommand s = maybe False (const True) $ M.lookup s blockCommands ++inlineEnvironments :: M.Map String (LP Inlines)+inlineEnvironments = M.fromList+  [ ("displaymath", mathEnv id Nothing "displaymath")+  , ("equation", mathEnv id Nothing "equation")+  , ("equation*", mathEnv id Nothing "equation*")+  , ("gather", mathEnv id (Just "gathered") "gather")+  , ("gather*", mathEnv id (Just "gathered") "gather*")+  , ("multline", mathEnv id (Just "gathered") "multline")+  , ("multline*", mathEnv id (Just "gathered") "multline*")+  , ("eqnarray", mathEnv id (Just "aligned") "eqnarray")+  , ("eqnarray*", mathEnv id (Just "aligned") "eqnarray*")+  , ("align", mathEnv id (Just "aligned") "align")+  , ("align*", mathEnv id (Just "aligned") "align*")+  , ("alignat", mathEnv id (Just "aligned") "alignat")+  , ("alignat*", mathEnv id (Just "aligned") "alignat*")+  ]+ inlineCommands :: M.Map String (LP Inlines) inlineCommands = M.fromList $   [ ("emph", extractSpaces emph <$> tok)@@ -414,9 +440,14 @@   , ("sim", lit "~")   , ("label", unlessParseRaw >> (inBrackets <$> tok))   , ("ref", unlessParseRaw >> (inBrackets <$> tok))+  , ("noindent", unlessParseRaw >> return mempty)+  , ("textgreek", tok)+  , ("sep", lit ",")+  , ("cref", unlessParseRaw >> (inBrackets <$> tok))  -- from cleveref.sty   , ("(", mathInline $ manyTill anyChar (try $ string "\\)"))   , ("[", mathDisplay $ manyTill anyChar (try $ string "\\]"))   , ("ensuremath", mathInline $ braced)+  , ("texorpdfstring", (\_ x -> x) <$> tok <*> tok)   , ("P", lit "¶")   , ("S", lit "§")   , ("$", lit "$")@@ -494,6 +525,7 @@   , ("citealp", citation "citealp" NormalCitation False)   , ("citealp*", citation "citealp*" NormalCitation False)   , ("autocite", citation "autocite" NormalCitation False)+  , ("smartcite", citation "smartcite" NormalCitation False)   , ("footcite", inNote <$> citation "footcite" NormalCitation False)   , ("parencite", citation "parencite" NormalCitation False)   , ("supercite", citation "supercite" NormalCitation False)@@ -516,6 +548,7 @@   , ("supercites", citation "supercites" NormalCitation True)   , ("footcitetexts", inNote <$> citation "footcitetexts" NormalCitation True)   , ("Autocite", citation "Autocite" NormalCitation False)+  , ("Smartcite", citation "Smartcite" NormalCitation False)   , ("Footcite", citation "Footcite" NormalCitation False)   , ("Parencite", citation "Parencite" NormalCitation False)   , ("Supercite", citation "Supercite" NormalCitation False)@@ -542,7 +575,7 @@   ] ++ map ignoreInlines   -- these commands will be ignored unless --parse-raw is specified,   -- in which case they will appear as raw latex blocks:-  [ "noindent", "index" ]+  [ "index" ]  mkImage :: String -> LP Inlines mkImage src = do@@ -796,6 +829,14 @@        Just p      -> p <|> rawEnv name        Nothing     -> rawEnv name +inlineEnvironment :: LP Inlines+inlineEnvironment = try $ do+  controlSeq "begin"+  name <- braced+  case M.lookup name inlineEnvironments of+       Just p      -> p+       Nothing     -> mzero+ rawEnv :: String -> LP Blocks rawEnv name = do   let addBegin x = "\\begin{" ++ name ++ "}" ++ x@@ -1020,19 +1061,19 @@   , ("obeylines", parseFromString                   (para . trimInlines . mconcat <$> many inline) =<<                   intercalate "\\\\\n" . lines <$> verbEnv "obeylines")-  , ("displaymath", mathEnv Nothing "displaymath")-  , ("equation", mathEnv Nothing "equation")-  , ("equation*", mathEnv Nothing "equation*")-  , ("gather", mathEnv (Just "gathered") "gather")-  , ("gather*", mathEnv (Just "gathered") "gather*")-  , ("multline", mathEnv (Just "gathered") "multline")-  , ("multline*", mathEnv (Just "gathered") "multline*")-  , ("eqnarray", mathEnv (Just "aligned") "eqnarray")-  , ("eqnarray*", mathEnv (Just "aligned") "eqnarray*")-  , ("align", mathEnv (Just "aligned") "align")-  , ("align*", mathEnv (Just "aligned") "align*")-  , ("alignat", mathEnv (Just "aligned") "alignat")-  , ("alignat*", mathEnv (Just "aligned") "alignat*")+  , ("displaymath", mathEnv para Nothing "displaymath")+  , ("equation", mathEnv para Nothing "equation")+  , ("equation*", mathEnv para Nothing "equation*")+  , ("gather", mathEnv para (Just "gathered") "gather")+  , ("gather*", mathEnv para (Just "gathered") "gather*")+  , ("multline", mathEnv para (Just "gathered") "multline")+  , ("multline*", mathEnv para (Just "gathered") "multline*")+  , ("eqnarray", mathEnv para (Just "aligned") "eqnarray")+  , ("eqnarray*", mathEnv para (Just "aligned") "eqnarray*")+  , ("align", mathEnv para (Just "aligned") "align")+  , ("align*", mathEnv para (Just "aligned") "align*")+  , ("alignat", mathEnv para (Just "aligned") "alignat")+  , ("alignat*", mathEnv para (Just "aligned") "alignat*")   ]  letter_contents :: LP Blocks@@ -1092,8 +1133,8 @@   updateState $ \st -> st{ stateParserContext = oldCtx }   return res -mathEnv :: Maybe String -> String -> LP Blocks-mathEnv innerEnv name = para <$> mathDisplay (inner <$> verbEnv name)+mathEnv :: (Inlines -> a) -> Maybe String -> String -> LP a+mathEnv f innerEnv name = f <$> mathDisplay (inner <$> verbEnv name)    where inner x = case innerEnv of                       Nothing -> x                       Just y  -> "\\begin{" ++ y ++ "}\n" ++ x ++
src/Text/Pandoc/Readers/Markdown.hs view
@@ -79,11 +79,7 @@                          -> String        -- ^ String to parse (assuming @'\n'@ line endings)                          -> (Pandoc, [String]) readMarkdownWithWarnings opts s =-  (readWith parseMarkdownWithWarnings) def{ stateOptions = opts } (s ++ "\n\n")- where parseMarkdownWithWarnings = do-         doc <- parseMarkdown-         warnings <- stateWarnings <$> getState-         return (doc, warnings)+    (readWithWarnings parseMarkdown) def{ stateOptions = opts } (s ++ "\n\n")  trimInlinesF :: F Inlines -> F Inlines trimInlinesF = liftM trimInlines@@ -117,6 +113,12 @@ -- auxiliary functions -- +-- | Succeeds when we're in list context.+inList :: MarkdownParser ()+inList = do+  ctx <- stateParserContext <$> getState+  guard (ctx == ListItemState)+ isNull :: F Inlines -> Bool isNull ils = B.isNull $ runF ils def @@ -337,12 +339,6 @@   let Pandoc _ bs = B.doc $ runF blocks st   return $ Pandoc meta bs -addWarning :: Maybe SourcePos -> String -> MarkdownParser ()-addWarning mbpos msg =-  updateState $ \st -> st{-    stateWarnings = (msg ++ maybe "" (\pos -> " " ++ show pos) mbpos) :-                     stateWarnings st }- referenceKey :: MarkdownParser (F Blocks) referenceKey = try $ do   pos <- getPosition@@ -735,9 +731,9 @@   skipNonindentSpaces   notFollowedBy $ string "p." >> spaceChar >> digit  -- page number   res <- do guardDisabled Ext_fancy_lists-            many1 digit+            start <- many1 digit >>= safeRead             char '.'-            return (1, DefaultStyle, DefaultDelim)+            return (start, DefaultStyle, DefaultDelim)      <|> do (num, style, delim) <- anyOrderedListMarker             -- if it could be an abbreviated first name,             -- insist on more than one space@@ -926,7 +922,15 @@               <|> (guardEnabled Ext_backtick_code_blocks >> () <$ lookAhead codeBlockFenced)               <|> (guardDisabled Ext_blank_before_header >> () <$ lookAhead header)               <|> (guardEnabled Ext_lists_without_preceding_blankline >>+                       -- Avoid creating a paragraph in a nested list.+                       notFollowedBy' inList >>                        () <$ lookAhead listStart)+              <|> do guardEnabled Ext_native_divs+                     inHtmlBlock <- stateInHtmlBlock <$> getState+                     case inHtmlBlock of+                          Just "div" -> () <$+                                       lookAhead (htmlTag (~== TagClose "div"))+                          _          -> mzero             return $ do               result' <- result               case B.toList result' of@@ -1604,13 +1608,13 @@   newline   notFollowedBy blankline   -- parse potential list-starts differently if in a list:-  st <- getState-  when (stateParserContext st == ListItemState) $ notFollowedBy listStart+  notFollowedBy (inList >> listStart)   guardDisabled Ext_lists_without_preceding_blankline <|> notFollowedBy listStart   guardEnabled Ext_blank_before_blockquote <|> notFollowedBy emailBlockQuoteStart   guardEnabled Ext_blank_before_header <|> notFollowedBy (char '#') -- atx header   guardDisabled Ext_backtick_code_blocks <|>      notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))+  notFollowedByHtmlCloser   (eof >> return mempty)     <|> (guardEnabled Ext_hard_line_breaks >> return (return B.linebreak))     <|> (guardEnabled Ext_ignore_line_breaks >> return mempty)@@ -1671,9 +1675,10 @@               -> (F Inlines, String) -> MarkdownParser (F Inlines) referenceLink constructor (lab, raw) = do   sp <- (True <$ lookAhead (char ' ')) <|> return False-  (ref,raw') <- try-           (skipSpaces >> optional (newline >> skipSpaces) >> reference)-           <|> return (mempty, "")+  (ref,raw') <- option (mempty, "") $+      lookAhead (try (spnl >> normalCite >> return (mempty, "")))+      <|>+      try (spnl >> reference)   let labIsRef = raw' == "" || raw' == "[]"   let key = toKey $ if labIsRef then raw else raw'   parsedRaw <- parseFromString (mconcat <$> many inline) raw'
src/Text/Pandoc/Readers/Org.hs view
@@ -37,11 +37,12 @@ import qualified Text.Pandoc.Parsing as P import           Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF                                             , newline, orderedListMarker-                                            , parseFromString+                                            , parseFromString, blanklines                                             ) import           Text.Pandoc.Readers.LaTeX (inlineCommand, rawLaTeXInline) import           Text.Pandoc.Shared (compactify', compactify'DL) import           Text.TeXMath (readTeX, writePandoc, DisplayType(..))+import qualified Text.TeXMath.Readers.MathML.EntityMap as MathMLEntityMap  import           Control.Applicative ( Applicative, pure                                      , (<$>), (<$), (<*>), (<*), (*>) )@@ -69,8 +70,33 @@   blocks' <- parseBlocks   st <- getState   let meta = runF (orgStateMeta' st) st-  return $ Pandoc meta $ filter (/= Null) (B.toList $ runF blocks' st)+  let removeUnwantedBlocks = dropCommentTrees . filter (/= Null)+  return $ Pandoc meta $ removeUnwantedBlocks (B.toList $ runF blocks' st) +-- | Drop COMMENT headers and the document tree below those headers.+dropCommentTrees :: [Block] -> [Block]+dropCommentTrees [] = []+dropCommentTrees blks@(b:bs) =+  maybe blks (flip dropUntilHeaderAboveLevel bs) $ commentHeaderLevel b++-- | Return the level of a header starting a comment tree and Nothing+-- otherwise.+commentHeaderLevel :: Block -> Maybe Int+commentHeaderLevel blk =+   case blk of+     (Header level _ ((Str "COMMENT"):_)) -> Just level+     _                                    -> Nothing++-- | Drop blocks until a header on or above the given level is seen+dropUntilHeaderAboveLevel :: Int -> [Block] -> [Block]+dropUntilHeaderAboveLevel n = dropWhile (not . isHeaderLevelLowerEq n)++isHeaderLevelLowerEq :: Int -> Block -> Bool+isHeaderLevelLowerEq n blk =+  case blk of+    (Header level _ _) -> n >= level+    _                  -> False+ -- -- Parser State for Org --@@ -242,6 +268,13 @@        <* updateLastPreCharPos        <* updateLastForbiddenCharPos +-- | Like @Text.Parsec.Char.blanklines@, but causes additional state changes.+blanklines :: OrgParser [Char]+blanklines =+  P.blanklines+       <* updateLastPreCharPos+       <* updateLastForbiddenCharPos+ -- -- parsing blocks --@@ -821,12 +854,14 @@ list = choice [ definitionList, bulletList, orderedList ] <?> "list"  definitionList :: OrgParser (F Blocks)-definitionList = fmap B.definitionList . fmap compactify'DL . sequence-                 <$> many1 (definitionListItem bulletListStart)+definitionList = try $ do n <- lookAhead (bulletListStart' Nothing)+                          fmap B.definitionList . fmap compactify'DL . sequence+                            <$> many1 (definitionListItem $ bulletListStart' (Just n))  bulletList :: OrgParser (F Blocks)-bulletList = fmap B.bulletList . fmap compactify' . sequence-             <$> many1 (listItem bulletListStart)+bulletList = try $ do n <- lookAhead (bulletListStart' Nothing)+                      fmap B.bulletList . fmap compactify' . sequence+                        <$> many1 (listItem (bulletListStart' $ Just n))  orderedList :: OrgParser (F Blocks) orderedList = fmap B.orderedList . fmap compactify' . sequence@@ -838,11 +873,28 @@   (+) <$> (length <$> many spaceChar)       <*> (length <$> listMarker <* many1 spaceChar) --- parses bullet list start and returns its length (excl. following whitespace)+-- parses bullet list marker. maybe we know the indent level bulletListStart :: OrgParser Int-bulletListStart = genericListStart bulletListMarker-  where bulletListMarker = pure <$> oneOf "*-+"+bulletListStart = bulletListStart' Nothing +bulletListStart' :: Maybe Int -> OrgParser Int+-- returns length of bulletList prefix, inclusive of marker+bulletListStart' Nothing  = do ind <- length <$> many spaceChar+                               when (ind == 0) $ notFollowedBy (char '*')+                               oneOf bullets+                               many1 spaceChar+                               return (ind + 1)+ -- Unindented lists are legal, but they can't use '*' bullets+ -- We return n to maintain compatibility with the generic listItem+bulletListStart' (Just n) = do count (n-1) spaceChar+                               when (n == 1) $ notFollowedBy (char '*')+                               oneOf bullets+                               many1 spaceChar+                               return n++bullets :: String+bullets = "*+-"+ orderedListStart :: OrgParser Int orderedListStart = genericListStart orderedListMarker   -- Ordered list markers allowed in org-mode@@ -856,7 +908,7 @@   line1 <- anyLineNewline   blank <- option "" ("\n" <$ blankline)   cont <- concat <$> many (listContinuation markerLength)-  term' <- parseFromString inline term+  term' <- parseFromString parseInlines term   contents' <- parseFromString parseBlocks $ line1 ++ blank ++ cont   return $ (,) <$> term' <*> fmap (:[]) contents' @@ -920,7 +972,7 @@  -- treat these as potentially non-text when parsing inline: specialChars :: [Char]-specialChars = "\"$'()*+-./:<=>[\\]^_{|}~"+specialChars = "\"$'()*+-,./:<=>[\\]^_{|}~"   whitespace :: OrgParser (F Inlines)@@ -1047,7 +1099,7 @@ explicitOrImageLink :: OrgParser (F Inlines) explicitOrImageLink = try $ do   char '['-  srcF   <- applyCustomLinkFormat =<< linkTarget+  srcF   <- applyCustomLinkFormat =<< possiblyEmptyLinkTarget   title  <- enclosedRaw (char '[') (char ']')   title' <- parseFromString (mconcat <$> many inline) title   char ']'@@ -1080,6 +1132,9 @@ linkTarget :: OrgParser String linkTarget = enclosedByPair '[' ']' (noneOf "\n\r[]") +possiblyEmptyLinkTarget :: OrgParser String+possiblyEmptyLinkTarget = try linkTarget <|> ("" <$ string "[]")+ applyCustomLinkFormat :: String -> OrgParser (F String) applyCustomLinkFormat link = do   let (linkType, rest) = break (== ':') link@@ -1087,27 +1142,38 @@     formatter <- M.lookup linkType <$> asksF orgStateLinkFormatters     return $ maybe link ($ drop 1 rest) formatter -+-- TODO: might be a lot smarter/cleaner to use parsec and ADTs for this kind+-- of parsing. linkToInlinesF :: String -> Inlines -> F Inlines-linkToInlinesF s@('#':_) = pure . B.link s ""-linkToInlinesF s-    | isImageFilename s = const . pure $ B.image s "" ""-    | isUri s           = pure . B.link s ""-    | isRelativeUrl s   = pure . B.link s ""-linkToInlinesF s = \title -> do-  anchorB <- (s `elem`) <$> asksF orgStateAnchorIds-  if anchorB-    then pure $ B.link ('#':s) "" title-    else pure $ B.emph title+linkToInlinesF s =+  case s of+    ""      -> pure . B.link "" ""+    ('#':_) -> pure . B.link s ""+    _ | isImageFilename s     -> const . pure $ B.image s "" ""+    _ | isFileLink s          -> pure . B.link (dropLinkType s) ""+    _ | isUri s               -> pure . B.link s ""+    _ | isAbsoluteFilePath s  -> pure . B.link ("file://" ++ s) ""+    _ | isRelativeFilePath s  -> pure . B.link s ""+    _                         -> internalLink s -isRelativeUrl :: String -> Bool-isRelativeUrl s = (':' `notElem` s) && ("./" `isPrefixOf` s)+isFileLink :: String -> Bool+isFileLink s = ("file:" `isPrefixOf` s) && not ("file://" `isPrefixOf` s) +dropLinkType :: String -> String+dropLinkType = tail . snd . break (== ':')++isRelativeFilePath :: String -> Bool+isRelativeFilePath s = (("./" `isPrefixOf` s) || ("../" `isPrefixOf` s)) &&+                       (':' `notElem` s)+ isUri :: String -> Bool isUri s = let (scheme, path) = break (== ':') s           in all (\c -> isAlphaNum c || c `elem` ".-") scheme              && not (null path) +isAbsoluteFilePath :: String -> Bool+isAbsoluteFilePath = ('/' ==) . head+ isImageFilename :: String -> Bool isImageFilename filename =   any (\x -> ('.':x)  `isSuffixOf` filename) imageExtensions &&@@ -1117,6 +1183,13 @@    imageExtensions = [ "jpeg" , "jpg" , "png" , "gif" , "svg" ]    protocols = [ "file", "http", "https" ] +internalLink :: String -> Inlines -> F Inlines+internalLink link title = do+  anchorB <- (link `elem`) <$> asksF orgStateAnchorIds+  if anchorB+    then return $ B.link ('#':link) "" title+    else return $ B.emph title+ -- | Parse an anchor like @<<anchor-id>>@ and return an empty span with -- @anchor-id@ set as id.  Legal anchors in org-mode are defined through -- @org-target-regexp@, which is fairly liberal.  Since no link is created if@@ -1198,10 +1271,10 @@                                                 ] symbol :: OrgParser (F Inlines) symbol = return . B.str . (: "") <$> (oneOf specialChars >>= updatePositions)- where updatePositions c-           | c `elem` emphasisPreChars = c <$ updateLastPreCharPos-           | c `elem` emphasisForbiddenBorderChars = c <$ updateLastForbiddenCharPos-           | otherwise = return c+ where updatePositions c = do+         when (c `elem` emphasisPreChars) updateLastPreCharPos+         when (c `elem` emphasisForbiddenBorderChars) updateLastForbiddenCharPos+         return c  emphasisBetween :: Char                 -> OrgParser (F Inlines)@@ -1380,13 +1453,19 @@ inlineLaTeX :: OrgParser (F Inlines) inlineLaTeX = try $ do   cmd <- inlineLaTeXCommand-  maybe mzero returnF $ parseAsMath cmd `mplus` parseAsInlineLaTeX cmd+  maybe mzero returnF $+     parseAsMath cmd `mplus` parseAsMathMLSym cmd `mplus` parseAsInlineLaTeX cmd  where    parseAsMath :: String -> Maybe Inlines    parseAsMath cs = B.fromList <$> texMathToPandoc cs     parseAsInlineLaTeX :: String -> Maybe Inlines    parseAsInlineLaTeX cs = maybeRight $ runParser inlineCommand state "" cs++   parseAsMathMLSym :: String -> Maybe Inlines+   parseAsMathMLSym cs = B.str <$> MathMLEntityMap.getUnicode (clean cs)+    -- dropWhileEnd would be nice here, but it's not available before base 4.5+    where clean = reverse . dropWhile (`elem` "{}") . reverse . drop 1     state :: ParserState    state = def{ stateOptions = def{ readerParseRaw = True }}
src/Text/Pandoc/Readers/RST.hs view
@@ -29,25 +29,26 @@ Conversion from reStructuredText to 'Pandoc' document. -} module Text.Pandoc.Readers.RST (-                                readRST+                                readRST,+                                readRSTWithWarnings                                ) where import Text.Pandoc.Definition import Text.Pandoc.Builder (setMeta, fromList) import Text.Pandoc.Shared import Text.Pandoc.Parsing import Text.Pandoc.Options-import Control.Monad ( when, liftM, guard, mzero, mplus )+import Control.Monad ( when, liftM, guard, mzero ) import Data.List ( findIndex, intersperse, intercalate,-                   transpose, sort, deleteFirstsBy, isSuffixOf )+                   transpose, sort, deleteFirstsBy, isSuffixOf , nub, union) import Data.Maybe (fromMaybe) import qualified Data.Map as M import Text.Printf ( printf )-import Control.Applicative ((<$>), (<$), (<*), (*>), (<*>))+import Control.Applicative ((<$>), (<$), (<*), (*>), (<*>), pure) import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>)) import qualified Text.Pandoc.Builder as B import Data.Monoid (mconcat, mempty) import Data.Sequence (viewr, ViewR(..))-import Data.Char (toLower, isHexDigit)+import Data.Char (toLower, isHexDigit, isSpace)  -- | Parse reStructuredText string and return Pandoc document. readRST :: ReaderOptions -- ^ Reader options@@ -55,6 +56,9 @@         -> Pandoc readRST opts s = (readWith parseRST) def{ stateOptions = opts } (s ++ "\n\n") +readRSTWithWarnings :: ReaderOptions -> String -> (Pandoc, [String])+readRSTWithWarnings opts s = (readWithWarnings parseRST) def{ stateOptions = opts } (s ++ "\n\n")+ type RSTParser = Parser [Char] ParserState  --@@ -335,6 +339,13 @@   optional blanklines   return $ unlines lns +quotedBlock :: Parser [Char] st [Char]+quotedBlock = try $ do+    quote <- lookAhead $ oneOf "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"+    lns <- many1 $ lookAhead (char quote) >> anyLine+    optional blanklines+    return $ unlines lns+ codeBlockStart :: Parser [Char] st Char codeBlockStart = string "::" >> blankline >> blankline @@ -342,7 +353,8 @@ codeBlock = try $ codeBlockStart >> codeBlockBody  codeBlockBody :: Parser [Char] st Blocks-codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$> indentedBlock+codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$>+                (indentedBlock <|> quotedBlock)  lhsCodeBlock :: RSTParser Blocks lhsCodeBlock = try $ do@@ -513,7 +525,6 @@ -- TODO: line-block, parsed-literal, table, csv-table, list-table -- date -- include--- class -- title directive' :: RSTParser Blocks directive' = do@@ -594,39 +605,70 @@                           Just t  -> B.link (escapeURI $ trim t) ""                                      $ B.image src "" alt                           Nothing -> B.image src "" alt-        _     -> return mempty+        "class" -> do+            let attrs = ("", (splitBy isSpace $ trim top), map (\(k,v) -> (k, trimr v)) fields)+            --  directive content or the first immediately following element+            children <- case body of+                "" -> block+                _ -> parseFromString parseBlocks  body'+            return $ B.divWith attrs children+        other     -> do+            pos <- getPosition+            addWarning (Just pos) $ "ignoring unknown directive: " ++ other+            return mempty  -- TODO: --  - Silently ignores illegal fields---  - Silently drops classes --  - Only supports :format: fields with a single format for :raw: roles, --    change Text.Pandoc.Definition.Format to fix addNewRole :: String -> [(String, String)] -> RSTParser Blocks addNewRole roleString fields = do     (role, parentRole) <- parseFromString inheritedRole roleString     customRoles <- stateRstCustomRoles <$> getState-    baseRole <- case M.lookup parentRole customRoles of-        Just (base, _, _) -> return base-        Nothing -> return parentRole--    let fmt = if baseRole == "raw" then lookup "format" fields else Nothing-        annotate = maybe id addLanguage $-            if baseRole == "code"+    let (baseRole, baseFmt, baseAttr) =+            maybe (parentRole, Nothing, nullAttr) id $+              M.lookup parentRole customRoles+        fmt = if parentRole == "raw" then lookup "format" fields else baseFmt+        annotate :: [String] -> [String]+        annotate = maybe id (:) $+            if parentRole == "code"                then lookup "language" fields                else Nothing+        attr = let (ident, classes, keyValues) = baseAttr+        -- nub in case role name & language class are the same+               in (ident, nub . (role :) . annotate $ classes, keyValues) +    -- warn about syntax we ignore+    flip mapM_ fields $ \(key, _) -> case key of+        "language" -> when (parentRole /= "code") $ addWarning Nothing $+            "ignoring :language: field because the parent of role :" +++            role ++ ": is :" ++ parentRole ++ ": not :code:"+        "format" -> when (parentRole /= "raw") $ addWarning Nothing $+            "ignoring :format: field because the parent of role :" +++            role ++ ": is :" ++ parentRole ++ ": not :raw:"+        _ -> addWarning Nothing $ "ignoring unknown field :" ++ key +++             ": in definition of role :" ++ role ++ ": in"+    when (parentRole == "raw" && countKeys "format" > 1) $+        addWarning Nothing $+        "ignoring :format: fields after the first in the definition of role :"+        ++ role ++": in"+    when (parentRole == "code" && countKeys "language" > 1) $+        addWarning Nothing $+        "ignoring :language: fields after the first in the definition of role :"+        ++ role ++": in"+     updateState $ \s -> s {         stateRstCustomRoles =-          M.insert role (baseRole, fmt, (,) parentRole . annotate) customRoles+          M.insert role (baseRole, fmt, attr) customRoles     }      return $ B.singleton Null   where-    addLanguage lang (ident, classes, keyValues) =-        (ident, "sourceCode" : lang : classes, keyValues)+    countKeys k = length . filter (== k) . map fst $ fields     inheritedRole =-        (,) <$> roleNameEndingIn (char '(') <*> roleNameEndingIn (char ')')+        (,) <$> roleName <*> ((char '(' *> roleName <* char ')') <|> pure "span") + -- Can contain character codes as decimal numbers or -- hexadecimal numbers, prefixed by 0x, x, \x, U+, u, or \u -- or as XML-style hexadecimal character entities, e.g. &#x1a2b;@@ -985,21 +1027,23 @@     "RFC" -> return $ rfcLink contents     "pep-reference" -> return $ pepLink contents     "PEP" -> return $ pepLink contents-    "literal" -> return $ B.str contents+    "literal" -> return $ B.codeWith attr contents     "math" -> return $ B.math contents     "title-reference" -> titleRef contents     "title" -> titleRef contents     "t" -> titleRef contents-    "code" -> return $ B.codeWith attr contents+    "code" -> return $ B.codeWith (addClass "sourceCode" attr) contents+    "span" -> return $ B.spanWith attr $ B.str contents     "raw" -> return $ B.rawInline (fromMaybe "" fmt) contents     custom -> do-        customRole <- stateRstCustomRoles <$> getState-        case M.lookup custom customRole of-            Just (_, newFmt, inherit) -> let-                fmtStr = fmt `mplus` newFmt-                (newRole, newAttr) = inherit attr-                in renderRole contents fmtStr newRole newAttr-            Nothing -> return $ B.str contents -- Undefined role+        customRoles <- stateRstCustomRoles <$> getState+        case M.lookup custom customRoles of+            Just (newRole, newFmt, newAttr) ->+                renderRole contents newFmt newRole newAttr+            Nothing -> do+                pos <- getPosition+                addWarning (Just pos) $ "ignoring unknown role :" ++ custom ++ ": in"+                return $ B.str contents -- Undefined role  where    titleRef ref = return $ B.str ref -- FIXME: Not a sensible behaviour    rfcLink rfcNo = B.link rfcUrl ("RFC " ++ rfcNo) $ B.str ("RFC " ++ rfcNo)@@ -1008,11 +1052,14 @@      where padNo = replicate (4 - length pepNo) '0' ++ pepNo            pepUrl = "http://www.python.org/dev/peps/pep-" ++ padNo ++ "/" -roleNameEndingIn :: RSTParser Char -> RSTParser String-roleNameEndingIn end = many1Till (letter <|> char '-') end+addClass :: String -> Attr -> Attr+addClass c (ident, classes, keyValues) = (ident, union classes [c], keyValues) +roleName :: RSTParser String+roleName = many1 (letter <|> char '-')+ roleMarker :: RSTParser String-roleMarker = char ':' *> roleNameEndingIn (char ':')+roleMarker = char ':' *> roleName <* char ':'  roleBefore :: RSTParser (String,String) roleBefore = try $ do
+ src/Text/Pandoc/Readers/TWiki.hs view
@@ -0,0 +1,526 @@+{-# LANGUAGE RelaxedPolyRec, FlexibleInstances, TypeSynonymInstances #-}+-- RelaxedPolyRec needed for inlinesBetween on GHC < 7+{-+  Copyright (C) 2014 Alexander Sulfrian <alexander.sulfrian@fu-berlin.de>++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.Readers.TWiki+   Copyright   : Copyright (C) 2014 Alexander Sulfrian+   License     : GNU GPL, version 2 or above++   Maintainer  : Alexander Sulfrian <alexander.sulfrian@fu-berlin.de>+   Stability   : alpha+   Portability : portable++Conversion of twiki text to 'Pandoc' document.+-}+module Text.Pandoc.Readers.TWiki ( readTWiki+                                 , readTWikiWithWarnings+                                 ) where++import Text.Pandoc.Definition+import qualified Text.Pandoc.Builder as B+import Text.Pandoc.Options+import Text.Pandoc.Parsing hiding (enclosed, macro, nested)+import Text.Pandoc.Readers.HTML (htmlTag, isCommentTag)+import Data.Monoid (Monoid, mconcat, mempty)+import Control.Applicative ((<$>), (<*), (*>), (<$))+import Control.Monad+import Text.Printf (printf)+import Debug.Trace (trace)+import Text.Pandoc.XML (fromEntities)+import Data.Maybe (fromMaybe)+import Text.HTML.TagSoup+import Data.Char (isAlphaNum)+import qualified Data.Foldable as F++-- | Read twiki from an input string and return a Pandoc document.+readTWiki :: ReaderOptions -- ^ Reader options+          -> String        -- ^ String to parse (assuming @'\n'@ line endings)+          -> Pandoc+readTWiki opts s =+  (readWith parseTWiki) def{ stateOptions = opts } (s ++ "\n\n")++readTWikiWithWarnings :: ReaderOptions -- ^ Reader options+                      -> String        -- ^ String to parse (assuming @'\n'@ line endings)+                      -> (Pandoc, [String])+readTWikiWithWarnings opts s =+  (readWith parseTWikiWithWarnings) def{ stateOptions = opts } (s ++ "\n\n")+ where parseTWikiWithWarnings = do+         doc <- parseTWiki+         warnings <- stateWarnings <$> getState+         return (doc, warnings)++type TWParser = Parser [Char] ParserState++--+-- utility functions+--++tryMsg :: String -> TWParser a -> TWParser a+tryMsg msg p = try p <?> msg++skip :: TWParser a -> TWParser ()+skip parser = parser >> return ()++nested :: TWParser a -> TWParser a+nested p = do+  nestlevel <- stateMaxNestingLevel <$>  getState+  guard $ nestlevel > 0+  updateState $ \st -> st{ stateMaxNestingLevel = stateMaxNestingLevel st - 1 }+  res <- p+  updateState $ \st -> st{ stateMaxNestingLevel = nestlevel }+  return res++htmlElement :: String -> TWParser (Attr, String)+htmlElement tag = tryMsg tag $ do+  (TagOpen _ attr, _) <- htmlTag (~== TagOpen tag [])+  content <- manyTill anyChar (endtag <|> endofinput)+  return (htmlAttrToPandoc attr, trim content)+  where+    endtag     = skip $ htmlTag (~== TagClose tag)+    endofinput = lookAhead $ try $ skipMany blankline >> skipSpaces >> eof+    trim       = dropWhile (=='\n') . reverse . dropWhile (=='\n') . reverse++htmlAttrToPandoc :: [Attribute String] -> Attr+htmlAttrToPandoc attrs = (ident, classes, keyvals)+  where+    ident   = fromMaybe "" $ lookup "id" attrs+    classes = maybe [] words $ lookup "class" attrs+    keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]++parseHtmlContentWithAttrs :: String -> TWParser a -> TWParser (Attr, [a])+parseHtmlContentWithAttrs tag parser = do+  (attr, content) <- htmlElement tag+  parsedContent <- try $ parseContent content+  return (attr, parsedContent)+  where+    parseContent = parseFromString $ nested $ manyTill parser endOfContent+    endOfContent = try $ skipMany blankline >> skipSpaces >> eof++parseHtmlContent :: String -> TWParser a -> TWParser [a]+parseHtmlContent tag p = parseHtmlContentWithAttrs tag p >>= return . snd++--+-- main parser+--++parseTWiki :: TWParser Pandoc+parseTWiki = do+  bs <- mconcat <$> many block+  spaces+  eof+  return $ B.doc bs+++--+-- block parsers+--++block :: TWParser B.Blocks+block = do+  tr <- getOption readerTrace+  pos <- getPosition+  res <- mempty <$ skipMany1 blankline+         <|> blockElements+         <|> para+  skipMany blankline+  when tr $+    trace (printf "line %d: %s" (sourceLine pos)+           (take 60 $ show $ B.toList res)) (return ())+  return res++blockElements :: TWParser B.Blocks+blockElements = choice [ separator+                       , header+                       , verbatim+                       , literal+                       , list ""+                       , table+                       , blockQuote+                       , noautolink+                       ]++separator :: TWParser B.Blocks+separator = tryMsg "separator" $ string "---" >> newline >> return B.horizontalRule++header :: TWParser B.Blocks+header = tryMsg "header" $ do+  string "---"+  level <- many1 (char '+') >>= return . length+  guard $ level <= 6+  classes <- option [] $ string "!!" >> return ["unnumbered"]+  skipSpaces+  content <- B.trimInlines . mconcat <$> manyTill inline newline+  attr <- registerHeader ("", classes, []) content+  return $ B.headerWith attr level $ content++verbatim :: TWParser B.Blocks+verbatim = (htmlElement "verbatim" <|> htmlElement "pre")+           >>= return . (uncurry B.codeBlockWith)++literal :: TWParser B.Blocks+literal = htmlElement "literal" >>= return . rawBlock+  where+    format (_, _, kvs)        = fromMaybe "html" $ lookup "format" kvs+    rawBlock (attrs, content) = B.rawBlock (format attrs) content++list :: String -> TWParser B.Blocks+list prefix = choice [ bulletList prefix+                     , orderedList prefix+                     , definitionList prefix]++definitionList :: String -> TWParser B.Blocks+definitionList prefix = tryMsg "definitionList" $ do+  indent <- lookAhead $ string prefix *> (many1 $ string "   ") <* string "$ "+  elements <- many $ parseDefinitionListItem (prefix ++ concat indent)+  return $ B.definitionList elements+  where+    parseDefinitionListItem :: String -> TWParser (B.Inlines, [B.Blocks])+    parseDefinitionListItem indent = do+      string (indent ++ "$ ") >> skipSpaces+      term <- many1Till inline $ string ": "+      line <- listItemLine indent $ string "$ "+      return $ (mconcat term, [line])++bulletList :: String -> TWParser B.Blocks+bulletList prefix = tryMsg "bulletList" $+                    parseList prefix (char '*') (char ' ')++orderedList :: String -> TWParser B.Blocks+orderedList prefix = tryMsg "orderedList" $+                     parseList prefix (oneOf "1iIaA") (string ". ")++parseList :: Show a => String -> TWParser Char -> TWParser a -> TWParser B.Blocks+parseList prefix marker delim = do+  (indent, style) <- lookAhead $ string prefix *> listStyle <* delim+  blocks <- many $ parseListItem (prefix ++ indent) (char style <* delim)+  return $ case style of+    '1' -> B.orderedListWith (1, DefaultStyle, DefaultDelim) blocks+    'i' -> B.orderedListWith (1, LowerRoman, DefaultDelim) blocks+    'I' -> B.orderedListWith (1, UpperRoman, DefaultDelim) blocks+    'a' -> B.orderedListWith (1, LowerAlpha, DefaultDelim) blocks+    'A' -> B.orderedListWith (1, UpperAlpha, DefaultDelim) blocks+    _   -> B.bulletList blocks+  where+    listStyle = do+      indent <- many1 $ string "   "+      style <- marker+      return (concat indent, style)++parseListItem :: Show a => String -> TWParser a -> TWParser B.Blocks+parseListItem prefix marker = string prefix >> marker >> listItemLine prefix marker++listItemLine :: Show a => String -> TWParser a -> TWParser B.Blocks+listItemLine prefix marker = lineContent >>= parseContent >>= return . mconcat+  where+    lineContent = do+      content <- anyLine+      continuation <- optionMaybe listContinuation+      return $ filterSpaces content ++ "\n" ++ (maybe "" ("   " ++) continuation)+    filterSpaces = reverse . dropWhile (== ' ') . reverse+    listContinuation = notFollowedBy (string prefix >> marker) >>+                       string "   " >> lineContent+    parseContent = parseFromString $ many1 $ nestedList <|> parseInline+    parseInline = many1Till inline (lastNewline <|> newlineBeforeNestedList) >>=+                  return . B.plain . mconcat+    nestedList = list prefix+    lastNewline = try $ char '\n' <* eof+    newlineBeforeNestedList = try $ char '\n' <* lookAhead nestedList++table :: TWParser B.Blocks+table = try $ do+  tableHead <- optionMaybe $ many1Till tableParseHeader newline >>= return . unzip+  rows <- many1 tableParseRow+  return $ buildTable mempty rows $ fromMaybe (align rows, columns rows) tableHead+  where+    buildTable caption rows (aligns, heads)+                    = B.table caption aligns heads rows+    align rows      = replicate (columCount rows) (AlignDefault, 0)+    columns rows    = replicate (columCount rows) mempty+    columCount rows = length $ head rows++tableParseHeader :: TWParser ((Alignment, Double), B.Blocks)+tableParseHeader = try $ do+  char '|'+  leftSpaces <- many spaceChar >>= return . length+  char '*'+  content <- tableColumnContent (char '*' >> skipSpaces >> char '|')+  char '*'+  rightSpaces <- many spaceChar >>= return . length+  optional tableEndOfRow+  return (tableAlign leftSpaces rightSpaces, content)+  where+    tableAlign left right+      | left >= 2 && left == right = (AlignCenter, 0)+      | left > right = (AlignRight, 0)+      | otherwise = (AlignLeft, 0)++tableParseRow :: TWParser [B.Blocks]+tableParseRow = many1Till tableParseColumn newline++tableParseColumn :: TWParser B.Blocks+tableParseColumn = char '|' *> skipSpaces *>+                   tableColumnContent (skipSpaces >> char '|')+                   <* skipSpaces <* optional tableEndOfRow++tableEndOfRow :: TWParser Char+tableEndOfRow = lookAhead (try $ char '|' >> char '\n') >> char '|'++tableColumnContent :: Show a => TWParser a -> TWParser B.Blocks+tableColumnContent end = manyTill content (lookAhead $ try end) >>= return . B.plain . mconcat+  where+    content = continuation <|> inline+    continuation = try $ char '\\' >> newline >> return mempty++blockQuote :: TWParser B.Blocks+blockQuote = parseHtmlContent "blockquote" block >>= return . B.blockQuote . mconcat++noautolink :: TWParser B.Blocks+noautolink = do+  (_, content) <- htmlElement "noautolink"+  st <- getState+  setState $ st{ stateAllowLinks = False }+  blocks <- try $ parseContent content+  setState $ st{ stateAllowLinks = True }+  return $ mconcat blocks+  where+    parseContent      = parseFromString $ many $ block++para :: TWParser B.Blocks+para = many1Till inline endOfParaElement >>= return . result . mconcat+ where+   endOfParaElement = lookAhead $ endOfInput <|> endOfPara <|> newBlockElement+   endOfInput       = try $ skipMany blankline >> skipSpaces >> eof+   endOfPara        = try $ blankline >> skipMany1 blankline+   newBlockElement  = try $ blankline >> skip blockElements+   result content   = if F.all (==Space) content+                      then mempty+                      else B.para $ B.trimInlines content+++--+-- inline parsers+--++inline :: TWParser B.Inlines+inline = choice [ whitespace+                , br+                , macro+                , strong+                , strongHtml+                , strongAndEmph+                , emph+                , emphHtml+                , boldCode+                , smart+                , link+                , htmlComment+                , code+                , codeHtml+                , nop+                , autoLink+                , str+                , symbol+                ] <?> "inline"++whitespace :: TWParser B.Inlines+whitespace = (lb <|> regsp) >>= return+  where lb = try $ skipMany spaceChar >> linebreak >> return B.space+        regsp = try $ skipMany1 spaceChar >> return B.space++br :: TWParser B.Inlines+br = try $ string "%BR%" >> return B.linebreak++linebreak :: TWParser B.Inlines+linebreak = newline >> notFollowedBy newline >> (lastNewline <|> innerNewline)+  where lastNewline  = eof >> return mempty+        innerNewline = return B.space++between :: (Show b, Monoid c) => TWParser a -> TWParser b -> (TWParser b -> TWParser c) -> TWParser c+between start end p =+  mconcat <$> try (start >> notFollowedBy whitespace >> many1Till (p end) end)++enclosed :: (Show a, Monoid b) => TWParser a -> (TWParser a -> TWParser b) -> TWParser b+enclosed sep p = between sep (try $ sep <* endMarker) p+  where+    endMarker   = lookAhead $ skip endSpace <|> skip (oneOf ".,!?:)|") <|> eof+    endSpace    = (spaceChar <|> newline) >> return B.space++macro :: TWParser B.Inlines+macro = macroWithParameters <|> withoutParameters+  where+    withoutParameters = enclosed (char '%') (\_ -> macroName) >>= return . emptySpan+    emptySpan name = buildSpan name [] mempty++macroWithParameters :: TWParser B.Inlines+macroWithParameters = try $ do+  char '%'+  name <- macroName+  (content, kvs) <- attributes+  char '%'+  return $ buildSpan name kvs $ B.str content++buildSpan :: String -> [(String, String)] -> B.Inlines -> B.Inlines+buildSpan className kvs = B.spanWith attrs+  where+    attrs             = ("", ["twiki-macro", className] ++ additionalClasses, kvsWithoutClasses)+    additionalClasses = maybe [] words $ lookup "class" kvs+    kvsWithoutClasses = [(k,v) | (k,v) <- kvs, k /= "class"]++macroName :: TWParser String+macroName = do+  first <- letter+  rest <- many $ alphaNum <|> char '_'+  return (first:rest)++attributes :: TWParser (String, [(String, String)])+attributes = char '{' *> spnl *> many (attribute <* spnl) <* char '}' >>=+             return . foldr (either mkContent mkKvs) ([], [])+  where+    spnl                      = skipMany (spaceChar <|> newline)+    mkContent c  ([], kvs)    = (c, kvs)+    mkContent c  (rest, kvs)  = (c ++ " " ++ rest, kvs)+    mkKvs     kv (cont, rest) = (cont, (kv : rest))++attribute :: TWParser (Either String (String, String))+attribute = withKey <|> withoutKey+  where+    withKey = try $ do+      key <- macroName+      char '='+      parseValue False >>= return . (curry Right key)+    withoutKey = try $ parseValue True >>= return . Left+    parseValue allowSpaces = (withQuotes <|> withoutQuotes allowSpaces) >>= return . fromEntities+    withQuotes             = between (char '"') (char '"') (\_ -> count 1 $ noneOf ['"'])+    withoutQuotes allowSpaces+      | allowSpaces == True = many1 $ noneOf "}"+      | otherwise           = many1 $ noneOf " }"++nestedInlines :: Show a => TWParser a -> TWParser B.Inlines+nestedInlines end = innerSpace <|> nestedInline+  where+    innerSpace   = try $ whitespace <* (notFollowedBy end)+    nestedInline = notFollowedBy whitespace >> nested inline++strong :: TWParser B.Inlines+strong = try $ enclosed (char '*') nestedInlines >>= return . B.strong++strongHtml :: TWParser B.Inlines+strongHtml = (parseHtmlContent "strong" inline <|> parseHtmlContent "b" inline)+             >>= return . B.strong . mconcat++strongAndEmph :: TWParser B.Inlines+strongAndEmph = try $ enclosed (string "__") nestedInlines >>= return . B.emph . B.strong++emph :: TWParser B.Inlines+emph = try $ enclosed (char '_') nestedInlines >>= return . B.emph++emphHtml :: TWParser B.Inlines+emphHtml = (parseHtmlContent "em" inline <|> parseHtmlContent "i" inline)+           >>= return . B.emph . mconcat++nestedString :: Show a => TWParser a -> TWParser String+nestedString end = innerSpace <|> (count 1 nonspaceChar)+  where+    innerSpace = try $ many1 spaceChar <* notFollowedBy end++boldCode :: TWParser B.Inlines+boldCode = try $ enclosed (string "==") nestedString >>= return . B.strong . B.code . fromEntities++htmlComment :: TWParser B.Inlines+htmlComment = htmlTag isCommentTag >> return mempty++code :: TWParser B.Inlines+code = try $ enclosed (char '=') nestedString >>= return . B.code . fromEntities++codeHtml :: TWParser B.Inlines+codeHtml = do+  (attrs, content) <- parseHtmlContentWithAttrs "code" anyChar+  return $ B.codeWith attrs $ fromEntities content++autoLink :: TWParser B.Inlines+autoLink = try $ do+  state <- getState+  guard $ stateAllowLinks state+  (text, url) <- parseLink+  guard $ checkLink (head $ reverse url)+  return $ makeLink (text, url)+  where+    parseLink            = notFollowedBy nop >> (uri <|> emailAddress)+    makeLink (text, url) = B.link url "" $ B.str text+    checkLink c+      | c == '/' = True+      | otherwise = isAlphaNum c++str :: TWParser B.Inlines+str = (many1 alphaNum <|> count 1 characterReference) >>= return . B.str++nop :: TWParser B.Inlines+nop = try $ (skip exclamation <|> skip nopTag) >> followContent+  where+    exclamation   = char '!'+    nopTag        = stringAnyCase "<nop>"+    followContent = many1 nonspaceChar >>= return . B.str . fromEntities++symbol :: TWParser B.Inlines+symbol = count 1 nonspaceChar >>= return . B.str++smart :: TWParser B.Inlines+smart = do+  getOption readerSmart >>= guard+  doubleQuoted <|> singleQuoted <|>+    choice [ apostrophe+           , dash+           , ellipses+           ]++singleQuoted :: TWParser B.Inlines+singleQuoted = try $ do+  singleQuoteStart+  withQuoteContext InSingleQuote $+    many1Till inline singleQuoteEnd >>=+    (return . B.singleQuoted . B.trimInlines . mconcat)++doubleQuoted :: TWParser B.Inlines+doubleQuoted = try $ do+  doubleQuoteStart+  contents <- mconcat <$> many (try $ notFollowedBy doubleQuoteEnd >> inline)+  (withQuoteContext InDoubleQuote $ doubleQuoteEnd >>+   return (B.doubleQuoted $ B.trimInlines contents))+   <|> (return $ (B.str "\8220") B.<> contents)++link :: TWParser B.Inlines+link = try $ do+  st <- getState+  guard $ stateAllowLinks st+  setState $ st{ stateAllowLinks = False }+  (url, title, content) <- linkText+  setState $ st{ stateAllowLinks = True }+  return $ B.link url title content++linkText :: TWParser (String, String, B.Inlines)+linkText = do+  string "[["+  url <- many1Till anyChar (char ']')+  content <- option [B.str url] linkContent+  char ']'+  return (url, "", mconcat content)+  where+    linkContent      = (char '[') >> many1Till anyChar (char ']') >>= parseLinkContent+    parseLinkContent = parseFromString $ many1 inline
src/Text/Pandoc/Readers/Txt2Tags.hs view
@@ -52,7 +52,7 @@ import Data.Time.LocalTime (getZonedTime) import Text.Pandoc.Compat.Directory(getModificationTime) import Data.Time.Format (formatTime)-import System.Locale (defaultTimeLocale)+import Text.Pandoc.Compat.Locale (defaultTimeLocale) import System.IO.Error (catchIOError)  type T2T = ParserT String ParserState (Reader T2TMeta)@@ -576,4 +576,3 @@  ignoreSpacesCap :: T2T String -> T2T String ignoreSpacesCap p = map toLower <$> (spaces *> p <* spaces)-
src/Text/Pandoc/SelfContained.hs view
@@ -51,7 +51,8 @@  convertTag :: MediaBag -> Maybe String -> Tag String -> IO (Tag String) convertTag media sourceURL t@(TagOpen tagname as)-  | tagname `elem` ["img", "embed", "video", "input", "audio", "source"] = do+  | tagname `elem`+     ["img", "embed", "video", "input", "audio", "source", "track"] = do        as' <- mapM processAttribute as        return $ TagOpen tagname as'   where processAttribute (x,y) =
src/Text/Pandoc/Shared.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveDataTypeable, CPP, MultiParamTypeClasses,-    FlexibleContexts, ScopedTypeVariables, PatternGuards #-}+    FlexibleContexts, ScopedTypeVariables, PatternGuards,+    ViewPatterns #-} {- Copyright (C) 2006-2014 John MacFarlane <jgm@berkeley.edu> @@ -106,7 +107,7 @@                      unEscapeString, parseURIReference, isAllowedInURI ) import qualified Data.Set as Set import System.Directory-import System.FilePath (joinPath, splitDirectories)+import System.FilePath (joinPath, splitDirectories, pathSeparator, isPathSeparator) import Text.Pandoc.MIME (MimeType, getMimeType) import System.FilePath ( (</>), takeExtension, dropExtension) import Data.Generics (Typeable, Data)@@ -114,7 +115,7 @@ import qualified Control.Exception as E import Control.Monad (msum, unless) import Text.Pandoc.Pretty (charWidth)-import System.Locale (defaultTimeLocale)+import Text.Pandoc.Compat.Locale (defaultTimeLocale) import Data.Time import System.IO (stderr) import System.IO.Temp@@ -126,6 +127,7 @@ import Data.ByteString.Base64 (decodeLenient) import Data.Sequence (ViewR(..), ViewL(..), viewl, viewr) import qualified Data.Text as T (toUpper, pack, unpack)+import Data.ByteString.Lazy (toChunks)  #ifdef EMBED_DATA_FILES import Text.Pandoc.Data (dataFiles)@@ -133,7 +135,6 @@ import Paths_pandoc (getDataFileName) #endif #ifdef HTTP_CLIENT-import Data.ByteString.Lazy (toChunks) import Network.HTTP.Client (httpLbs, parseUrl, withManager,                             responseBody, responseHeaders,                             Request(port,host))@@ -734,12 +735,10 @@  -- | Perform an IO action in a directory, returning to starting directory. inDirectory :: FilePath -> IO a -> IO a-inDirectory path action = do-  oldDir <- getCurrentDirectory-  setCurrentDirectory path-  result <- action-  setCurrentDirectory oldDir-  return result+inDirectory path action = E.bracket+                             getCurrentDirectory+                             setCurrentDirectory+                             (const $ setCurrentDirectory path >> action)  readDefaultDataFile :: FilePath -> IO BS.ByteString readDefaultDataFile fname =@@ -871,11 +870,14 @@     go rs "." = rs     go r@(p:rs) ".." = case p of                             ".." -> ("..":r)-                            "/" -> ("..":r)+                            (checkPathSeperator -> Just True) -> ("..":r)                             _ -> rs-    go _ "/" = ["/"]+    go _ (checkPathSeperator -> Just True) = [[pathSeparator]]     go rs x = x:rs-+    isSingleton [] = Nothing+    isSingleton [x] = Just x+    isSingleton _ = Nothing+    checkPathSeperator = fmap isPathSeparator . isSingleton  -- -- Safe read
src/Text/Pandoc/Templates.hs view
@@ -129,6 +129,7 @@        "native" -> return $ Right ""        "json"   -> return $ Right ""        "docx"   -> return $ Right ""+       "fb2"    -> return $ Right ""        "odt"    -> getDefaultTemplate user "opendocument"        "markdown_strict"   -> getDefaultTemplate user "markdown"        "multimarkdown"     -> getDefaultTemplate user "markdown"
src/Text/Pandoc/Writers/ConTeXt.hs view
@@ -36,6 +36,7 @@ import Text.Pandoc.Walk (query) import Text.Printf ( printf ) import Data.List ( intercalate )+import Data.Char ( ord ) import Control.Monad.State import Text.Pandoc.Pretty import Text.Pandoc.Templates ( renderTemplate' )@@ -114,6 +115,13 @@ stringToConTeXt :: WriterOptions -> String -> String stringToConTeXt opts = concatMap (escapeCharForConTeXt opts) +-- | Sanitize labels+toLabel :: String -> String+toLabel z = concatMap go z+ where go x+         | elem x "\\#[]\",{}%()|=" = "ux" ++ printf "%x" (ord x)+         | otherwise = [x]+ -- | Convert Elements to ConTeXt elementToConTeXt :: WriterOptions -> Element -> State WriterState Doc elementToConTeXt _ (Blk block) = blockToConTeXt block@@ -286,15 +294,16 @@ -- Handle HTML-like internal document references to sections inlineToConTeXt (Link txt          (('#' : ref), _)) = do   opts <- gets stOptions-  label <-  inlineListToConTeXt txt+  contents <-  inlineListToConTeXt txt+  let ref' = toLabel $ stringToConTeXt opts ref   return $ text "\\in"            <> braces (if writerNumberSections opts-                         then label <+> text "(\\S"-                         else label)  -- prefix+                         then contents <+> text "(\\S"+                         else contents)  -- prefix            <> braces (if writerNumberSections opts                          then text ")"                          else empty)  -- suffix-           <> brackets (text ref)+           <> brackets (text ref')  inlineToConTeXt (Link txt          (src, _))      = do   let isAutolink = txt == [Str (unEscapeString src)]@@ -302,13 +311,13 @@   let next = stNextRef st   put $ st {stNextRef = next + 1}   let ref = "url" ++ show next-  label <-  inlineListToConTeXt txt+  contents <-  inlineListToConTeXt txt   return $ "\\useURL"            <> brackets (text ref)            <> brackets (text $ escapeStringUsing [('#',"\\#"),('%',"\\%")] src)            <> (if isAutolink                   then empty-                  else brackets empty <> brackets label)+                  else brackets empty <> brackets contents)            <> "\\from"            <> brackets (text ref) inlineToConTeXt (Image _ (src, _)) = do@@ -337,6 +346,7 @@   st <- get   let opts = stOptions st   let level' = if writerChapters opts then hdrLevel - 1 else hdrLevel+  let ident' = toLabel ident   let (section, chapter) = if "unnumbered" `elem` classes                               then (text "subject", text "title")                               else (text "section", text "chapter")@@ -344,7 +354,7 @@                then char '\\'                     <> text (concat (replicate (level' - 1) "sub"))                     <> section-                    <> (if (not . null) ident then brackets (text ident) else empty)+                    <> (if (not . null) ident' then brackets (text ident') else empty)                     <> braces contents                     <> blankline                else if level' == 0
src/Text/Pandoc/Writers/Docx.hs view
@@ -29,7 +29,7 @@ Conversion of 'Pandoc' documents to docx. -} module Text.Pandoc.Writers.Docx ( writeDocx ) where-import Data.List ( intercalate, isPrefixOf, isSuffixOf )+import Data.List ( intercalate, isPrefixOf, isSuffixOf, stripPrefix ) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy.Char8 as BL8@@ -41,7 +41,7 @@ import Data.Time.Clock import Data.Time.Format import System.Environment-import System.Locale+import Text.Pandoc.Compat.Locale (defaultTimeLocale) import Text.Pandoc.Definition import Text.Pandoc.Generic import Text.Pandoc.ImageSize@@ -52,7 +52,7 @@ import Text.Pandoc.Highlighting ( highlight ) import Text.Pandoc.Walk import Text.Highlighting.Kate.Types ()-import Text.XML.Light+import Text.XML.Light as XML import Text.TeXMath import Control.Monad.State import Text.Highlighting.Kate@@ -62,8 +62,9 @@ import qualified Control.Exception as E import Text.Pandoc.MIME (MimeType, getMimeType, getMimeTypeDef,                          extensionFromMimeType)-import Control.Applicative ((<$>), (<|>))+import Control.Applicative ((<$>), (<|>), (<*>)) import Data.Maybe (fromMaybe, mapMaybe)+import Data.Char (isDigit)  data ListMarker = NoMarker                 | BulletMarker@@ -104,6 +105,8 @@        , stInDel          :: Bool        , stChangesAuthor  :: String        , stChangesDate    :: String+       , stPrintWidth     :: Integer+       , stHeadingStyles  :: [(Int,String)]        }  defaultWriterState :: WriterState@@ -122,6 +125,8 @@       , stInDel          = False       , stChangesAuthor  = "unknown"       , stChangesDate    = "1969-12-31T19:00:00Z"+      , stPrintWidth     = 1+      , stHeadingStyles  = []       }  type WS a = StateT WriterState IO a@@ -143,6 +148,31 @@ renderXml elt = BL8.pack "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" <>   UTF8.fromStringLazy (showElement elt) +renumIdMap :: Int -> [Element] -> M.Map String String+renumIdMap _ [] = M.empty+renumIdMap n (e:es)+  | Just oldId <- findAttr (QName "Id" Nothing Nothing) e =+      M.insert oldId ("rId" ++ (show n)) (renumIdMap (n+1) es)+  | otherwise = renumIdMap n es++replaceAttr :: (QName -> Bool) -> String -> [XML.Attr] -> [XML.Attr]+replaceAttr _ _ [] = []+replaceAttr f val (a:as) | f (attrKey a) =+                             (XML.Attr (attrKey a) val) : (replaceAttr f val as)+                         | otherwise = a : (replaceAttr f val as)++renumId :: (QName -> Bool) -> (M.Map String String) -> Element -> Element+renumId f renumMap e+  | Just oldId <- findAttrBy f e+  , Just newId <- M.lookup oldId renumMap =+    let attrs' = replaceAttr f newId (elAttribs e)+    in+     e { elAttribs = attrs' }+  | otherwise = e++renumIds :: (QName -> Bool) -> (M.Map String String) -> [Element] -> [Element]+renumIds f renumMap = map (renumId f renumMap)+ -- | Produce an Docx file from a Pandoc document. writeDocx :: WriterOptions  -- ^ Writer options           -> Pandoc         -- ^ Document to convert@@ -156,11 +186,59 @@        case writerReferenceDocx opts of              Just f  -> B.readFile f              Nothing -> readDataFile datadir "reference.docx"-  distArchive <- liftM (toArchive . toLazy) $ readDataFile Nothing "reference.docx"+  distArchive <- liftM (toArchive . toLazy) $ readDataFile datadir "reference.docx" +  parsedDoc <- parseXml refArchive distArchive "word/document.xml"+  let wname f qn = qPrefix qn == Just "w" && f (qName qn)+  let mbsectpr = filterElementName (wname (=="sectPr")) parsedDoc++  -- Gets the template size+  let mbpgsz = mbsectpr >>= (filterElementName (wname (=="pgSz")))+  let mbAttrSzWidth = (elAttribs <$> mbpgsz) >>= (lookupAttrBy ((=="w") . qName))++  let mbpgmar = mbsectpr >>= (filterElementName (wname (=="pgMar")))+  let mbAttrMarLeft = (elAttribs <$> mbpgmar) >>= (lookupAttrBy ((=="left") . qName))+  let mbAttrMarRight = (elAttribs <$> mbpgmar) >>= (lookupAttrBy ((=="right") . qName))++  -- Get the avaible area (converting the size and the margins to int and+  -- doing the difference+  let pgContentWidth = (-) <$> (read <$> mbAttrSzWidth ::Maybe Integer)+                       <*> (+                         (+) <$> (read <$> mbAttrMarRight ::Maybe Integer)+                         <*> (read <$> mbAttrMarLeft ::Maybe Integer)+                       )++  -- styles+  let stylepath = "word/styles.xml"+  styledoc <- parseXml refArchive distArchive stylepath++  -- parse styledoc for heading styles+  let styleNamespaces = map ((,) <$> qName . attrKey <*> attrVal) .+                        filter ((==Just "xmlns") . qPrefix . attrKey) .+                        elAttribs $ styledoc+  let headingStyles =+       let+           mywURI = lookup "w" styleNamespaces+           myName name = QName name mywURI (Just "w")+           getAttrStyleId = findAttr (myName "styleId")+           getNameVal = findChild (myName "name") >=> findAttr (myName "val")+           getNum s | not $ null s, all isDigit s = Just (read s :: Int)+                    | otherwise = Nothing+           getEngHeader = getAttrStyleId >=> stripPrefix "Heading" >=> getNum+           getIntHeader = getNameVal >=> stripPrefix "heading " >=> getNum+           toTuple getF = liftM2 (,) <$> getF <*> getAttrStyleId+           toMap getF = mapMaybe (toTuple getF) $+                        findChildren (myName "style") styledoc+           select a b | not $ null a = a+                      | otherwise = b+           in+              select (toMap getEngHeader) (toMap getIntHeader)+   ((contents, footnotes), st) <- runStateT (writeOpenXML opts{writerWrapText = False} doc')                        defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username-                                         , stChangesDate   = formatTime defaultTimeLocale "%FT%XZ" utctime}+                                         , stChangesDate   = formatTime defaultTimeLocale "%FT%XZ" utctime+                                         , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)+                                         , stHeadingStyles = headingStyles}   let epochtime = floor $ utcTimeToPOSIXSeconds utctime   let imgs = M.elems $ stImages st @@ -168,13 +246,6 @@   let toImageEntry (_,path,_,_,img) = toEntry ("word/" ++ path) epochtime $ toLazy img   let imageEntries = map toImageEntry imgs -  -- adjust contents to add sectPr from reference.docx-  parsedDoc <- parseXml refArchive distArchive "word/document.xml"-  let wname f qn = qPrefix qn == Just "w" && f (qName qn)-  let mbsectpr = filterElementName (wname (=="sectPr")) parsedDoc--  let sectpr = fromMaybe (mknode "w:sectPr" [] ()) mbsectpr-   let stdAttributes =             [("xmlns:w","http://schemas.openxmlformats.org/wordprocessingml/2006/main")             ,("xmlns:m","http://schemas.openxmlformats.org/officeDocument/2006/math")@@ -186,9 +257,6 @@             ,("xmlns:pic","http://schemas.openxmlformats.org/drawingml/2006/picture")             ,("xmlns:wp","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing")] -  let contents' = contents ++ [sectpr]-  let docContents = mknode "w:document" stdAttributes-                    $ mknode "w:body" [] contents'    parsedRels <- parseXml refArchive distArchive "word/_rels/document.xml.rels"   let isHeaderNode e = findAttr (QName "Type" Nothing Nothing) e == Just "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"@@ -255,7 +323,7 @@                                           [("Type",url')                                           ,("Id",id')                                           ,("Target",target')] ()-  let baserels = map toBaseRel+  let baserels' = map toBaseRel                     [("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",                       "rId1",                       "numbering.xml")@@ -277,8 +345,12 @@                     ,("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",                       "rId7",                       "footnotes.xml")-                    ] ++-                    headers ++ footers+                    ]++  let idMap = renumIdMap (length baserels' + 1) (headers ++ footers)+  let renumHeaders = renumIds (\q -> qName q == "Id") idMap headers+  let renumFooters = renumIds (\q -> qName q == "Id") idMap footers+  let baserels = baserels' ++ renumHeaders ++ renumFooters   let toImgRel (ident,path,_,_,_) =  mknode "Relationship" [("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"),("Id",ident),("Target",path)] ()   let imgrels = map toImgRel imgs   let toLinkRel (src,ident) =  mknode "Relationship" [("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"),("Id",ident),("Target",src),("TargetMode","External") ] ()@@ -288,6 +360,23 @@         $ renderXml reldoc  +  -- adjust contents to add sectPr from reference.docx+  let sectpr = case mbsectpr of+        Just sectpr' -> let cs = renumIds+                                 (\q -> qName q == "id" && qPrefix q == Just "r")+                                 idMap+                                 (elChildren sectpr')+                        in+                         add_attrs (elAttribs sectpr') $ mknode "w:sectPr" [] cs+        Nothing      -> (mknode "w:sectPr" [] ())++  -- let sectpr = fromMaybe (mknode "w:sectPr" [] ()) mbsectpr'+  let contents' = contents ++ [sectpr]+  let docContents = mknode "w:document" stdAttributes+                    $ mknode "w:body" [] contents'+++   -- word/document.xml   let contentEntry = toEntry "word/document.xml" epochtime                      $ renderXml docContents@@ -303,8 +392,6 @@    -- styles   let newstyles = styleToOpenXml $ writerHighlightStyle opts-  let stylepath = "word/styles.xml"-  styledoc <- parseXml refArchive distArchive stylepath   let styledoc' = styledoc{ elContent = elContent styledoc ++                   [Elem x | x <- newstyles, writerHighlight opts] }   let styleEntry = toEntry stylepath epochtime $ renderXml styledoc'@@ -556,8 +643,9 @@   return (header ++ rest) blockToOpenXML opts (Div _ bs) = blocksToOpenXML opts bs blockToOpenXML opts (Header lev (ident,_,_) lst) = do-  paraProps <- withParaProp (pStyle $ "Heading" ++ show lev) $-               getParaProps False+  headingStyles <- gets stHeadingStyles+  paraProps <- maybe id (withParaProp . pStyle) (lookup lev headingStyles) $+                    getParaProps False   contents <- inlinesToOpenXML opts lst   usedIdents <- gets stSectionIds   let bookmarkName = if null ident@@ -627,7 +715,8 @@   let mkgridcol w = mknode "w:gridCol"                        [("w:w", show (floor (textwidth * w) :: Integer))] ()   return $-    mknode "w:tbl" []+    caption' +++    [mknode "w:tbl" []       ( mknode "w:tblPr" []         (   mknode "w:tblStyle" [("w:val","TableNormal")] () :             mknode "w:tblW" [("w:type", "pct"), ("w:w", show rowwidth)] () :@@ -639,7 +728,7 @@             else map mkgridcol widths)       : [ mkrow True headers' | not (all null headers) ] ++       map (mkrow False) rows'-      ) : caption'+      )] blockToOpenXML opts (BulletList lst) = do   let marker = BulletMarker   addList marker@@ -883,6 +972,7 @@   return [ mknode "w:hyperlink" [("r:id",id')] contents ] inlineToOpenXML opts (Image alt (src, tit)) = do   -- first, check to see if we've already done this image+  pageWidth <- gets stPrintWidth   imgs <- gets stImages   case M.lookup src imgs of     Just (_,_,_,elt,_) -> return [elt]@@ -899,7 +989,7 @@           let size = imageSize img           let (xpt,ypt) = maybe (120,120) sizeInPoints size           -- 12700 emu = 1 pt-          let (xemu,yemu) = fitToPage (xpt * 12700, ypt * 12700)+          let (xemu,yemu) = fitToPage (xpt * 12700, ypt * 12700) (pageWidth * 12700)           let cNvPicPr = mknode "pic:cNvPicPr" [] $                            mknode "a:picLocks" [("noChangeArrowheads","1"),("noChangeAspect","1")] ()           let nvPicPr  = mknode "pic:nvPicPr" []@@ -966,9 +1056,11 @@             Nothing -> fail $ relpath ++ " corrupt or missing in reference docx"  -- | Scales the image to fit the page-fitToPage :: (Integer, Integer) -> (Integer, Integer)-fitToPage (x, y)-  --5440680 is the emu width size of a letter page in portrait, minus the margins-  | x > 5440680 =-    (5440680, round $ (5440680 / ((fromIntegral :: Integer -> Double) x)) * (fromIntegral y))+-- sizes are passed in emu+fitToPage :: (Integer, Integer) -> Integer -> (Integer, Integer)+fitToPage (x, y) pageWidth+  -- Fixes width to the page width and scales the height+  | x > pageWidth =+    (pageWidth, round $+      ((fromIntegral pageWidth) / ((fromIntegral :: Integer -> Double) x)) * (fromIntegral y))   | otherwise = (x, y)
src/Text/Pandoc/Writers/DokuWiki.hs view
@@ -134,7 +134,9 @@   let opt = if null txt                then ""                else "|" ++ if null tit then capt else tit ++ capt-  return $ "{{:" ++ src ++ opt ++ "}}\n"+      -- Relative links fail isURI and receive a colon+      prefix = if isURI src then "" else ":"+  return $ "{{" ++ prefix ++ src ++ opt ++ "}}\n"  blockToDokuWiki opts (Para inlines) = do   indent <- stIndent <$> ask@@ -178,7 +180,7 @@ blockToDokuWiki opts (BlockQuote blocks) = do   contents <- blockListToDokuWiki opts blocks   if isSimpleBlockQuote blocks-     then return $ "> " ++ contents+     then return $ unlines $ map ("> " ++) $ lines contents      else return $ "<HTML><blockquote>\n" ++ contents ++ "</blockquote></HTML>"  blockToDokuWiki opts (Table capt aligns _ headers rows) = do@@ -352,9 +354,7 @@ isPlainOrPara _         = False  isSimpleBlockQuote :: [Block] -> Bool-isSimpleBlockQuote [BlockQuote bs] = isSimpleBlockQuote bs-isSimpleBlockQuote [b] = isPlainOrPara b-isSimpleBlockQuote _   = False+isSimpleBlockQuote bs  = all isPlainOrPara bs  -- | Concatenates strings with line breaks between them. vcat :: [String] -> String@@ -480,7 +480,9 @@               ("", []) -> ""               ("", _ ) -> "|" ++ alt'               (_ , _ ) -> "|" ++ tit-  return $ "{{:" ++ source ++ txt ++ "}}"+      -- Relative links fail isURI and receive a colon+      prefix = if isURI source then "" else ":"+  return $ "{{" ++ prefix ++ source ++ txt ++ "}}"  inlineToDokuWiki opts (Note contents) = do   contents' <- blockListToDokuWiki opts contents
src/Text/Pandoc/Writers/EPUB.hs view
@@ -35,7 +35,7 @@ import Data.List ( isPrefixOf, isInfixOf, intercalate ) import System.Environment ( getEnv ) import Text.Printf (printf)-import System.FilePath ( (</>), takeExtension, takeFileName )+import System.FilePath ( takeExtension, takeFileName ) import qualified Data.ByteString.Lazy as B import qualified Data.ByteString.Lazy.Char8 as B8 import qualified Text.Pandoc.UTF8 as UTF8@@ -44,7 +44,7 @@ import Control.Applicative ((<$>)) import Data.Time.Clock.POSIX ( getPOSIXTime ) import Data.Time (getCurrentTime,UTCTime, formatTime)-import System.Locale ( defaultTimeLocale )+import Text.Pandoc.Compat.Locale ( defaultTimeLocale ) import Text.Pandoc.Shared ( trimr, renderTags', safeRead, uniqueIdent, trim                           , normalizeDate, readDataFile, stringify, warn                           , hierarchicalize, fetchItem' )@@ -64,7 +64,6 @@ import Text.Pandoc.UUID (getRandomUUID) import Text.Pandoc.Writers.HTML (writeHtmlString, writeHtml) import Data.Char ( toLower, isDigit, isAlphaNum )-import Network.URI ( unEscapeString ) import Text.Pandoc.MIME (MimeType, getMimeType) import qualified Control.Exception as E import Text.Blaze.Html.Renderer.Utf8 (renderHtml)@@ -344,7 +343,6 @@                   , writerStandalone = True                   , writerSectionDivs = True                   , writerHtml5 = epub3-                  , writerTableOfContents = False -- we always have one in epub                   , writerVariables = vars                   , writerHTMLMathMethod =                        if epub3@@ -359,8 +357,9 @@                      Nothing   -> return ([],[])                      Just img  -> do                        let coverImage = "media/" ++ takeFileName img-                       let cpContent = renderHtml $ writeHtml opts'-                               (Pandoc meta [RawBlock (Format "html") $ "<div id=\"cover-image\">\n<img src=\"" ++ coverImage ++ "\" alt=\"cover image\" />\n</div>"])+                       let cpContent = renderHtml $ writeHtml+                            opts'{ writerVariables = ("coverpage","true"):vars }+                            (Pandoc meta [RawBlock (Format "html") $ "<div id=\"cover-image\">\n<img src=\"" ++ coverImage ++ "\" alt=\"cover image\" />\n</div>"])                        imgContent <- B.readFile img                        return ( [mkEntry "cover.xhtml" cpContent]                               , [mkEntry coverImage imgContent] )@@ -406,7 +405,7 @@                 $ case blocks of                       (Header 1 _ _ : _) -> blocks                       _                  -> Header 1 ("",["unnumbered"],[])-                                                 (docTitle meta) : blocks+                                                 (docTitle' meta) : blocks    let chapterHeaderLevel = writerEpubChapterLevel opts   -- internal reference IDs change when we chunk the file,@@ -484,7 +483,7 @@                            [("id", toId $ eRelativePath ent),                             ("href", eRelativePath ent),                             ("media-type", fromMaybe "" $ getMimeType $ eRelativePath ent)] $ ()-  let plainTitle = case docTitle meta of+  let plainTitle = case docTitle' meta of                         [] -> case epubTitle metadata of                                    []   -> "UNTITLED"                                    (x:_) -> titleText x@@ -524,13 +523,12 @@                     Just _ -> [ unode "itemref" !                                 [("idref", "cover_xhtml"),("linear","no")] $ () ]               ++ ((unode "itemref" ! [("idref", "title_page_xhtml")-                                     ,("linear", if null (docTitle meta)-                                                    then "no"-                                                    else "yes")] $ ()) :-                  (unode "itemref" ! [("idref", "nav")-                                     ,("linear", if writerTableOfContents opts-                                                    then "yes"-                                                    else "no")] $ ()) :+                                     ,("linear",+                                         case lookupMeta "title" meta of+                                               Just _  -> "yes"+                                               Nothing -> "no")] $ ()) :+                  [unode "itemref" ! [("idref", "nav")] $ ()+                         | writerTableOfContents opts ] ++                   map chapterRefNode chapterEntries)           , unode "guide" $              [ unode "reference" !@@ -571,14 +569,13 @@    let navMapFormatter :: Int -> String -> String -> [Element] -> Element       navMapFormatter n tit src subs = unode "navPoint" !-               [("id", "navPoint-" ++ show n)-               ,("playOrder", show n)] $+               [("id", "navPoint-" ++ show n)] $                   [ unode "navLabel" $ unode "text" tit                   , unode "content" ! [("src", src)] $ ()                   ] ++ subs    let tpNode = unode "navPoint" !  [("id", "navPoint-0")] $-                  [ unode "navLabel" $ unode "text" (stringify $ docTitle meta)+                  [ unode "navLabel" $ unode "text" (stringify $ docTitle' meta)                   , unode "content" ! [("src","title_page.xhtml")] $ () ]    let tocData = UTF8.fromStringLazy $ ppTopElement $@@ -613,17 +610,35 @@                                                  (_:_) -> [unode "ol" ! [("class","toc")] $ subs]    let navtag = if epub3 then "nav" else "div"-  let navData = UTF8.fromStringLazy $ ppTopElement $-        unode "html" ! [("xmlns","http://www.w3.org/1999/xhtml")-                       ,("xmlns:epub","http://www.idpf.org/2007/ops")] $-          [ unode "head" $-            [ unode "title" plainTitle-            , unode "link" ! [("rel","stylesheet"),("type","text/css"),("href","stylesheet.css")] $ () ]-          , unode "body" $-              unode navtag ! [("epub:type","toc") | epub3] $-                [ unode "h1" ! [("id","toc-title")] $ plainTitle-                , unode "ol" ! [("class","toc")] $ evalState (mapM (navPointNode navXhtmlFormatter) secs) 1]-          ]+  let navBlocks = [RawBlock (Format "html") $ ppElement $+                   unode navtag ! ([("epub:type","toc") | epub3] +++                                   [("id","toc")]) $+                    [ unode "h1" ! [("id","toc-title")] $ plainTitle+                    , unode "ol" ! [("class","toc")] $ evalState (mapM (navPointNode navXhtmlFormatter) secs) 1]]+  let landmarks = if epub3+                     then [RawBlock (Format "html") $ ppElement $+                            unode "nav" ! [("epub:type","landmarks")+                                          ,("hidden","hidden")] $+                            [ unode "ol" $+                              [ unode "li"+                                [ unode "a" ! [("href", "cover.xhtml")+                                              ,("epub:type", "cover")] $+                                  "Cover"] |+                                  epubCoverImage metadata /= Nothing+                              ] +++                              [ unode "li"+                                [ unode "a" ! [("href", "#toc")+                                              ,("epub:type", "toc")] $+                                    "Table of contents"+                                ] | writerTableOfContents opts+                              ]+                            ]+                          ]+                     else []+  let navData = renderHtml $ writeHtml opts'+            (Pandoc (setMeta "title"+                     (walk removeNote $ fromList $ docTitle' meta) nullMeta)+               (navBlocks ++ landmarks))   let navEntry = mkEntry "nav.xhtml" navData    -- mimetype@@ -731,8 +746,8 @@         toTitleNode id' title           | version == EPUB2 = [dcNode "title" !              (("id",id') :-              maybe [] (\x -> [("opf:file-as",x)]) (titleFileAs title) ++-              maybe [] (\x -> [("opf:title-type",x)]) (titleType title)) $+              -- note: EPUB2 doesn't accept opf:title-type+              maybe [] (\x -> [("opf:file-as",x)]) (titleFileAs title)) $               titleText title]           | otherwise = [dcNode "title" ! [("id",id')] $ titleText title]               ++@@ -766,23 +781,20 @@ showDateTimeISO8601 :: UTCTime -> String showDateTimeISO8601 = formatTime defaultTimeLocale "%FT%TZ" -transformTag :: WriterOptions-             -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media+transformTag :: IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media              -> Tag String              -> IO (Tag String)-transformTag opts mediaRef tag@(TagOpen name attr)+transformTag mediaRef tag@(TagOpen name attr)   | name `elem` ["video", "source", "img", "audio"] = do   let src = fromAttrib "src" tag   let poster = fromAttrib "poster" tag-  let oldsrc = maybe src (</> src) $ writerSourceURL opts-  let oldposter = maybe poster (</> poster) $ writerSourceURL opts-  newsrc <- modifyMediaRef mediaRef oldsrc-  newposter <- modifyMediaRef mediaRef oldposter+  newsrc <- modifyMediaRef mediaRef src+  newposter <- modifyMediaRef mediaRef poster   let attr' = filter (\(x,_) -> x /= "src" && x /= "poster") attr ++               [("src", newsrc) | not (null newsrc)] ++               [("poster", newposter) | not (null newposter)]   return $ TagOpen name attr'-transformTag _ _ tag = return tag+transformTag _ tag = return tag  modifyMediaRef :: IORef [(FilePath, FilePath)] -> FilePath -> IO FilePath modifyMediaRef _ "" = return ""@@ -792,7 +804,7 @@          Just n  -> return n          Nothing -> do            let new = "media/file" ++ show (length media) ++-                    takeExtension oldsrc+                    takeExtension (takeWhile (/='?') oldsrc) -- remove query            modifyIORef mediaRef ( (oldsrc, new): )            return new @@ -800,10 +812,10 @@                 -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media                 -> Block                 -> IO Block-transformBlock opts mediaRef (RawBlock fmt raw)+transformBlock _ mediaRef (RawBlock fmt raw)   | fmt == Format "html" = do   let tags = parseTags raw-  tags' <- mapM (transformTag opts mediaRef)  tags+  tags' <- mapM (transformTag mediaRef)  tags   return $ RawBlock fmt (renderTags' tags') transformBlock _ _ b = return b @@ -811,19 +823,17 @@                  -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media                  -> Inline                  -> IO Inline-transformInline opts mediaRef (Image lab (src,tit)) = do-    let src' = unEscapeString src-    let oldsrc = maybe src' (</> src) $ writerSourceURL opts-    newsrc <- modifyMediaRef mediaRef oldsrc+transformInline _ mediaRef (Image lab (src,tit)) = do+    newsrc <- modifyMediaRef mediaRef src     return $ Image lab (newsrc, tit) transformInline opts _ (x@(Math _ _))   | WebTeX _ <- writerHTMLMathMethod opts = do     raw <- makeSelfContained opts $ writeHtmlInline opts x     return $ RawInline (Format "html") raw-transformInline opts mediaRef  (RawInline fmt raw)+transformInline _ mediaRef  (RawInline fmt raw)   | fmt == Format "html" = do   let tags = parseTags raw-  tags' <- mapM (transformTag opts mediaRef) tags+  tags' <- mapM (transformTag mediaRef) tags   return $ RawInline fmt (renderTags' tags') transformInline _ _ x = return x @@ -1192,3 +1202,16 @@            ,("writer of added text", "wat")            ] +docTitle' :: Meta -> [Inline]+docTitle' meta = fromMaybe [] $ go <$> lookupMeta "title" meta+  where go (MetaString s) = [Str s]+        go (MetaInlines xs) = xs+        go (MetaBlocks [Para xs]) = xs+        go (MetaBlocks [Plain xs]) = xs+        go (MetaMap m) =+              case M.lookup "type" m of+                   Just x | stringify x == "main" ->+                              maybe [] go $ M.lookup "text" m+                   _ -> []+        go (MetaList xs) = concatMap go xs+        go _ = []
src/Text/Pandoc/Writers/FB2.hs view
@@ -85,7 +85,7 @@      (imgs,missing) <- liftM imagesToFetch get >>= \s -> liftIO (fetchImages s)      let body' = replaceImagesWithAlt missing body      let fb2_xml = el "FictionBook" (fb2_attrs, [desc, body'] ++ notes ++ imgs)-     return $ xml_head ++ (showContent fb2_xml)+     return $ xml_head ++ (showContent fb2_xml) ++ "\n"   where   xml_head = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"   fb2_attrs =
src/Text/Pandoc/Writers/HTML.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings, CPP #-}+{-# LANGUAGE OverloadedStrings, CPP, ViewPatterns #-} {-# OPTIONS_GHC -fno-warn-deprecations #-} {- Copyright (C) 2006-2014 John MacFarlane <jgm@berkeley.edu>@@ -60,6 +60,8 @@ import Text.Blaze.Renderer.String (renderHtml) import Text.TeXMath import Text.XML.Light.Output+import Text.XML.Light (unode, elChildren, unqual)+import qualified Text.XML.Light as XML import System.FilePath (takeExtension) import Data.Monoid import Data.Aeson (Value)@@ -71,11 +73,13 @@     , stQuotes           :: Bool    -- ^ <q> tag is used     , stHighlighting     :: Bool    -- ^ Syntax highlighting is used     , stSecNum           :: [Int]   -- ^ Number of current section+    , stElement          :: Bool    -- ^ Processing an Element     }  defaultWriterState :: WriterState defaultWriterState = WriterState {stNotes= [], stMath = False, stQuotes = False,-                                  stHighlighting = False, stSecNum = []}+                                  stHighlighting = False, stSecNum = [],+                                  stElement = False}  -- Helpers to render HTML with the appropriate function. @@ -155,6 +159,10 @@                               H.script ! A.src (toValue url)                                        ! A.type_ "text/javascript"                                        $ mempty+                           KaTeX js css ->+                              (H.script ! A.src (toValue js) $ mempty) <>+                              (H.link ! A.rel "stylesheet" ! A.href (toValue css)) <>+                              (H.script ! A.type_ "text/javascript" $ toHtml renderKaTeX)                            _ -> case lookup "mathml-script" (writerVariables opts) of                                       Just s | not (writerHtml5 opts) ->                                         H.script ! A.type_ "text/javascript"@@ -274,7 +282,13 @@   let titleSlide = slide && level < slideLevel   header' <- if title' == [Str "\0"]  -- marker for hrule                 then return mempty-                else blockToHtml opts (Header level' (id',classes,keyvals) title')+                else do+                  modify (\st -> st{ stElement = True})+                  res <- blockToHtml opts+                           (Header level' (id',classes,keyvals) title')+                  modify (\st -> st{ stElement = False})+                  return res+   let isSec (Sec _ _ _ _ _) = True       isSec (Blk _)         = False   let isPause (Blk x) = x == Para [Str ".",Space,Str ".",Space,Str "."]@@ -342,10 +356,10 @@        _ -> fail "not a mailto: URL"  -- | Obfuscate a "mailto:" link.-obfuscateLink :: WriterOptions -> String -> String -> Html+obfuscateLink :: WriterOptions -> Html -> String -> Html obfuscateLink opts txt s | writerEmailObfuscation opts == NoObfuscation =-  H.a ! A.href (toValue s) $ toHtml txt-obfuscateLink opts txt s =+  H.a ! A.href (toValue s) $ txt+obfuscateLink opts (renderHtml -> txt) s =   let meth = writerEmailObfuscation opts       s' = map toLower (take 7 s) ++ drop 7 s   in  case parseMailto s' of@@ -424,7 +438,7 @@               then H5.figure $ mconcat                     [nl opts, img, capt, nl opts]               else H.div ! A.class_ "figure" $ mconcat-                    [nl opts, img, capt, nl opts]+                    [nl opts, img, nl opts, capt, nl opts] blockToHtml opts (Para lst) = do   contents <- inlineListToHtml opts lst   return $ H.p contents@@ -485,7 +499,7 @@      else do        contents <- blockListToHtml opts blocks        return $ H.blockquote $ nl opts >> contents >> nl opts-blockToHtml opts (Header level (_,classes,_) lst) = do+blockToHtml opts (Header level attr@(_,classes,_) lst) = do   contents <- inlineListToHtml opts lst   secnum <- liftM stSecNum get   let contents' = if writerNumberSections opts && not (null secnum)@@ -493,7 +507,9 @@                      then (H.span ! A.class_ "header-section-number" $ toHtml                           $ showSecNum secnum) >> strToHtml " " >> contents                      else contents-  return $ case level of+  inElement <- gets stElement+  return $ (if inElement then id else addAttrs opts attr)+         $ case level of               1 -> H.h1 contents'               2 -> H.h2 contents'               3 -> H.h3 contents'@@ -615,6 +631,20 @@ inlineListToHtml opts lst =   mapM (inlineToHtml opts) lst >>= return . mconcat +-- | Annotates a MathML expression with the tex source+annotateMML :: XML.Element -> String -> XML.Element+annotateMML e tex = math (unode "semantics" [cs, unode "annotation" (annotAttrs, tex)])+  where+    cs = case elChildren e of+          [] -> unode "mrow" ()+          [x] -> x+          xs -> unode "mrow" xs+    math childs = XML.Element q as [XML.Elem childs] l+      where+        (XML.Element q as _ l) = e+    annotAttrs = [XML.Attr (unqual "encoding") "application/x-tex"]++ -- | Convert Pandoc inline element to HTML. inlineToHtml :: WriterOptions -> Inline -> State WriterState Html inlineToHtml opts inline =@@ -706,7 +736,7 @@                                                defaultConfigPP                                   case writeMathML dt <$> readTeX str of                                         Right r  -> return $ preEscapedString $-                                            ppcElement conf r+                                            ppcElement conf (annotateMML r str)                                         Left _   -> inlineListToHtml opts                                             (texMathToInlines t str) >>=                                             return .  (H.span ! A.class_ "math")@@ -714,6 +744,10 @@                                   case t of                                     InlineMath  -> "\\(" ++ str ++ "\\)"                                     DisplayMath -> "\\[" ++ str ++ "\\]"+                               KaTeX _ _ -> return $ H.span ! A.class_ "math" $+                                  toHtml (case t of+                                            InlineMath -> str+                                            DisplayMath -> "\\displaystyle " ++ str)                                PlainMath -> do                                   x <- inlineListToHtml opts (texMathToInlines t str)                                   let m = H.span ! A.class_ "math" $ x@@ -731,7 +765,7 @@       | otherwise          -> return mempty     (Link txt (s,_)) | "mailto:" `isPrefixOf` s -> do                         linkText <- inlineListToHtml opts txt-                        return $ obfuscateLink opts (renderHtml linkText) s+                        return $ obfuscateLink opts linkText s     (Link txt (s,tit)) -> do                         linkText <- inlineListToHtml opts txt                         let s' = case s of@@ -815,3 +849,14 @@                               Just EPUB3 -> noteItem ! customAttribute "epub:type" "footnote"                               _          -> noteItem          return $ nl opts >> noteItem'++-- Javascript snippet to render all KaTeX elements+renderKaTeX :: String+renderKaTeX = unlines [+    "window.onload = function(){var mathElements = document.getElementsByClassName(\"math\");"+  , "for (var i=0; i < mathElements.length; i++)"+  , "{"+  , " var texText = mathElements[i].firstChild"+  , " katex.render(texText.data, mathElements[i])"+  , "}}"+  ]
src/Text/Pandoc/Writers/ICML.hs view
@@ -399,7 +399,7 @@ 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 (Cite _ lst) = footnoteToICML opts style [Para lst]+inlineToICML opts style (Cite _ lst) = inlinesToICML opts style lst inlineToICML _    style (Code _ str) = charStyle (codeName:style) $ text $ escapeStringForXML str inlineToICML _    style Space = charStyle style space inlineToICML _ style LineBreak = charStyle style $ text lineSeparator
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -54,6 +54,7 @@   WriterState { stInNote        :: Bool          -- true if we're in a note               , stInQuote       :: Bool          -- true if in a blockquote               , stInMinipage    :: Bool          -- true if in minipage+              , stInHeading     :: Bool          -- true if in a section heading               , stNotes         :: [Doc]         -- notes in a minipage               , stOLLevel       :: Int           -- level of ordered list nesting               , stOptions       :: WriterOptions -- writer options, so they don't have to be parameter@@ -76,9 +77,9 @@ writeLaTeX options document =   evalState (pandocToLaTeX options document) $   WriterState { stInNote = False, stInQuote = False,-                stInMinipage = False, stNotes = [],-                stOLLevel = 1, stOptions = options,-                stVerbInNote = False,+                stInMinipage = False, stInHeading = False,+                stNotes = [], stOLLevel = 1,+                stOptions = options, stVerbInNote = False,                 stTable = False, stStrikeout = False,                 stUrl = False, stGraphics = False,                 stLHS = False, stBook = writerChapters options,@@ -179,7 +180,9 @@ elementToLaTeX :: WriterOptions -> Element -> State WriterState Doc elementToLaTeX _ (Blk block) = blockToLaTeX block elementToLaTeX opts (Sec level _ (id',classes,_) title' elements) = do+  modify $ \s -> s{stInHeading = True}   header' <- sectionHeader ("unnumbered" `elem` classes) id' level title'+  modify $ \s -> s{stInHeading = False}   innerContents <- mapM (elementToLaTeX opts) elements   return $ vsep (header' : innerContents) @@ -466,8 +469,11 @@                "\\end{description}" blockToLaTeX HorizontalRule = return $   "\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}"-blockToLaTeX (Header level (id',classes,_) lst) =-  sectionHeader ("unnumbered" `elem` classes) id' level lst+blockToLaTeX (Header level (id',classes,_) lst) = do+  modify $ \s -> s{stInHeading = True}+  hdr <- sectionHeader ("unnumbered" `elem` classes) id' level lst+  modify $ \s -> s{stInHeading = False}+  return hdr blockToLaTeX (Table caption aligns widths heads rows) = do   headers <- if all null heads                 then return empty@@ -539,10 +545,16 @@   where tohbox ys = RawInline "tex" "\\hbox{\\strut " : ys ++                     [RawInline "tex" "}"] +-- We also change display math to inline math, since display+-- math breaks in simple tables.+displayMathToInline :: Inline -> Inline+displayMathToInline (Math DisplayMath x) = Math InlineMath x+displayMathToInline x = x+ tableCellToLaTeX :: Bool -> (Double, Alignment, [Block])                  -> State WriterState Doc tableCellToLaTeX _      (0,     _,     blocks) =-  blockListToLaTeX $ walk fixLineBreaks blocks+  blockListToLaTeX $ walk fixLineBreaks $ walk displayMathToInline blocks tableCellToLaTeX header (width, align, blocks) = do   modify $ \st -> st{ stInMinipage = True, stNotes = [] }   cellContents <- blockListToLaTeX blocks@@ -572,7 +584,13 @@                           $ reverse ns)  listItemToLaTeX :: [Block] -> State WriterState Doc-listItemToLaTeX lst = blockListToLaTeX lst >>= return .  (text "\\item" $$) .+listItemToLaTeX lst+  -- we need to put some text before a header if it's the first+  -- element in an item. This will look ugly in LaTeX regardless, but+  -- this will keep the typesetter from throwing an error.+  | ((Header _ _ _) :_) <- lst =+    blockListToLaTeX lst >>= return . (text "\\item ~" $$) . (nest 2)+  | otherwise = blockListToLaTeX lst >>= return .  (text "\\item" $$) .                       (nest 2)  defListItemToLaTeX :: ([Inline], [[Block]]) -> State WriterState Doc@@ -586,7 +604,11 @@                     then braces term'                     else term'     def'  <- liftM vsep $ mapM blockListToLaTeX defs-    return $ "\\item" <> brackets term'' $$ def'+    return $ case defs of+     (((Header _ _ _) : _) : _) ->+       "\\item" <> brackets term'' <> " ~ " $$ def'+     _                          ->+       "\\item" <> brackets term'' $$ def'  -- | Craft the section header, inserting the secton reference, if supplied. sectionHeader :: Bool    -- True for unnumbered@@ -597,6 +619,7 @@ sectionHeader unnumbered ref level lst = do   txt <- inlineListToLaTeX lst   lab <- text `fmap` toLabel ref+  plain <- stringToLaTeX TextString $ foldl (++) "" $ map stringify lst   let noNote (Note _) = Str ""       noNote x        = x   let lstNoNotes = walk noNote lst@@ -609,7 +632,12 @@                  then return empty                  else do                    return $ brackets txtNoNotes-  let stuffing = star <> optional <> braces txt+  let contents = if render Nothing txt == plain+                    then braces txt+                    else braces (text "\\texorpdfstring"+                         <> braces txt+                         <> braces (text plain))+  let stuffing = star <> optional <> contents   book <- gets stBook   opts <- gets stOptions   let level' = if book || writerChapters opts then level - 1 else level@@ -653,7 +681,7 @@ inlineListToLaTeX :: [Inline]  -- ^ Inlines to convert                   -> State WriterState Doc inlineListToLaTeX lst =-  mapM inlineToLaTeX (fixLineInitialSpaces lst)+  mapM inlineToLaTeX (fixBreaks $ fixLineInitialSpaces lst)     >>= return . hcat     -- nonbreaking spaces (~) in LaTeX don't work after line breaks,     -- so we turn nbsps after hard breaks to \hspace commands.@@ -665,7 +693,15 @@        fixNbsps s = let (ys,zs) = span (=='\160') s                     in  replicate (length ys) hspace ++ [Str zs]        hspace = RawInline "latex" "\\hspace*{0.333em}"-+       -- linebreaks after blank lines cause problems:+       fixBreaks [] = []+       fixBreaks ys@(LineBreak : LineBreak : _) =+         case span (== LineBreak) ys of+               (lbs, rest) -> RawInline "latex"+                               ("\\\\[" ++ show (length lbs) +++                                "\\baselineskip]") : fixBreaks rest+       fixBreaks (y:ys) = y : fixBreaks ys+  isQuoted :: Inline -> Bool isQuoted (Quoted _ _) = True isQuoted _ = False@@ -721,15 +757,19 @@    where listingsCode = do            inNote <- gets stInNote            when inNote $ modify $ \s -> s{ stVerbInNote = True }-           let chr = ((enumFromTo '!' '~') \\ str) !! 0+           let chr = case "!\"&'()*,-./:;?@_" \\ str of+                          (c:_) -> c+                          []    -> '!'            return $ text $ "\\lstinline" ++ [chr] ++ str ++ [chr]          highlightCode = do            case highlight formatLaTeXInline ("",classes,[]) str of                   Nothing -> rawCode                   Just  h -> modify (\st -> st{ stHighlighting = True }) >>                              return (text h)-         rawCode = liftM (text . (\s -> "\\texttt{" ++ s ++ "}"))+         rawCode = liftM (text . (\s -> "\\texttt{" ++ escapeSpaces s ++ "}"))                           $ stringToLaTeX CodeString str+           where+             escapeSpaces =  concatMap (\c -> if c == ' ' then "\\ " else [c]) inlineToLaTeX (Quoted qt lst) = do   contents <- inlineListToLaTeX lst   csquotes <- liftM stCsquotes get@@ -791,7 +831,10 @@                    then source                    else unEscapeString source   source'' <- stringToLaTeX URLString source'-  return $ "\\includegraphics" <> braces (text source'')+  inHeading <- gets stInHeading+  return $+    (if inHeading then "\\protect\\includegraphics" else "\\includegraphics")+    <> braces (text source'') inlineToLaTeX (Note contents) = do   inMinipage <- gets stInMinipage   modify (\s -> s{stInNote = True})
src/Text/Pandoc/Writers/MediaWiki.hs view
@@ -382,7 +382,7 @@ inlineToMediaWiki (Link txt (src, _)) = do   label <- inlineListToMediaWiki txt   case txt of-     [Str s] | escapeURI s == src -> return src+     [Str s] | isURI src && escapeURI s == src -> return src      _  -> return $ if isURI src               then "[" ++ src ++ " " ++ label ++ "]"               else "[[" ++ src' ++ "|" ++ label ++ "]]"
src/Text/Pandoc/Writers/ODT.hs view
@@ -41,7 +41,7 @@ import Text.Pandoc.Options ( WriterOptions(..) ) import Text.Pandoc.Shared ( stringify, readDataFile, fetchItem', warn ) import Text.Pandoc.ImageSize ( imageSize, sizeInPoints )-import Text.Pandoc.MIME ( getMimeType )+import Text.Pandoc.MIME ( getMimeType, extensionFromMimeType ) import Text.Pandoc.Definition import Text.Pandoc.Walk import Text.Pandoc.Writers.Shared ( fixDisplayMath )@@ -51,7 +51,7 @@ import Text.Pandoc.Pretty import qualified Control.Exception as E import Data.Time.Clock.POSIX ( getPOSIXTime )-import System.FilePath ( takeExtension, takeDirectory )+import System.FilePath ( takeExtension, takeDirectory, (<.>))  -- | Produce an ODT file from a Pandoc document. writeODT :: WriterOptions  -- ^ Writer options@@ -133,12 +133,14 @@      Left (_ :: E.SomeException) -> do        warn $ "Could not find image `" ++ src ++ "', skipping..."        return $ Emph lab-     Right (img, _) -> do+     Right (img, mbMimeType) -> do        let size = imageSize img        let (w,h) = fromMaybe (0,0) $ sizeInPoints `fmap` size        let tit' = show w ++ "x" ++ show h        entries <- readIORef entriesRef-       let newsrc = "Pictures/" ++ show (length entries) ++ takeExtension src+       let extension = fromMaybe (takeExtension $ takeWhile (/='?') src)+                           (mbMimeType >>= extensionFromMimeType)+       let newsrc = "Pictures/" ++ show (length entries) <.> extension        let toLazy = B.fromChunks . (:[])        epochtime <- floor `fmap` getPOSIXTime        let entry = toEntry newsrc epochtime $ toLazy img
src/Text/Pandoc/Writers/OPML.hs view
@@ -38,7 +38,7 @@ import Text.Pandoc.Writers.Markdown (writeMarkdown) import Text.Pandoc.Pretty import Data.Time-import System.Locale (defaultTimeLocale)+import Text.Pandoc.Compat.Locale (defaultTimeLocale) import qualified Text.Pandoc.Builder as B  -- | Convert Pandoc document to string in OPML format.@@ -87,4 +87,3 @@                 | not (null blocks)]   in  inTags True "outline" attrs $       vcat (map (elementToOPML opts) rest)-
src/Text/Pandoc/Writers/RST.hs view
@@ -173,11 +173,11 @@   capt <- inlineListToRST txt   let fig = "figure:: " <> text src   let alt = ":alt: " <> if null tit then capt else text tit-  return $ hang 3 ".. " $ fig $$ alt $+$ capt $$ blankline+  return $ hang 3 ".. " (fig $$ alt $+$ capt) $$ blankline blockToRST (Para inlines)   | LineBreak `elem` inlines = do -- use line block if LineBreaks       lns <- mapM inlineListToRST $ splitBy (==LineBreak) inlines-      return $ (vcat $ map (text "| " <>) lns) <> blankline+      return $ (vcat $ map (hang 2 (text "| ")) lns) <> blankline   | otherwise = do       contents <- inlineListToRST inlines       return $ contents <> blankline@@ -239,8 +239,7 @@               middle = hcat $ intersperse sep' blocks   let makeRow = hpipeBlocks . zipWith lblock widthsInChars   let head' = makeRow headers'-  rows' <- mapM (\row -> do cols <- mapM blockListToRST row-                            return $ makeRow cols) rows+  let rows' = map makeRow rawRows   let border ch = char '+' <> char ch <>                   (hcat $ intersperse (char ch <> char '+' <> char ch) $                           map (\l -> text $ replicate l ch) widthsInChars) <>@@ -253,7 +252,7 @@ blockToRST (BulletList items) = do   contents <- mapM bulletListItemToRST items   -- ensure that sublists have preceding blank line-  return $ blankline $$ vcat contents $$ blankline+  return $ blankline $$ chomp (vcat contents) $$ blankline blockToRST (OrderedList (start, style', delim) items) = do   let markers = if start == 1 && style' == DefaultStyle && delim == DefaultDelim                    then take (length items) $ repeat "#."@@ -265,11 +264,11 @@   contents <- mapM (\(item, num) -> orderedListItemToRST item num) $               zip markers' items   -- ensure that sublists have preceding blank line-  return $ blankline $$ vcat contents $$ blankline+  return $ blankline $$ chomp (vcat contents) $$ blankline blockToRST (DefinitionList items) = do   contents <- mapM definitionListItemToRST items   -- ensure that sublists have preceding blank line-  return $ blankline $$ vcat contents $$ blankline+  return $ blankline $$ chomp (vcat contents) $$ blankline  -- | Convert bullet list item (list of blocks) to RST. bulletListItemToRST :: [Block] -> State WriterState Doc@@ -427,7 +426,7 @@   return $ "|" <> label <> "|" inlineToRST (Note contents) = do   -- add to notes in state-  notes <- get >>= return . stNotes+  notes <- gets stNotes   modify $ \st -> st { stNotes = contents:notes }   let ref = show $ (length notes) + 1   return $ " [" <> text ref <> "]_"
src/Text/Pandoc/Writers/RTF.hs view
@@ -106,7 +106,9 @@               $ metadata   in  if writerStandalone options          then renderTemplate' (writerTemplate options) context-         else body+         else case reverse body of+                ('\n':_) -> body+                _        -> body ++ "\n"  -- | Construct table of contents from list of header blocks. tableOfContents :: [Block] -> String
tests/Tests/Old.hs view
@@ -130,6 +130,8 @@             "dokuwiki_inline_formatting.native" "dokuwiki_inline_formatting.dokuwiki"           , test "multiblock table" ["-r", "native", "-w", "dokuwiki", "-s"]             "dokuwiki_multiblock_table.native" "dokuwiki_multiblock_table.dokuwiki"+          , test "external images" ["-r", "native", "-w", "dokuwiki", "-s"]+            "dokuwiki_external_images.native" "dokuwiki_external_images.dokuwiki"           ]         , testGroup "opml"           [ test "basic" ["-r", "native", "-w", "opml", "--columns=78", "-s"]@@ -153,6 +155,9 @@           , test "formatting" ["-r", "epub", "-w", "native"]               "epub/formatting.epub" "epub/formatting.native"           ]+        , testGroup "twiki"+          [ test "reader" ["-r", "twiki", "-w", "native", "-s"]+              "twiki-reader.twiki" "twiki-reader.native" ]         , testGroup "other writers" $ map (\f -> testGroup f $ writerTests f)           [ "opendocument" , "context" , "texinfo", "icml"           , "man" , "plain" , "rtf", "org", "asciidoc"
tests/Tests/Readers/Docx.hs view
@@ -13,7 +13,6 @@ import qualified Data.Map as M import Text.Pandoc.MediaBag (MediaBag, lookupMedia, mediaDirectory) import Codec.Archive.Zip-import System.FilePath (combine)  -- We define a wrapper around pandoc that doesn't normalize in the -- tests. Since we do our own normalization, we want to make sure@@ -60,7 +59,7 @@ getMedia :: FilePath -> FilePath -> IO (Maybe B.ByteString) getMedia archivePath mediaPath = do   zf <- B.readFile archivePath >>= return . toArchive-  return $ findEntryByPath (combine "word" mediaPath) zf >>= (Just . fromEntry)+  return $ findEntryByPath ("word/" ++ mediaPath) zf >>= (Just . fromEntry)  compareMediaPathIO :: FilePath -> MediaBag -> FilePath -> IO Bool compareMediaPathIO mediaPath mediaBag docxPath = do@@ -152,6 +151,14 @@             "headers already having auto identifiers"             "docx/already_auto_ident.docx"             "docx/already_auto_ident.native"+          , testCompare+            "numbered headers automatically made into list"+            "docx/numbered_header.docx"+            "docx/numbered_header.native"+          , testCompare+            "i18n blocks (headers and blockquotes)"+            "docx/i18n_blocks.docx"+            "docx/i18n_blocks.native"           , testCompare             "lists"             "docx/lists.docx"
tests/Tests/Readers/EPUB.hs view
@@ -8,6 +8,7 @@ import Text.Pandoc.Readers.EPUB import Text.Pandoc.MediaBag (MediaBag, mediaDirectory) import Control.Applicative+import System.FilePath (joinPath)  getMediaBag :: FilePath -> IO MediaBag getMediaBag fp = snd . readEPUB def <$> BL.readFile fp@@ -22,12 +23,12 @@              (actBag == bag)  featuresBag :: [(String, String, Int)]-featuresBag = [("img/ElementaryMathExample.png","image/png",1331),("img/Maghreb1.png","image/png",2520),("img/check.gif","image/gif",1340),("img/check.jpg","image/jpeg",2661),("img/check.png","image/png",2815),("img/cichons_diagram.png","image/png",7045),("img/complex_number.png","image/png",5238),("img/multiscripts_and_greek_alphabet.png","image/png",10060)]+featuresBag = [(joinPath ["img","check.gif"],"image/gif",1340),(joinPath ["img","check.jpg"],"image/jpeg",2661),(joinPath ["img","check.png"],"image/png",2815),(joinPath ["img","multiscripts_and_greek_alphabet.png"],"image/png",10060)]  tests :: [Test] tests =   [ testGroup "EPUB Mediabag"     [ testCase "features bag"-      (testMediaBag "epub/features.epub" featuresBag)+      (testMediaBag "epub/img.epub" featuresBag)     ]   ]
tests/Tests/Readers/Markdown.hs view
@@ -20,6 +20,9 @@ markdownCDL = readMarkdown def { readerExtensions = Set.insert                  Ext_compact_definition_lists $ readerExtensions def } +markdownGH :: String -> Pandoc+markdownGH = readMarkdown def { readerExtensions = githubMarkdownExtensions }+ infix 4 =: (=:) :: ToString c      => String -> (String, c) -> Test@@ -184,6 +187,11 @@           ]         , testGroup "bare URIs"           (map testBareLink bareLinkTests)+        , testGroup "autolinks"+          [ "with unicode dash following" =:+            "<http://foo.bar>\8212" =?> para (autolink "http://foo.bar" <>+                                         str "\8212")+          ]         , testGroup "Headers"           [ "blank line before header" =:             "\n# Header\n"@@ -266,10 +274,19 @@         , testGroup "lists"           [ "issue #1154" =:               " -  <div>\n    first div breaks\n    </div>\n\n    <button>if this button exists</button>\n\n    <div>\n    with this div too.\n    </div>\n"-              =?> bulletList [divWith nullAttr (plain $ text "first div breaks") <>+              =?> bulletList [divWith nullAttr (para $ text "first div breaks") <>                               rawBlock "html" "<button>" <>                               plain (text "if this button exists") <>                               rawBlock "html" "</button>" <>-                              divWith nullAttr (plain $ text "with this div too.")]+                              divWith nullAttr (para $ text "with this div too.")]+          , test markdownGH "issue #1636" $+              unlines [ "* a"+                      , "* b"+                      , "* c"+                      , "    * d" ]+              =?>+              bulletList [ plain "a"+                         , plain "b"+                         , plain "c" <> bulletList [plain "d"] ]           ]         ]
tests/Tests/Readers/Org.hs view
@@ -4,7 +4,6 @@ import Text.Pandoc.Definition import Test.Framework import Tests.Helpers-import Tests.Arbitrary() import Text.Pandoc.Builder import Text.Pandoc import Data.List (intersperse)@@ -126,6 +125,18 @@                        , (emph "b") <> "."                        ]) +      , "Quotes are forbidden border chars" =:+          "/'nope/ *nope\"*" =?>+          para ("/'nope/" <> space <> "*nope\"*")++      , "Commata are forbidden border chars" =:+          "/nada,/" =?>+          para "/nada,/"++      , "Markup should work properly after a blank line" =:+        unlines ["foo", "", "/bar/"] =?>+        (para $ text "foo") <> (para $ emph $ text "bar")+       , "Inline math must stay within three lines" =:           unlines [ "$a", "b", "c$", "$d", "e", "f", "g$" ] =?>           para ((math "a\nb\nc") <> space <>@@ -185,6 +196,18 @@           "[[http://zeitlens.com/]]" =?>           (para $ link "http://zeitlens.com/" "" "http://zeitlens.com/") +      , "Absolute file link" =:+          "[[/url][hi]]" =?>+          (para $ link "file:///url" "" "hi")++      , "Link to file in parent directory" =:+          "[[../file.txt][moin]]" =?>+          (para $ link "../file.txt" "" "moin")++      , "Empty link (for gitit interop)" =:+          "[[][New Link]]" =?>+          (para $ link "" "" "New Link")+       , "Image link" =:           "[[sunset.png][dusk.svg]]" =?>           (para $ link "sunset.png" "" (image "dusk.svg" "" ""))@@ -203,6 +226,14 @@                          , "for", "fnords."                          ]) +      , "Absolute file link" =:+          "[[file:///etc/passwd][passwd]]" =?>+          (para $ link "file:///etc/passwd" "" "passwd")++      , "File link" =:+          "[[file:target][title]]" =?>+          (para $ link "target" "" "title")+       , "Anchor" =:           "<<anchor>> Link here later." =?>           (para $ spanWith ("anchor", [], []) mempty <>@@ -264,6 +295,18 @@           "\\notacommand{foo}" =?>           para (rawInline "latex" "\\notacommand{foo}") +      , "MathML symbol in LaTeX-style" =:+          "There is a hackerspace in Lübeck, Germany, called nbsp (unicode symbol: '\\nbsp')." =?>+          para ("There is a hackerspace in Lübeck, Germany, called nbsp (unicode symbol: ' ').")++      , "MathML symbol in LaTeX-style, including braces" =:+          "\\Aacute{}stor" =?>+          para "Ástor"++      , "MathML copy sign" =:+          "\\copy" =?>+          para "©"+       , "LaTeX citation" =:           "\\cite{Coffee}" =?>           let citation = Citation@@ -446,6 +489,18 @@                   , header 2 ("walk" <> space <> "dog")                   ] +      , "Comment Trees" =:+          unlines [ "* COMMENT A comment tree"+                  , "  Not much going on here"+                  , "** This will be dropped"+                  , "* Comment tree above"+                  ] =?>+          header 1 "Comment tree above"++      , "Nothing but a COMMENT header" =:+          "* COMMENT Test" =?>+          (mempty::Blocks)+       , "Paragraph starting with an asterisk" =:           "*five" =?>           para "*five"@@ -574,6 +629,13 @@                      , plain "Item2"                      ] +      , "Unindented *" =:+          ("- Item1\n" +++           "* Item2\n") =?>+          bulletList [ plain "Item1"+                     ] <>+          header 1 "Item2"+       , "Multi-line Bullet Lists" =:           ("- *Fat\n" ++            "  Tony*\n" ++@@ -618,6 +680,33 @@                        ]                      ] +      , "Bullet List with Decreasing Indent" =:+           ("  - Discovery\n\+            \ - Human After All\n") =?>+           mconcat [ bulletList [ plain "Discovery" ]+                   , bulletList [ plain ("Human" <> space <> "After" <> space <> "All")]+                   ]++      , "Header follows Bullet List" =:+          ("  - Discovery\n\+           \  - Human After All\n\+           \* Homework") =?>+          mconcat [ bulletList [ plain "Discovery"+                               , plain ("Human" <> space <> "After" <> space <> "All")+                               ]+                  , header 1 "Homework"+                  ]++      , "Bullet List Unindented with trailing Header" =:+          ("- Discovery\n\+           \- Homework\n\+           \* NotValidListItem") =?>+          mconcat [ bulletList [ plain "Discovery"+                               , plain "Homework"+                               ]+                  , header 1 "NotValidListItem"+                  ]+       , "Simple Ordered List" =:           ("1. Item1\n" ++            "2. Item2\n") =?>@@ -698,7 +787,9 @@                                      ]                                    ])                          ]-+      , "Definition list with multi-word term" =:+        " - Elijah Wood :: He plays Frodo" =?>+         definitionList [ ("Elijah" <> space <> "Wood", [plain $ "He" <> space <> "plays" <> space <> "Frodo"])]       , "Compact definition list" =:           unlines [ "- ATP :: adenosine 5' triphosphate"                   , "- DNA :: deoxyribonucleic acid"@@ -711,6 +802,16 @@           , ("PCR", [ plain $ spcSep [ "polymerase", "chain", "reaction" ] ])           ] +      , "Definition List With Trailing Header" =:+          "- definition :: list\n\+          \- cool :: defs\n\+          \* header" =?>+          mconcat [ definitionList [ ("definition", [plain "list"])+                                   , ("cool", [plain "defs"])+                                   ]+                  , header 1 "header"+                  ]+       , "Loose bullet list" =:           unlines [ "- apple"                   , ""@@ -944,7 +1045,7 @@                    , ""                    , "#+RESULTS:"                    , ": 65" ] =?>-           rawBlock "html" ""   +           rawBlock "html" ""        , "Example block" =:            unlines [ "#+begin_example"
tests/Tests/Readers/RST.hs view
@@ -67,5 +67,45 @@                 link "http://foo.bar.baz" "" "http://foo.bar.baz" <> ". " <>                 link "http://foo.bar/baz_(bam)" "" "http://foo.bar/baz_(bam)"                 <> " (" <> link "http://foo.bar" "" "http://foo.bar" <> ")")+        , testGroup "literal / line / code blocks"+          [ "indented literal block" =: unlines+            [ "::"+            , ""+            , "  block quotes"+            , ""+            , "  can go on for many lines"+            , "but must stop here"]+            =?> (doc $+                 codeBlock "block quotes\n\ncan go on for many lines" <>+                 para "but must stop here")+          , "line block with 3 lines" =: "| a\n| b\n| c"+            =?> para ("a" <> linebreak <>  "b" <> linebreak <> "c")+          , "quoted literal block using >" =: "::\n\n> quoted\n> block\n\nOrdinary paragraph"+            =?> codeBlock "> quoted\n> block" <> para "Ordinary paragraph"+          , "quoted literal block using | (not  a line block)" =: "::\n\n| quoted\n| block\n\nOrdinary paragraph"+            =?> codeBlock "| quoted\n| block" <> para "Ordinary paragraph"+          , "class directive with single paragraph" =: ".. class:: special\n\nThis is a \"special\" paragraph."+            =?> divWith ("", ["special"], []) (para "This is a \"special\" paragraph.")+          , "class directive with two paragraphs" =: ".. class:: exceptional remarkable\n\n    First paragraph.\n\n    Second paragraph."+            =?> divWith ("", ["exceptional", "remarkable"], []) (para "First paragraph." <> para "Second paragraph.")+          , "class directive around literal block" =: ".. class:: classy\n\n::\n\n    a\n    b"+            =?> divWith ("", ["classy"], []) (codeBlock "a\nb")]+        , testGroup "interpreted text roles"+          [ "literal role prefix" =: ":literal:`a`" =?> para (code "a")+          , "literal role postfix" =: "`a`:literal:" =?> para (code "a")+          , "literal text" =: "``text``" =?> para (code "text")+          , "code role" =: ":code:`a`" =?> para (codeWith ("", ["sourceCode"], []) "a")+          , "inherited code role" =: ".. role:: codeLike(code)\n\n:codeLike:`a`"+            =?> para (codeWith ("", ["codeLike", "sourceCode"], []) "a")+          , "custom code role with language field"+            =: ".. role:: lhs(code)\n    :language: haskell\n\n:lhs:`a`"+            =?> para (codeWith ("", ["lhs", "haskell","sourceCode"], []) "a")+          , "custom role with unspecified parent role"+            =: ".. role:: classy\n\n:classy:`text`"+            =?> para (spanWith ("", ["classy"], []) "text")+          , "role with recursive inheritance"+            =: ".. role:: haskell(code)\n.. role:: lhs(haskell)\n\n:lhs:`text`"+            =?> para (codeWith ("", ["lhs", "haskell", "sourceCode"], []) "text")+          , "unknown role" =: ":unknown:`text`" =?> para (str "text")+          ]         ]-
tests/Tests/Shared.hs view
@@ -9,6 +9,7 @@ import Test.HUnit ( assertBool, (@?=) ) import Text.Pandoc.Builder import Data.Monoid+import System.FilePath (joinPath)  tests :: [Test] tests = [ testGroup "normalize"@@ -40,21 +41,21 @@  testCollapse :: [Test] testCollapse = map (testCase "collapse")- [  (collapseFilePath "" @?= "")- ,  (collapseFilePath "./foo" @?= "foo")- ,  (collapseFilePath "././../foo" @?= "../foo")- ,  (collapseFilePath "../foo" @?= "../foo")- ,  (collapseFilePath "/bar/../baz" @?= "/baz")- ,  (collapseFilePath "/../baz" @?= "/../baz")- ,  (collapseFilePath  "./foo/.././bar/../././baz" @?= "baz")- ,  (collapseFilePath "./" @?=  "")- ,  (collapseFilePath "././" @?=  "")- ,  (collapseFilePath "../" @?=  "..")- ,  (collapseFilePath ".././" @?=  "..")- ,  (collapseFilePath "./../" @?=  "..")- ,  (collapseFilePath "../../" @?=  "../..")- ,  (collapseFilePath "parent/foo/baz/../bar" @?=  "parent/foo/bar")- ,  (collapseFilePath "parent/foo/baz/../../bar" @?=  "parent/bar")- ,  (collapseFilePath "parent/foo/.." @?=  "parent")- ,  (collapseFilePath "/parent/foo/../../bar" @?=  "/bar")- ,  (collapseFilePath "/./parent/foo" @?=  "/parent/foo")]+ [  (collapseFilePath (joinPath [ ""]) @?= (joinPath [ ""]))+ ,  (collapseFilePath (joinPath [ ".","foo"]) @?= (joinPath [ "foo"]))+ ,  (collapseFilePath (joinPath [ ".",".","..","foo"]) @?= (joinPath [ joinPath ["..", "foo"]]))+ ,  (collapseFilePath (joinPath [ "..","foo"]) @?= (joinPath [ "..","foo"]))+ ,  (collapseFilePath (joinPath [ "","bar","..","baz"]) @?= (joinPath [ "","baz"]))+ ,  (collapseFilePath (joinPath [ "","..","baz"]) @?= (joinPath [ "","..","baz"]))+ ,  (collapseFilePath (joinPath [ ".","foo","..",".","bar","..",".",".","baz"]) @?= (joinPath [ "baz"]))+ ,  (collapseFilePath (joinPath [ ".",""]) @?= (joinPath [ ""]))+ ,  (collapseFilePath (joinPath [ ".",".",""]) @?= (joinPath [ ""]))+ ,  (collapseFilePath (joinPath [ "..",""]) @?= (joinPath [ ".."]))+ ,  (collapseFilePath (joinPath [ "..",".",""]) @?= (joinPath [ ".."]))+ ,  (collapseFilePath (joinPath [ ".","..",""]) @?= (joinPath [ ".."]))+ ,  (collapseFilePath (joinPath [ "..","..",""]) @?= (joinPath [ "..",".."]))+ ,  (collapseFilePath (joinPath [ "parent","foo","baz","..","bar"]) @?= (joinPath [ "parent","foo","bar"]))+ ,  (collapseFilePath (joinPath [ "parent","foo","baz","..","..","bar"]) @?= (joinPath [ "parent","bar"]))+ ,  (collapseFilePath (joinPath [ "parent","foo",".."]) @?= (joinPath [ "parent"]))+ ,  (collapseFilePath (joinPath [ "","parent","foo","..","..","bar"]) @?= (joinPath [ "","bar"]))+ ,  (collapseFilePath (joinPath [ "",".","parent","foo"]) @?= (joinPath [ "","parent","foo"]))]
tests/Tests/Writers/LaTeX.hs view
@@ -52,7 +52,17 @@           [ "unnumbered header" =:             headerWith ("foo",["unnumbered"],[]) 1               (text "Header 1" <> note (plain $ text "note")) =?>-            "\\section*{Header 1\\footnote{note}}\\label{foo}\n\\addcontentsline{toc}{section}{Header 1}\n"+            "\\section*{\\texorpdfstring{Header 1\\footnote{note}}{Header 1}}\\label{foo}\n\\addcontentsline{toc}{section}{Header 1}\n"+          , "in list item" =:+            bulletList [header 2 (text "foo")] =?>+            "\\begin{itemize}\n\\item ~\n  \\subsection{foo}\n\\end{itemize}"+          , "in definition list item" =:+            definitionList [(text "foo", [header 2 (text "bar"),+                                          para $ text "baz"])] =?>+            "\\begin{description}\n\\item[foo] ~ \n\\subsection{bar}\n\nbaz\n\\end{description}"+          , "containing image" =:+            header 1 (image "imgs/foo.jpg" "" (text "Alt text")) =?>+            "\\section{\\texorpdfstring{\\protect\\includegraphics{imgs/foo.jpg}}{Alt text}}"           ]         , testGroup "inline code"           [ "struck out and highlighted" =:
tests/docbook-reader.docbook view
@@ -509,6 +509,25 @@       B. Williams     </para>   </sect2>+  <sect2 id="callout">+    <title>Callout</title>+    <para>Simple.</para>+      <calloutlist>+	<callout arearefs="loop1-letrec-co" id="loop1-letrec">+	  <para id="x_QA1">A <code>__letrec</code> is equivalent to a normal+	    Haskell &let;.</para>+	</callout>+	<callout arearefs="loop1-def-co" id="loop1-def">+	  <para id="x_RA1">&GHC; compiled the body of our list comprehension into+	    a loop named <function>go_s1YC</function>.</para>+	</callout>+	<callout arearefs="loop1-pat-empty-co" id="loop1-pat-empty">+	  <para id="x_SA1">If our &case; expression matches the empty list, we+	    return the empty list.  This is reassuringly+	    familiar.</para>+	</callout>+      </calloutlist>+  </sect2> </sect1> <sect1 id="definition-lists">   <title>Definition Lists</title>@@ -689,6 +708,9 @@     This is code: <literal>&gt;</literal>, <literal>$</literal>,     <literal>\</literal>, <literal>\$</literal>,     <literal>&lt;html&gt;</literal>.+  </para>+  <para>+    More code: <classname>Class</classname> and <type>Type</type>   </para>   <para>     <emphasis role="strikethrough">This is
tests/docbook-reader.native view
@@ -1,22 +1,22 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]-,Header 1 ("",[],[]) [Str "Headers"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]-,Header 3 ("",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]-,Header 4 ("",[],[]) [Str "Level",Space,Str "4"]-,Header 5 ("",[],[]) [Str "Level",Space,Str "5"]+,Header 1 ("headers",[],[]) [Str "Headers"]+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]+,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]+,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]+,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"] ,Para [Str "Hi."]-,Header 1 ("",[],[]) [Str "Level",Space,Str "1"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Emph [Str "emphasis"]]-,Header 3 ("",[],[]) [Str "Level",Space,Str "3"]+,Header 1 ("level-1",[],[]) [Str "Level",Space,Str "1"]+,Header 2 ("level-2-with-emphasis",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Emph [Str "emphasis"]]+,Header 3 ("level-3",[],[]) [Str "Level",Space,Str "3"] ,Para [Str "with",Space,Str "no",Space,Str "blank",Space,Str "line"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2"]+,Header 2 ("level-2",[],[]) [Str "Level",Space,Str "2"] ,Para [Str "with",Space,Str "no",Space,Str "blank",Space,Str "line"]-,Header 1 ("",[],[]) [Str "Paragraphs"]+,Header 1 ("paragraphs",[],[]) [Str "Paragraphs"] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "regular",Space,Str "paragraph."] ,Para [Str "In",Space,Str "Markdown",Space,Str "1.0.0",Space,Str "and",Space,Str "earlier.",Space,Str "Version",Space,Str "8.",Space,Str "This",Space,Str "line",Space,Str "turns",Space,Str "into",Space,Str "a",Space,Str "list",Space,Str "item.",Space,Str "Because",Space,Str "a",Space,Str "hard-wrapped",Space,Str "line",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "a",Space,Str "paragraph",Space,Str "looked",Space,Str "like",Space,Str "a",Space,Str "list",Space,Str "item."] ,Para [Str "Here\8217s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet.",Space,Str "*",Space,Str "criminey."]-,Header 1 ("",[],[]) [Str "Block",Space,Str "Quotes"]+,Header 1 ("block-quotes",[],[]) [Str "Block",Space,Str "Quotes"] ,Para [Str "E-mail",Space,Str "style:"] ,BlockQuote  [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote.",Space,Str "It",Space,Str "is",Space,Str "pretty",Space,Str "short."]]@@ -35,13 +35,13 @@   [Para [Str "nested"]]] ,Para [Str "This",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "a",Space,Str "block",Space,Str "quote:",Space,Str "2",Space,Str ">",Space,Str "1."] ,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph."]-,Header 1 ("",[],[]) [Str "Code",Space,Str "Blocks"]+,Header 1 ("code-blocks",[],[]) [Str "Code",Space,Str "Blocks"] ,Para [Str "Code:"] ,CodeBlock ("",[],[]) "---- (should be four hyphens)\n\nsub status {\n    print \"working\";\n}\n\nthis code block is indented by one tab" ,Para [Str "And:"] ,CodeBlock ("",[],[]) "    this code block is indented by two tabs\n\nThese should not be escaped:  \\$ \\\\ \\> \\[ \\{"-,Header 1 ("",[],[]) [Str "Lists"]-,Header 2 ("",[],[]) [Str "Unordered"]+,Header 1 ("lists",[],[]) [Str "Lists"]+,Header 2 ("unordered",[],[]) [Str "Unordered"] ,Para [Str "Asterisks",Space,Str "loose:"] ,BulletList  [[Para [Str "asterisk",Space,Str "1"]]@@ -57,7 +57,7 @@  [[Para [Str "Minus",Space,Str "1"]]  ,[Para [Str "Minus",Space,Str "2"]]  ,[Para [Str "Minus",Space,Str "3"]]]-,Header 2 ("",[],[]) [Str "Ordered"]+,Header 2 ("ordered",[],[]) [Str "Ordered"] ,OrderedList (1,Decimal,DefaultDelim)  [[Para [Str "First"]]  ,[Para [Str "Second"]]@@ -73,7 +73,7 @@   ,Para [Str "Item",Space,Str "1.",Space,Str "graf",Space,Str "two.",Space,Str "The",Space,Str "quick",Space,Str "brown",Space,Str "fox",Space,Str "jumped",Space,Str "over",Space,Str "the",Space,Str "lazy",Space,Str "dog\8217s",Space,Str "back."]]  ,[Para [Str "Item",Space,Str "2."]]  ,[Para [Str "Item",Space,Str "3."]]]-,Header 2 ("",[],[]) [Str "Nested"]+,Header 2 ("nested",[],[]) [Str "Nested"] ,BulletList  [[Para [Str "Tab"]   ,BulletList@@ -98,14 +98,14 @@    ,[Para [Str "Fie"]]    ,[Para [Str "Foe"]]]]  ,[Para [Str "Third"]]]-,Header 2 ("",[],[]) [Str "Tabs",Space,Str "and",Space,Str "spaces"]+,Header 2 ("tabs-and-spaces",[],[]) [Str "Tabs",Space,Str "and",Space,Str "spaces"] ,BulletList  [[Para [Str "this",Space,Str "is",Space,Str "a",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "tabs"]]  ,[Para [Str "this",Space,Str "is",Space,Str "a",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "spaces"]   ,BulletList    [[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "tabs"]]    ,[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "spaces"]]]]]-,Header 2 ("",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]+,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"] ,OrderedList (2,Decimal,DefaultDelim)  [[Para [Str "begins",Space,Str "with",Space,Str "2"]]  ,[Para [Str "and",Space,Str "now",Space,Str "3"]@@ -134,7 +134,13 @@ ,Para [Str "Should",Space,Str "not",Space,Str "be",Space,Str "a",Space,Str "list",Space,Str "item:"] ,Para [Str "M.A.\160\&2007"] ,Para [Str "B.",Space,Str "Williams"]-,Header 1 ("",[],[]) [Str "Definition",Space,Str "Lists"]+,Header 2 ("callout",[],[]) [Str "Callout"]+,Para [Str "Simple."]+,BulletList+ [[Para [Str "A",Space,Code ("",[],[]) "__letrec",Space,Str "is",Space,Str "equivalent",Space,Str "to",Space,Str "a",Space,Str "normal",Space,Str "Haskell",Space,Str "LET."]]+ ,[Para [Str "GHC",Space,Str "compiled",Space,Str "the",Space,Str "body",Space,Str "of",Space,Str "our",Space,Str "list",Space,Str "comprehension",Space,Str "into",Space,Str "a",Space,Str "loop",Space,Str "named",Space,Code ("",[],[]) "go_s1YC",Str "."]]+ ,[Para [Str "If",Space,Str "our",Space,Str "CASE",Space,Str "expression",Space,Str "matches",Space,Str "the",Space,Str "empty",Space,Str "list,",Space,Str "we",Space,Str "return",Space,Str "the",Space,Str "empty",Space,Str "list.",Space,Str "This",Space,Str "is",Space,Str "reassuringly",Space,Str "familiar."]]]+,Header 1 ("definition-lists",[],[]) [Str "Definition",Space,Str "Lists"] ,DefinitionList  [([Str "apple"],    [[Para [Str "red",Space,Str "fruit"]]])@@ -170,7 +176,7 @@     ,OrderedList (1,Decimal,DefaultDelim)      [[Para [Str "sublist"]]      ,[Para [Str "sublist"]]]]])]-,Header 1 ("",[],[]) [Str "Inline",Space,Str "Markup"]+,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."] ,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."] ,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]@@ -179,20 +185,21 @@ ,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]] ,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."] ,Para [Str "This",Space,Str "is",Space,Str "code:",Space,Code ("",[],[]) ">",Str ",",Space,Code ("",[],[]) "$",Str ",",Space,Code ("",[],[]) "\\",Str ",",Space,Code ("",[],[]) "\\$",Str ",",Space,Code ("",[],[]) "<html>",Str "."]+,Para [Str "More",Space,Str "code:",Space,Code ("",[],[]) "Class",Space,Str "and",Space,Code ("",[],[]) "Type"] ,Para [Strikeout [Str "This",Space,Str "is",Space,Emph [Str "strikeout"],Str "."]] ,Para [Str "Superscripts:",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Superscript [Emph [Str "hello"]],Space,Str "a",Superscript [Str "hello\160there"],Str "."] ,Para [Str "Subscripts:",Space,Str "H",Subscript [Str "2"],Str "O,",Space,Str "H",Subscript [Str "23"],Str "O,",Space,Str "H",Subscript [Str "many\160of\160them"],Str "O."] ,Para [Str "These",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "superscripts",Space,Str "or",Space,Str "subscripts,",Space,Str "because",Space,Str "of",Space,Str "the",Space,Str "unescaped",Space,Str "spaces:",Space,Str "a^b",Space,Str "c^d,",Space,Str "a~b",Space,Str "c~d."]-,Header 1 ("",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"]+,Header 1 ("smart-quotes-ellipses-dashes",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"] ,Para [Quoted DoubleQuote [Str "Hello,"],Space,Str "said",Space,Str "the",Space,Str "spider.",Space,Quoted DoubleQuote [Quoted SingleQuote [Str "Shelob"],Space,Str "is",Space,Str "my",Space,Str "name."]] ,Para [Quoted DoubleQuote [Str "A"],Str ",",Space,Quoted DoubleQuote [Str "B"],Str ",",Space,Str "and",Space,Quoted DoubleQuote [Str "C"],Space,Str "are",Space,Str "letters."] ,Para [Quoted DoubleQuote [Str "He",Space,Str "said,",Space,Quoted SingleQuote [Str "I",Space,Str "want",Space,Str "to",Space,Str "go."]],Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70\8217s?"] ,Para [Str "Some",Space,Str "dashes:",Space,Str "one\8212two",Space,Str "\8212",Space,Str "three\8212four",Space,Str "\8212",Space,Str "five."] ,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5\8211\&7,",Space,Str "255\8211\&66,",Space,Str "1987\8211\&1999."] ,Para [Str "Ellipses\8230and\8230and\8230."]-,Header 1 ("",[],[]) []+,Header 1 ("math",[],[]) [] ,Para [Math DisplayMath "e = mc^{2}",Math DisplayMath "1",Space,Math InlineMath "e = mc^{2}",Space,Math DisplayMath "e = mc^{2}"]-,Header 1 ("",[],[]) [Str "Special",Space,Str "Characters"]+,Header 1 ("special-characters",[],[]) [Str "Special",Space,Str "Characters"] ,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "unicode:"] ,BulletList  [[Para [Str "I",Space,Str "hat:",Space,Str "\206"]]@@ -221,8 +228,8 @@ ,Para [Str "Bang:",Space,Str "!"] ,Para [Str "Plus:",Space,Str "+"] ,Para [Str "Minus:",Space,Str "-"]-,Header 1 ("",[],[]) [Str "Links"]-,Header 2 ("",[],[]) [Str "Explicit"]+,Header 1 ("links",[],[]) [Str "Links"]+,Header 2 ("explicit",[],[]) [Str "Explicit"] ,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]@@ -232,7 +239,7 @@ ,Para [Link [Str "with_underscore"] ("/url/with_underscore","")] ,Para [Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")] ,Para [Link [Str "Empty"] ("",""),Str "."]-,Header 2 ("",[],[]) [Str "Reference"]+,Header 2 ("reference",[],[]) [Str "Reference"] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]@@ -245,12 +252,12 @@ ,CodeBlock ("",[],[]) "[not]: /url" ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "biz"] ("/url/",""),Str "."]-,Header 2 ("",[],[]) [Str "With",Space,Str "ampersands"]+,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"] ,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/",""),Str "."] ,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."] ,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]-,Header 2 ("",[],[]) [Str "Autolinks"]+,Header 2 ("autolinks",[],[]) [Str "Autolinks"] ,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")] ,BulletList  [[Para [Str "In",Space,Str "a",Space,Str "list?"]]@@ -261,18 +268,18 @@  [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]] ,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"] ,CodeBlock ("",[],[]) "or here: <http://example.com/>"-,Header 1 ("",[],[]) [Str "Images"]+,Header 1 ("images",[],[]) [Str "Images"] ,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"] ,Para [Image [Str "lalune"] ("lalune.jpg","")] ,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [] ("movie.jpg",""),Space,Str "icon."]-,Header 1 ("",[],[]) [Str "Footnotes"]+,Header 1 ("footnotes",[],[]) [Str "Footnotes"] ,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) "  { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]] ,BlockQuote  [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]] ,OrderedList (1,Decimal,DefaultDelim)  [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]] ,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]-,Header 1 ("",[],[]) [Str "Tables"]+,Header 1 ("tables",[],[]) [Str "Tables"] ,Para [Str "Simple",Space,Str "table",Space,Str "with",Space,Str "caption:"] ,Table [Str "Demonstration",Space,Str "of",Space,Str "simple",Space,Str "table",Space,Str "syntax."] [AlignRight,AlignLeft,AlignCenter,AlignLeft] [0.0,0.0,0.0,0.0]  [[Plain [Str "Right"]]
+ tests/docx/i18n_blocks.docx view

binary file changed (absent → 13680 bytes)

+ tests/docx/i18n_blocks.native view
@@ -0,0 +1,8 @@+[Header 1 ("this-is-heading-1",[],[]) [Str "This",Space,Str "is",Space,Str "Heading",Space,Str "1"]+,Header 2 ("this-is-heading-2",[],[]) [Str "This",Space,Str "is",Space,Str "Heading",Space,Str "2"]+,BlockQuote+ [Para [Str "This",Space,Str "is",Space,Str "Quote"]+ ,Para [Str "This",Space,Str "is",Space,Str "Block",Space,Str "Text"]]+,BulletList+ [[Para [Str "This",Space,Str "is",Space,Str "list",Space,Str "item",Space,Str "1"]]+ ,[Para [Str "This",Space,Str "is",Space,Str "list",Space,Str "item",Space,Str "2"]]]]
tests/docx/links.docx view

binary file changed (41751 → 45361 bytes)

tests/docx/links.native view
@@ -1,5 +1,6 @@ [Header 2 ("an-internal-link-and-an-external-link",[],[]) [Str "An",Space,Str "internal",Space,Str "link",Space,Str "and",Space,Str "an",Space,Str "external",Space,Str "link"] ,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://google.com",""),Space,Str "to",Space,Str "a",Space,Str "popular",Space,Str "website."]+,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://johnmacfarlane.net/pandoc/README.html#synopsis",""),Space,Str "to",Space,Str "a",Space,Str "website",Space,Str "with",Space,Str "an",Space,Str "anchor."] ,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#a-section-for-testing-link-targets",""),Space,Str "to",Space,Str "a",Space,Str "section",Space,Str "header."] ,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#my_bookmark",""),Space,Str "to",Space,Str "a",Space,Str "bookmark."] ,Header 2 ("a-section-for-testing-link-targets",[],[]) [Str "A",Space,Str "section",Space,Str "for",Space,Str "testing",Space,Str "link",Space,Str "targets"]
+ tests/docx/numbered_header.docx view

binary file changed (absent → 26129 bytes)

+ tests/docx/numbered_header.native view
@@ -0,0 +1,1 @@+[Header 1 ("a-numbered-header.",[],[]) [Str "A",Space,Str "Numbered",Space,Str "Header."]]
+ tests/dokuwiki_external_images.dokuwiki view
@@ -0,0 +1,1 @@+{{https://cooluri.com/image.png|HTTPS image}} {{http://cooluri.com/image.png|HTTP image}} {{ftp://ftp.cooluri.com/image.png|FTP image}} {{file:///tmp/coolimage.png|Filesystem image}} {{:/image.jpg|Relative image 1}} {{:image.jpg|Relative image 2}}
+ tests/dokuwiki_external_images.native view
@@ -0,0 +1,1 @@+[Para [Image [Str "HTTPS",Space,Str "image"] ("https://cooluri.com/image.png",""),Space,Image [Str "HTTP",Space,Str "image"] ("http://cooluri.com/image.png",""),Space,Image [Str "FTP",Space,Str "image"] ("ftp://ftp.cooluri.com/image.png",""),Space,Image [Str "Filesystem",Space,Str "image"] ("file:///tmp/coolimage.png",""),Space,Image [Str "Relative",Space,Str "image",Space,Str "1"] ("/image.jpg",""),Space,Image [Str "Relative",Space,Str "image",Space,Str "2"] ("image.jpg","")]]
tests/epub/features.epub view

binary file changed (67495 → 66370 bytes)

tests/epub/features.native view
@@ -1,5 +1,4 @@-[Para [Image [] ("img/multiscripts_and_greek_alphabet.png","")]-,Para [Span ("front.xhtml",[],[]) []]+[Para [Span ("front.xhtml",[],[]) []] ,RawBlock (Format "html") "<section>" ,Header 1 ("",[],[]) [Str "Reflowable",Space,Str "EPUB",Space,Str "3",Space,Str "Conformance",Space,Str "Test",Space,Str "Document:",Space,Str "0100"] ,RawBlock (Format "html") "<section>"@@ -28,31 +27,6 @@    [[Plain [Str "@@@TODO",Space,Str "provide",Space,Str "info",Space,Str "on",Space,Str "where",Space,Str "to",Space,Str "get",Space,Str "the",Space,Str "results",Space,Str "form"]]])] ,RawBlock (Format "html") "</section>" ,RawBlock (Format "html") "</section>"-,Para [Span ("content-images-001.xhtml",[],[]) []]-,RawBlock (Format "html") "<section>"-,Header 2 ("content-images-001.xhtml#multimedia",[],[]) [Str "Multimedia"]-,RawBlock (Format "html") "<section>"-,Header 3 ("content-images-001.xhtml#images",[],[]) [Str "Images"]-,RawBlock (Format "html") "<section id=\"img-010\" class=\"ctest\">"-,Header 4 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "img-010"],Space,Str "GIF"]-,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Str "GIF",Space,Str "image",Space,Str "format",Space,Str "is",Space,Str "supported."]-,Para [Image [Str "gif",Space,Str "test"] ("img/check.gif","")]-,Para [Str "If",Space,Str "a",Space,Str "checkmark",Space,Str "precedes",Space,Str "this",Space,Str "paragaph,",Space,Str "the",Space,Str "test",Space,Str "passes."]-,RawBlock (Format "html") "</section>"-,RawBlock (Format "html") "<section id=\"img-020\" class=\"ctest\">"-,Header 4 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "img-020"],Space,Str "PNG"]-,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Str "PNG",Space,Str "image",Space,Str "format",Space,Str "is",Space,Str "supported."]-,Para [Image [Str "png",Space,Str "test"] ("img/check.png","")]-,Para [Str "If",Space,Str "a",Space,Str "checkmark",Space,Str "precedes",Space,Str "this",Space,Str "paragaph,",Space,Str "the",Space,Str "test",Space,Str "passes."]-,RawBlock (Format "html") "</section>"-,RawBlock (Format "html") "<section id=\"img-030\" class=\"ctest\">"-,Header 4 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "img-030"],Space,Str "JPEG"]-,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Str "JPEG",Space,Str "image",Space,Str "format",Space,Str "is",Space,Str "supported."]-,Para [Image [Str "jpeg",Space,Str "test"] ("img/check.jpg","")]-,Para [Str "If",Space,Str "a",Space,Str "checkmark",Space,Str "precedes",Space,Str "this",Space,Str "paragaph,",Space,Str "the",Space,Str "test",Space,Str "passes."]-,RawBlock (Format "html") "</section>"-,RawBlock (Format "html") "</section>"-,RawBlock (Format "html") "</section>" ,Para [Span ("content-mathml-001.xhtml",[],[]) []] ,RawBlock (Format "html") "<section>" ,Header 2 ("content-mathml-001.xhtml#mathml",[],[]) [Str "MathML"]@@ -94,13 +68,13 @@ ,Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-024"],Str "Horizontal",Space,Str "stretch,",Space,Code ("",[],[]) "mover",Str ",",Space,Code ("",[],[]) "munder",Str ",",Space,Str "and",Space,Code ("",[],[]) "mspace",Space,Str "elements"] ,Para [Str "Tests",Space,Str "whether",Space,Str "horizontal",Space,Str "stretch,",Space,Code ("",[],[]) "mover",Str ",",Space,Code ("",[],[]) "munder",Str ",",Space,Code ("",[],[]) "mspace",Space,Str "elements",Space,Str "are",Space,Str "supported."] ,Para [Math DisplayMath "c = \\overset{\\text{complex\\ number}}{\\overbrace{\\underset{\\text{real}}{\\underbrace{\\mspace{20mu} a\\mspace{20mu}}} + \\underset{\\text{imaginary}}{\\underbrace{\\quad b{\\mathbb{i}}\\quad}}}}"]-,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Image [Str "description",Space,Str "of",Space,Str "imaginary",Space,Str "number:",Space,Str "c",Space,Str "=",Space,Str "a",Space,Str "+bi",Space,Str "with",Space,Str "an",Space,Str "overbrace",Space,Str "reading",Space,Str "'complex",Space,Str "number'",Space,Str "and",Space,Str "underbraces",Space,Str "below",Space,Str "'a'",Space,Str "and",Space,Str "'b",Space,Str "i'",Space,Str "reading",Space,Str "'real'",Space,Str "and",Space,Str "'imaginary'",Space,Str "respectively."] ("img/complex_number.png",""),Str "."]+,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Str "."] ,RawBlock (Format "html") "</section>" ,RawBlock (Format "html") "<section id=\"mathml-025\" class=\"ctest\">" ,Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-025"],Str "Testing",Space,Code ("",[],[]) "mtable",Space,Str "with",Space,Code ("",[],[]) "colspan",Space,Str "and",Space,Code ("",[],[]) "rowspan",Space,Str "attributes,",Space,Str "Hebrew",Space,Str "and",Space,Str "Script",Space,Str "fonts"] ,Para [Str "Tests",Space,Str "whether",Space,Code ("",[],[]) "mtable",Space,Str "with",Space,Code ("",[],[]) "colspan",Space,Str "and",Space,Code ("",[],[]) "mspace",Space,Str "attributes",Space,Str "(colum",Space,Str "and",Space,Str "row",Space,Str "spanning)",Space,Str "are",Space,Str "supported;",Space,Str "uses",Space,Str "Hebrew",Space,Str "and",Space,Str "Script",Space,Str "alphabets."] ,Para [Math DisplayMath "\\begin{array}{llllllllll}\n & {\\operatorname{cov}\\left( \\mathcal{L} \\right)} & \\longrightarrow & {\\operatorname{non}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cof}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cof}\\left( \\mathcal{L} \\right)} & \\longrightarrow & 2^{\\aleph_{0}} \\\\\n & \\uparrow & & \\uparrow & & \\uparrow & & \\uparrow & & \\\\\n & {\\mathfrak{b}} & \\longrightarrow & {\\mathfrak{d}} & & & & & & \\\\\n & \\uparrow & & \\uparrow & & & & & & \\\\\n\\aleph_{1} & \\longrightarrow & {\\operatorname{add}\\left( \\mathcal{L} \\right)} & \\longrightarrow & {\\operatorname{add}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cov}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{non}\\left( \\mathcal{L} \\right)} & \\\\\n\\end{array}"]-,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Link [Str "Cicho\324's",Space,Str "Diagram"] ("Cicho%C5%84's_diagram",""),Str ":",Space,Image [Str "rendering",Space,Str "of",Space,Str "Cicho\324's",Space,Str "diagram."] ("img/cichons_diagram.png",""),Str "."]+,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Link [Str "Cicho\324's",Space,Str "Diagram"] ("Cicho%C5%84's_diagram",""),Str ":",Space,Str "."] ,RawBlock (Format "html") "</section>" ,RawBlock (Format "html") "<section id=\"mathml-026\" class=\"ctest\">" ,Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-026"],Str "BiDi,",Space,Str "RTL",Space,Str "and",Space,Str "Arabic",Space,Str "alphabets"]@@ -111,7 +85,7 @@ ,RawBlock (Format "html") "<section id=\"mathml-027\" class=\"ctest\">" ,Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-027"],Str "Elementary",Space,Str "math:",Space,Str "long",Space,Str "division",Space,Str "notation"] ,Para [Str "Tests",Space,Str "whether",Space,Code ("",[],[]) "mlongdiv",Space,Str "elements",Space,Str "(from",Space,Str "elementary",Space,Str "math)",Space,Str "are",Space,Str "supported."]-,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Str "the",Space,Str "following",Space,Str "image:",Space,Image [Str "A",Space,Str "long",Space,Str "division",Space,Str "dividing",Space,Str "1306",Space,Str "by",Space,Str "3,",Space,Str "presented",Space,Str "in",Space,Str "'lefttop'",Space,Str "(US)",Space,Str "notation"] ("img/ElementaryMathExample.png",""),Str "."]+,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Str "the",Space,Str "following",Space,Str "image:",Space,Str "."] ,RawBlock (Format "html") "</section>" ,RawBlock (Format "html") "</section>" ,Para [Span ("content-switch-001.xhtml",[],[]) []]@@ -130,6 +104,4 @@ ,Para [Str "If",Space,Str "a",Space,Str "MathML",Space,Str "equation",Space,Str "is",Space,Str "rendered",Space,Str "before",Space,Str "this",Space,Str "paragraph,",Space,Str "the",Space,Str "test",Space,Str "passes."] ,Para [Str "If",Space,Str "test",Space,Code ("",[],[]) "switch-010",Space,Str "did",Space,Str "not",Space,Str "pass,",Space,Str "this",Space,Str "test",Space,Str "should",Space,Str "be",Space,Str "marked",Space,Code ("",[],[]) "Not Supported",Str "."] ,RawBlock (Format "html") "</section>"-,RawBlock (Format "html") "</section>"-,Para [Span ("Maghreb1.png",[],[]) []]-,Para [Image [] ("img/Maghreb1.png","")]]+,RawBlock (Format "html") "</section>"]
+ tests/epub/img.epub view

binary file changed (absent → 61768 bytes)

tests/html-reader.html view
@@ -451,5 +451,4 @@     </tr> </table> </body>-</body> </html>
tests/markdown-reader-more.native view
@@ -17,6 +17,7 @@ ,Header 3 ("my-header",[],[]) [Str "my",Space,Str "header"] ,Header 2 ("in-math",[],[]) [Str "$",Space,Str "in",Space,Str "math"] ,Para [Math InlineMath "\\$2 + \\$3"]+,Para [Math InlineMath "x = \\text{the $n$th root of $y$}"] ,Para [Str "This",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "math:"] ,Para [Str "$PATH",Space,Str "90",Space,Str "$PATH"] ,Header 2 ("commented-out-list-item",[],[]) [Str "Commented-out",Space,Str "list",Space,Str "item"]@@ -78,6 +79,8 @@ ,Para [Str "Link",Space,Str "to",Space,Link [Str "Explicit",Space,Str "header",Space,Str "attributes"] ("#foobar",""),Str "."] ,Para [Str "But",Space,Str "this",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "link",Space,Str "to",Space,Link [Str "My",Space,Str "other",Space,Str "header"] ("/foo",""),Str ",",Space,Str "since",Space,Str "the",Space,Str "reference",Space,Str "is",Space,Str "defined."] ,Header 2 ("foobar",["baz"],[("key","val")]) [Str "Explicit",Space,Str "header",Space,Str "attributes"]+,BlockQuote+ [Header 2 ("foobar",["baz"],[("key","val")]) [Str "Header",Space,Str "attributes",Space,Str "inside",Space,Str "block",Space,Str "quote"]] ,Header 2 ("line-blocks",[],[]) [Str "Line",Space,Str "blocks"] ,Para [Str "But",Space,Str "can",Space,Str "a",Space,Str "bee",Space,Str "be",Space,Str "said",Space,Str "to",Space,Str "be",LineBreak,Str "\160\160\160\160or",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "an",Space,Str "entire",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160when",Space,Str "half",Space,Str "the",Space,Str "bee",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160\160\160\160\160due",Space,Str "to",Space,Str "some",Space,Str "ancient",Space,Str "injury?"] ,Para [Str "Continuation",Space,Str "line",LineBreak,Str "\160\160and",Space,Str "another"]@@ -149,6 +152,8 @@ ,Para [Link [Str "linky"] ("hi_(there_(nested))","")] ,Header 2 ("reference-link-fallbacks",[],[]) [Str "Reference",Space,Str "link",Space,Str "fallbacks"] ,Para [Str "[",Emph [Str "not",Space,Str "a",Space,Str "link"],Str "]",Space,Str "[",Emph [Str "nope"],Str "]\8230"]+,Header 2 ("reference-link-followed-by-a-citation",[],[]) [Str "Reference",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "citation"]+,Para [Str "MapReduce",Space,Str "is",Space,Str "a",Space,Str "paradigm",Space,Str "popularized",Space,Str "by",Space,Link [Str "Google"] ("http://google.com",""),Space,Cite [Citation {citationId = "mapreduce", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@mapreduce]"],Space,Str "as",Space,Str "its",Space,Str "most",Space,Str "vocal",Space,Str "proponent."] ,Header 2 ("empty-reference-links",[],[]) [Str "Empty",Space,Str "reference",Space,Str "links"] ,Para [Str "bar"] ,Para [Link [Str "foo2"] ("","")]]
tests/markdown-reader-more.txt view
@@ -60,6 +60,8 @@  $\$2 + \$3$ +$x = \text{the $n$th root of $y$}$+ This should not be math:  $PATH 90 $PATH@@ -174,6 +176,8 @@  ## Explicit header attributes {#foobar .baz key="val"} +> ## Header attributes inside block quote {#foobar .baz key="val"}+ ## Line blocks  | But can a bee be said to be@@ -257,6 +261,13 @@ ## Reference link fallbacks  [*not a link*] [*nope*]...++## Reference link followed by a citation++MapReduce is a paradigm popularized by [Google] [@mapreduce] as its+most vocal proponent.++[Google]: http://google.com  ## Empty reference links 
tests/rst-reader.native view
@@ -322,12 +322,12 @@ ,Null ,Para [Str "And",Space,Str "now",Space,Str "with",Space,RawInline (Format "html") "<b>inline</b> <span id=\"test\">HTML</span>",Str "."] ,Null-,Para [Str "And",Space,Str "some",Space,Str "inline",Space,Str "haskell",Space,Code ("",["sourceCode","haskell"],[]) "fmap id [1,2..10]",Str "."]+,Para [Str "And",Space,Str "some",Space,Str "inline",Space,Str "haskell",Space,Code ("",["haskell","sourceCode"],[]) "fmap id [1,2..10]",Str "."] ,Null ,Null-,Para [Str "Indirect",Space,Str "python",Space,Str "role",Space,Code ("",["sourceCode","python"],[]) "[x*x for x in [1,2,3,4,5]]",Str "."]+,Para [Str "Indirect",Space,Str "python",Space,Str "role",Space,Code ("",["python","indirect","sourceCode"],[]) "[x*x for x in [1,2,3,4,5]]",Str "."] ,Null ,Null-,Para [Str "Different",Space,Str "indirect",Space,Str "C",Space,Code ("",["sourceCode","c"],[]) "int x = 15;",Str "."]+,Para [Str "Different",Space,Str "indirect",Space,Str "C",Space,Code ("",["c","different-indirect","sourceCode"],[]) "int x = 15;",Str "."] ,Header 2 ("literal-symbols",[],[]) [Str "Literal",Space,Str "symbols"] ,Para [Str "2*2",Space,Str "=",Space,Str "4*1"]]
tests/tables.asciidoc view
@@ -65,4 +65,3 @@ |First |row |12.0 |Example of a row that spans multiple lines. |Second |row |5.0 |Here's another one. Note the blank line between rows. |=======================================================================-
tests/tables.haddock view
@@ -74,4 +74,3 @@ >                                       the blank line between >                                       rows. >   ----------- ---------- ------------ ---------------------------
tests/tables.org view
@@ -49,4 +49,3 @@  | First    | row   | 12.0   | Example of a row that spans multiple lines.             | | Second   | row   | 5.0    | Here's another one. Note the blank line between rows.   |-
tests/tables.rst view
@@ -88,4 +88,3 @@ |             |            |              | the blank line between     | |             |            |              | rows.                      | +-------------+------------+--------------+----------------------------+-
tests/testsuite.native view
@@ -230,7 +230,7 @@ ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"] ,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"]-,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]]+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Para [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]] ,Para [Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"] ,RawBlock (Format "html") "<table>" ,RawBlock (Format "html") "<tr>"@@ -244,7 +244,7 @@ ,RawBlock (Format "html") "</table>" ,RawBlock (Format "html") "<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>" ,Para [Str "Here\8217s",Space,Str "a",Space,Str "simple",Space,Str "block:"]-,Div ("",[],[]) [Plain [Str "foo"]]+,Div ("",[],[]) [Para [Str "foo"]] ,Para [Str "This",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "code",Space,Str "block,",Space,Str "though:"] ,CodeBlock ("",[],[]) "<div>\n    foo\n</div>" ,Para [Str "As",Space,Str "should",Space,Str "this:"]
+ tests/twiki-reader.native view
@@ -0,0 +1,174 @@+Pandoc (Meta {unMeta = fromList []})+[Header 1 ("header",[],[]) [Str "header"]+,Header 2 ("header-level-two",[],[]) [Str "header",Space,Str "level",Space,Str "two"]+,Header 3 ("header-level-3",[],[]) [Str "header",Space,Str "level",Space,Str "3"]+,Header 4 ("header-level-four",[],[]) [Str "header",Space,Emph [Str "level"],Space,Str "four"]+,Header 5 ("header-level-5",[],[]) [Str "header",Space,Str "level",Space,Str "5"]+,Header 6 ("header-level-6",[],[]) [Str "header",Space,Str "level",Space,Str "6"]+,Para [Str "---+++++++",Space,Str "not",Space,Str "a",Space,Str "header"]+,Para [Str "--++",Space,Str "not",Space,Str "a",Space,Str "header"]+,Header 1 ("emph-and-strong",[],[]) [Str "emph",Space,Str "and",Space,Str "strong"]+,Para [Emph [Str "emph"],Space,Strong [Str "strong"]]+,Para [Emph [Strong [Str "strong",Space,Str "and",Space,Str "emph"]]]+,Para [Strong [Emph [Str "emph",Space,Str "inside"],Space,Str "strong"]]+,Para [Strong [Str "strong",Space,Str "with",Space,Emph [Str "emph"]]]+,Para [Emph [Strong [Str "strong",Space,Str "inside"],Space,Str "emph"]]+,Header 1 ("horizontal-rule",[],[]) [Str "horizontal",Space,Str "rule"]+,Para [Str "top"]+,HorizontalRule+,Para [Str "bottom"]+,HorizontalRule+,Header 1 ("nop",[],[]) [Str "nop"]+,Para [Str "_not",Space,Str "emph_"]+,Header 1 ("entities",[],[]) [Str "entities"]+,Para [Str "hi",Space,Str "&",Space,Str "low"]+,Para [Str "hi",Space,Str "&",Space,Str "low"]+,Para [Str "G\246del"]+,Para [Str "\777\2730"]+,Header 1 ("comments",[],[]) [Str "comments"]+,Para [Str "inline",Space,Str "comment"]+,Para [Str "between",Space,Str "blocks"]+,Header 1 ("linebreaks",[],[]) [Str "linebreaks"]+,Para [Str "hi",LineBreak,Str "there"]+,Para [Str "hi",LineBreak,Space,Str "there"]+,Header 1 ("inline-code",[],[]) [Str "inline",Space,Str "code"]+,Para [Code ("",[],[]) "*\8594*",Space,Code ("",[],[]) "typed",Space,Code ("",["haskell"],[]) ">>="]+,Header 1 ("code-blocks",[],[]) [Str "code",Space,Str "blocks"]+,CodeBlock ("",[],[]) "case xs of\n     (_:_) -> reverse xs\n     []    -> ['*']"+,CodeBlock ("",["haskell"],[]) "case xs of\n     (_:_) -> reverse xs\n     []    -> ['*']"+,Header 1 ("block-quotes",[],[]) [Str "block",Space,Str "quotes"]+,Para [Str "Regular",Space,Str "paragraph"]+,BlockQuote+ [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote."]+ ,Para [Str "With",Space,Str "two",Space,Str "paragraphs."]]+,Para [Str "Nother",Space,Str "paragraph."]+,Header 1 ("external-links",[],[]) [Str "external",Space,Str "links"]+,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]+,Para [Link [Str "http://johnmacfarlane.net/pandoc/"] ("http://johnmacfarlane.net/pandoc/","")]+,Para [Link [Str "http://google.com"] ("http://google.com",""),Space,Link [Str "http://yahoo.com"] ("http://yahoo.com","")]+,Para [Link [Str "email",Space,Str "me"] ("mailto:info@example.org","")]+,Para [Str "http://google.com"]+,Para [Str "http://google.com"]+,Para [Str "http://google.com"]+,Para [Str "info@example.org"]+,Para [Str "info@example.org"]+,Para [Str "info@example.org"]+,Header 1 ("lists",[],[]) [Str "lists"]+,BulletList+ [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]+ ,[Plain [Str "with",Space,Str "an",Space,Str "asterisk",Space,Str "(*)."]+  ,BulletList+   [[Plain [Str "More",Space,Str "asterisks",Space,Str "gives",Space,Str "deeper"]+    ,BulletList+     [[Plain [Str "and",Space,Str "deeper",Space,Str "levels."]]]]]]+ ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels."]]+ ,[Plain [Str "Continuations",Space,Str "are",Space,Str "also",Space,Str "possible"]+  ,BulletList+   [[Plain [Str "and",Space,Str "do",Space,Str "not",Space,Str "break",Space,Str "the",Space,Str "list",Space,Str "flow"]]]]+ ,[Plain [Str "Level",Space,Str "one"]]]+,Para [Str "Any",Space,Str "other",Space,Str "start",Space,Str "ends",Space,Str "the",Space,Str "list."]+,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]+ ,[Plain [Str "with",Space,Str "a",Space,Str "number",Space,Str "(1.)."]+  ,OrderedList (1,DefaultStyle,DefaultDelim)+   [[Plain [Str "More",Space,Str "number",Space,Str "signs",Space,Str "gives",Space,Str "deeper"]+    ,OrderedList (1,DefaultStyle,DefaultDelim)+     [[Plain [Str "and",Space,Str "deeper"]]+     ,[Plain [Str "levels."]]]]]]+ ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels."]]+ ,[Plain [Str "Blank",Space,Str "lines"]]]+,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "end",Space,Str "the",Space,Str "list",Space,Str "and",Space,Str "start",Space,Str "another."]]]+,Para [Str "Any",Space,Str "other",Space,Str "start",Space,Str "also",Space,Str "ends",Space,Str "the",Space,Str "list."]+,DefinitionList+ [([Str "item",Space,Str "1"],+   [[Plain [Str "definition",Space,Str "1"]]])+ ,([Str "item",Space,Str "2"],+   [[Plain [Str "definition",Space,Str "2-1",Space,Str "definition",Space,Str "2-2"]]])+ ,([Str "item",Space,Emph [Str "3"]],+   [[Plain [Str "definition",Space,Emph [Str "3"]]]])]+,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "one"]]+ ,[Plain [Str "two"]+  ,BulletList+   [[Plain [Str "two",Space,Str "point",Space,Str "one"]]+   ,[Plain [Str "two",Space,Str "point",Space,Str "two"]]]]+ ,[Plain [Str "three"]+  ,DefinitionList+   [([Str "three",Space,Str "item",Space,Str "one"],+     [[Plain [Str "three",Space,Str "def",Space,Str "one"]]])]]+ ,[Plain [Str "four"]+  ,DefinitionList+   [([Str "four",Space,Str "def",Space,Str "one"],+     [[Plain [Str "this",Space,Str "is",Space,Str "a",Space,Str "continuation"]]])]]+ ,[Plain [Str "five"]+  ,OrderedList (1,DefaultStyle,DefaultDelim)+   [[Plain [Str "five",Space,Str "sub",Space,Str "1"]+    ,OrderedList (1,DefaultStyle,DefaultDelim)+     [[Plain [Str "five",Space,Str "sub",Space,Str "1",Space,Str "sub",Space,Str "1"]]]]+   ,[Plain [Str "five",Space,Str "sub",Space,Str "2"]]]]]+,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "other"]+  ,OrderedList (1,UpperRoman,DefaultDelim)+   [[Plain [Str "list"]]+   ,[Plain [Str "styles"]]]]+ ,[Plain [Str "are"]+  ,OrderedList (1,LowerRoman,DefaultDelim)+   [[Plain [Str "also"]]+   ,[Plain [Str "possible"]]]]+ ,[Plain [Str "all"]+  ,OrderedList (1,LowerAlpha,DefaultDelim)+   [[Plain [Str "the"]]+   ,[Plain [Str "different"]]+   ,[Plain [Str "styles"]]]]+ ,[Plain [Str "are"]+  ,OrderedList (1,UpperAlpha,DefaultDelim)+   [[Plain [Str "implemented"]]+   ,[Plain [Str "and"]]+   ,[Plain [Str "supported"]]]]]+,Header 1 ("tables",[],[]) [Str "tables"]+,Table [] [AlignDefault,AlignDefault] [0.0,0.0]+ [[]+ ,[]]+ [[[Plain [Str "Orange"]]+  ,[Plain [Str "Apple"]]]+ ,[[Plain [Str "Bread"]]+  ,[Plain [Str "Pie"]]]+ ,[[Plain [Str "Butter"]]+  ,[Plain [Str "Ice",Space,Str "cream"]]]]+,Table [] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "Orange"]]+ ,[Plain [Str "Apple"]]]+ [[[Plain [Str "Bread"]]+  ,[Plain [Str "Pie"]]]+ ,[[Plain [Strong [Str "Butter"]]]+  ,[Plain [Str "Ice",Space,Str "cream"]]]]+,Table [] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "Orange"]]+ ,[Plain [Str "Apple"]]]+ [[[Plain [Str "Bread",LineBreak,LineBreak,Str "and",Space,Str "cheese"]]+  ,[Plain [Str "Pie",LineBreak,LineBreak,Strong [Str "apple"],Space,Str "and",Space,Emph [Str "carrot"]]]]]+,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]+ [[]+ ,[]+ ,[]]+ [[[Plain [Str "Orange"]]+  ,[Plain [Str "Apple"]]+  ,[Plain [Str "more"]]]+ ,[[Plain [Str "Bread"]]+  ,[Plain [Str "Pie"]]+  ,[Plain [Str "more"]]]+ ,[[Plain [Str "Butter"]]+  ,[Plain [Str "Ice",Space,Str "cream"]]+  ,[Plain [Str "and",Space,Str "more"]]]]+,Header 1 ("macros",[],[]) [Str "macros"]+,Para [Span ("",["twiki-macro","TEST"],[]) []]+,Para [Span ("",["twiki-macro","TEST"],[]) [Str ""]]+,Para [Span ("",["twiki-macro","TEST"],[]) [Str "content with spaces"]]+,Para [Span ("",["twiki-macro","TEST"],[]) [Str "content with spaces"]]+,Para [Span ("",["twiki-macro","TEST"],[("ARG1","test")]) [Str "content with spaces"]]+,Para [Span ("",["twiki-macro","TEST"],[]) [Str "content with spaces ARG1=test"]]+,Para [Span ("",["twiki-macro","TEST"],[("ARG1","test")]) [Str "content with spaces"]]+,Para [Span ("",["twiki-macro","TEST"],[("ARG1","test"),("ARG2","test2")]) [Str ""]]+,Para [Span ("",["twiki-macro","TEST"],[("ARG1","test"),("ARG2","test2")]) [Str ""]]+,Para [Span ("",["twiki-macro","TEST"],[("ARG1","test"),("ARG2","test2")]) [Str "multiline\ndoes also work"]]]
+ tests/twiki-reader.twiki view
@@ -0,0 +1,221 @@+---+ header++---++ header level two++---+++ header level 3++---++++ header _level_ four++---+++++ header level 5++---++++++ header level 6++---+++++++ not a header++ --++ not a header++---+ emph and strong++_emph_ *strong*++__strong and emph__++*<i>emph inside</i> strong*++*strong with <i>emph</i>*++_<b>strong inside</b> emph_++---+ horizontal rule++top+---+bottom++---++---+ nop++<nop>_not emph_++---+ entities++hi & low++hi &amp; low++G&ouml;del++&#777;&#xAAA;++---+ comments++inline <!-- secret --> comment++<!-- secret -->++between blocks++ <!-- secret -->++---+ linebreaks++hi%BR%there++hi%BR%+there++---+ inline code++<code>*→*</code> =typed= <code class="haskell">>>=</code>++---+ code blocks++<verbatim>+case xs of+     (_:_) -> reverse xs+     []    -> ['*']+</verbatim>++<verbatim class="haskell">+case xs of+     (_:_) -> reverse xs+     []    -> ['*']+</verbatim>++---+ block quotes++Regular paragraph+<blockquote>+This is a block quote.++With two paragraphs.+</blockquote>+Nother paragraph.++---+ external links++[[http://google.com][<i>Google</i> search engine]]++http://johnmacfarlane.net/pandoc/++[[http://google.com]] [[http://yahoo.com]]++[[mailto:info@example.org][email me]]++!http://google.com++<nop>http://google.com++<noautolink>+http://google.com+</noautolink>++!info@example.org++<nop>info@example.org++<noautolink>+info@example.org+</noautolink>++---+ lists++   * Start each line+   * with an asterisk (*).+      * More asterisks gives deeper+         * and deeper levels.+   * Line breaks%BR%don't break levels.+   * Continuations+     are also possible+      * and do not break the list flow+   * Level one+Any other start ends the list.++   1. Start each line+   1. with a number (1.).+      1. More number signs gives deeper+         1. and deeper+         1. levels.+   1. Line breaks%BR%don't break levels.+   1. Blank lines++   1. end the list and start another.+Any other start also+ends the list.++   $ item 1: definition 1+   $ item 2: definition 2-1+      definition 2-2+   $ item _3_: definition _3_++   1. one+   1. two+      * two point one+      * two point two+   1. three+      $ three item one: three def one+   1. four+      $ four def one: this+         is a continuation+   1. five+      1. five sub 1+         1. five sub 1 sub 1+      1. five sub 2++   1. other+      I. list+      I. styles+   1. are+      i. also+      i. possible+   1. all+      a. the+      a. different+      a. styles+   1. are+      A. implemented+      A. and+      A. supported++---+ tables++|Orange|Apple|+|Bread|Pie|+|Butter|Ice cream|++|*Orange*|*Apple*|+|Bread|Pie|+|*Butter*|Ice cream|++|*Orange*|*Apple*|+|Bread%BR%%BR%and cheese|Pie%BR%%BR%*apple* and <i>carrot</i>|++| Orange | Apple     | more     |+| Bread  | Pie       | more     |+| Butter | Ice cream | and more |++---+ macros++%TEST%++%TEST{}%++%TEST{content with spaces}%++%TEST{"content with spaces"}%++%TEST{"content with spaces" ARG1="test"}%++%TEST{content with spaces ARG1=test}%++%TEST{ARG1=test content with spaces}%++%TEST{ARG1=test ARG2=test2}%++%TEST{ARG1="test" ARG2="test2"}%++%TEST{ARG1="test"+ARG2="test2"+multiline+does also work}%
tests/writer.asciidoc view
@@ -378,6 +378,7 @@ And nested without indentation:  foo+ bar Interpreted markdown in a table: @@ -386,6 +387,7 @@ Here’s a simple block:  foo+ This should be a code block, though:  -------
tests/writer.context view
@@ -548,6 +548,7 @@ And nested without indentation:  foo+ bar Interpreted markdown in a table: @@ -556,6 +557,7 @@ Here's a simple block:  foo+ This should be a code block, though:  \starttyping
tests/writer.dokuwiki view
@@ -268,7 +268,8 @@ <HTML><dt></HTML>//orange//<HTML></dt></HTML> <HTML><dd></HTML><HTML><p></HTML>orange fruit<HTML></p></HTML> <code>{ orange code block }</code>-> <HTML><p></HTML>orange block quote<HTML></p></HTML><HTML></dd></HTML><HTML></dl></HTML>+> <HTML><p></HTML>orange block quote<HTML></p></HTML>+<HTML></dd></HTML><HTML></dl></HTML>  Multiple definitions, tight: @@ -298,6 +299,7 @@ foo  + bar  @@ -324,6 +326,7 @@  foo + This should be a code block, though:  <code><div>@@ -609,7 +612,7 @@ ))  > Notes can go in quotes.((In quote.-))+> ))    - And in list items.((In list.)) 
tests/writer.fb2 view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?>-<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><book-title>Pandoc Test Suite</book-title><author><first-name>John</first-name><last-name>MacFarlane</last-name></author><author><nickname>Anonymous</nickname></author><date>July 17, 2006</date></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p>Pandoc Test Suite</p></title><annotation><p>John MacFarlane</p><p>Anonymous</p><p>July 17, 2006</p></annotation><section><p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Headers</p></title><section><title><p>Level 2 with an embedded link &lt;/url&gt;</p></title><section><title><p>Level 3 with emphasis</p></title><section><title><p>Level 4</p></title><section><title><p>Level 5</p></title></section></section></section></section></section><section><title><p>Level 1</p></title><section><title><p>Level 2 with emphasis</p></title><section><title><p>Level 3</p></title><p>with no blank line</p></section></section><section><title><p>Level 2</p></title><p>with no blank line</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Paragraphs</p></title><p>Here’s a regular paragraph.</p><p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p><p>Here’s one with a bullet. * criminey.</p><p>There should be a hard line break<empty-line />here.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Block Quotes</p></title><p>E-mail style:</p><cite><p>This is a block quote. It is pretty short.</p></cite><cite><p>Code in a block quote:</p><empty-line /><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><empty-line /><p>A list:</p><p> 1. item one</p><p> 2. item two</p><p>Nested block quotes:</p><cite><p>nested</p></cite><cite><p>nested</p></cite></cite><p>This should not be a block quote: 2 &gt; 1.</p><p>And a following paragraph.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Code Blocks</p></title><p>Code:</p><empty-line /><p><code>---- (should be four hyphens)</code></p><p><code></code></p><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><p><code></code></p><p><code>this code block is indented by one tab</code></p><empty-line /><p>And:</p><empty-line /><p><code>    this code block is indented by two tabs</code></p><p><code></code></p><p><code>These should not be escaped:  \$ \\ \&gt; \[ \{</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Lists</p></title><section><title><p>Unordered</p></title><p>Asterisks tight:</p><p>• asterisk 1</p><p>• asterisk 2</p><p>• asterisk 3</p><p>Asterisks loose:</p><p>• asterisk 1<empty-line /></p><p>• asterisk 2<empty-line /></p><p>• asterisk 3<empty-line /></p><p>Pluses tight:</p><p>• Plus 1</p><p>• Plus 2</p><p>• Plus 3</p><p>Pluses loose:</p><p>• Plus 1<empty-line /></p><p>• Plus 2<empty-line /></p><p>• Plus 3<empty-line /></p><p>Minuses tight:</p><p>• Minus 1</p><p>• Minus 2</p><p>• Minus 3</p><p>Minuses loose:</p><p>• Minus 1<empty-line /></p><p>• Minus 2<empty-line /></p><p>• Minus 3<empty-line /></p></section><section><title><p>Ordered</p></title><p>Tight:</p><p> 1. First</p><p> 2. Second</p><p> 3. Third</p><p>and:</p><p> 1. One</p><p> 2. Two</p><p> 3. Three</p><p>Loose using tabs:</p><p> 1. First<empty-line /></p><p> 2. Second<empty-line /></p><p> 3. Third<empty-line /></p><p>and using spaces:</p><p> 1. One<empty-line /></p><p> 2. Two<empty-line /></p><p> 3. Three<empty-line /></p><p>Multiple paragraphs:</p><p> 1. Item 1, graf one.<empty-line />Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.<empty-line /></p><p> 2. Item 2.<empty-line /></p><p> 3. Item 3.<empty-line /></p></section><section><title><p>Nested</p></title><p>• Tab<p>◦ Tab<p>* Tab</p></p></p><p>Here’s another:</p><p> 1. First</p><p> 2. Second:<p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third</p><p>Same thing but with paragraphs:</p><p> 1. First<empty-line /></p><p> 2. Second:<empty-line /><p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third<empty-line /></p></section><section><title><p>Tabs and spaces</p></title><p>• this is a list item indented with tabs<empty-line /></p><p>• this is a list item indented with spaces<empty-line /><p>◦ this is an example list item indented with tabs<empty-line /></p><p>◦ this is an example list item indented with spaces<empty-line /></p></p></section><section><title><p>Fancy list markers</p></title><p> (2) begins with 2</p><p> (3) and now 3<empty-line />with a continuation<empty-line /><p> (3) iv. sublist with roman numerals, starting with 4</p><p> (3) v. more items<p> (3) v. (A) a subsublist</p><p> (3) v. (B) a subsublist</p></p></p><p>Nesting:</p><p> A. Upper Alpha<p> A. I. Upper Roman.<p> A. I. (6) Decimal start with 6<p> A. I. (6) c) Lower alpha with paren</p></p></p></p><p>Autonumbering:</p><p> 1. Autonumber.</p><p> 2. More.<p> 2. 1. Nested.</p></p><p>Should not be a list item:</p><p>M.A. 2007</p><p>B. Williams</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Definition Lists</p></title><p>Tight using spaces:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Tight using tabs:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Multiple blocks with italics:</p><p><strong><emphasis>apple</emphasis></strong></p><p>    red fruit<empty-line />    contains seeds, crisp, pleasant to taste<empty-line /></p><p><strong><emphasis>orange</emphasis></strong></p><p>    orange fruit<empty-line /><empty-line /><p><code>    { orange code block }</code></p><empty-line /><cite><p>    orange block quote</p></cite></p><p>Multiple definitions, tight:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Multiple definitions, loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Blank line after term, indented marker, alternate markers:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /><p> 1. sublist</p><p> 2. sublist</p></p></section><section><title><p>HTML Blocks</p></title><p>Simple block on one line:</p>foo<p>And nested without indentation:</p>foobar<p>Interpreted markdown in a table:</p><empty-line /><p><code>&lt;table&gt;</code></p><empty-line /><empty-line /><p><code>&lt;tr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;td&gt;</code></p><empty-line />This is <emphasis>emphasized</emphasis><empty-line /><p><code>&lt;/td&gt;</code></p><empty-line /><empty-line /><p><code>&lt;td&gt;</code></p><empty-line />And this is <strong>strong</strong><empty-line /><p><code>&lt;/td&gt;</code></p><empty-line /><empty-line /><p><code>&lt;/tr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;/table&gt;</code></p><empty-line /><empty-line /><p><code>&lt;script type=&quot;text/javascript&quot;&gt;document.write(&#39;This *should not* be interpreted as markdown&#39;);&lt;/script&gt;</code></p><empty-line /><p>Here’s a simple block:</p>foo<p>This should be a code block, though:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    foo</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>As should this:</p><empty-line /><p><code>&lt;div&gt;foo&lt;/div&gt;</code></p><empty-line /><p>Now, nested:</p>foo<p>This should just be an HTML comment:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Multiline:</p><empty-line /><p><code>&lt;!--</code></p><p><code>Blah</code></p><p><code>Blah</code></p><p><code>--&gt;</code></p><empty-line /><empty-line /><p><code>&lt;!--</code></p><p><code>    This is another comment.</code></p><p><code>--&gt;</code></p><empty-line /><p>Code block:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Just plain comment, with trailing spaces on the line:</p><empty-line /><p><code>&lt;!-- foo --&gt;</code></p><empty-line /><p>Code:</p><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><p>Hr’s:</p><empty-line /><p><code>&lt;hr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot;&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Inline Markup</p></title><p>This is <emphasis>emphasized</emphasis>, and so <emphasis>is this</emphasis>.</p><p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p><p>An <emphasis>emphasized link<a l:href="#l1" type="note"><sup>[1]</sup></a></emphasis>.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p>This is code: <code>&gt;</code>, <code>$</code>, <code>\</code>, <code>\$</code>, <code>&lt;html&gt;</code>.</p><p><strikethrough>This is <emphasis>strikeout</emphasis>.</strikethrough></p><p>Superscripts: a<sup>bc</sup>d a<sup><emphasis>hello</emphasis></sup> a<sup>hello there</sup>.</p><p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p><p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Smart quotes, ellipses, dashes</p></title><p>“Hello,” said the spider. “‘Shelob’ is my name.”</p><p>‘A’, ‘B’, and ‘C’ are letters.</p><p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p><p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p><p>Here is some quoted ‘<code>code</code>’ and a “quoted link<a l:href="#l2" type="note"><sup>[2]</sup></a>”.</p><p>Some dashes: one—two — three—four — five.</p><p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p><p>Ellipses…and…and….</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>LaTeX</p></title><p>• </p><p>• <code>2+2=4</code></p><p>• <code>x \in y</code></p><p>• <code>\alpha \wedge \omega</code></p><p>• <code>223</code></p><p>• <code>p</code>-Tree</p><p>• Here’s some display math: <code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code></p><p>• Here’s one that has a line break in it: <code>\alpha + \omega \times x^2</code>.</p><p>These shouldn’t be math:</p><p>• To get the famous equation, write <code>$e = mc^2$</code>.</p><p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000. (It worked if “lot” is emphasized.)</p><p>• Shoes ($20) and socks ($5).</p><p>• Escaped <code>$</code>: $73 <emphasis>this should be emphasized</emphasis> 23$.</p><p>Here’s a LaTeX table:</p><empty-line /><p><code>\begin{tabular}{|l|l|}\hline</code></p><p><code>Animal &amp; Number \\ \hline</code></p><p><code>Dog    &amp; 2      \\</code></p><p><code>Cat    &amp; 1      \\ \hline</code></p><p><code>\end{tabular}</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Special Characters</p></title><p>Here is some unicode:</p><p>• I hat: Î</p><p>• o umlaut: ö</p><p>• section: §</p><p>• set membership: ∈</p><p>• copyright: ©</p><p>AT&amp;T has an ampersand in their name.</p><p>AT&amp;T is another way to write it.</p><p>This &amp; that.</p><p>4 &lt; 5.</p><p>6 &gt; 5.</p><p>Backslash: \</p><p>Backtick: `</p><p>Asterisk: *</p><p>Underscore: _</p><p>Left brace: {</p><p>Right brace: }</p><p>Left bracket: [</p><p>Right bracket: ]</p><p>Left paren: (</p><p>Right paren: )</p><p>Greater-than: &gt;</p><p>Hash: #</p><p>Period: .</p><p>Bang: !</p><p>Plus: +</p><p>Minus: -</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Links</p></title><section><title><p>Explicit</p></title><p>Just a URL<a l:href="#l3" type="note"><sup>[3]</sup></a>.</p><p>URL and title<a l:href="#l4" type="note"><sup>[4]</sup></a>.</p><p>URL and title<a l:href="#l5" type="note"><sup>[5]</sup></a>.</p><p>URL and title<a l:href="#l6" type="note"><sup>[6]</sup></a>.</p><p>URL and title<a l:href="#l7" type="note"><sup>[7]</sup></a></p><p>URL and title<a l:href="#l8" type="note"><sup>[8]</sup></a></p><p>with_underscore<a l:href="#l9" type="note"><sup>[9]</sup></a></p><p>Email link<a l:href="#l10" type="note"><sup>[10]</sup></a></p><p>Empty<a l:href="#l11" type="note"><sup>[11]</sup></a>.</p></section><section><title><p>Reference</p></title><p>Foo bar<a l:href="#l12" type="note"><sup>[12]</sup></a>.</p><p>Foo bar<a l:href="#l13" type="note"><sup>[13]</sup></a>.</p><p>Foo bar<a l:href="#l14" type="note"><sup>[14]</sup></a>.</p><p>With embedded [brackets]<a l:href="#l15" type="note"><sup>[15]</sup></a>.</p><p>b<a l:href="#l16" type="note"><sup>[16]</sup></a> by itself should be a link.</p><p>Indented once<a l:href="#l17" type="note"><sup>[17]</sup></a>.</p><p>Indented twice<a l:href="#l18" type="note"><sup>[18]</sup></a>.</p><p>Indented thrice<a l:href="#l19" type="note"><sup>[19]</sup></a>.</p><p>This should [not][] be a link.</p><empty-line /><p><code>[not]: /url</code></p><empty-line /><p>Foo bar<a l:href="#l20" type="note"><sup>[20]</sup></a>.</p><p>Foo biz<a l:href="#l21" type="note"><sup>[21]</sup></a>.</p></section><section><title><p>With ampersands</p></title><p>Here’s a link with an ampersand in the URL<a l:href="#l22" type="note"><sup>[22]</sup></a>.</p><p>Here’s a link with an amersand in the link text: AT&amp;T<a l:href="#l23" type="note"><sup>[23]</sup></a>.</p><p>Here’s an inline link<a l:href="#l24" type="note"><sup>[24]</sup></a>.</p><p>Here’s an inline link in pointy braces<a l:href="#l25" type="note"><sup>[25]</sup></a>.</p></section><section><title><p>Autolinks</p></title><p>With an ampersand: http://example.com/?foo=1&amp;bar=2<a l:href="#l26" type="note"><sup>[26]</sup></a></p><p>• In a list?</p><p>• http://example.com/<a l:href="#l27" type="note"><sup>[27]</sup></a></p><p>• It should.</p><p>An e-mail address: nobody@nowhere.net<a l:href="#l28" type="note"><sup>[28]</sup></a></p><cite><p>Blockquoted: http://example.com/<a l:href="#l29" type="note"><sup>[29]</sup></a></p></cite><p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p><empty-line /><p><code>or here: &lt;http://example.com/&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Images</p></title><p>From “Voyage dans la Lune” by Georges Melies (1902):</p><image l:href="#image1" l:type="imageType" alt="lalune" title="Voyage dans la Lune" /><p>Here is a movie <image l:href="#image2" l:type="inlineImageType" alt="movie" /> icon.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Footnotes</p></title><p>Here is a footnote reference,<a l:href="#n30" type="note"><sup>[30]</sup></a> and another.<a l:href="#n31" type="note"><sup>[31]</sup></a> This should <emphasis>not</emphasis> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<a l:href="#n32" type="note"><sup>[32]</sup></a></p><cite><p>Notes can go in quotes.<a l:href="#n33" type="note"><sup>[33]</sup></a></p></cite><p> 1. And in list items.<a l:href="#n34" type="note"><sup>[34]</sup></a></p><p>This paragraph should not be part of the note, as it is not indented.</p></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>/url</code></p></section><section id="l2"><title><p>2</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l3"><title><p>3</p></title><p><code>/url/</code></p></section><section id="l4"><title><p>4</p></title><p>title: <code>/url/</code></p></section><section id="l5"><title><p>5</p></title><p>title preceded by two spaces: <code>/url/</code></p></section><section id="l6"><title><p>6</p></title><p>title preceded by a tab: <code>/url/</code></p></section><section id="l7"><title><p>7</p></title><p>title with &quot;quotes&quot; in it: <code>/url/</code></p></section><section id="l8"><title><p>8</p></title><p>title with single quotes: <code>/url/</code></p></section><section id="l9"><title><p>9</p></title><p><code>/url/with_underscore</code></p></section><section id="l10"><title><p>10</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l11"><title><p>11</p></title><p><code></code></p></section><section id="l12"><title><p>12</p></title><p><code>/url/</code></p></section><section id="l13"><title><p>13</p></title><p><code>/url/</code></p></section><section id="l14"><title><p>14</p></title><p><code>/url/</code></p></section><section id="l15"><title><p>15</p></title><p><code>/url/</code></p></section><section id="l16"><title><p>16</p></title><p><code>/url/</code></p></section><section id="l17"><title><p>17</p></title><p><code>/url</code></p></section><section id="l18"><title><p>18</p></title><p><code>/url</code></p></section><section id="l19"><title><p>19</p></title><p><code>/url</code></p></section><section id="l20"><title><p>20</p></title><p>Title with &quot;quotes&quot; inside: <code>/url/</code></p></section><section id="l21"><title><p>21</p></title><p>Title with &quot;quote&quot; inside: <code>/url/</code></p></section><section id="l22"><title><p>22</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l23"><title><p>23</p></title><p>AT&amp;T: <code>http://att.com/</code></p></section><section id="l24"><title><p>24</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l25"><title><p>25</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l26"><title><p>26</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l27"><title><p>27</p></title><p><code>http://example.com/</code></p></section><section id="l28"><title><p>28</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l29"><title><p>29</p></title><p><code>http://example.com/</code></p></section><section id="n30"><title><p>30</p></title><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p></section><section id="n31"><title><p>31</p></title><p>Here’s the long note. This one contains multiple blocks.</p><p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p><empty-line /><p><code>  { &lt;code&gt; }</code></p><empty-line /><p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p></section><section id="n32"><title><p>32</p></title><p>This is <emphasis>easier</emphasis> to type. Inline notes may contain links<a l:href="#l32" type="note"><sup>[32]</sup></a> and <code>]</code> verbatim characters, as well as [bracketed text].</p></section><section id="n33"><title><p>33</p></title><p>In quote.</p></section><section id="n34"><title><p>34</p></title><p>In list.</p></section></body><binary id="image2" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEASABIAAD//gBQVGhpcyBhcnQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uIEtldmluIEh1Z2hlcywga2V2aW5oQGVpdC5jb20sIFNlcHRlbWJlciAxOTk1/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/8AAEQgAFgAUAwEiAAIRAQMRAf/EABoAAQACAwEAAAAAAAAAAAAAAAAICQUGCgf/xAAjEAABBQEAAwABBQAAAAAAAAAGAwQFBwgCAAEJChEVOXa3/8QAFgEBAQEAAAAAAAAAAAAAAAAABggA/8QAJhEBAAECBQEJAAAAAAAAAAAAAQIAAwQFBhEhszE0NlFUcXR1tP/aAAwDAQACEQMRAD8AqQzziPNmpiqnIO1q4H+WkB84MdlzRSuM82/jVw/JCORtRmQz5d2VTy6WmS2eSYx3U/qkSRbgFsqRzH2Is4/mCluXc33vy8xTnJjTNqV/T8LKmkhr8Hq1da2aOvTfIh2CFeNt+GxFBP8AJFdFUbPWh+4FdXV7OtZOMR7mK9lBWNN+JBmMQ5cwmfH8DEFhTZUCRlE6CBq/ds/nBh9oYygeY1L9FnCUnBSN1t+w0l9bNomx1cllsOrL9OCTKtKOIqua6UVjP0dEvTyM7gp/3whbkAD0ScX3r6MLg+C2/XsMhCnJRn/5cVNHyJHiX6JKIFhhqnFeagm9BIgjfcJyNBTZiROBUk6Mp8CJRmT4NWU2MatV7n495DPk/wAbMJSRJOTBDItq0KR5s/nJN7LPW8AJWtYAoKQaDp+u4XShxgXhYcbHoxNTllCwETGQ8ag2jmDVsk8w/wCOp/C/hn+mWV/utpePH+D5wmF39NY6UakjUYR1Dn0YgRM5zQAAAMdfAA4AOAOArjkMNQ3vgm7UKtBR+m9QHFD5tpnDtpy+t2R20gK/OsmFtuDpaL5mVyiT5qdEVAvZci5ch5VoSGKbwlWTBr0RPoZT07av9lHfrXo6yLApWMugKpPM9SV1cDm65s/wkOHZBojoqiM+6GpMSj4FhtayNAUi5H3LfQBG2KWssFoSPuJdKyMLKtpuLi+e3jwFICUg7CSHsNVlYlKdizOTvKdq3KTsG8pQirsAG6vAB5FdhP490U4gfjxi+DedoqO4YftmKdKNulO26jiOv+2Ga/bftVNFXpHtVHrpLpRFJTpP3z77T469++fTx48e4LueE+NY6UKk7UniLP8A7rNf3X6//9k=</binary><binary id="image1" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAD6APoDAREAAhEBAxEB/8QAHAAAAAcBAQAAAAAAAAAAAAAAAQIDBAUGBwAI/8QAPhAAAgEDAwIEBAQFAgUFAAMAAQIDAAQRBRIhBjETIkFRB2FxgRQykaEjQlKxwRXwFjNictEIJEPh8SZTgv/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgT/xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECEiExQf/aAAwDAQACEQMRAD8A2t0YoQpwT2qVzMV+N3UHgrDY2eoM0y58VEbgfp9K1yMRmnuJ5h40jyYHGSeKrWE8u2QAApOMdqGCsmT8h70TAJwMAZx249aKBy4c9vTNUC0zDCgmmmG7Ockjkj1PrUTAjcy5XP0ouCgHae4IomOJHhgIc55PHY0Uk5IXLMcUBQ27n96JYO2MYLebHtRBA7BcMx29sdxQJqwZRtIP+BQKpjHHc+xzigNGoAO/k+nPAoAYlee5oBiGeWySO9AJCgY5PHagFCADzj2GaA2N2TkjA/U0HMwbPPeiyBLDfkkj04FCl1cBMgn6URwYFGySR6D2oAeQDAxnHGKAhU4IbGc+tFwnwDj9aK7f8v2oNu+IHxNvJdXmt9EmKWSqArA/mPvxUxMZNe3Ml1dvNcMzSSEsxPOferJhht/OWyAPc0UfdgDcuM8n50AMCykZFARsngcY/egTcbjnJz9O9AB2kZGSQOcUCX8x83bntQCMruJ4B7D1oCyOGzxtJ9M80CAdg5UjFE0aFJrghLeNpHY4IRdx/QUNWCw6D6q1EZttEvirHAZ4ig/U4qw1b9H+CHVN3Mq6hJaWMJ5ZjJ4hA/7R3P3q3ET+pf8Ap/lWNm03XkkkA8qTW+3PHupP9qxopV78G+s7VSV0+OcAn/kzqSfscVvIKzqPTWu6XKE1LSL+Bhz5oDg/cd6lEZzGwLrtPqrA8frUCJfcw9gfegUjZsEAffNADyHt78UAjCjzDJxRcO5Pw3gwCGOVJQp8ZncMGOeNoxwMY96GCbQffFFcUXKjDDt2NEo+N3yyM5z3okKuqJgIzONoJyuMGi4QfGcqSfXBoYHJx659qKIRnnsfUGgJn/poJYoTIGLY+eDzQFlQK2G/KCTmgbspfO0qce/agPGcR7nHf9vnQFfBPlOc88Gg7uucc/M0Bd208YJJweKAYrea4kKQICRGW5IUYUZJ570DYqcknt3FE0VuVyDzj1oamOlulda6puvC0a0eZVIWSbtGn1Y1NNbX0x8ENH0qL8X1NdtqDoNxiQbIh8u+WpqL70Tc6fcxypouiRadbW8hhLFFXcB7Edz+tNFvEZxkmmgShbA9PlUA+Hgg/wBqDgmBkd6ArJuJBGR7VdEdqWgaVqMfh6hp9pcLj/5Ig2KaKJrvwW6S1EFoLaWwmPIe2fAz81ORTRm3UfwI1mzBbRL+K/ReyS/w3x/b+1Wexmev9O6xoE2zWdOubUDszr5T9G7H9auCJj2n3PPrUXTlGBB2kYx96GlQMjJJHuRRXBgDgk8DtRKH8w4OfYA0SUlIMsFXJ4oujHH8ufnRRGOSNoJNAeFC77F2jPucfvQFEqgY3nj/AKaCUY58wwq54AoCzOmVMke9QeRnGR7ZoEIF7pnaTk49KDpSSwQntQJsGKjgggZ9uDQc4OOe1Am2UCkHOR7dqA8t/cSW8MEkrGGEsUTPCk4zj9KJT3pzQtS6m1aPT9Jh8SVxlmJwqL/UfYURuuhfArR7f8NLrF1cXciKDJCrbI2b7c4+9NGtaRptrpdqltYW0VtAn5Y41wBUodvGjqUdQyn0YZqAIreOBFSFFRF7BQAKA1xcRwKplcJuOBn1NAR7y2ikWMzoZnGVQHJNAuQcD3oBKkD2FBy8jnvQFxnjjmg4rxwKBMqCBtPNA3vbCC+tngvYo54HGGSRQQR9DV0Y91n8DNOvFkuOmZmsrk5PgSNuiY98D1X+1XRhWu6DqWgX72er2j2069t/ZvmD2IoGG7jbnj1FFlB224PB+VClN4DYJHyAojmPGCck8cetCAxgjPp6UaAGKtx6+9ATAXO7nFBw8HHLN+goJhBuj2FeAcnmgNazW8U0vjweODGyqpYrsYjytx3x3oGa5LEEjH9XvQGlgmjjMmQq4HBPfPYgevagG5nhe3tkFuInQHxJQTmQntn0wKBKTlAeDx60DSY+U9zn+mgsnQvROr9Y3W2xi8KxV8SXUnCrjvj1Y/IUR6c6A6H03o6wMVgrSXMoBmuX/NIf8Djt/eiLfjJwO9ZBiOfmKDhktzQAzYBLZ8oyaDF+rOptVv8AUjNZL4tjA/lT+kr3wvqTQX/pi3Y+DqFxKXurmFWAaPaVzg4I/b0oHlxqV7penRTXFu93dPLsESYB2k8n7CgnradLq1WaIOFI/K42sPkRQCg3Kcd6Dgp3d6AdrGg5VxnjmgKWB8uQGxnFAUgKuSefSghuqNC0jXbAWGtxQyJKdsYc4YMf6T6GtDzR8S/hnqfSUz3NvuvNILYSZR5o+ezj/Pb6UGfLzyD/AJoFFySQVBHpQDJ5kGByPahAbWxn5+po0OF3D+XPtQJsNwOe+aAuygmMkebgHnHFALHYpJwSeGz2oGpOJWAI49BQEZlYAHkg4oARVOMvtBIJJ7AUAX6xxSOsUgmjViFcKRuHviiVfvhT8NZuqpk1LVFeHRkPlHZpznsP+n50qPS+mWVppdnFa2cEcFtGu1I41ChR8qyHVxK8cLPDD4kgGVQHBNAa0maaBJGTYzDJXOcUCy5JOaA2OMfoaArkheM7vlQNYNOtoWLJCgLHJwo5NApPKLaNpGRQB6j2oGmnRvcyNd3O/DkeErLhkWgklIdCyZOCRzxzQEeRxhdpUnncBkD5UCxXjJ7+tAlctMsIMLohz5mcZAH09aBQYdQwyAeaAuA7MAQxHH0oG1481nbGVInuWU5Kr+bHrgepoKB1u+o6jqlvBH05NevEBPBK0pQR4I4BHZj+1Bb9IS7lsFtNWtYwDGFYB/EXHqpJ7/WtQYx8VfhGbdZtV6Uh8gy81mpyR6koPb5UGKY4YkeYd88fbFAI5AC98c5oQBb+U9+9GnN5RgDgjOPWgAN3yMfWgAqc91/UUD2RSSRg9+49KCR6e0WfX9WS0icRwgb55WOFijH5nP0FBYNRi6dSR7HRNPmu0hOW1GaXaZMdwBwAP3oynE0XRYrFtV02wS4ECj8dp1wcsE7eJEf39qlFZ616ZttPu7Kbp9Zbi0vYzNCcgjHqoHuKsEp8LPh7P1PqjXerxywaXaviRSu1pWH8g+XuflQemIIY7S3SK3hVIo12pGoAAA7AClEL1N1RH0/oTalcwx+IACLaSQKx59Ppmshv0D1jH1ZbTubU27xkkAnKsuSMg/UUFluLlLaJXETyecKAg554zigXiubeRnSKeJ5FOGVXBIPsaBLULoWkIfw3kYsAqIOSTQJMbpm3oqlmwACeF9yfn+1A+Bx34oE5IY5P+YFbnPIzQKAckHuRQCAQOO1AL8r9KDhkZOT9M8UCcrxgAyYJzwD70CT3Itxm8kgi3fly+P7/AOKA9pskhEkZysnOfeg6RH8w3tgjAHtQRZ1uystSg0m5eRJ2UbHceV8fP3oJkBSAVII9xQFdSRwKDDvjN8L/AMSJte6chxcgFrm1QcSf9aj39x61YMH8Q+CkfhqpQncxBDH5H6VRwXJ/Ke1Am2QchuMYOaNFSAVznB9qAm8f10D2RmX8jDHP3oLbebtA6ej0m2LrfX6LcX7IMskf8kf6HcffIoG8yTadZxSTxCK3kRZUwSFfkruIJ78GhiS6Y1OS3160uZJFWO5bwZtxzuQ8bcfPNMZXvo2wsLnQ9R0q/maJNNv5Yo3bjCuMAHPzqA2jdUan0lF0/ZXcElxp9zE+5WVd/DE71IPPB7H2po1bSNXsdYthLp1ykyEcj+ZT817ioITrnoux6vs1gv5JYnjz4ckZ/Ln5etA+6N0BemdBttMina4WEFfFdQpIJJ7D60E5I4Vo9qnnsQO1A3k0yzeTxhCizZJ3qNpz9RQO449igMSxHGW5NAIwBtUAUAMORkfegMhG3jtQD8+fvQGXJz7UAHuRQA5YDI5FB0qCQA5yaCs2/SFit/Jd3AmvJ2bO64ctt5zwD2oLMilVAUDgcAelAJLbhgZz3oGN9HPIYmhtrWRw2czjt7Y+dA+h3mJS67W9gc0AvuLYANADpkZABHY85oPOnxy+Hx06Z+odGjC2jt/7qBRwjH+cY9D6/OrKMebcceHwfaqCYIyDgZ96GhHOFJI4/WjQpXnsaCz9J6fDqGvRC8OLO3Vri5PB/hqMkfc4H3oDT3UupapcXrKS9zISgDdhnAGPbsKC5aLLBHq9p01c6bbagPE23kpJYhmz5IySAAMj6nNGdRnT2lu3V9vaQQrJDHfCMFj5kAfufsMUFogu5H0jrLUYXK+Lq0aRse/lf/8AOKlFfudagvbnQpNQRmtILydCwPdCQcgMOMZFQanPoeiawBd9M6s9jeKPK1vKQp+RFA4septa6fuFtuqbRrmzx5b+BAdo927A+vsflQXfTr2z1O3W5025juIW/mjOR9KAZI914khaRNo4XdwT9KAl3b2+oWpjMoZWbOVfnI9sUCrXUNssUU8w3sQoJH5jQLvwQQC3NAKvuUPtK54waDg23v6UA7weBnNAIOBigMr+hoOjdZQdhBx3waAVG0Z7UBWfAOQSflQChyNxBAxQRutarb6bHALi9trSW4kEcJnGd7ewFA/j8QEK/IA/MBjmgWDDBB7igj9dupLTTbiaHZ4oQ7A7bQW9ATVgwXSNV6onl8azW6t45pWdxHIxWA/zNtz7A8Glg2S1u7fX+nt0J/H2c4MMhmQoW9GBUjj60g8sfEHpebpDqi4sHLG2Y77eQ486E8fcdvtVFekGW4UfegKVAAKgnFGhuDzxQXbpDTZF6a13UnUqrCOzQ5wGZmXIJ+lE0ppkEK6nJcRWcTW9hA08iKcjcowpye/mxQ0+6VRbC/jvLm48L8LG9y8pIOXxkDnuSTipqHXQMng3es9S3fhn8DbvcZI5Mr/lH700dc3Dad8NtPs4nU6jeXD6nMCwBRF5XOfU8YHrTNJFF1X8RawW1jc4GxTKNrZB385yPkBTFw1stSu7Ni9tPLGSQfK5Aphi8J8UNUm6fn0u72yvJ5fGbuF/39aYYtGgadp9/axXnRetzaXqnhqZI3bEcj4547Ak/X6UxFisPiXe6NMdO65057eQAr+LhUlHHbOPX07UwWXpQ6BqMo1LpgW0sioVI8Qgxk+684qC028M5890Y3kHKbUwF+lA4LDOzu2M4FAOG3DaoI9cntQdJxzQEyR259f/AKoGl5fSQRFo7ZpB/MhYIR9zxQdayyXKb7gqox5Yo2yB9WHc0DPUIWnhWKxkuYFRs5gcKWbPY59KBkx6isVeSGW31JNwHhyOUkA+o8v9qCfjkMo/LJFKqBmRvSgc2swnRyFcYODuXGfpQMtRsLK8vYJL+wjuGiUtHK6hghz6Z7H6UEmCsig84I9RigiruC9t0DaaVmIIHhTOQMeuGwT9qCJ1ywv9T0U29xFFiaVBJGHz5M5ODgYPY/arKJPTtLW1t44i7SKq48w8x+ZPrTRJoipGFQAAdgKgzX47dMJrXSrXkUe6807MykDkp/MP8/aro80FQyZ+tUJ7hvH0x270XQ7KGtXvIk0T4c9P2bIhkvpnvJVfjIxhf7qftRDXpu0/1DpzXltUlkvmWMBI+2zdnn64oYa6yX0XTm0i4jQ3t6wmuV53xov5UPpyeeKyLbpFtZ6Xpmn6TqNq7/ic6pqQRR/DVf8Alq2fTOP0FXBnXU+ox32o3lzeW+JrxlMXHKR9wfbJ/tVWK5f3AnaAjafCTwwcY4BOM/qKKSjA4Dg8j37UHZKkE5P0olSFlcLDdJPbTNBOigjxOVZu3+80Rbbnrq9l0t9I6isRd2rgKpPlZMdyre9An07oupoh1zo2+lea2fMlr+WZFx7ZwwqWDVug/ihDq7R6b1EPwmpMNokPlVj8xng1BqEUe1EAJOMDOc5oDSxq6YYeuaAJF4oCBUQ7mJ45zQHYB14wR86AVjBXyjge1AEcRTHlA9hQE8kbgEohJ5yQM0ETHNqMOr3IZQ9tIMQyEjKt7D3FBLqywRPJKTuxlj3zQI3Ut14e+yhWRj28Q7RjH60EfpF3rU/jLqFrHbS4/hqpJXH19aCRa8jgiVr1xGwXzYyf99qA9tc29/aRXFnKs1vINyOO2KByoxwe9AYocHGKBvdwLcWzxSLuR1KuD6gjBoPHXWujt071Nf6YSSkUnkJ4yp5H7f2rQgWAA3Y+1An4j/1t+tBrHxKuYS+gx24LRx6ZFtI/lz60FY0+/v8ASphNpd68EpXY5AGNvzFF1YOirZbzVrvX9dkNxZWH8eeaY5Lyj8qj7kcVlETqOqXd/HrPUNzcNE16Tbwxf1JkEgD2AA/etBte9R2Oq2cv+p6XHJfBFjgmjkMaRgAAEqO5o1FWfbgjsR8+9AlI5CgEggeoNAq0iug8uD7g80KKmCcZ7fPmjJzJfT/hWtjJvhOPK/OOe49u9A96X1W90/VrRtNkkSfxQF8I5yScdvX6UGidSLpfVFzcvbRiy6kgZBGysFW7B9T7HHNSjU+o9S1iz0e2uNLmX8RYxJ+KgYeVwVGTn5d6gjug/iU3UOt/6TewQpP59skL5B29x/8AYoNHPB78Ggb2l3bXO78PKsoyVyvIBHBFAoSkbfyhn4GfWgTnmWFN7ybAvc4Jz9hQRdx1dp0S3Dw+JJHbDdPIUZUjX3yRz9Bmrgzbqb4x9Oxho4bB751O5HPkXPsc80wQHT/xrJ1IHUbGKO0kdRiBiAgz+YjnsPpTKN/tLy3vLOK5t5klt5F3LKhyCPemAYLuK5XMDEj1OCP71ArGWLMPT0oIbU7h11u2t49OllWWNm/FIRsjI4AI/egfQ2ktpbww2XgxoDl9wJ49cUCHUGv2GixM13Mkcm0squwUH5/SrgxDW/jFcXOteHb3otrKEEiRISRM3zGc49v1qDT+gfiBpvV7y2unxTxywRhz4ozuHbOR2+9Bmf8A6kNIEWpaZqiooEqtBIR6kHI/atfRjDEt3AKjgVQjug9j+lQWh72e/htTOzyeCnhHPomeMYoJvQum7vVD47K9jpsQBkvZ5NoAHcgUAa7rKamE0Lp9Xh0G1OZZTwZSO8jn9cCsivdS38F9cJDZIY7G2URxKe5x/MT7nNaEKrENwAFPPlosFwS2cd/cc0UlIm3JOeKDo2LH+UA0SjgDk98URzPiJ2449e/NAbS7v8PdpKkpikQ5WQLkqccGgmYNQmXWLeQLG9wVRQVPlcj+Yn3xQa98OviAjz3WjdXSpFdliEuJCNjDtsJ7enepRdel+kdL0rqOTVdIsoYklV1dixO3nunpg9jUCnU3WMeka5b2EUcl3JInmigQs6ZPlJAHY8+vpQP9O1m3nthNo0cTwM2JDwoVj6H5gd6CbhtUiVn8TcXO4ktkZ+We1BAf8Z6fZ2uqXWpyxQrbStGseQzMB2IA961B59+IHXmodXal+HsPFh04HbHCo25+bY/zQWv4f/CCxvII73qC8iuXYb1tYZeF9txHf6U3BatX+DvSl86x6cr2dwjbnEUmcj6Enj6U8hLdJdEX/SmowJp2tTT6Oc+La3HO0442+3NBf1LmRUjjQAfmc+nyHvWQockYyQcY3CgaabaPZxGNnaUFi3mPb6f+KA2q3RstNurnBxDE0mPfCk1YPMemaP1L8RtYN9fJPc2aMUaVmCKg54H0z6VRYendf6Z6T1W56a6j6fgfwJyguhGJmPzbIzjHtSjTn0zSunbi01fSkt9Os5GAmWNCDOGxtXb6HnNZEZ8etOF90DPKFy1rKk3zAzg/3rXI8u7zvOTg4zVoTLDJ81QWDTb2SwuvFgcrkbXwM5H0PFGqsjpd6+kcT61Nc2ieb8OikFc/9PA+WfSjKA1nWBzpFlZ/hLWM4KH8zsPVj6mghN4IyQRk5NGo5BkFmyAfSgVjChdpGO/FAXYpOHLBe/FAQqoBJbA9sUBGxgtgEj/eaCf6DGjt1TZf8RNGumKS7mQZQkDIB+WaMrf8Ub/ovV7V20JIYL62K4khhCLOCcEcAdu9BmCuEQvxvyFUg42+v+/rQaj0zax/EXRY9Nns0t9TtM+BqCKAjEclXA98jn+1Si7Cz6u6O0tLjTrxLu2tQJJrDwcKE/m2M2SfeoLrpupDV9Mh1OytUS2vIN8m4BZQf6T7+vPpj50GfdK9L6rJqk1y1y0elRDKRqdjHHoyDhjx39e9BZr7fagW0j3kul3iETRqHkeF8ZBUjkZIxjtk5rQ86dW6r+O1OcW0UtvaRsY4oWfLKBxz7k/5NA46P6X1rqS6WPS7V9v88rAqi/f3oN46X6C1DSotkus+BIwKl8hn2+3PapROXPT2t20bPY6kJ5UGYmbIfIHGW5z68VBI6DrzzWSrrAjtrwFUbDja5OBlfuaCbluJLeNwIpLiVF3bVXAP0Pv8qBxLO8cYcW7vnuqkAigNFKs8CyxlwG/lcYI+1A31ayF/pt1auSFmiaM/LIxVgwfoO413o3qqfSLyUSwodogAyZVGcbPTPr71aNDvendJ6wtbu7Fi1lezK0bS4VZMjtnFZE0bC5u9Jh0qRAr2yw4uWx59vBI44PegN1tpbap0lqOk2sipLPB4aFsnHbBNOR5A1exFhqFxbeKkngyMhdOxIPcVuhiZFz/zBUEwcKvYnP6fWi0+6chjn6h062uATFLcRrIMnzAsO9EehNR+GvTV3GUh0+O2YsGaWHIf9amjIfib0no3S0VtFY3M000zMzLJtLKvvkenyx96oz0rwNjA8cj2osFLbVAbOc9jRQiXOAwxnj3oBlAxwDj37UDY+vHOQeTQBIdqjcPMfnQwJclWyBgCjJBFeefw4VaVycBUGST2wAKD0L8H9C1rSIILjWLSCytY1lZASVnlL4PI/wD8+vvUo1uwbxI5GkjdVc7isvOBjtj2qBWKFZiQ8CJCB5FHYj5jHFArDbQ20ey3RY1HOAOPsKCH1u61CPSLt9MtlXUHUrbCbJBbPdtvYetXR5T1y2udD6lni1ErJdJLvlK4wWOCePvVgsV/8Sr67UW1vA0NiowIonMe4+7FeT9ARQRmodWa9EYpPBhs1Tygw26rk9xknkn70EjonxZ17TXjAeKTkZ3L+YZ7N8vpSjX+lOpNM6umgkMG3EgBV1DYbG4kewz2NZGkC43CP8MPFBONysMAD50DaHVH8S6N1a+BaxMUjd280pA5wPb296DrXWLK9WNoJdtwybxDKPDcAnHIoJBifTBzzmgaz2UFzPFNNbwvLCcxuyglT7igdRRKg8qAZ5JAAzQEnuYoHiSWQIZW2ID/ADH2H6UERr12BY6hueIQJaO7SK/nHfnHtx3pyPGWoN4jynuCfU963RF+DL/UtQWTkjaWY/8ATnHFGql+j1VerdJY8r+KiJz/ANwoy9C/EjqSbpbRY723RJC8ojIcZ4IJ/wAVkecer9en1+9FzeLCCq4URjgDP7mtLhteadBY2kMczyHUpcO0YxtiUjgH/q9celAiLy1kjCX1ruyMLNGdrj0+h+lE0+t+kNQltJ7yKS3jgiTxUFw/hySp7qp70NV6YEBgWUNjBoaKeAODnHrRoVgDnBP0ozpxZ2f4y5trVeGuJFiBPpk4zQep9C0LTembS30fQbWP8ZsDyTugZgf6ix9fYZpbgmbXSmXULaa6kMzpltzcjJ//AGpaLCY1CDsF74PrUCgHY0HbSx7Z96BGUfxB2xjtQZ11t0Tb6jNfyw2wM18gV5AcBdpzyPnV0Yp1F0o/TEczXjXaTOQYpIk3QlT3B9Rj0zVl0VKbVppImheUSwbsgFfXHc0De0tri/ujFYQSSyfmKopPHqaDV/g9p+padr/gkSRTzKu0kZRlPLYPbOPf2pg9GWzRCMJAFxH5do4wayKX1z/G0CdzqLWRkiaTxQBLudclQvovbv3oMU/4Z67uwnUAt3u1Zw42yhmx3/Ln8v0oN86L1d00i3i1UiGQIocNnEbnkqT2xgiguEbI4DIysp7EHNAZnxQQ/Usksej3EsCl5EUthR5sY52/Mjigr6Qrp3R15LqEcIlmgdpFGAsY2navPJApyPJtwd8rnGBuJz6Gt0MzGSTyf0qCwSKA5ZsAjnn2otTXQYj/AOMNIDqCrXUZwf8AuGDRG6fF6Gyfo6+ub0CR4EPgIScLIeAcfc1keatN0661a+S3sYTPKzAbV9B7/StLrQ/iXp9pYLp8elWsUM11AzXMqt53I7g7j244oiB6W6Tn6j2TeAy2FspTeB+Z+/8AmgtnWlvpdl1Dp1pq07Ja20GFQpuDHHAwPf39KDHriVTKSPOCeBnHHtQGsrG5v5pfwcTOIlMjgEeVfck0XRIreS7uUigRpJXOEVe5PtRE/wBJ9HaxqvUcdhNFJp0lviaSWVcMgzxgdySeBipo9T6O8NppUJ1K4iW5KgSvIyqxb5jPH0paJm1NvKivE6Mp7MpyP1FQLRTwy58F0cjuAckfagOTtO3+Y8igMWCIWbOPlzQNhNBOWEbq5Q+YKc4+tAD7JEZgQfXj0oI/VtIttXsZLW5hRopByCP/ADVlGRa78Erae63aXK1tG3LAncM/Kmh10l8IZdBv4rxtTE0yggJsyoz6/P0po0zSNKEMdo9xGnjxuzkqMAEgjj7GmialjWQMgyCRyQcGoITqHT7q/a30+G2jFmwLSzl8GPBGFA9c5NBPRwJDbpHCipEi4CjtigqfWltqCaG8WhNbxyzOBIs8W8FcY4+dWQQ/wtuZdIGqadrknhy2u2QyOSEZOeRngY+XvTBZZevOmhC8janbqiZ53Zzj2FMFcs+sh1ZqsFrp8UkGkrlpbh+DNzhVX5Z5NQTfXyWUXSV2t+wW3EZ5I4HHt61eYPI0mA5C9snFaoLsPv8AvUEk5JcA8cZG480WnOlXX4PVLO4yQ0cyP244Yf8AiiPUfUump1B0/c2O8xfi4v8AmL3UcGpgw/SujNX0Trj8PpckimOMvHO/kEg9Rjs3PpV0aFq/Qqa1ZJ/qcrverEqNOwGM+uMfemiVtrKbQdMNjp9rvtkhPht6mU5yT8u1BkvXg1qXUtOvddgRY1R3j2YHiMvZSD27CgzSCyuNQ1KK0giL3Mz4VAOc/wDignoNNOnaHeiW8hgkku/Al2+Ziqgn09M0ETp0qpqSmGKOdFcEeLwMfPHag3JLuCRtPmQWsDhNphtVAcn1w3BPFSwDdWGpX1/OYdOtbbSrlQ80szHdn0GR24/c1AbWemdatLbTJdGvJIJypDQwMV3exwOPatSz9Ei/R+txy2mr3evyHV4miWIDhGwwyGA7nGRS2YNZAUBWYDdjGayEvxMYB3nYu4KCfU+woG93c2enWs1xcPFDCp8zEgDPzq4GGgz22saS1zZSZhkdsFePXt86YHWmySeLNDMYikZ4YNlvvUD+VARxQJqgwRQHUAAe2O1AWOFRM8mDlgB37fagb6reXFt4ItLZJnZsuWfaI0Hdjwcn2FAz0nWX1i4u4xY3VpFbv4eZ1x4vGdy/KgkriN2aMRlQoOW3DOR/5qwYr1P1tp2pdS3WnanKkGh24kRl2eaYgcb/AFxnnAqiv9Jno0dRLJPbtdQtkNPIALaMnODsPPpSjbdK0DTbWQXui+Gsco3BU5hPP5gPT7VkU74t6PZHpq/1N5ZZbwrtRnmOwDPOFJwPsK1xR5ybudw788VaC5X2WoJRULSBpAe5PA/aiinAZnHck4A70THq/Qr23/4Y0u4lmCpLBGA7epxjH60Du+WGOBvFlFuWOFcYyCfbPrUojri6k06xX8PFNfBUJ3ltzM3scVBjfVvVXVNit5dapNDZGQGK3shjeAe7YHIwAOT3zVggNTiu+orrR4p7m+upJFR7h3TPhggDaoBwRjnPH5hV0af0xotnoD3l5dWdrY2YjGLhwPEHoef996CC6m0HpuPpk3Wny2s9sJPHJ3AeI2D39T37UGU9QTDULuGPSLPwIyoVIYk2lj6/X70G2/DPp0hVudRuBLcwxhRGkeEjB9M+p96DSLprVHiieaAE+YxHkke4H1qUOIBawL4uAuc8nvj71AwjRtQ1eO78QNp9odyLju/qT8uf70Gb6r8SpLzryy0vp+4NxYSSCEswI2u2Rn3OOD9qC4dVamen9NlaC7tUaIFvCmnHiy4HJXJxnOeDVwed+rOvLnqSyWO4jZSru/kc7ck+30GKosXw2+KmqaDJDY3jR3OmqNoRhtZAP6SP7Ggtmt63qbTJ1XLazJpslwBFblypEOAA7L2OWANS+xrnR2vW3UmjJeWp8wJSRf6WHeoJdSPMCRmgMq8DmgBpNsgUIxBGSccD70DczmS8MDWoe28MN4+f588rj980CktuJZYpFdlKZ4B4OfegQ1hpIrVjbsRMBhBj8x9qsHnX/hm36y1O/u9V1ddPmS6aD8OkQdyxOSe4OMmqLUvwQsYY4Xjv7m4YEEhwFyMY7fXB5pRbvhp0jqfSMV7b6jqZvLGQAwxAEBDk54PuD6VkVb49a5DBpiaNaeF/FIaQDumOwpzMGDEZQZ5+VboR8In1I+9QWDY6gFn7jjHpQhtJEFbAGBnijT0P8H7qPVOh47a42yNaymPBOcDupoykep+m73V7g/8Av2itQowvJIx6j5/OpRjfUWrax051RPY6LqFy8YACkebO4Z7HjNWCY0ToW2utJbqPreW5na4O4R78cehY9+fQVKLX05p1ro97awC4kX8VFmJLeEKdoyfOxJPbHbHYVAz0rqKPWNauri9t1ktJgILYgEiNFJ/Op9STmrBBdeaFCo0y3jt444DI3jLE204Y5DD+9UPPhv0NaRtPq99mSLOy22nOfdh75oNC0vT7m1uJGvGiii3AW8UDbQAeDu9zUohLlhouqap1VciF4I1FtbxSthtobBIPuTn7VBJ2vUth1TYk2ULi9iALwyKQYz6Z9CM0Ft060/DWEcDHe2Mucdye9BFW3SekWt3LPb2cUTsd2UGCG9x7VYMzufhzdX/WmoXj+BPpx3I7XZMmXYckc8EVRKaP8I+nXikLQuxOQSTnBzj6UEjonw90XSrq3S3s7dplJcl1EhGDx396lFx1TQ4NVjaC7UNCU2lAO/8AvNWDCLp9X+E/WgWImXSp2LRq7eSRT3B9iP8AFSjd9P1+21TRodVsMS2rLmTbyUGOePXFQSltcLcW0c1vh4mXcjDswoDLdRm4FvISsgXeTghDzjAPbPyzmgVFxCzuiOC0WN3sM+5oDqySJmNg3rx7UFb60tNUubGJdFdEvhIdryflUFSM49TVgyTQenJemOorf/U4H1Fpp1edAh/hOQTuQ9375JA4q0bnbPBcxxT20wkjKkqYzlT9ayGWu38um2MbLEJ7iRtoUds+/wAgBzQeW/iHqi6j1PdzeL44HkL9txHtWhVUOVyvHNB2F9zQT8hUAhAdp5FCG0mSAzE4HGDRppvwL1bwOpJbEsFiuYyVX3deR98Zoy2ZtRgmjkSRZocEp51K7se3vUow/rfpFE124mVpfD4mk2MWdCc4A+VWCH1281/UmFnpklzPYRFBEG8uGC4yQfcn9alGgaJo95rRsbi53WaxwrHOm7BjYcHnvz/moJaw07pXSI5IW1K0CQnDhpAWB9R796CudY62msTRW+gadI8KnDXMkLLv9MA8HGOKC3dAXF1dRfh75f41moi4G0AdwcfTj7UFhv7RjqMBV5AJFZHkR8FRjIx6CgpXVNjJ1JqNn07p26CztSJLlpIydyj2J+fGaC+afplrazqLa3SKNIggx3IHYUEsBk4wQc4oK11L1z070/M9rql6wuVA3QopLcjNBDwfFboqeSO2W7kQNxuaEhQfnQLt8TuireVoV1UeXnckTFT9DigHRuv+mbu9ZV1W3Nyc4IRlVl9O47/KgtU+s6baw+JcX1umRkAuM/p3oK/1t0rYdX6cqXKESqN8Ug/Mp9P1qwZ702mo9GdUTWJsmOn3EY8CAORGXJAwScjJ5q0bJDNLb6YklxbKsgA3wwndg9sDtWQN3aw3ZKTwLLEQOGORn6ehoG1vYAw3FikRt7JSuH3Hc/GSc5P0oHn4aO2uGuYyiose044wBQIm6F1dwfh5ARs8R8L2BHGfnQHv9PS4PjxrGLtFKxysm4qD3oCxboIIo7e1jhQHzAYUJ8wP8VYM56j1ktaal1BMrS2sAaK1OQDD6eUepY9yfQVR5zv7hrmaSaRtzyHJY0DcE4BPIPb5UBwOO4oJYzFvzEYHAH9XvQhNZN7AEgDOSDRo/wBA1SXRdVtNQgb/AJUgfBHcZ/8AGaGPVlhPbarZ2t5CEeORBKje2RUrI1zYxTBhMinIwcjvUEcugWkO4AMisMEA8N69u3yoERrOhWNxNYy6hapcxAeJHM+D8u9ASLStLlm/EWdpZyxy+Z3RQ3I5B44oJKTT4blFWSNBEOeBg5+goFYbOK1TKhIxnIbGMH50Cpcyo6AMrIcM2OD68Ggb6Lbbllu5Cd88hYBu6rztWglSNkfm4P70Gaat8Rba96w0vp3R2mhufxyi4kO3YyDOV9+f8VYMw+P0cP8Ax4JVuEKzW8bEr5tuMj0+lUZ7Y2X4288GK+towRlZXYqv9uKCQi6YmbT2u11GzaJWKnYxbBB49KCFnhubdiwL+U8OhP60ElpXUFxY6nDdXQF0qYbZKxwT9vWg3npb42aHcmC11C3uLSQjEkpIdQfr3xUondP6x6e6tv7e101hczRzrNtaFiFC/wAxPYHtUF+lj8bYCTgMG59cUC4OBQQOo2eoXepFTeL/AKYQN1sEwWx6Fu+DQLX2kw3Ok3Vjas9qJ48Exd1PHb9KCE6R0G86Ut7mK71KK4gklM7TyKRIBjtjtjj96AOreudJsrMJbXksk8jBCbVdzRjONxBHP/3QQ9x1jcWGkERWWqXdpMPCt7x4wfFOOWPbA+fAqwZr8TJ9Qbp2ymvEjsrSTEVvawyHz45Lv6E4wPqaoyl8g91OKDlYEc8mgKW5PH7UE80f8PPHl7gDFAZkUjawUIQG8w5ouknAUbl9Dg59KK1X4Z9XXFvo8mlRXax3KHfBG8Rk3qe6jHOc54+dMZO7jr/qK8vWtba4tYu38TwvDOMc8N60wPLbrW10PS7pnvrnUtbAKobgBUUk9jg8f/lMC2rydMdRSaRqWoLEbx4UefwxkL2BVvvn9Klgv3Tp0lPxFno6wJ4IVmEOMEHsf2xUD2e4ks7n+NGDaCMu8q8lCMcEfPNA6tW/EwrMybEYZUHnI9Cf/FAzu7G4LXTWs38SRNqhs4Bz3z9KCO6x07UNT6altNMvEs7xkC7nPlI9R2/egwbrDT+r+kupLCeK9nu3KBYGRy+QvdWFWCU6avtA6h1iKDqLRhpmpvkxz2p8JGb3z7k557VRX77TdHteuPBut401CAouyXGcdvmASaC069030brYaay/CwPFwWspRErfUN7UGZX2hWSiY6ZrMc0CvhUlBUk/UcGgiLq2mtG8F54yDwfDfIoGkrRsSZXwOB2zmgsvw06XHVfUcFvI22xQ753Ze4H8v3OBUo9a6XodjpltHbabDHZIhVsQqBuA9DxznFQTQUe5oDYGMnn7UEbpV3JqDyz+BJFbBtsXiDBf/qx6CgDXL42cSRwGM3UzBQrHGFzy32oG2i2kKTSI80lzMow0rqQoyew+3tQO59KtJJRI9rEzgg7igz3z/egZ6paJdGGwW4eBXy7pGeXUdwT6A5qwebPjJrcOr9TvbWZQ2Onr+Gi2nIJHcj7+vyqigOuRk+vtxQAqEk4BU0ABj7j96CzzKxYD0GeM0CQG3OMAjkfOgbSZwzE4PJyfWi6caTdzaffW95akrPFIrLg/tRHpGzs9C6t0W31FrO3Y43MrcbH9c/eloZ6v0JpWoKlrHHBbScSFEHYc5Pz71NDXUoJrK1g0dvw9qsspW3nXaN6KMrHnH5ieSfan0U3Rr1uidaRbiwk8BUSS6naQkjc3ZcHaRnn70wbja6lZX+nw3NvMksM+FXnPJ9DUCeoXj2hSG2t2km7op4U/f/FAvHaNePb3N0jRzRA7VD8Akc9u/FAvcxnawZQ3HYtjJoKfDFAdeub6Vo1dSULIBtTbgYOfU8jNWUVvrm5ih0m1urixhlsI5HJliOwR5/LkkHHJPamjHdQ0HWdemlutN0+YWBYtC0rHDhjwVz3zWgx1n4e9U6QE8XT5Zd//APR5se9XBXbjS9S0zAvbO5tyWKAOhG4/KpQ3ZHXO5JFK98qRUGhfCbph77Uvx91pv463wVjR0LR7s483796WjW7rTrXpHWrSW2YK7lmXTbaIFpCRjjHOOSeeBipaNLtXuIre3R43lnkGXYADZnnmoH6Dkbzn6UDGWe9a/hKG3jsW8riQMJS3svp86B6zgMQmDtGT8qDNb6XUpOoPx72tzOkjFYowOduDwDjj70Gg6Wsq2KNeAJKRuKk52fIn5DvVkENrvW+iaSAsl0txI2Asdud5Yk4A4pgzv4l9ST6JZSXbyyprWpw+FFa5G21gz5icfzH3pgwCSQlh688+tUEwjjngZ7UHAHuWAHpn+1AXj5frQWXOGBZcKSe3c/rQIyAtnI27eBj/ADQIMAuH8vHBB9DQwVpPLjOckEZ/ahi9/Czqj/S9VhtLm6aG1uZFUsT5VOfX5Gpg9GiNJArxsrxsv1BHypYGF7pljeG3kvLZSlqzNGGxhSRjP6GoG1yLUWiWc2nSPA4KJGItyYHYHHarop3wu0jWYNUvzriNBp8ErraRMANxJ/N7nA7ZqDUHgSQLvAbacjI7H3oOuIFuYzGS68jJRyp4+lA0m0yDwGjiTw3bzBwTuDe+TQVbV+mLmW1NtbSok9weZiC2zPLEZ+/FBM6Xo40/TYdL8Jr21G4vJcuCck55HbFWUKQ/h4tR/DTz2o8TK21qmMgKOf8AfpmrokljG1i5BHI57D5VNorut9Lab1LA638W6H8sboNrqQckq3pntV0RWsfD6K7SGC3vTFahQJY2iVmkI9d+Mimie0Hp2DQ7AQacio3JZgqjcT3zxk1KHGldPWtnqMupS5uNTmGGnk5KjGNqf0r8qgmkhVGcquGblm96BDUZZYLGVrdN8+MIvux7UGKTdXdbaRrFvbaxbWN4d58BmwCjHPORycLx2q4LNe9S9TdN6I13qkWmzSXdwBCGlO4hiMKAB2A9ag0WySQwpLLtMjDcQBhVz6CgoHxF17XbnUYunulgsUsu4TTvjIUAEhR+x4qwZwtkOi7651PXJobm4tohHbQhdgecjnaPZeOfeqMy1vWLvWNQlvb+ZpJpWyT2A9gB6Cgjy5AO4A5oAGRgBR39aA7Z8MkFtxPY0AbV9UGfpQWhj5TkBQGxuBoEGG1iQCyHvj1oELgSkK6oRnIBIxzRdJ28Q3+fHiAds96LoH3AF1wCfyijNbF8JviI1rbQ6Pq/iSopxFOx5Uf0n3qUbWQk8II2SRyDPuCDUHMpSIiJQSBwDwKAgTxApnEbyIQ+APyn0+9A5B3AgfmoEWgcb3VlMpGFYjt+negSs7zxH/C3RWO9UElM8SAHG5fl/agNdXcEbJAZ1WadvDQDJO7Gf7c0ED1dqWv2enzw6Rb24nZfJd3EwREHqxyMZHzOKBbT7H8PZWTK5uZ9o3Xm1SzEry5PsT7UFF+JnUezSZ9LttRs2km2m5KSFWXDZI491AyBzVwK6J8T7CRtPjee0tbaGAtdNISdoXgLEo5JJxyfSmC6aF1fo2vELZXDJOxwkMybHYe4HtUFiJWJd8rKqjuTQcZV8SNI0dy43BlGVA+ZoBniE0RU7tp77Tg5zQUv4hNrU2tdNWOhylPEnaS5UHGYlAzn5cn74oHGt6l0z07k6nJC123HhKPFlbPptGTj9q0Kx0XMvU+ty6vqQtpWlZo4LOdGDWsak8Aflycgk+v2qC8a1q8OnaXLPOz2kCIWkZ+CqjgYx6n0xTBkmp9Sabp0KdRyI5vJkaGw08MVKIDw8jA557896QY1q2o3eqXr3N7O8skjnlnzgn5e1UMCGV/MOM0BJFOVwfX0oFtgZTjkg8UBtpOeO1B3hg85FBZXVMM+VJAA2+h96BO4IMJ/p7qvuKBKacmOKB5CYYx5UzgDPfHzoGwD5OApJHAHrQEAk8NWdNpx+XdkA0AIGhkGWOQcgg8UGw/DP4kmwhi07WCTZqAiSbstGc4+pFKNvs5o7q2Sa3kWaJxkOp4NZDOHUh/qL2k8LW78eG7kbZv+0+/yoEZp7fUpX/BXpgvYZTCSRtO7vtwe/vQdY6jeyatPp91FEPw8aSNMoYbi2cADt6Z70DS60KW7luJdV1JniJzBtURG2b0KN7+/vQKSWUWnLLqN3cSLP4ex5Y8jxiPykr23+nzzigpXUPVOu6Vqmmf8UWttb9OXDqkjRnfI3H849uRkDOKC0axLFr+nLB0rrUMM0bqCIGGGX1AH09qsGc9UfBiTV9Vhu9Pu5oPGLNeG6bczN7jHvVEr058Gre3sLeDVrmOdo3LmSFNjEH+XdntQXO51XQOl5YrCKGWa8SMYS3tzMyLjjJHb9alDqz1S5ktJ7nVdLmSVDiOONfEMiE4Xy+h9xUDm11CaTxEOn3VmpHFxKFCr9s5GPmKAus6jb9M6RJf3c88yxpjcxL7uM5OO3HrQVTSupoOuYdZMTSpptriNFtXKXDA/Pjhs9h2xQOJ7Xpnpa2S91WK2swqjbGw3ysfcnuxrQsGmapYvpwvra1FtDL52Mi+Gx49sZoMb+LXV0t+jWl3OYLGTO2zjx4h2nyszHsG4/Sgxt5ZJmEsjl3PB3GgSlyXBxkDnNADseB2PsaA8SoXQyFgmQCV70B5R/EIjYmPJxnvigEKcYDfrQF2/X9aCwqC7l2zwfT/FAJJ5747E5oGTqZArKOfccftQHZWwmOD23Z4NAEkTEBmwR7g5AoG7KSSE5HyFAMTyQsMHa/cEcEc5oL58P+v7rppdryPNAXx+GfsQe7Z9D2/Wg3zSdX0fqzT08F433eYwscOpHt9PcVkQPW632mX9vfWdrbXiRgrIdu2eHIwGD57+nIoKdc/ELVdC0u5afp27SUtta5vJMMzk+UDjzYHtQWDpj4gxXmif/wAitXZkGZzFGW8MehZO+PmM0Fibr/poWQmF6xXA2xmFg59sKRk0C2nQP1KFvdb0vwIUJNtDKcsVP8zD0Jx2oJDTNA0vR5p7qzs44pJOXkUc/SgNfa/pNvbF5L2JgTsCo2WJzjGKA1jcNcxOF/m/I0zbt4+gxgenNA5s7CCxWWYQxpNLgyMiY3nt2oHajcuexAoEL1C1uyFkVHO1ixHb17/KgwT4rdXWep6oul2OpywaTYqVLxDyySDjaM9x6Z+tWDPdB1TW7Wa9sumpGlursqMQRlpXwd3BA4571RcdN0i41G7h/wBSmNxqdkwn1O6u5/4cAXlYgcnngE/pQNvih8S211obHRyYbWInfJG/Ex9MD2+tBmNzcTXTtJcSSSSHH5jngDAH0oEdxbg5A9wKAzPwO+fegSLfLJoFoR5fUfegXOcHGAT8qAM+XaBzQCCwGDuyPlQWJpV37Q5TIweM7u/f9qA9vNYpFML2KaR8YiaJgAh55PvQRvnYoqA+MThcDnPai4PKWQlH3K6tggjnPaiEmz4ZznBPfFAVWG0AZDH1z2HzoE7lhv8AJIHI/mGRQI8AEeuOMGgndN6pu7V4RJLKY4WDLhypXj0oNL6d+MMS4ttetDdQgDNwAPEwPRh2NZGkabrvTXVZiexvba5aI+ILWZQG3Y4IDdvtQScvTdjK8chtFjkQ+VlYgqPXGKA17daV07apJrV9CsZbELTgbu3YY78UEHf9evJ4K9P6JqGoiR1XxjCUjAJ5OT3NBM9YdSWPTenwy3t7bWbSuBunUthfUhRyT+1BA2vXnS/jGdeo9LnIHljeLwSCe5zgmgejrOz1S3kGhazoaXYGAJ5Sw3e38uaCsJfX02rPD1XfXtvcCXdBJGjLbOO+EK88Y7nIoLB1H1Bb6WkN1ddSQ29io/5MZEjzt7DGTjj2FXNGUfEH4wRaxCtnp2kwGGM7llvBvIOO4XOAe/fNMwZbqusalfLBHfzSvFH+SIgKo+igYqiwWfWV30rpp03p6exJnUPJexQnxuR+Ulu2PkKCrT6jcSiTxZnbxCWcFidxPJJ96BBDlQ35fbFAbahBHJIGO+KAIwg5YnB455oDkKcbW7UAOowSMjOORQcCVXPp+9AqDkHcDmgMNpHPcUBTuzQWCJXcFvKR2Y0CMiqjnz4UcH/6oG8gKluwxyAfSjQ6ylEJBJfv37/OiYQMjbjkZXOSP/FEELAEkNn1waBCXdjORnPoc80CZeTb5wQe2BQAm4y7jlhjvQcWO3cW4GB7ZpgGC5a3uUeNyGQ5GCR+45pgt+l/EzqLTgxj1O5Zc4CSOXCj70wOE+Jd/Pq0V7qVvb3bISAWUBhnuc+/2pgvkHx0soLaNIdKkEiqR5yDg47cYpgresfELSNc1n8VrFtAw2ZBiiywwcgeb14x2xTBYNA13ozUo/GOqWVizDc1nf6crIh/7wOf1rOURvVupdE6ncpFeakiSWsZdbjSLfw1Zs+VVyMHA75xWsFDHU0idTJdf65rT28YKpPvHjKp9Bk49qYK/rGpXF/qU9zPdyzyyMSJJAAx9ifnVlwNZ7vxYEh8GAEHO8DDH5H5U0IPK8jHxSzFQAMnOKgJkFwPT6UBlAII5z3zQCjnA5OKBXeuAT9KABMA208DtxQHRhzgUC3KjJx9z2oAP6/L3NAHC8Hg/XNAcNtGe4oEy5yeaCdLk7yx2qQCAO1AmXZSSexHbPNAhJuLJkgjvzRonuAJy2cd8UCbyOi453Dj7GiYTZyVPPl74oYLJIyq68EH3Gf3oYTDEjLbiP1FEDHOUOdgOfXIBFAm77j5Mnng/WgLI5UE8Eg9iO9AnuJbuQx5wOBQFRxuIbOc54PrQK28ws76F722EyI4d4HJUOPb35yKBm8oeQsi4BPbPb71RyYIHmPGRg00GRsbsHIPY0Bg52AEEseBUCQJyOPXtQDtcdvvjtQCQ/GBwKAuXU4PrQBvZE5IGeO1AffjBJ57UBvEO045HagFWAAzktQKIzBeMg0C5kz5mOG/WgMrDJJ7jmgEnIyOccYoA3cEMRj05oC7/wDeBQTduzEoNxwcZGaAJOWfPNAlISVOT60aIQfkj+amgJ3bnnigKeFGPQUCf/x0Smw4V8exogX/AOY3+/SgKxKxeU459KAgJOckntQJkkcgkGgAAFFz/XQEmJaY7jnk96BM9yPQelAf/wCX7UBv/jagGP8AKB6ZoDf00HMfO/0oAH5TQA/5moECSMDPFAvGASMjPP8AigVX+b60BW7/AHoHEJJD55oDd4snv70CsSjCcDmgVAAbgYoGYJ3nk9qBUAYHAoP/2Q==</binary></FictionBook>+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><book-title>Pandoc Test Suite</book-title><author><first-name>John</first-name><last-name>MacFarlane</last-name></author><author><nickname>Anonymous</nickname></author><date>July 17, 2006</date></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p>Pandoc Test Suite</p></title><annotation><p>John MacFarlane</p><p>Anonymous</p><p>July 17, 2006</p></annotation><section><p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Headers</p></title><section><title><p>Level 2 with an embedded link &lt;/url&gt;</p></title><section><title><p>Level 3 with emphasis</p></title><section><title><p>Level 4</p></title><section><title><p>Level 5</p></title></section></section></section></section></section><section><title><p>Level 1</p></title><section><title><p>Level 2 with emphasis</p></title><section><title><p>Level 3</p></title><p>with no blank line</p></section></section><section><title><p>Level 2</p></title><p>with no blank line</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Paragraphs</p></title><p>Here’s a regular paragraph.</p><p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p><p>Here’s one with a bullet. * criminey.</p><p>There should be a hard line break<empty-line />here.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Block Quotes</p></title><p>E-mail style:</p><cite><p>This is a block quote. It is pretty short.</p></cite><cite><p>Code in a block quote:</p><empty-line /><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><empty-line /><p>A list:</p><p> 1. item one</p><p> 2. item two</p><p>Nested block quotes:</p><cite><p>nested</p></cite><cite><p>nested</p></cite></cite><p>This should not be a block quote: 2 &gt; 1.</p><p>And a following paragraph.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Code Blocks</p></title><p>Code:</p><empty-line /><p><code>---- (should be four hyphens)</code></p><p><code></code></p><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><p><code></code></p><p><code>this code block is indented by one tab</code></p><empty-line /><p>And:</p><empty-line /><p><code>    this code block is indented by two tabs</code></p><p><code></code></p><p><code>These should not be escaped:  \$ \\ \&gt; \[ \{</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Lists</p></title><section><title><p>Unordered</p></title><p>Asterisks tight:</p><p>• asterisk 1</p><p>• asterisk 2</p><p>• asterisk 3</p><p>Asterisks loose:</p><p>• asterisk 1<empty-line /></p><p>• asterisk 2<empty-line /></p><p>• asterisk 3<empty-line /></p><p>Pluses tight:</p><p>• Plus 1</p><p>• Plus 2</p><p>• Plus 3</p><p>Pluses loose:</p><p>• Plus 1<empty-line /></p><p>• Plus 2<empty-line /></p><p>• Plus 3<empty-line /></p><p>Minuses tight:</p><p>• Minus 1</p><p>• Minus 2</p><p>• Minus 3</p><p>Minuses loose:</p><p>• Minus 1<empty-line /></p><p>• Minus 2<empty-line /></p><p>• Minus 3<empty-line /></p></section><section><title><p>Ordered</p></title><p>Tight:</p><p> 1. First</p><p> 2. Second</p><p> 3. Third</p><p>and:</p><p> 1. One</p><p> 2. Two</p><p> 3. Three</p><p>Loose using tabs:</p><p> 1. First<empty-line /></p><p> 2. Second<empty-line /></p><p> 3. Third<empty-line /></p><p>and using spaces:</p><p> 1. One<empty-line /></p><p> 2. Two<empty-line /></p><p> 3. Three<empty-line /></p><p>Multiple paragraphs:</p><p> 1. Item 1, graf one.<empty-line />Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.<empty-line /></p><p> 2. Item 2.<empty-line /></p><p> 3. Item 3.<empty-line /></p></section><section><title><p>Nested</p></title><p>• Tab<p>◦ Tab<p>* Tab</p></p></p><p>Here’s another:</p><p> 1. First</p><p> 2. Second:<p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third</p><p>Same thing but with paragraphs:</p><p> 1. First<empty-line /></p><p> 2. Second:<empty-line /><p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third<empty-line /></p></section><section><title><p>Tabs and spaces</p></title><p>• this is a list item indented with tabs<empty-line /></p><p>• this is a list item indented with spaces<empty-line /><p>◦ this is an example list item indented with tabs<empty-line /></p><p>◦ this is an example list item indented with spaces<empty-line /></p></p></section><section><title><p>Fancy list markers</p></title><p> (2) begins with 2</p><p> (3) and now 3<empty-line />with a continuation<empty-line /><p> (3) iv. sublist with roman numerals, starting with 4</p><p> (3) v. more items<p> (3) v. (A) a subsublist</p><p> (3) v. (B) a subsublist</p></p></p><p>Nesting:</p><p> A. Upper Alpha<p> A. I. Upper Roman.<p> A. I. (6) Decimal start with 6<p> A. I. (6) c) Lower alpha with paren</p></p></p></p><p>Autonumbering:</p><p> 1. Autonumber.</p><p> 2. More.<p> 2. 1. Nested.</p></p><p>Should not be a list item:</p><p>M.A. 2007</p><p>B. Williams</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Definition Lists</p></title><p>Tight using spaces:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Tight using tabs:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Multiple blocks with italics:</p><p><strong><emphasis>apple</emphasis></strong></p><p>    red fruit<empty-line />    contains seeds, crisp, pleasant to taste<empty-line /></p><p><strong><emphasis>orange</emphasis></strong></p><p>    orange fruit<empty-line /><empty-line /><p><code>    { orange code block }</code></p><empty-line /><cite><p>    orange block quote</p></cite></p><p>Multiple definitions, tight:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Multiple definitions, loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Blank line after term, indented marker, alternate markers:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /><p> 1. sublist</p><p> 2. sublist</p></p></section><section><title><p>HTML Blocks</p></title><p>Simple block on one line:</p>foo<p>And nested without indentation:</p><p>foo</p>bar<p>Interpreted markdown in a table:</p><empty-line /><p><code>&lt;table&gt;</code></p><empty-line /><empty-line /><p><code>&lt;tr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;td&gt;</code></p><empty-line />This is <emphasis>emphasized</emphasis><empty-line /><p><code>&lt;/td&gt;</code></p><empty-line /><empty-line /><p><code>&lt;td&gt;</code></p><empty-line />And this is <strong>strong</strong><empty-line /><p><code>&lt;/td&gt;</code></p><empty-line /><empty-line /><p><code>&lt;/tr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;/table&gt;</code></p><empty-line /><empty-line /><p><code>&lt;script type=&quot;text/javascript&quot;&gt;document.write(&#39;This *should not* be interpreted as markdown&#39;);&lt;/script&gt;</code></p><empty-line /><p>Here’s a simple block:</p><p>foo</p><p>This should be a code block, though:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    foo</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>As should this:</p><empty-line /><p><code>&lt;div&gt;foo&lt;/div&gt;</code></p><empty-line /><p>Now, nested:</p>foo<p>This should just be an HTML comment:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Multiline:</p><empty-line /><p><code>&lt;!--</code></p><p><code>Blah</code></p><p><code>Blah</code></p><p><code>--&gt;</code></p><empty-line /><empty-line /><p><code>&lt;!--</code></p><p><code>    This is another comment.</code></p><p><code>--&gt;</code></p><empty-line /><p>Code block:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Just plain comment, with trailing spaces on the line:</p><empty-line /><p><code>&lt;!-- foo --&gt;</code></p><empty-line /><p>Code:</p><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><p>Hr’s:</p><empty-line /><p><code>&lt;hr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><empty-line /><empty-line /><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot;&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Inline Markup</p></title><p>This is <emphasis>emphasized</emphasis>, and so <emphasis>is this</emphasis>.</p><p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p><p>An <emphasis>emphasized link<a l:href="#l1" type="note"><sup>[1]</sup></a></emphasis>.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p>This is code: <code>&gt;</code>, <code>$</code>, <code>\</code>, <code>\$</code>, <code>&lt;html&gt;</code>.</p><p><strikethrough>This is <emphasis>strikeout</emphasis>.</strikethrough></p><p>Superscripts: a<sup>bc</sup>d a<sup><emphasis>hello</emphasis></sup> a<sup>hello there</sup>.</p><p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p><p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Smart quotes, ellipses, dashes</p></title><p>“Hello,” said the spider. “‘Shelob’ is my name.”</p><p>‘A’, ‘B’, and ‘C’ are letters.</p><p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p><p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p><p>Here is some quoted ‘<code>code</code>’ and a “quoted link<a l:href="#l2" type="note"><sup>[2]</sup></a>”.</p><p>Some dashes: one—two — three—four — five.</p><p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p><p>Ellipses…and…and….</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>LaTeX</p></title><p>• </p><p>• <code>2+2=4</code></p><p>• <code>x \in y</code></p><p>• <code>\alpha \wedge \omega</code></p><p>• <code>223</code></p><p>• <code>p</code>-Tree</p><p>• Here’s some display math: <code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code></p><p>• Here’s one that has a line break in it: <code>\alpha + \omega \times x^2</code>.</p><p>These shouldn’t be math:</p><p>• To get the famous equation, write <code>$e = mc^2$</code>.</p><p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000. (It worked if “lot” is emphasized.)</p><p>• Shoes ($20) and socks ($5).</p><p>• Escaped <code>$</code>: $73 <emphasis>this should be emphasized</emphasis> 23$.</p><p>Here’s a LaTeX table:</p><empty-line /><p><code>\begin{tabular}{|l|l|}\hline</code></p><p><code>Animal &amp; Number \\ \hline</code></p><p><code>Dog    &amp; 2      \\</code></p><p><code>Cat    &amp; 1      \\ \hline</code></p><p><code>\end{tabular}</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Special Characters</p></title><p>Here is some unicode:</p><p>• I hat: Î</p><p>• o umlaut: ö</p><p>• section: §</p><p>• set membership: ∈</p><p>• copyright: ©</p><p>AT&amp;T has an ampersand in their name.</p><p>AT&amp;T is another way to write it.</p><p>This &amp; that.</p><p>4 &lt; 5.</p><p>6 &gt; 5.</p><p>Backslash: \</p><p>Backtick: `</p><p>Asterisk: *</p><p>Underscore: _</p><p>Left brace: {</p><p>Right brace: }</p><p>Left bracket: [</p><p>Right bracket: ]</p><p>Left paren: (</p><p>Right paren: )</p><p>Greater-than: &gt;</p><p>Hash: #</p><p>Period: .</p><p>Bang: !</p><p>Plus: +</p><p>Minus: -</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Links</p></title><section><title><p>Explicit</p></title><p>Just a URL<a l:href="#l3" type="note"><sup>[3]</sup></a>.</p><p>URL and title<a l:href="#l4" type="note"><sup>[4]</sup></a>.</p><p>URL and title<a l:href="#l5" type="note"><sup>[5]</sup></a>.</p><p>URL and title<a l:href="#l6" type="note"><sup>[6]</sup></a>.</p><p>URL and title<a l:href="#l7" type="note"><sup>[7]</sup></a></p><p>URL and title<a l:href="#l8" type="note"><sup>[8]</sup></a></p><p>with_underscore<a l:href="#l9" type="note"><sup>[9]</sup></a></p><p>Email link<a l:href="#l10" type="note"><sup>[10]</sup></a></p><p>Empty<a l:href="#l11" type="note"><sup>[11]</sup></a>.</p></section><section><title><p>Reference</p></title><p>Foo bar<a l:href="#l12" type="note"><sup>[12]</sup></a>.</p><p>Foo bar<a l:href="#l13" type="note"><sup>[13]</sup></a>.</p><p>Foo bar<a l:href="#l14" type="note"><sup>[14]</sup></a>.</p><p>With embedded [brackets]<a l:href="#l15" type="note"><sup>[15]</sup></a>.</p><p>b<a l:href="#l16" type="note"><sup>[16]</sup></a> by itself should be a link.</p><p>Indented once<a l:href="#l17" type="note"><sup>[17]</sup></a>.</p><p>Indented twice<a l:href="#l18" type="note"><sup>[18]</sup></a>.</p><p>Indented thrice<a l:href="#l19" type="note"><sup>[19]</sup></a>.</p><p>This should [not][] be a link.</p><empty-line /><p><code>[not]: /url</code></p><empty-line /><p>Foo bar<a l:href="#l20" type="note"><sup>[20]</sup></a>.</p><p>Foo biz<a l:href="#l21" type="note"><sup>[21]</sup></a>.</p></section><section><title><p>With ampersands</p></title><p>Here’s a link with an ampersand in the URL<a l:href="#l22" type="note"><sup>[22]</sup></a>.</p><p>Here’s a link with an amersand in the link text: AT&amp;T<a l:href="#l23" type="note"><sup>[23]</sup></a>.</p><p>Here’s an inline link<a l:href="#l24" type="note"><sup>[24]</sup></a>.</p><p>Here’s an inline link in pointy braces<a l:href="#l25" type="note"><sup>[25]</sup></a>.</p></section><section><title><p>Autolinks</p></title><p>With an ampersand: http://example.com/?foo=1&amp;bar=2<a l:href="#l26" type="note"><sup>[26]</sup></a></p><p>• In a list?</p><p>• http://example.com/<a l:href="#l27" type="note"><sup>[27]</sup></a></p><p>• It should.</p><p>An e-mail address: nobody@nowhere.net<a l:href="#l28" type="note"><sup>[28]</sup></a></p><cite><p>Blockquoted: http://example.com/<a l:href="#l29" type="note"><sup>[29]</sup></a></p></cite><p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p><empty-line /><p><code>or here: &lt;http://example.com/&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Images</p></title><p>From “Voyage dans la Lune” by Georges Melies (1902):</p><image l:href="#image1" l:type="imageType" alt="lalune" title="Voyage dans la Lune" /><p>Here is a movie <image l:href="#image2" l:type="inlineImageType" alt="movie" /> icon.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Footnotes</p></title><p>Here is a footnote reference,<a l:href="#n30" type="note"><sup>[30]</sup></a> and another.<a l:href="#n31" type="note"><sup>[31]</sup></a> This should <emphasis>not</emphasis> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<a l:href="#n32" type="note"><sup>[32]</sup></a></p><cite><p>Notes can go in quotes.<a l:href="#n33" type="note"><sup>[33]</sup></a></p></cite><p> 1. And in list items.<a l:href="#n34" type="note"><sup>[34]</sup></a></p><p>This paragraph should not be part of the note, as it is not indented.</p></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>/url</code></p></section><section id="l2"><title><p>2</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l3"><title><p>3</p></title><p><code>/url/</code></p></section><section id="l4"><title><p>4</p></title><p>title: <code>/url/</code></p></section><section id="l5"><title><p>5</p></title><p>title preceded by two spaces: <code>/url/</code></p></section><section id="l6"><title><p>6</p></title><p>title preceded by a tab: <code>/url/</code></p></section><section id="l7"><title><p>7</p></title><p>title with &quot;quotes&quot; in it: <code>/url/</code></p></section><section id="l8"><title><p>8</p></title><p>title with single quotes: <code>/url/</code></p></section><section id="l9"><title><p>9</p></title><p><code>/url/with_underscore</code></p></section><section id="l10"><title><p>10</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l11"><title><p>11</p></title><p><code></code></p></section><section id="l12"><title><p>12</p></title><p><code>/url/</code></p></section><section id="l13"><title><p>13</p></title><p><code>/url/</code></p></section><section id="l14"><title><p>14</p></title><p><code>/url/</code></p></section><section id="l15"><title><p>15</p></title><p><code>/url/</code></p></section><section id="l16"><title><p>16</p></title><p><code>/url/</code></p></section><section id="l17"><title><p>17</p></title><p><code>/url</code></p></section><section id="l18"><title><p>18</p></title><p><code>/url</code></p></section><section id="l19"><title><p>19</p></title><p><code>/url</code></p></section><section id="l20"><title><p>20</p></title><p>Title with &quot;quotes&quot; inside: <code>/url/</code></p></section><section id="l21"><title><p>21</p></title><p>Title with &quot;quote&quot; inside: <code>/url/</code></p></section><section id="l22"><title><p>22</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l23"><title><p>23</p></title><p>AT&amp;T: <code>http://att.com/</code></p></section><section id="l24"><title><p>24</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l25"><title><p>25</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l26"><title><p>26</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l27"><title><p>27</p></title><p><code>http://example.com/</code></p></section><section id="l28"><title><p>28</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l29"><title><p>29</p></title><p><code>http://example.com/</code></p></section><section id="n30"><title><p>30</p></title><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p></section><section id="n31"><title><p>31</p></title><p>Here’s the long note. This one contains multiple blocks.</p><p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p><empty-line /><p><code>  { &lt;code&gt; }</code></p><empty-line /><p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p></section><section id="n32"><title><p>32</p></title><p>This is <emphasis>easier</emphasis> to type. Inline notes may contain links<a l:href="#l32" type="note"><sup>[32]</sup></a> and <code>]</code> verbatim characters, as well as [bracketed text].</p></section><section id="n33"><title><p>33</p></title><p>In quote.</p></section><section id="n34"><title><p>34</p></title><p>In list.</p></section></body><binary id="image2" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEASABIAAD//gBQVGhpcyBhcnQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uIEtldmluIEh1Z2hlcywga2V2aW5oQGVpdC5jb20sIFNlcHRlbWJlciAxOTk1/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/8AAEQgAFgAUAwEiAAIRAQMRAf/EABoAAQACAwEAAAAAAAAAAAAAAAAICQUGCgf/xAAjEAABBQEAAwABBQAAAAAAAAAGAwQFBwgCAAEJChEVOXa3/8QAFgEBAQEAAAAAAAAAAAAAAAAABggA/8QAJhEBAAECBQEJAAAAAAAAAAAAAQIAAwQFBhEhszE0NlFUcXR1tP/aAAwDAQACEQMRAD8AqQzziPNmpiqnIO1q4H+WkB84MdlzRSuM82/jVw/JCORtRmQz5d2VTy6WmS2eSYx3U/qkSRbgFsqRzH2Is4/mCluXc33vy8xTnJjTNqV/T8LKmkhr8Hq1da2aOvTfIh2CFeNt+GxFBP8AJFdFUbPWh+4FdXV7OtZOMR7mK9lBWNN+JBmMQ5cwmfH8DEFhTZUCRlE6CBq/ds/nBh9oYygeY1L9FnCUnBSN1t+w0l9bNomx1cllsOrL9OCTKtKOIqua6UVjP0dEvTyM7gp/3whbkAD0ScX3r6MLg+C2/XsMhCnJRn/5cVNHyJHiX6JKIFhhqnFeagm9BIgjfcJyNBTZiROBUk6Mp8CJRmT4NWU2MatV7n495DPk/wAbMJSRJOTBDItq0KR5s/nJN7LPW8AJWtYAoKQaDp+u4XShxgXhYcbHoxNTllCwETGQ8ag2jmDVsk8w/wCOp/C/hn+mWV/utpePH+D5wmF39NY6UakjUYR1Dn0YgRM5zQAAAMdfAA4AOAOArjkMNQ3vgm7UKtBR+m9QHFD5tpnDtpy+t2R20gK/OsmFtuDpaL5mVyiT5qdEVAvZci5ch5VoSGKbwlWTBr0RPoZT07av9lHfrXo6yLApWMugKpPM9SV1cDm65s/wkOHZBojoqiM+6GpMSj4FhtayNAUi5H3LfQBG2KWssFoSPuJdKyMLKtpuLi+e3jwFICUg7CSHsNVlYlKdizOTvKdq3KTsG8pQirsAG6vAB5FdhP490U4gfjxi+DedoqO4YftmKdKNulO26jiOv+2Ga/bftVNFXpHtVHrpLpRFJTpP3z77T469++fTx48e4LueE+NY6UKk7UniLP8A7rNf3X6//9k=</binary><binary id="image1" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAD6APoDAREAAhEBAxEB/8QAHAAAAAcBAQAAAAAAAAAAAAAAAQIDBAUGBwAI/8QAPhAAAgEDAwIEBAQFAgUFAAMAAQIDAAQRBRIhBjETIkFRB2FxgRQykaEjQlKxwRXwFjNictEIJEPh8SZTgv/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgT/xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECEiExQf/aAAwDAQACEQMRAD8A2t0YoQpwT2qVzMV+N3UHgrDY2eoM0y58VEbgfp9K1yMRmnuJ5h40jyYHGSeKrWE8u2QAApOMdqGCsmT8h70TAJwMAZx249aKBy4c9vTNUC0zDCgmmmG7Ockjkj1PrUTAjcy5XP0ouCgHae4IomOJHhgIc55PHY0Uk5IXLMcUBQ27n96JYO2MYLebHtRBA7BcMx29sdxQJqwZRtIP+BQKpjHHc+xzigNGoAO/k+nPAoAYlee5oBiGeWySO9AJCgY5PHagFCADzj2GaA2N2TkjA/U0HMwbPPeiyBLDfkkj04FCl1cBMgn6URwYFGySR6D2oAeQDAxnHGKAhU4IbGc+tFwnwDj9aK7f8v2oNu+IHxNvJdXmt9EmKWSqArA/mPvxUxMZNe3Ml1dvNcMzSSEsxPOferJhht/OWyAPc0UfdgDcuM8n50AMCykZFARsngcY/egTcbjnJz9O9AB2kZGSQOcUCX8x83bntQCMruJ4B7D1oCyOGzxtJ9M80CAdg5UjFE0aFJrghLeNpHY4IRdx/QUNWCw6D6q1EZttEvirHAZ4ig/U4qw1b9H+CHVN3Mq6hJaWMJ5ZjJ4hA/7R3P3q3ET+pf8Ap/lWNm03XkkkA8qTW+3PHupP9qxopV78G+s7VSV0+OcAn/kzqSfscVvIKzqPTWu6XKE1LSL+Bhz5oDg/cd6lEZzGwLrtPqrA8frUCJfcw9gfegUjZsEAffNADyHt78UAjCjzDJxRcO5Pw3gwCGOVJQp8ZncMGOeNoxwMY96GCbQffFFcUXKjDDt2NEo+N3yyM5z3okKuqJgIzONoJyuMGi4QfGcqSfXBoYHJx659qKIRnnsfUGgJn/poJYoTIGLY+eDzQFlQK2G/KCTmgbspfO0qce/agPGcR7nHf9vnQFfBPlOc88Gg7uucc/M0Bd208YJJweKAYrea4kKQICRGW5IUYUZJ570DYqcknt3FE0VuVyDzj1oamOlulda6puvC0a0eZVIWSbtGn1Y1NNbX0x8ENH0qL8X1NdtqDoNxiQbIh8u+WpqL70Tc6fcxypouiRadbW8hhLFFXcB7Edz+tNFvEZxkmmgShbA9PlUA+Hgg/wBqDgmBkd6ArJuJBGR7VdEdqWgaVqMfh6hp9pcLj/5Ig2KaKJrvwW6S1EFoLaWwmPIe2fAz81ORTRm3UfwI1mzBbRL+K/ReyS/w3x/b+1Wexmev9O6xoE2zWdOubUDszr5T9G7H9auCJj2n3PPrUXTlGBB2kYx96GlQMjJJHuRRXBgDgk8DtRKH8w4OfYA0SUlIMsFXJ4oujHH8ufnRRGOSNoJNAeFC77F2jPucfvQFEqgY3nj/AKaCUY58wwq54AoCzOmVMke9QeRnGR7ZoEIF7pnaTk49KDpSSwQntQJsGKjgggZ9uDQc4OOe1Am2UCkHOR7dqA8t/cSW8MEkrGGEsUTPCk4zj9KJT3pzQtS6m1aPT9Jh8SVxlmJwqL/UfYURuuhfArR7f8NLrF1cXciKDJCrbI2b7c4+9NGtaRptrpdqltYW0VtAn5Y41wBUodvGjqUdQyn0YZqAIreOBFSFFRF7BQAKA1xcRwKplcJuOBn1NAR7y2ikWMzoZnGVQHJNAuQcD3oBKkD2FBy8jnvQFxnjjmg4rxwKBMqCBtPNA3vbCC+tngvYo54HGGSRQQR9DV0Y91n8DNOvFkuOmZmsrk5PgSNuiY98D1X+1XRhWu6DqWgX72er2j2069t/ZvmD2IoGG7jbnj1FFlB224PB+VClN4DYJHyAojmPGCck8cetCAxgjPp6UaAGKtx6+9ATAXO7nFBw8HHLN+goJhBuj2FeAcnmgNazW8U0vjweODGyqpYrsYjytx3x3oGa5LEEjH9XvQGlgmjjMmQq4HBPfPYgevagG5nhe3tkFuInQHxJQTmQntn0wKBKTlAeDx60DSY+U9zn+mgsnQvROr9Y3W2xi8KxV8SXUnCrjvj1Y/IUR6c6A6H03o6wMVgrSXMoBmuX/NIf8Djt/eiLfjJwO9ZBiOfmKDhktzQAzYBLZ8oyaDF+rOptVv8AUjNZL4tjA/lT+kr3wvqTQX/pi3Y+DqFxKXurmFWAaPaVzg4I/b0oHlxqV7penRTXFu93dPLsESYB2k8n7CgnradLq1WaIOFI/K42sPkRQCg3Kcd6Dgp3d6AdrGg5VxnjmgKWB8uQGxnFAUgKuSefSghuqNC0jXbAWGtxQyJKdsYc4YMf6T6GtDzR8S/hnqfSUz3NvuvNILYSZR5o+ezj/Pb6UGfLzyD/AJoFFySQVBHpQDJ5kGByPahAbWxn5+po0OF3D+XPtQJsNwOe+aAuygmMkebgHnHFALHYpJwSeGz2oGpOJWAI49BQEZlYAHkg4oARVOMvtBIJJ7AUAX6xxSOsUgmjViFcKRuHviiVfvhT8NZuqpk1LVFeHRkPlHZpznsP+n50qPS+mWVppdnFa2cEcFtGu1I41ChR8qyHVxK8cLPDD4kgGVQHBNAa0maaBJGTYzDJXOcUCy5JOaA2OMfoaArkheM7vlQNYNOtoWLJCgLHJwo5NApPKLaNpGRQB6j2oGmnRvcyNd3O/DkeErLhkWgklIdCyZOCRzxzQEeRxhdpUnncBkD5UCxXjJ7+tAlctMsIMLohz5mcZAH09aBQYdQwyAeaAuA7MAQxHH0oG1481nbGVInuWU5Kr+bHrgepoKB1u+o6jqlvBH05NevEBPBK0pQR4I4BHZj+1Bb9IS7lsFtNWtYwDGFYB/EXHqpJ7/WtQYx8VfhGbdZtV6Uh8gy81mpyR6koPb5UGKY4YkeYd88fbFAI5AC98c5oQBb+U9+9GnN5RgDgjOPWgAN3yMfWgAqc91/UUD2RSSRg9+49KCR6e0WfX9WS0icRwgb55WOFijH5nP0FBYNRi6dSR7HRNPmu0hOW1GaXaZMdwBwAP3oynE0XRYrFtV02wS4ECj8dp1wcsE7eJEf39qlFZ616ZttPu7Kbp9Zbi0vYzNCcgjHqoHuKsEp8LPh7P1PqjXerxywaXaviRSu1pWH8g+XuflQemIIY7S3SK3hVIo12pGoAAA7AClEL1N1RH0/oTalcwx+IACLaSQKx59Ppmshv0D1jH1ZbTubU27xkkAnKsuSMg/UUFluLlLaJXETyecKAg554zigXiubeRnSKeJ5FOGVXBIPsaBLULoWkIfw3kYsAqIOSTQJMbpm3oqlmwACeF9yfn+1A+Bx34oE5IY5P+YFbnPIzQKAckHuRQCAQOO1AL8r9KDhkZOT9M8UCcrxgAyYJzwD70CT3Itxm8kgi3fly+P7/AOKA9pskhEkZysnOfeg6RH8w3tgjAHtQRZ1uystSg0m5eRJ2UbHceV8fP3oJkBSAVII9xQFdSRwKDDvjN8L/AMSJte6chxcgFrm1QcSf9aj39x61YMH8Q+CkfhqpQncxBDH5H6VRwXJ/Ke1Am2QchuMYOaNFSAVznB9qAm8f10D2RmX8jDHP3oLbebtA6ej0m2LrfX6LcX7IMskf8kf6HcffIoG8yTadZxSTxCK3kRZUwSFfkruIJ78GhiS6Y1OS3160uZJFWO5bwZtxzuQ8bcfPNMZXvo2wsLnQ9R0q/maJNNv5Yo3bjCuMAHPzqA2jdUan0lF0/ZXcElxp9zE+5WVd/DE71IPPB7H2po1bSNXsdYthLp1ykyEcj+ZT817ioITrnoux6vs1gv5JYnjz4ckZ/Ln5etA+6N0BemdBttMina4WEFfFdQpIJJ7D60E5I4Vo9qnnsQO1A3k0yzeTxhCizZJ3qNpz9RQO449igMSxHGW5NAIwBtUAUAMORkfegMhG3jtQD8+fvQGXJz7UAHuRQA5YDI5FB0qCQA5yaCs2/SFit/Jd3AmvJ2bO64ctt5zwD2oLMilVAUDgcAelAJLbhgZz3oGN9HPIYmhtrWRw2czjt7Y+dA+h3mJS67W9gc0AvuLYANADpkZABHY85oPOnxy+Hx06Z+odGjC2jt/7qBRwjH+cY9D6/OrKMebcceHwfaqCYIyDgZ96GhHOFJI4/WjQpXnsaCz9J6fDqGvRC8OLO3Vri5PB/hqMkfc4H3oDT3UupapcXrKS9zISgDdhnAGPbsKC5aLLBHq9p01c6bbagPE23kpJYhmz5IySAAMj6nNGdRnT2lu3V9vaQQrJDHfCMFj5kAfufsMUFogu5H0jrLUYXK+Lq0aRse/lf/8AOKlFfudagvbnQpNQRmtILydCwPdCQcgMOMZFQanPoeiawBd9M6s9jeKPK1vKQp+RFA4septa6fuFtuqbRrmzx5b+BAdo927A+vsflQXfTr2z1O3W5025juIW/mjOR9KAZI914khaRNo4XdwT9KAl3b2+oWpjMoZWbOVfnI9sUCrXUNssUU8w3sQoJH5jQLvwQQC3NAKvuUPtK54waDg23v6UA7weBnNAIOBigMr+hoOjdZQdhBx3waAVG0Z7UBWfAOQSflQChyNxBAxQRutarb6bHALi9trSW4kEcJnGd7ewFA/j8QEK/IA/MBjmgWDDBB7igj9dupLTTbiaHZ4oQ7A7bQW9ATVgwXSNV6onl8azW6t45pWdxHIxWA/zNtz7A8Glg2S1u7fX+nt0J/H2c4MMhmQoW9GBUjj60g8sfEHpebpDqi4sHLG2Y77eQ486E8fcdvtVFekGW4UfegKVAAKgnFGhuDzxQXbpDTZF6a13UnUqrCOzQ5wGZmXIJ+lE0ppkEK6nJcRWcTW9hA08iKcjcowpye/mxQ0+6VRbC/jvLm48L8LG9y8pIOXxkDnuSTipqHXQMng3es9S3fhn8DbvcZI5Mr/lH700dc3Dad8NtPs4nU6jeXD6nMCwBRF5XOfU8YHrTNJFF1X8RawW1jc4GxTKNrZB385yPkBTFw1stSu7Ni9tPLGSQfK5Aphi8J8UNUm6fn0u72yvJ5fGbuF/39aYYtGgadp9/axXnRetzaXqnhqZI3bEcj4547Ak/X6UxFisPiXe6NMdO65057eQAr+LhUlHHbOPX07UwWXpQ6BqMo1LpgW0sioVI8Qgxk+684qC028M5890Y3kHKbUwF+lA4LDOzu2M4FAOG3DaoI9cntQdJxzQEyR259f/AKoGl5fSQRFo7ZpB/MhYIR9zxQdayyXKb7gqox5Yo2yB9WHc0DPUIWnhWKxkuYFRs5gcKWbPY59KBkx6isVeSGW31JNwHhyOUkA+o8v9qCfjkMo/LJFKqBmRvSgc2swnRyFcYODuXGfpQMtRsLK8vYJL+wjuGiUtHK6hghz6Z7H6UEmCsig84I9RigiruC9t0DaaVmIIHhTOQMeuGwT9qCJ1ywv9T0U29xFFiaVBJGHz5M5ODgYPY/arKJPTtLW1t44i7SKq48w8x+ZPrTRJoipGFQAAdgKgzX47dMJrXSrXkUe6807MykDkp/MP8/aro80FQyZ+tUJ7hvH0x270XQ7KGtXvIk0T4c9P2bIhkvpnvJVfjIxhf7qftRDXpu0/1DpzXltUlkvmWMBI+2zdnn64oYa6yX0XTm0i4jQ3t6wmuV53xov5UPpyeeKyLbpFtZ6Xpmn6TqNq7/ic6pqQRR/DVf8Alq2fTOP0FXBnXU+ox32o3lzeW+JrxlMXHKR9wfbJ/tVWK5f3AnaAjafCTwwcY4BOM/qKKSjA4Dg8j37UHZKkE5P0olSFlcLDdJPbTNBOigjxOVZu3+80Rbbnrq9l0t9I6isRd2rgKpPlZMdyre9An07oupoh1zo2+lea2fMlr+WZFx7ZwwqWDVug/ihDq7R6b1EPwmpMNokPlVj8xng1BqEUe1EAJOMDOc5oDSxq6YYeuaAJF4oCBUQ7mJ45zQHYB14wR86AVjBXyjge1AEcRTHlA9hQE8kbgEohJ5yQM0ETHNqMOr3IZQ9tIMQyEjKt7D3FBLqywRPJKTuxlj3zQI3Ut14e+yhWRj28Q7RjH60EfpF3rU/jLqFrHbS4/hqpJXH19aCRa8jgiVr1xGwXzYyf99qA9tc29/aRXFnKs1vINyOO2KByoxwe9AYocHGKBvdwLcWzxSLuR1KuD6gjBoPHXWujt071Nf6YSSkUnkJ4yp5H7f2rQgWAA3Y+1An4j/1t+tBrHxKuYS+gx24LRx6ZFtI/lz60FY0+/v8ASphNpd68EpXY5AGNvzFF1YOirZbzVrvX9dkNxZWH8eeaY5Lyj8qj7kcVlETqOqXd/HrPUNzcNE16Tbwxf1JkEgD2AA/etBte9R2Oq2cv+p6XHJfBFjgmjkMaRgAAEqO5o1FWfbgjsR8+9AlI5CgEggeoNAq0iug8uD7g80KKmCcZ7fPmjJzJfT/hWtjJvhOPK/OOe49u9A96X1W90/VrRtNkkSfxQF8I5yScdvX6UGidSLpfVFzcvbRiy6kgZBGysFW7B9T7HHNSjU+o9S1iz0e2uNLmX8RYxJ+KgYeVwVGTn5d6gjug/iU3UOt/6TewQpP59skL5B29x/8AYoNHPB78Ggb2l3bXO78PKsoyVyvIBHBFAoSkbfyhn4GfWgTnmWFN7ybAvc4Jz9hQRdx1dp0S3Dw+JJHbDdPIUZUjX3yRz9Bmrgzbqb4x9Oxho4bB751O5HPkXPsc80wQHT/xrJ1IHUbGKO0kdRiBiAgz+YjnsPpTKN/tLy3vLOK5t5klt5F3LKhyCPemAYLuK5XMDEj1OCP71ArGWLMPT0oIbU7h11u2t49OllWWNm/FIRsjI4AI/egfQ2ktpbww2XgxoDl9wJ49cUCHUGv2GixM13Mkcm0squwUH5/SrgxDW/jFcXOteHb3otrKEEiRISRM3zGc49v1qDT+gfiBpvV7y2unxTxywRhz4ozuHbOR2+9Bmf8A6kNIEWpaZqiooEqtBIR6kHI/atfRjDEt3AKjgVQjug9j+lQWh72e/htTOzyeCnhHPomeMYoJvQum7vVD47K9jpsQBkvZ5NoAHcgUAa7rKamE0Lp9Xh0G1OZZTwZSO8jn9cCsivdS38F9cJDZIY7G2URxKe5x/MT7nNaEKrENwAFPPlosFwS2cd/cc0UlIm3JOeKDo2LH+UA0SjgDk98URzPiJ2449e/NAbS7v8PdpKkpikQ5WQLkqccGgmYNQmXWLeQLG9wVRQVPlcj+Yn3xQa98OviAjz3WjdXSpFdliEuJCNjDtsJ7enepRdel+kdL0rqOTVdIsoYklV1dixO3nunpg9jUCnU3WMeka5b2EUcl3JInmigQs6ZPlJAHY8+vpQP9O1m3nthNo0cTwM2JDwoVj6H5gd6CbhtUiVn8TcXO4ktkZ+We1BAf8Z6fZ2uqXWpyxQrbStGseQzMB2IA961B59+IHXmodXal+HsPFh04HbHCo25+bY/zQWv4f/CCxvII73qC8iuXYb1tYZeF9txHf6U3BatX+DvSl86x6cr2dwjbnEUmcj6Enj6U8hLdJdEX/SmowJp2tTT6Oc+La3HO0442+3NBf1LmRUjjQAfmc+nyHvWQockYyQcY3CgaabaPZxGNnaUFi3mPb6f+KA2q3RstNurnBxDE0mPfCk1YPMemaP1L8RtYN9fJPc2aMUaVmCKg54H0z6VRYendf6Z6T1W56a6j6fgfwJyguhGJmPzbIzjHtSjTn0zSunbi01fSkt9Os5GAmWNCDOGxtXb6HnNZEZ8etOF90DPKFy1rKk3zAzg/3rXI8u7zvOTg4zVoTLDJ81QWDTb2SwuvFgcrkbXwM5H0PFGqsjpd6+kcT61Nc2ieb8OikFc/9PA+WfSjKA1nWBzpFlZ/hLWM4KH8zsPVj6mghN4IyQRk5NGo5BkFmyAfSgVjChdpGO/FAXYpOHLBe/FAQqoBJbA9sUBGxgtgEj/eaCf6DGjt1TZf8RNGumKS7mQZQkDIB+WaMrf8Ub/ovV7V20JIYL62K4khhCLOCcEcAdu9BmCuEQvxvyFUg42+v+/rQaj0zax/EXRY9Nns0t9TtM+BqCKAjEclXA98jn+1Si7Cz6u6O0tLjTrxLu2tQJJrDwcKE/m2M2SfeoLrpupDV9Mh1OytUS2vIN8m4BZQf6T7+vPpj50GfdK9L6rJqk1y1y0elRDKRqdjHHoyDhjx39e9BZr7fagW0j3kul3iETRqHkeF8ZBUjkZIxjtk5rQ86dW6r+O1OcW0UtvaRsY4oWfLKBxz7k/5NA46P6X1rqS6WPS7V9v88rAqi/f3oN46X6C1DSotkus+BIwKl8hn2+3PapROXPT2t20bPY6kJ5UGYmbIfIHGW5z68VBI6DrzzWSrrAjtrwFUbDja5OBlfuaCbluJLeNwIpLiVF3bVXAP0Pv8qBxLO8cYcW7vnuqkAigNFKs8CyxlwG/lcYI+1A31ayF/pt1auSFmiaM/LIxVgwfoO413o3qqfSLyUSwodogAyZVGcbPTPr71aNDvendJ6wtbu7Fi1lezK0bS4VZMjtnFZE0bC5u9Jh0qRAr2yw4uWx59vBI44PegN1tpbap0lqOk2sipLPB4aFsnHbBNOR5A1exFhqFxbeKkngyMhdOxIPcVuhiZFz/zBUEwcKvYnP6fWi0+6chjn6h062uATFLcRrIMnzAsO9EehNR+GvTV3GUh0+O2YsGaWHIf9amjIfib0no3S0VtFY3M000zMzLJtLKvvkenyx96oz0rwNjA8cj2osFLbVAbOc9jRQiXOAwxnj3oBlAxwDj37UDY+vHOQeTQBIdqjcPMfnQwJclWyBgCjJBFeefw4VaVycBUGST2wAKD0L8H9C1rSIILjWLSCytY1lZASVnlL4PI/wD8+vvUo1uwbxI5GkjdVc7isvOBjtj2qBWKFZiQ8CJCB5FHYj5jHFArDbQ20ey3RY1HOAOPsKCH1u61CPSLt9MtlXUHUrbCbJBbPdtvYetXR5T1y2udD6lni1ErJdJLvlK4wWOCePvVgsV/8Sr67UW1vA0NiowIonMe4+7FeT9ARQRmodWa9EYpPBhs1Tygw26rk9xknkn70EjonxZ17TXjAeKTkZ3L+YZ7N8vpSjX+lOpNM6umgkMG3EgBV1DYbG4kewz2NZGkC43CP8MPFBONysMAD50DaHVH8S6N1a+BaxMUjd280pA5wPb296DrXWLK9WNoJdtwybxDKPDcAnHIoJBifTBzzmgaz2UFzPFNNbwvLCcxuyglT7igdRRKg8qAZ5JAAzQEnuYoHiSWQIZW2ID/ADH2H6UERr12BY6hueIQJaO7SK/nHfnHtx3pyPGWoN4jynuCfU963RF+DL/UtQWTkjaWY/8ATnHFGql+j1VerdJY8r+KiJz/ANwoy9C/EjqSbpbRY723RJC8ojIcZ4IJ/wAVkecer9en1+9FzeLCCq4URjgDP7mtLhteadBY2kMczyHUpcO0YxtiUjgH/q9celAiLy1kjCX1ruyMLNGdrj0+h+lE0+t+kNQltJ7yKS3jgiTxUFw/hySp7qp70NV6YEBgWUNjBoaKeAODnHrRoVgDnBP0ozpxZ2f4y5trVeGuJFiBPpk4zQep9C0LTembS30fQbWP8ZsDyTugZgf6ix9fYZpbgmbXSmXULaa6kMzpltzcjJ//AGpaLCY1CDsF74PrUCgHY0HbSx7Z96BGUfxB2xjtQZ11t0Tb6jNfyw2wM18gV5AcBdpzyPnV0Yp1F0o/TEczXjXaTOQYpIk3QlT3B9Rj0zVl0VKbVppImheUSwbsgFfXHc0De0tri/ujFYQSSyfmKopPHqaDV/g9p+padr/gkSRTzKu0kZRlPLYPbOPf2pg9GWzRCMJAFxH5do4wayKX1z/G0CdzqLWRkiaTxQBLudclQvovbv3oMU/4Z67uwnUAt3u1Zw42yhmx3/Ln8v0oN86L1d00i3i1UiGQIocNnEbnkqT2xgiguEbI4DIysp7EHNAZnxQQ/Usksej3EsCl5EUthR5sY52/Mjigr6Qrp3R15LqEcIlmgdpFGAsY2navPJApyPJtwd8rnGBuJz6Gt0MzGSTyf0qCwSKA5ZsAjnn2otTXQYj/AOMNIDqCrXUZwf8AuGDRG6fF6Gyfo6+ub0CR4EPgIScLIeAcfc1keatN0661a+S3sYTPKzAbV9B7/StLrQ/iXp9pYLp8elWsUM11AzXMqt53I7g7j244oiB6W6Tn6j2TeAy2FspTeB+Z+/8AmgtnWlvpdl1Dp1pq07Ja20GFQpuDHHAwPf39KDHriVTKSPOCeBnHHtQGsrG5v5pfwcTOIlMjgEeVfck0XRIreS7uUigRpJXOEVe5PtRE/wBJ9HaxqvUcdhNFJp0lviaSWVcMgzxgdySeBipo9T6O8NppUJ1K4iW5KgSvIyqxb5jPH0paJm1NvKivE6Mp7MpyP1FQLRTwy58F0cjuAckfagOTtO3+Y8igMWCIWbOPlzQNhNBOWEbq5Q+YKc4+tAD7JEZgQfXj0oI/VtIttXsZLW5hRopByCP/ADVlGRa78Erae63aXK1tG3LAncM/Kmh10l8IZdBv4rxtTE0yggJsyoz6/P0po0zSNKEMdo9xGnjxuzkqMAEgjj7GmialjWQMgyCRyQcGoITqHT7q/a30+G2jFmwLSzl8GPBGFA9c5NBPRwJDbpHCipEi4CjtigqfWltqCaG8WhNbxyzOBIs8W8FcY4+dWQQ/wtuZdIGqadrknhy2u2QyOSEZOeRngY+XvTBZZevOmhC8janbqiZ53Zzj2FMFcs+sh1ZqsFrp8UkGkrlpbh+DNzhVX5Z5NQTfXyWUXSV2t+wW3EZ5I4HHt61eYPI0mA5C9snFaoLsPv8AvUEk5JcA8cZG480WnOlXX4PVLO4yQ0cyP244Yf8AiiPUfUump1B0/c2O8xfi4v8AmL3UcGpgw/SujNX0Trj8PpckimOMvHO/kEg9Rjs3PpV0aFq/Qqa1ZJ/qcrverEqNOwGM+uMfemiVtrKbQdMNjp9rvtkhPht6mU5yT8u1BkvXg1qXUtOvddgRY1R3j2YHiMvZSD27CgzSCyuNQ1KK0giL3Mz4VAOc/wDignoNNOnaHeiW8hgkku/Al2+Ziqgn09M0ETp0qpqSmGKOdFcEeLwMfPHag3JLuCRtPmQWsDhNphtVAcn1w3BPFSwDdWGpX1/OYdOtbbSrlQ80szHdn0GR24/c1AbWemdatLbTJdGvJIJypDQwMV3exwOPatSz9Ei/R+txy2mr3evyHV4miWIDhGwwyGA7nGRS2YNZAUBWYDdjGayEvxMYB3nYu4KCfU+woG93c2enWs1xcPFDCp8zEgDPzq4GGgz22saS1zZSZhkdsFePXt86YHWmySeLNDMYikZ4YNlvvUD+VARxQJqgwRQHUAAe2O1AWOFRM8mDlgB37fagb6reXFt4ItLZJnZsuWfaI0Hdjwcn2FAz0nWX1i4u4xY3VpFbv4eZ1x4vGdy/KgkriN2aMRlQoOW3DOR/5qwYr1P1tp2pdS3WnanKkGh24kRl2eaYgcb/AFxnnAqiv9Jno0dRLJPbtdQtkNPIALaMnODsPPpSjbdK0DTbWQXui+Gsco3BU5hPP5gPT7VkU74t6PZHpq/1N5ZZbwrtRnmOwDPOFJwPsK1xR5ybudw788VaC5X2WoJRULSBpAe5PA/aiinAZnHck4A70THq/Qr23/4Y0u4lmCpLBGA7epxjH60Du+WGOBvFlFuWOFcYyCfbPrUojri6k06xX8PFNfBUJ3ltzM3scVBjfVvVXVNit5dapNDZGQGK3shjeAe7YHIwAOT3zVggNTiu+orrR4p7m+upJFR7h3TPhggDaoBwRjnPH5hV0af0xotnoD3l5dWdrY2YjGLhwPEHoef996CC6m0HpuPpk3Wny2s9sJPHJ3AeI2D39T37UGU9QTDULuGPSLPwIyoVIYk2lj6/X70G2/DPp0hVudRuBLcwxhRGkeEjB9M+p96DSLprVHiieaAE+YxHkke4H1qUOIBawL4uAuc8nvj71AwjRtQ1eO78QNp9odyLju/qT8uf70Gb6r8SpLzryy0vp+4NxYSSCEswI2u2Rn3OOD9qC4dVamen9NlaC7tUaIFvCmnHiy4HJXJxnOeDVwed+rOvLnqSyWO4jZSru/kc7ck+30GKosXw2+KmqaDJDY3jR3OmqNoRhtZAP6SP7Ggtmt63qbTJ1XLazJpslwBFblypEOAA7L2OWANS+xrnR2vW3UmjJeWp8wJSRf6WHeoJdSPMCRmgMq8DmgBpNsgUIxBGSccD70DczmS8MDWoe28MN4+f588rj980CktuJZYpFdlKZ4B4OfegQ1hpIrVjbsRMBhBj8x9qsHnX/hm36y1O/u9V1ddPmS6aD8OkQdyxOSe4OMmqLUvwQsYY4Xjv7m4YEEhwFyMY7fXB5pRbvhp0jqfSMV7b6jqZvLGQAwxAEBDk54PuD6VkVb49a5DBpiaNaeF/FIaQDumOwpzMGDEZQZ5+VboR8In1I+9QWDY6gFn7jjHpQhtJEFbAGBnijT0P8H7qPVOh47a42yNaymPBOcDupoykep+m73V7g/8Av2itQowvJIx6j5/OpRjfUWrax051RPY6LqFy8YACkebO4Z7HjNWCY0ToW2utJbqPreW5na4O4R78cehY9+fQVKLX05p1ro97awC4kX8VFmJLeEKdoyfOxJPbHbHYVAz0rqKPWNauri9t1ktJgILYgEiNFJ/Op9STmrBBdeaFCo0y3jt444DI3jLE204Y5DD+9UPPhv0NaRtPq99mSLOy22nOfdh75oNC0vT7m1uJGvGiii3AW8UDbQAeDu9zUohLlhouqap1VciF4I1FtbxSthtobBIPuTn7VBJ2vUth1TYk2ULi9iALwyKQYz6Z9CM0Ft060/DWEcDHe2Mucdye9BFW3SekWt3LPb2cUTsd2UGCG9x7VYMzufhzdX/WmoXj+BPpx3I7XZMmXYckc8EVRKaP8I+nXikLQuxOQSTnBzj6UEjonw90XSrq3S3s7dplJcl1EhGDx396lFx1TQ4NVjaC7UNCU2lAO/8AvNWDCLp9X+E/WgWImXSp2LRq7eSRT3B9iP8AFSjd9P1+21TRodVsMS2rLmTbyUGOePXFQSltcLcW0c1vh4mXcjDswoDLdRm4FvISsgXeTghDzjAPbPyzmgVFxCzuiOC0WN3sM+5oDqySJmNg3rx7UFb60tNUubGJdFdEvhIdryflUFSM49TVgyTQenJemOorf/U4H1Fpp1edAh/hOQTuQ9375JA4q0bnbPBcxxT20wkjKkqYzlT9ayGWu38um2MbLEJ7iRtoUds+/wAgBzQeW/iHqi6j1PdzeL44HkL9txHtWhVUOVyvHNB2F9zQT8hUAhAdp5FCG0mSAzE4HGDRppvwL1bwOpJbEsFiuYyVX3deR98Zoy2ZtRgmjkSRZocEp51K7se3vUow/rfpFE124mVpfD4mk2MWdCc4A+VWCH1281/UmFnpklzPYRFBEG8uGC4yQfcn9alGgaJo95rRsbi53WaxwrHOm7BjYcHnvz/moJaw07pXSI5IW1K0CQnDhpAWB9R796CudY62msTRW+gadI8KnDXMkLLv9MA8HGOKC3dAXF1dRfh75f41moi4G0AdwcfTj7UFhv7RjqMBV5AJFZHkR8FRjIx6CgpXVNjJ1JqNn07p26CztSJLlpIydyj2J+fGaC+afplrazqLa3SKNIggx3IHYUEsBk4wQc4oK11L1z070/M9rql6wuVA3QopLcjNBDwfFboqeSO2W7kQNxuaEhQfnQLt8TuireVoV1UeXnckTFT9DigHRuv+mbu9ZV1W3Nyc4IRlVl9O47/KgtU+s6baw+JcX1umRkAuM/p3oK/1t0rYdX6cqXKESqN8Ug/Mp9P1qwZ702mo9GdUTWJsmOn3EY8CAORGXJAwScjJ5q0bJDNLb6YklxbKsgA3wwndg9sDtWQN3aw3ZKTwLLEQOGORn6ehoG1vYAw3FikRt7JSuH3Hc/GSc5P0oHn4aO2uGuYyiose044wBQIm6F1dwfh5ARs8R8L2BHGfnQHv9PS4PjxrGLtFKxysm4qD3oCxboIIo7e1jhQHzAYUJ8wP8VYM56j1ktaal1BMrS2sAaK1OQDD6eUepY9yfQVR5zv7hrmaSaRtzyHJY0DcE4BPIPb5UBwOO4oJYzFvzEYHAH9XvQhNZN7AEgDOSDRo/wBA1SXRdVtNQgb/AJUgfBHcZ/8AGaGPVlhPbarZ2t5CEeORBKje2RUrI1zYxTBhMinIwcjvUEcugWkO4AMisMEA8N69u3yoERrOhWNxNYy6hapcxAeJHM+D8u9ASLStLlm/EWdpZyxy+Z3RQ3I5B44oJKTT4blFWSNBEOeBg5+goFYbOK1TKhIxnIbGMH50Cpcyo6AMrIcM2OD68Ggb6Lbbllu5Cd88hYBu6rztWglSNkfm4P70Gaat8Rba96w0vp3R2mhufxyi4kO3YyDOV9+f8VYMw+P0cP8Ax4JVuEKzW8bEr5tuMj0+lUZ7Y2X4288GK+towRlZXYqv9uKCQi6YmbT2u11GzaJWKnYxbBB49KCFnhubdiwL+U8OhP60ElpXUFxY6nDdXQF0qYbZKxwT9vWg3npb42aHcmC11C3uLSQjEkpIdQfr3xUondP6x6e6tv7e101hczRzrNtaFiFC/wAxPYHtUF+lj8bYCTgMG59cUC4OBQQOo2eoXepFTeL/AKYQN1sEwWx6Fu+DQLX2kw3Ok3Vjas9qJ48Exd1PHb9KCE6R0G86Ut7mK71KK4gklM7TyKRIBjtjtjj96AOreudJsrMJbXksk8jBCbVdzRjONxBHP/3QQ9x1jcWGkERWWqXdpMPCt7x4wfFOOWPbA+fAqwZr8TJ9Qbp2ymvEjsrSTEVvawyHz45Lv6E4wPqaoyl8g91OKDlYEc8mgKW5PH7UE80f8PPHl7gDFAZkUjawUIQG8w5ouknAUbl9Dg59KK1X4Z9XXFvo8mlRXax3KHfBG8Rk3qe6jHOc54+dMZO7jr/qK8vWtba4tYu38TwvDOMc8N60wPLbrW10PS7pnvrnUtbAKobgBUUk9jg8f/lMC2rydMdRSaRqWoLEbx4UefwxkL2BVvvn9Klgv3Tp0lPxFno6wJ4IVmEOMEHsf2xUD2e4ks7n+NGDaCMu8q8lCMcEfPNA6tW/EwrMybEYZUHnI9Cf/FAzu7G4LXTWs38SRNqhs4Bz3z9KCO6x07UNT6altNMvEs7xkC7nPlI9R2/egwbrDT+r+kupLCeK9nu3KBYGRy+QvdWFWCU6avtA6h1iKDqLRhpmpvkxz2p8JGb3z7k557VRX77TdHteuPBut401CAouyXGcdvmASaC069030brYaay/CwPFwWspRErfUN7UGZX2hWSiY6ZrMc0CvhUlBUk/UcGgiLq2mtG8F54yDwfDfIoGkrRsSZXwOB2zmgsvw06XHVfUcFvI22xQ753Ze4H8v3OBUo9a6XodjpltHbabDHZIhVsQqBuA9DxznFQTQUe5oDYGMnn7UEbpV3JqDyz+BJFbBtsXiDBf/qx6CgDXL42cSRwGM3UzBQrHGFzy32oG2i2kKTSI80lzMow0rqQoyew+3tQO59KtJJRI9rEzgg7igz3z/egZ6paJdGGwW4eBXy7pGeXUdwT6A5qwebPjJrcOr9TvbWZQ2Onr+Gi2nIJHcj7+vyqigOuRk+vtxQAqEk4BU0ABj7j96CzzKxYD0GeM0CQG3OMAjkfOgbSZwzE4PJyfWi6caTdzaffW95akrPFIrLg/tRHpGzs9C6t0W31FrO3Y43MrcbH9c/eloZ6v0JpWoKlrHHBbScSFEHYc5Pz71NDXUoJrK1g0dvw9qsspW3nXaN6KMrHnH5ieSfan0U3Rr1uidaRbiwk8BUSS6naQkjc3ZcHaRnn70wbja6lZX+nw3NvMksM+FXnPJ9DUCeoXj2hSG2t2km7op4U/f/FAvHaNePb3N0jRzRA7VD8Akc9u/FAvcxnawZQ3HYtjJoKfDFAdeub6Vo1dSULIBtTbgYOfU8jNWUVvrm5ih0m1urixhlsI5HJliOwR5/LkkHHJPamjHdQ0HWdemlutN0+YWBYtC0rHDhjwVz3zWgx1n4e9U6QE8XT5Zd//APR5se9XBXbjS9S0zAvbO5tyWKAOhG4/KpQ3ZHXO5JFK98qRUGhfCbph77Uvx91pv463wVjR0LR7s483796WjW7rTrXpHWrSW2YK7lmXTbaIFpCRjjHOOSeeBipaNLtXuIre3R43lnkGXYADZnnmoH6Dkbzn6UDGWe9a/hKG3jsW8riQMJS3svp86B6zgMQmDtGT8qDNb6XUpOoPx72tzOkjFYowOduDwDjj70Gg6Wsq2KNeAJKRuKk52fIn5DvVkENrvW+iaSAsl0txI2Asdud5Yk4A4pgzv4l9ST6JZSXbyyprWpw+FFa5G21gz5icfzH3pgwCSQlh688+tUEwjjngZ7UHAHuWAHpn+1AXj5frQWXOGBZcKSe3c/rQIyAtnI27eBj/ADQIMAuH8vHBB9DQwVpPLjOckEZ/ahi9/Czqj/S9VhtLm6aG1uZFUsT5VOfX5Gpg9GiNJArxsrxsv1BHypYGF7pljeG3kvLZSlqzNGGxhSRjP6GoG1yLUWiWc2nSPA4KJGItyYHYHHarop3wu0jWYNUvzriNBp8ErraRMANxJ/N7nA7ZqDUHgSQLvAbacjI7H3oOuIFuYzGS68jJRyp4+lA0m0yDwGjiTw3bzBwTuDe+TQVbV+mLmW1NtbSok9weZiC2zPLEZ+/FBM6Xo40/TYdL8Jr21G4vJcuCck55HbFWUKQ/h4tR/DTz2o8TK21qmMgKOf8AfpmrokljG1i5BHI57D5VNorut9Lab1LA638W6H8sboNrqQckq3pntV0RWsfD6K7SGC3vTFahQJY2iVmkI9d+Mimie0Hp2DQ7AQacio3JZgqjcT3zxk1KHGldPWtnqMupS5uNTmGGnk5KjGNqf0r8qgmkhVGcquGblm96BDUZZYLGVrdN8+MIvux7UGKTdXdbaRrFvbaxbWN4d58BmwCjHPORycLx2q4LNe9S9TdN6I13qkWmzSXdwBCGlO4hiMKAB2A9ag0WySQwpLLtMjDcQBhVz6CgoHxF17XbnUYunulgsUsu4TTvjIUAEhR+x4qwZwtkOi7651PXJobm4tohHbQhdgecjnaPZeOfeqMy1vWLvWNQlvb+ZpJpWyT2A9gB6Cgjy5AO4A5oAGRgBR39aA7Z8MkFtxPY0AbV9UGfpQWhj5TkBQGxuBoEGG1iQCyHvj1oELgSkK6oRnIBIxzRdJ28Q3+fHiAds96LoH3AF1wCfyijNbF8JviI1rbQ6Pq/iSopxFOx5Uf0n3qUbWQk8II2SRyDPuCDUHMpSIiJQSBwDwKAgTxApnEbyIQ+APyn0+9A5B3AgfmoEWgcb3VlMpGFYjt+negSs7zxH/C3RWO9UElM8SAHG5fl/agNdXcEbJAZ1WadvDQDJO7Gf7c0ED1dqWv2enzw6Rb24nZfJd3EwREHqxyMZHzOKBbT7H8PZWTK5uZ9o3Xm1SzEry5PsT7UFF+JnUezSZ9LttRs2km2m5KSFWXDZI491AyBzVwK6J8T7CRtPjee0tbaGAtdNISdoXgLEo5JJxyfSmC6aF1fo2vELZXDJOxwkMybHYe4HtUFiJWJd8rKqjuTQcZV8SNI0dy43BlGVA+ZoBniE0RU7tp77Tg5zQUv4hNrU2tdNWOhylPEnaS5UHGYlAzn5cn74oHGt6l0z07k6nJC123HhKPFlbPptGTj9q0Kx0XMvU+ty6vqQtpWlZo4LOdGDWsak8Aflycgk+v2qC8a1q8OnaXLPOz2kCIWkZ+CqjgYx6n0xTBkmp9Sabp0KdRyI5vJkaGw08MVKIDw8jA557896QY1q2o3eqXr3N7O8skjnlnzgn5e1UMCGV/MOM0BJFOVwfX0oFtgZTjkg8UBtpOeO1B3hg85FBZXVMM+VJAA2+h96BO4IMJ/p7qvuKBKacmOKB5CYYx5UzgDPfHzoGwD5OApJHAHrQEAk8NWdNpx+XdkA0AIGhkGWOQcgg8UGw/DP4kmwhi07WCTZqAiSbstGc4+pFKNvs5o7q2Sa3kWaJxkOp4NZDOHUh/qL2k8LW78eG7kbZv+0+/yoEZp7fUpX/BXpgvYZTCSRtO7vtwe/vQdY6jeyatPp91FEPw8aSNMoYbi2cADt6Z70DS60KW7luJdV1JniJzBtURG2b0KN7+/vQKSWUWnLLqN3cSLP4ex5Y8jxiPykr23+nzzigpXUPVOu6Vqmmf8UWttb9OXDqkjRnfI3H849uRkDOKC0axLFr+nLB0rrUMM0bqCIGGGX1AH09qsGc9UfBiTV9Vhu9Pu5oPGLNeG6bczN7jHvVEr058Gre3sLeDVrmOdo3LmSFNjEH+XdntQXO51XQOl5YrCKGWa8SMYS3tzMyLjjJHb9alDqz1S5ktJ7nVdLmSVDiOONfEMiE4Xy+h9xUDm11CaTxEOn3VmpHFxKFCr9s5GPmKAus6jb9M6RJf3c88yxpjcxL7uM5OO3HrQVTSupoOuYdZMTSpptriNFtXKXDA/Pjhs9h2xQOJ7Xpnpa2S91WK2swqjbGw3ysfcnuxrQsGmapYvpwvra1FtDL52Mi+Gx49sZoMb+LXV0t+jWl3OYLGTO2zjx4h2nyszHsG4/Sgxt5ZJmEsjl3PB3GgSlyXBxkDnNADseB2PsaA8SoXQyFgmQCV70B5R/EIjYmPJxnvigEKcYDfrQF2/X9aCwqC7l2zwfT/FAJJ5747E5oGTqZArKOfccftQHZWwmOD23Z4NAEkTEBmwR7g5AoG7KSSE5HyFAMTyQsMHa/cEcEc5oL58P+v7rppdryPNAXx+GfsQe7Z9D2/Wg3zSdX0fqzT08F433eYwscOpHt9PcVkQPW632mX9vfWdrbXiRgrIdu2eHIwGD57+nIoKdc/ELVdC0u5afp27SUtta5vJMMzk+UDjzYHtQWDpj4gxXmif/wAitXZkGZzFGW8MehZO+PmM0Fibr/poWQmF6xXA2xmFg59sKRk0C2nQP1KFvdb0vwIUJNtDKcsVP8zD0Jx2oJDTNA0vR5p7qzs44pJOXkUc/SgNfa/pNvbF5L2JgTsCo2WJzjGKA1jcNcxOF/m/I0zbt4+gxgenNA5s7CCxWWYQxpNLgyMiY3nt2oHajcuexAoEL1C1uyFkVHO1ixHb17/KgwT4rdXWep6oul2OpywaTYqVLxDyySDjaM9x6Z+tWDPdB1TW7Wa9sumpGlursqMQRlpXwd3BA4571RcdN0i41G7h/wBSmNxqdkwn1O6u5/4cAXlYgcnngE/pQNvih8S211obHRyYbWInfJG/Ex9MD2+tBmNzcTXTtJcSSSSHH5jngDAH0oEdxbg5A9wKAzPwO+fegSLfLJoFoR5fUfegXOcHGAT8qAM+XaBzQCCwGDuyPlQWJpV37Q5TIweM7u/f9qA9vNYpFML2KaR8YiaJgAh55PvQRvnYoqA+MThcDnPai4PKWQlH3K6tggjnPaiEmz4ZznBPfFAVWG0AZDH1z2HzoE7lhv8AJIHI/mGRQI8AEeuOMGgndN6pu7V4RJLKY4WDLhypXj0oNL6d+MMS4ttetDdQgDNwAPEwPRh2NZGkabrvTXVZiexvba5aI+ILWZQG3Y4IDdvtQScvTdjK8chtFjkQ+VlYgqPXGKA17daV07apJrV9CsZbELTgbu3YY78UEHf9evJ4K9P6JqGoiR1XxjCUjAJ5OT3NBM9YdSWPTenwy3t7bWbSuBunUthfUhRyT+1BA2vXnS/jGdeo9LnIHljeLwSCe5zgmgejrOz1S3kGhazoaXYGAJ5Sw3e38uaCsJfX02rPD1XfXtvcCXdBJGjLbOO+EK88Y7nIoLB1H1Bb6WkN1ddSQ29io/5MZEjzt7DGTjj2FXNGUfEH4wRaxCtnp2kwGGM7llvBvIOO4XOAe/fNMwZbqusalfLBHfzSvFH+SIgKo+igYqiwWfWV30rpp03p6exJnUPJexQnxuR+Ulu2PkKCrT6jcSiTxZnbxCWcFidxPJJ96BBDlQ35fbFAbahBHJIGO+KAIwg5YnB455oDkKcbW7UAOowSMjOORQcCVXPp+9AqDkHcDmgMNpHPcUBTuzQWCJXcFvKR2Y0CMiqjnz4UcH/6oG8gKluwxyAfSjQ6ylEJBJfv37/OiYQMjbjkZXOSP/FEELAEkNn1waBCXdjORnPoc80CZeTb5wQe2BQAm4y7jlhjvQcWO3cW4GB7ZpgGC5a3uUeNyGQ5GCR+45pgt+l/EzqLTgxj1O5Zc4CSOXCj70wOE+Jd/Pq0V7qVvb3bISAWUBhnuc+/2pgvkHx0soLaNIdKkEiqR5yDg47cYpgresfELSNc1n8VrFtAw2ZBiiywwcgeb14x2xTBYNA13ozUo/GOqWVizDc1nf6crIh/7wOf1rOURvVupdE6ncpFeakiSWsZdbjSLfw1Zs+VVyMHA75xWsFDHU0idTJdf65rT28YKpPvHjKp9Bk49qYK/rGpXF/qU9zPdyzyyMSJJAAx9ifnVlwNZ7vxYEh8GAEHO8DDH5H5U0IPK8jHxSzFQAMnOKgJkFwPT6UBlAII5z3zQCjnA5OKBXeuAT9KABMA208DtxQHRhzgUC3KjJx9z2oAP6/L3NAHC8Hg/XNAcNtGe4oEy5yeaCdLk7yx2qQCAO1AmXZSSexHbPNAhJuLJkgjvzRonuAJy2cd8UCbyOi453Dj7GiYTZyVPPl74oYLJIyq68EH3Gf3oYTDEjLbiP1FEDHOUOdgOfXIBFAm77j5Mnng/WgLI5UE8Eg9iO9AnuJbuQx5wOBQFRxuIbOc54PrQK28ws76F722EyI4d4HJUOPb35yKBm8oeQsi4BPbPb71RyYIHmPGRg00GRsbsHIPY0Bg52AEEseBUCQJyOPXtQDtcdvvjtQCQ/GBwKAuXU4PrQBvZE5IGeO1AffjBJ57UBvEO045HagFWAAzktQKIzBeMg0C5kz5mOG/WgMrDJJ7jmgEnIyOccYoA3cEMRj05oC7/wDeBQTduzEoNxwcZGaAJOWfPNAlISVOT60aIQfkj+amgJ3bnnigKeFGPQUCf/x0Smw4V8exogX/AOY3+/SgKxKxeU459KAgJOckntQJkkcgkGgAAFFz/XQEmJaY7jnk96BM9yPQelAf/wCX7UBv/jagGP8AKB6ZoDf00HMfO/0oAH5TQA/5moECSMDPFAvGASMjPP8AigVX+b60BW7/AHoHEJJD55oDd4snv70CsSjCcDmgVAAbgYoGYJ3nk9qBUAYHAoP/2Q==</binary></FictionBook>
tests/writer.html view
@@ -328,7 +328,7 @@ <div> <div> <div>-foo+<p>foo</p> </div> </div> <div>@@ -349,7 +349,7 @@ <script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script> <p>Here’s a simple block:</p> <div>-foo+<p>foo</p> </div> <p>This should be a code block, though:</p> <pre><code>&lt;div&gt;@@ -524,7 +524,8 @@ <h1 id="images">Images</h1> <p>From “Voyage dans la Lune” by Georges Melies (1902):</p> <div class="figure">-<img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune" /><p class="caption">lalune</p>+<img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune" />+<p class="caption">lalune</p> </div> <p>Here is a movie <img src="movie.jpg" alt="movie" /> icon.</p> <hr />
tests/writer.icml view
@@ -1374,7 +1374,7 @@     <Content>And nested without indentation:</Content>   </CharacterStyleRange><Br /> </ParagraphStyleRange>-<ParagraphStyleRange AppliedParagraphStyle="">+<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">   <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">     <Content>foo</Content>   </CharacterStyleRange><Br />@@ -1455,7 +1455,7 @@     <Content>Here’s a simple block:</Content>   </CharacterStyleRange><Br /> </ParagraphStyleRange>-<ParagraphStyleRange AppliedParagraphStyle="">+<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">   <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">     <Content>foo</Content>   </CharacterStyleRange><Br />
tests/writer.latex view
@@ -24,6 +24,7 @@ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts }{} \usepackage{fancyvrb}+\VerbatimFootnotes \usepackage{graphicx} \makeatletter \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}@@ -73,10 +74,11 @@  \section{Headers}\label{headers} -\subsection{Level 2 with an \href{/url}{embedded-link}}\label{level-2-with-an-embedded-link}+\subsection{\texorpdfstring{Level 2 with an \href{/url}{embedded+link}}{Level 2 with an embedded link}}\label{level-2-with-an-embedded-link} -\subsubsection{Level 3 with \emph{emphasis}}\label{level-3-with-emphasis}+\subsubsection{\texorpdfstring{Level 3 with+\emph{emphasis}}{Level 3 with emphasis}}\label{level-3-with-emphasis}  \paragraph{Level 4}\label{level-4} @@ -84,7 +86,8 @@  \section{Level 1}\label{level-1} -\subsection{Level 2 with \emph{emphasis}}\label{level-2-with-emphasis}+\subsection{\texorpdfstring{Level 2 with+\emph{emphasis}}{Level 2 with emphasis}}\label{level-2-with-emphasis}  \subsubsection{Level 3}\label{level-3} @@ -733,7 +736,7 @@ \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item-  To get the famous equation, write \texttt{\$e = mc\^{}2\$}.+  To get the famous equation, write \texttt{\$e\ =\ mc\^{}2\$}. \item   \$22,000 is a \emph{lot} of money. So is \$34,000. (It worked if ``lot'' is   emphasized.)
tests/writer.man view
@@ -450,6 +450,7 @@ foo .PP And nested without indentation:+.PP foo bar .PP@@ -458,6 +459,7 @@ And this is \f[B]strong\f[] .PP Here's a simple block:+.PP foo .PP This should be a code block, though:
tests/writer.mediawiki view
@@ -325,6 +325,7 @@  foo + </div>  </div>@@ -353,6 +354,7 @@ <div>  foo+  </div> This should be a code block, though:
tests/writer.native view
@@ -230,7 +230,7 @@ ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"] ,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"]-,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]]+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Para [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]] ,Para [Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"] ,RawBlock (Format "html") "<table>" ,RawBlock (Format "html") "<tr>"@@ -244,7 +244,7 @@ ,RawBlock (Format "html") "</table>" ,RawBlock (Format "html") "<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>" ,Para [Str "Here\8217s",Space,Str "a",Space,Str "simple",Space,Str "block:"]-,Div ("",[],[]) [Plain [Str "foo"]]+,Div ("",[],[]) [Para [Str "foo"]] ,Para [Str "This",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "code",Space,Str "block,",Space,Str "though:"] ,CodeBlock ("",[],[]) "<div>\n    foo\n</div>" ,Para [Str "As",Space,Str "should",Space,Str "this:"]
tests/writer.opml view
@@ -18,7 +18,7 @@ </outline> <outline text="Level 1">   <outline text="Level 2 with &lt;em&gt;emphasis&lt;/em&gt;">-    <outline text="Level 3" _note="with no blank line&#10;">+    <outline text="Level 3" _note="with no blank line">     </outline>   </outline>   <outline text="Level 2" _note="with no blank line&#10;&#10;------------------------------------------------------------------------">@@ -55,18 +55,18 @@ <outline text="Special Characters" _note="Here is some unicode:&#10;&#10;-   I hat: Î&#10;-   o umlaut: ö&#10;-   section: §&#10;-   set membership: ∈&#10;-   copyright: ©&#10;&#10;AT&amp;T has an ampersand in their name.&#10;&#10;AT&amp;T is another way to write it.&#10;&#10;This &amp; that.&#10;&#10;4 \&lt; 5.&#10;&#10;6 \&gt; 5.&#10;&#10;Backslash: \\&#10;&#10;Backtick: \`&#10;&#10;Asterisk: \*&#10;&#10;Underscore: \_&#10;&#10;Left brace: {&#10;&#10;Right brace: }&#10;&#10;Left bracket: [&#10;&#10;Right bracket: ]&#10;&#10;Left paren: (&#10;&#10;Right paren: )&#10;&#10;Greater-than: \&gt;&#10;&#10;Hash: \#&#10;&#10;Period: .&#10;&#10;Bang: !&#10;&#10;Plus: +&#10;&#10;Minus: -&#10;&#10;------------------------------------------------------------------------"> </outline> <outline text="Links">-  <outline text="Explicit" _note="Just a [URL](/url/).&#10;&#10;[URL and title](/url/ &quot;title&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by two spaces&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by a tab&quot;).&#10;&#10;[URL and title](/url/ &quot;title with &quot;quotes&quot; in it&quot;)&#10;&#10;[URL and title](/url/ &quot;title with single quotes&quot;)&#10;&#10;[with\_underscore](/url/with_underscore)&#10;&#10;[Email link](mailto:nobody@nowhere.net)&#10;&#10;[Empty]().&#10;">+  <outline text="Explicit" _note="Just a [URL](/url/).&#10;&#10;[URL and title](/url/ &quot;title&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by two spaces&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by a tab&quot;).&#10;&#10;[URL and title](/url/ &quot;title with &quot;quotes&quot; in it&quot;)&#10;&#10;[URL and title](/url/ &quot;title with single quotes&quot;)&#10;&#10;[with\_underscore](/url/with_underscore)&#10;&#10;[Email link](mailto:nobody@nowhere.net)&#10;&#10;[Empty]().">   </outline>-  <outline text="Reference" _note="Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;With [embedded [brackets]](/url/).&#10;&#10;[b](/url/) by itself should be a link.&#10;&#10;Indented [once](/url).&#10;&#10;Indented [twice](/url).&#10;&#10;Indented [thrice](/url).&#10;&#10;This should [not][] be a link.&#10;&#10;    [not]: /url&#10;&#10;Foo [bar](/url/ &quot;Title with &quot;quotes&quot; inside&quot;).&#10;&#10;Foo [biz](/url/ &quot;Title with &quot;quote&quot; inside&quot;).&#10;">+  <outline text="Reference" _note="Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;With [embedded [brackets]](/url/).&#10;&#10;[b](/url/) by itself should be a link.&#10;&#10;Indented [once](/url).&#10;&#10;Indented [twice](/url).&#10;&#10;Indented [thrice](/url).&#10;&#10;This should [not][] be a link.&#10;&#10;    [not]: /url&#10;&#10;Foo [bar](/url/ &quot;Title with &quot;quotes&quot; inside&quot;).&#10;&#10;Foo [biz](/url/ &quot;Title with &quot;quote&quot; inside&quot;).">   </outline>-  <outline text="With ampersands" _note="Here’s a [link with an ampersand in the&#10;URL](http://example.com/?foo=1&amp;bar=2).&#10;&#10;Here’s a link with an amersand in the link text:&#10;[AT&amp;T](http://att.com/ &quot;AT&amp;T&quot;).&#10;&#10;Here’s an [inline link](/script?foo=1&amp;bar=2).&#10;&#10;Here’s an [inline link in pointy braces](/script?foo=1&amp;bar=2).&#10;">+  <outline text="With ampersands" _note="Here’s a [link with an ampersand in the&#10;URL](http://example.com/?foo=1&amp;bar=2).&#10;&#10;Here’s a link with an amersand in the link text:&#10;[AT&amp;T](http://att.com/ &quot;AT&amp;T&quot;).&#10;&#10;Here’s an [inline link](/script?foo=1&amp;bar=2).&#10;&#10;Here’s an [inline link in pointy braces](/script?foo=1&amp;bar=2).">   </outline>   <outline text="Autolinks" _note="With an ampersand: &lt;http://example.com/?foo=1&amp;bar=2&gt;&#10;&#10;-   In a list?&#10;-   &lt;http://example.com/&gt;&#10;-   It should.&#10;&#10;An e-mail address: &lt;nobody@nowhere.net&gt;&#10;&#10;&gt; Blockquoted: &lt;http://example.com/&gt;&#10;&#10;Auto-links should not occur here: `&lt;http://example.com/&gt;`&#10;&#10;    or here: &lt;http://example.com/&gt;&#10;&#10;------------------------------------------------------------------------">   </outline> </outline> <outline text="Images" _note="From “Voyage dans la Lune” by Georges Melies (1902):&#10;&#10;![lalune](lalune.jpg &quot;Voyage dans la Lune&quot;)&#10;&#10;Here is a movie ![movie](movie.jpg) icon.&#10;&#10;------------------------------------------------------------------------"> </outline>-<outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be&#10;a footnote reference, because it contains a space.[\^my note] Here is an&#10;inline note.[^3]&#10;&#10;&gt; Notes can go in quotes.[^4]&#10;&#10;1.  And in list items.[^5]&#10;&#10;This paragraph should not be part of the note, as it is not indented.&#10;&#10;[^1]: Here is the footnote. It can go anywhere after the footnote&#10;    reference. It need not be placed at the end of the document.&#10;&#10;[^2]: Here’s the long note. This one contains multiple blocks.&#10;&#10;    Subsequent blocks are indented to show that they belong to the&#10;    footnote (as with list items).&#10;&#10;          { &lt;code&gt; }&#10;&#10;    If you want, you can indent every line, but you can also be lazy and&#10;    just indent the first line of each block.&#10;&#10;[^3]: This is *easier* to type. Inline notes may contain&#10;    [links](http://google.com) and `]` verbatim characters, as well as&#10;    [bracketed text].&#10;&#10;[^4]: In quote.&#10;&#10;[^5]: In list.&#10;">+<outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be&#10;a footnote reference, because it contains a space.[\^my note] Here is an&#10;inline note.[^3]&#10;&#10;&gt; Notes can go in quotes.[^4]&#10;&#10;1.  And in list items.[^5]&#10;&#10;This paragraph should not be part of the note, as it is not indented.&#10;&#10;[^1]: Here is the footnote. It can go anywhere after the footnote&#10;    reference. It need not be placed at the end of the document.&#10;&#10;[^2]: Here’s the long note. This one contains multiple blocks.&#10;&#10;    Subsequent blocks are indented to show that they belong to the&#10;    footnote (as with list items).&#10;&#10;          { &lt;code&gt; }&#10;&#10;    If you want, you can indent every line, but you can also be lazy and&#10;    just indent the first line of each block.&#10;&#10;[^3]: This is *easier* to type. Inline notes may contain&#10;    [links](http://google.com) and `]` verbatim characters, as well as&#10;    [bracketed text].&#10;&#10;[^4]: In quote.&#10;&#10;[^5]: In list."> </outline>   </body> </opml>
tests/writer.rst view
@@ -839,6 +839,7 @@    :alt: Voyage dans la Lune     lalune+ Here is a movie |movie| icon.  --------------
tests/writer.rtf view
@@ -208,13 +208,13 @@ {\pard \ql \f0 \sa180 \li0 \fi0 Simple block on one line:\par} {\pard \ql \f0 \sa0 \li0 \fi0 foo\par} {\pard \ql \f0 \sa180 \li0 \fi0 And nested without indentation:\par}-{\pard \ql \f0 \sa0 \li0 \fi0 foo\par}+{\pard \ql \f0 \sa180 \li0 \fi0 foo\par} {\pard \ql \f0 \sa0 \li0 \fi0 bar\par} {\pard \ql \f0 \sa180 \li0 \fi0 Interpreted markdown in a table:\par} {\pard \ql \f0 \sa0 \li0 \fi0 This is {\i emphasized}\par} {\pard \ql \f0 \sa0 \li0 \fi0 And this is {\b strong}\par} {\pard \ql \f0 \sa180 \li0 \fi0 Here\u8217's a simple block:\par}-{\pard \ql \f0 \sa0 \li0 \fi0 foo\par}+{\pard \ql \f0 \sa180 \li0 \fi0 foo\par} {\pard \ql \f0 \sa180 \li0 \fi0 This should be a code block, though:\par} {\pard \ql \f0 \sa180 \li0 \fi0 \f1 <div>\line     foo\line
tests/writer.textile view
@@ -367,6 +367,7 @@  foo + </div>  @@ -399,6 +400,7 @@ <div>  foo+  </div>