pandoc 1.12.3.3 → 1.12.4
raw patch · 78 files changed
+4953/−2663 lines, 78 filesdep +scientificdep ~QuickCheckdep ~aesondep ~highlighting-kate
Dependencies added: scientific
Dependency ranges changed: QuickCheck, aeson, highlighting-kate, http-conduit, mtl, network, pandoc-types, tagsoup, texmath, yaml
Files
- CONTRIBUTING.md +3/−0
- COPYRIGHT +10/−42
- README +75/−38
- changelog +296/−0
- data/MathMLinHTML.js +10/−10
- data/templates/default.beamer +21/−16
- data/templates/default.docbook +7/−3
- data/templates/default.latex +21/−19
- data/templates/default.revealjs +17/−7
- dist/build/Text/Pandoc/Data.hs +0/−8
- dist/build/Text/Pandoc/Readers/Haddock/Lex.hs +0/−486
- dist/build/Text/Pandoc/Readers/Haddock/Parse.hs +0/−879
- man/man1/pandoc.1 +53/−38
- man/man5/pandoc_markdown.5 +24/−0
- pandoc.cabal +37/−28
- pandoc.hs +74/−34
- src/Text/Pandoc.hs +22/−19
- src/Text/Pandoc/MIME.hs +1/−0
- src/Text/Pandoc/Options.hs +2/−0
- src/Text/Pandoc/PDF.hs +25/−6
- src/Text/Pandoc/Parsing.hs +75/−66
- src/Text/Pandoc/Pretty.hs +1/−2
- src/Text/Pandoc/Readers/DocBook.hs +60/−39
- src/Text/Pandoc/Readers/HTML.hs +145/−118
- src/Text/Pandoc/Readers/LaTeX.hs +159/−69
- src/Text/Pandoc/Readers/Markdown.hs +57/−43
- src/Text/Pandoc/Readers/MediaWiki.hs +17/−11
- src/Text/Pandoc/Readers/Org.hs +1250/−0
- src/Text/Pandoc/Readers/RST.hs +102/−27
- src/Text/Pandoc/Readers/Textile.hs +189/−156
- src/Text/Pandoc/SelfContained.hs +10/−8
- src/Text/Pandoc/Shared.hs +30/−8
- src/Text/Pandoc/Templates.hs +1/−0
- src/Text/Pandoc/Writers/AsciiDoc.hs +4/−2
- src/Text/Pandoc/Writers/ConTeXt.hs +5/−11
- src/Text/Pandoc/Writers/Custom.hs +1/−1
- src/Text/Pandoc/Writers/Docbook.hs +28/−11
- src/Text/Pandoc/Writers/Docx.hs +12/−10
- src/Text/Pandoc/Writers/EPUB.hs +68/−26
- src/Text/Pandoc/Writers/HTML.hs +17/−7
- src/Text/Pandoc/Writers/ICML.hs +525/−0
- src/Text/Pandoc/Writers/LaTeX.hs +111/−73
- src/Text/Pandoc/Writers/Man.hs +1/−1
- src/Text/Pandoc/Writers/Markdown.hs +21/−12
- src/Text/Pandoc/Writers/Org.hs +1/−1
- src/Text/Pandoc/Writers/RST.hs +6/−2
- src/Text/Pandoc/Writers/RTF.hs +1/−1
- tests/Tests/Arbitrary.hs +5/−6
- tests/Tests/Old.hs +1/−1
- tests/Tests/Readers/Markdown.hs +9/−0
- tests/Tests/Readers/Org.hs +910/−0
- tests/Tests/Writers/AsciiDoc.hs +37/−0
- tests/docbook-reader.docbook +10/−8
- tests/html-reader.html +6/−0
- tests/html-reader.native +79/−74
- tests/latex-reader.native +1/−1
- tests/lhs-test.latex +3/−5
- tests/lhs-test.latex+lhs +3/−5
- tests/markdown-reader-more.native +4/−1
- tests/markdown-reader-more.txt +8/−0
- tests/mediawiki-reader.native +5/−0
- tests/mediawiki-reader.wiki +5/−0
- tests/opml-reader.native +1/−1
- tests/pipe-tables.native +9/−1
- tests/pipe-tables.txt +10/−0
- tests/rst-reader.native +11/−1
- tests/rst-reader.rst +24/−0
- tests/tables.asciidoc +4/−7
- tests/tables.html +6/−0
- tests/tables.rtf +92/−92
- tests/test-pandoc.hs +6/−0
- tests/textile-reader.native +46/−47
- tests/textile-reader.textile +3/−3
- tests/writer.context +4/−6
- tests/writer.docbook +41/−41
- tests/writer.latex +9/−19
- tests/writer.opml +5/−5
- tests/writer.org +1/−1
CONTRIBUTING.md view
@@ -60,6 +60,8 @@ 3. Follow the stylistic conventions you find in the existing pandoc code. Use spaces, not tabs, and wrap code to 80 columns. Always include type signatures for top-level functions.+ Consider installing [EditorConfig], this will help you to follow the+ coding style prevalent in pandoc. 4. Your code should compile without warnings (`-Wall` clean). @@ -177,5 +179,6 @@ [issue tracker]: https://github.com/jgm/pandoc/issues [User's Guide]: http://johnmacfarlane.net/pandoc/README.html [FAQs]: http://johnmacfarlane.net/pandoc/faqs.html+[EditorConfig]: http://editorconfig.org/ [Haskell platform]: http://www.haskell.org/platform/ [hsb2hs]: http://hackage.haskell.org/package/hsb2hs
COPYRIGHT view
@@ -35,31 +35,32 @@ src/Text/Pandoc/Writers/Texinfo.hs Copyright (C) 2008-2010 John MacFarlane and Peter Wang -Released under the GPL.+Released under the GNU General Public License version 2 or later. ---------------------------------------------------------------------- src/Text/Pandoc/Writers/OpenDocument.hs Copyright (C) 2008-2010 Andrea Rossato and John MacFarlane -Released under the GPL.+Released under the GNU General Public License version 2 or later. ---------------------------------------------------------------------- src/Text/Pandoc/Writers/Org.hs Copyright (C) 2010 Puneeth Chaganti -Released under the GPL.+Released under the GNU General Public License version 2 or later. ---------------------------------------------------------------------- src/Text/Pandoc/Readers/Textile.hs Copyright (C) 2010 Paul Rivier -Released under the GPL.+Released under the GNU General Public License version 2 or later. -----------------------------------------------------------------------src/Text/Pandoc/Biblio.hs-Copyright (C) 2008-2010 Andrea Rossato+src/Text/Pandoc/Readers/Org.hs+tests/Tests/Readers/Org.hs+Copyright (C) 2014 Albert Krewinkel -Released under the GPL.+Released under the GNU General Public License version 2 or later. ---------------------------------------------------------------------- data/LaTeXMathML.js@@ -67,46 +68,13 @@ ASCIIMathML.js v. 1.4.7 Copyright (C) 2005 Peter Jipsen -Released under the GPL.+Released under the GNU General Public License version 2 or later. -----------------------------------------------------------------------data/MathMLInHTML.js+data/MathMLinHTML.js Copyright (C) 2004 Peter Jipsen http://www.chapman.edu/~jipsen Released under the GNU General Public License version 2 or later.-See the GNU General Public License-(at http://www.gnu.org/copyleft/gpl.html) for more details.-------------------------------------------------------------------------s5/default-S5 slides.js and css files-by Eric A. Meyer-<http://meyerweb.com/eric/tools/s5--Released under an explicit Public Domain License-------------------------------------------------------------------------slidy/default-Slidy javascript and CSS-by Dave Raggett-http://www.w3.org/Talks/Tools/Slidy2--Released under W3C document and software licenses-------------------------------------------------------------------------slideous/default-Slideous javascript and CSS-by Stefan Gössner-http://goessner.net/--Released under Creative Commons GNU LGPL License---------------------------------------------------------------------------windows/modpath.iss-Copyright (c) 2007 Jared Breland-http://legroom.net/software--Released under the GPL. ------------------------------------------------------------------------ The dzslides template contains javascript and CSS from Paul Rouget's
README view
@@ -13,14 +13,15 @@ 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], and [DocBook]; 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],-[EPUB] (v2 or v3), [FictionBook2], [Textile], [groff man] pages, [Emacs-Org-Mode], [AsciiDoc], 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], [Haddock markup], [OPML], [Emacs Org-mode]+and [DocBook]; 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], [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,@@ -143,14 +144,14 @@ `markdown_phpextra` (PHP Markdown Extra extended markdown), `markdown_github` (github extended markdown), `textile` (Textile), `rst` (reStructuredText), `html` (HTML),- `docbook` (DocBook), `opml` (OPML), `mediawiki` (MediaWiki 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 disabled- by appending `+EXTENSION` or `-EXTENSION` to the format name.- So, for example, `markdown_strict+footnotes+definition_lists`+ `docbook` (DocBook), `opml` (OPML), `org` (Emacs Org-mode),+ `mediawiki` (MediaWiki 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+ disabled by appending `+EXTENSION` or `-EXTENSION` to the format+ name. So, for example, `markdown_strict+footnotes+definition_lists` is strict markdown with footnotes and definition lists enabled, and `markdown-pipe_tables+hard_line_breaks` is pandoc's markdown without pipe tables and with hard line breaks. See [Pandoc's@@ -170,20 +171,20 @@ `opml` (OPML), `docbook` (DocBook), `opendocument` (OpenDocument), `odt` (OpenOffice text document), `docx` (Word docx), `rtf` (rich text format), `epub` (EPUB v2 book), `epub3`- (EPUB v3), `fb2` (FictionBook2 e-book), `asciidoc` (AsciiDoc), `slidy`- (Slidy HTML and javascript slide show), `slideous` (Slideous HTML and- javascript slide show), `dzslides` (DZSlides HTML5 + javascript slide- show), `revealjs` (reveal.js HTML5 + javascript slide show), `s5`- (S5 HTML and javascript slide show), or the path of a custom- lua writer (see [Custom writers](#custom-writers), below). Note that- `odt`, `epub`, and `epub3` output will not be directed to *stdout*; an- output filename must be specified using the `-o/--output` option. If- `+lhs` is appended to `markdown`, `rst`, `latex`, `beamer`, `html`, or- `html5`, the output will be rendered as literate Haskell source: see- [Literate Haskell support](#literate-haskell-support), below. Markdown- syntax extensions can be individually enabled or disabled by appending- `+EXTENSION` or `-EXTENSION` to the format name, as described above- under `-f`.+ (EPUB v3), `fb2` (FictionBook2 e-book), `asciidoc` (AsciiDoc),+ `icml` (InDesign ICML), `slidy` (Slidy HTML and javascript slide show),+ `slideous` (Slideous HTML and javascript slide show), `dzslides`+ (DZSlides HTML5 + javascript slide show), `revealjs` (reveal.js+ HTML5 + javascript slide show), `s5` (S5 HTML and javascript slide show),+ or the path of a custom lua writer (see [Custom writers](#custom-writers),+ below). Note that `odt`, `epub`, and `epub3` output will not be directed+ to *stdout*; an output filename must be specified using the `-o/--output`+ option. If `+lhs` is appended to `markdown`, `rst`, `latex`, `beamer`,+ `html`, or `html5`, the output will be rendered as literate Haskell+ source: see [Literate Haskell support](#literate-haskell-support), below.+ Markdown syntax extensions can be individually enabled or disabled by+ appending `+EXTENSION` or `-EXTENSION` to the format name, as described+ above under `-f`. `-o` *FILE*, `--output=`*FILE* : Write output to *FILE* instead of *stdout*. If *FILE* is@@ -506,7 +507,7 @@ `-c` *URL*, `--css=`*URL* : Link to a CSS style sheet. This option can be be used repeatedly to- include multiple files. They will be included in the order specified. + include multiple files. They will be included in the order specified. `--reference-odt=`*FILE* : Use the specified file as a style reference in producing an ODT.@@ -632,10 +633,16 @@ `--metadata citation-abbreviations=FILE`.) `--natbib`-: Use natbib for citations in LaTeX output.+: Use natbib for citations in LaTeX output. This option is not for use+ with the `pandoc-citeproc` filter or with PDF output. It is intended for+ use in producing a LaTeX file that can be processed with pdflatex and+ bibtex. `--biblatex`-: Use biblatex for citations in LaTeX output.+: Use biblatex for citations in LaTeX output. This option is not for use+ with the `pandoc-citeproc` filter or with PDF output. It is intended for+ use in producing a LaTeX file that can be processed with pdflatex and+ bibtex or biber. Math rendering in HTML ----------------------@@ -764,9 +771,9 @@ : base URL for Slidy documents (defaults to `http://www.w3.org/Talks/Tools/Slidy2`) `slideous-url`-: base URL for Slideous documents (defaults to `default`)+: base URL for Slideous documents (defaults to `slideous`) `s5-url`-: base URL for S5 documents (defaults to `ui/default`)+: base URL for S5 documents (defaults to `s5/default`) `revealjs-url` : base URL for reveal.js documents (defaults to `reveal.js`) `theme`@@ -783,6 +790,15 @@ `geometry` : options for LaTeX `geometry` class, e.g. `margin=1in`; may be repeated for multiple options+`linestretch`+: adjusts line spacing (requires the `setspace` package)+`fontfamily`+: font package to use for LaTeX documents (with pdflatex):+ TeXLive has `bookman` (Bookman), `utopia` or `fourier` (Utopia),+ `fouriernc` (New Century Schoolbook), `times` or `txfonts` (Times),+ `mathpazo` or `pxfonts` or `mathpple` (Palatino),+ `libertine` (Linux Libertine), `arev` (Arev Sans),+ and the default `lmodern`, among others. `mainfont`, `sansfont`, `monofont`, `mathfont` : fonts for LaTeX documents (works only with xelatex and lualatex)@@ -2443,7 +2459,9 @@ Citations go inside square brackets and are separated by semicolons. Each citation must have a key, composed of '@' + the citation identifier from the database, and may optionally have a prefix,-a locator, and a suffix. Here are some examples:+a locator, and a suffix. The citation key must begin with a letter+or `_`, and may contain alphanumerics, `_`, and internal punctuation+characters (`:.#$%&-+?<>~/`). Here are some examples: Blah blah [see @doe99, pp. 33-35; also @smith04, ch. 1]. @@ -2471,8 +2489,25 @@ # References -The bibliography will be inserted after this header.+The bibliography will be inserted after this header. Note that+the `unnumbered` class will be added to this header, so that the+section will not be numbered. +If you want to include items in the bibliography without actually+citing them in the body text, you can define a dummy `nocite` metadata+field and put the citations there:++ ---+ nocite:+ | @item1, @item2+ ...++ @item3++In this example, the document will contain a citation for `item3`+only, but the bibliography will contain entries for `item1`, `item2`, and+`item3`.+ Non-pandoc extensions --------------------- @@ -2931,7 +2966,8 @@ Christopher Sawicki, Kelsey Hightower, Masayoshi Takahashi, Antoine Latter, Ralf Stephan, Eric Seidel, B. Scott Michel, Gavin Beatty, Sergey Astanin, Arlo O'Keeffe, Denis Laxalde, Brent Yorgey, David Lazar,-Jamie F. Olson.+Jamie F. Olson, Matthew Pickering, Albert Krewinkel, mb21, Jesse+Rosenthal. [markdown]: http://daringfireball.net/projects/markdown/ [reStructuredText]: http://docutils.sourceforge.net/docs/ref/rst/introduction.html@@ -2968,3 +3004,4 @@ [lua]: http://www.lua.org [marc relators]: http://www.loc.gov/marc/relators/relaterm.html [RFC5646]: http://tools.ietf.org/html/rfc5646+[InDesign ICML]: https://www.adobe.com/content/dam/Adobe/en/devnet/indesign/cs55-docs/IDML/idml-specification.pdf
changelog view
@@ -1,3 +1,299 @@+pandoc (1.12.4)++ * Made it possible to run filters that aren't executable (#1096).+ Pandoc first tries to find the executable (searching the path+ if path isn't given). If it fails, but the file exists and has+ a `.py`, `.pl`, `.rb`, `.hs`, or `.php` extension, pandoc runs the filter+ using the appropriate interpreter. This should make it easier to+ use filters on Windows, and make it more convenient for everyone.++ * Added Emacs org-mode reader (Albert Krewinkel).++ * Added InDesign ICML Writer (mb21).++ * MediaWiki reader:++ + Accept image links in more languages (Jaime Marquínez Ferrándiz).+ + Fixed bug in certain nested lists (#1213). If a level 2 list was+ followed by a level 1 list, the first item of the level 1 list+ would be lost.+ + Handle table rows containing just an HTML comment (#1230).++ * LaTeX reader:++ + Give better location information on errors, pointing to line+ numbers within included files (#1274).+ + LaTeX reader: Better handling of `table` environment (#1204).+ Positioning options no longer rendered verbatim.+ + Better handling of figure and table with caption (#1204).+ + Handle `@{}` and `p{length}` in tabular. The length is not actually+ recorded, but at least we get a table (#1180).+ + Properly handle `\nocite`. It now adds a `nocite` metadata+ field. Citations there will appear in the bibliography but not+ in the text (unless you explicitly put a `$nocite$` variable+ in your template).++ * Markdown reader:++ + Ensure that whole numbers in YAML metadata are rendered without+ decimal points. (This became necessary with changes to aeson+ and yaml libraries. aeson >= 0.7 and yaml >= 0.8.8.2 are now required.)+ + Fixed regression on line breaks in strict mode (#1203).+ + Small efficiency improvements.+ + Improved parsing of nested `div`s. Formerly a closing `div` tag+ would be missed if it came right after other block-level tags.+ + Avoid backtracking when closing `</div>` not found.+ + Fixed bug in reference link parsing in `markdown_mmd`.+ + Fixed a bug in list parsing (#1154). When reading a raw list+ item, we now strip off up to 4 spaces.+ + Fixed parsing of empty reference link definitions (#1186).+ + Made one-column pipe tables work (#1218).++ * Textile reader:++ + Better support for attributes. Instead of being ignored, attributes+ are now parsed and included in Span inlines. The output will be a bit+ different from stock textile: e.g. for `*(foo)hi*`, we'll get+ `<em><span class="foo">hi</span></em>` instead of+ `<em class="foo">hi</em>`. But at least the data is not lost.+ + Improved treatment of HTML spans (%) (#1115).+ + Improved link parsing. In particular we now pick up on attributes.+ Since pandoc links can't have attributes, we enclose the whole link in+ a span if there are attributes (#1008).+ + Implemented correct parsing rules for inline markup (#1175, Matthew+ Pickering).+ + Use Builder (Matthew Pickering).++ * DocBook reader:++ + Better treatment of `formalpara`. We now emit the title (if present)+ as a separate paragraph with boldface text (#1215).+ + Set metadata `author` not `authors`.+ + Added recognition of `authorgroup` and `releaseinfo` elements (#1214,+ Matthew Pickering).+ + Converted current meta information parsing in DocBook to a more+ extensible version which is aware of the more recent meta+ representation (Matthew Pickering).++ * HTML reader:++ + Require tagsoup 0.13.1, to fix a bug with parsing of script tags+ (#1248).+ + Treat processing instructions & declarations as block. Previously+ these were treated as inline, and included in paragraph tags in HTML+ or DocBook output, which is generally not what is wanted (#1233).+ + Updated `closes` with rules from HTML5 spec.+ + Use Builder (Matthew Pickering, #1162).++ * RST reader:++ + Remove duplicate `http` in PEP links (Albert Krewinkel).+ + Make rst figures true figures (#1168, CasperVector)+ + Enhanced Pandoc's support for rST roles (Merijn Verstaaten).+ rST parser now supports: all built-in rST roles, new role definition,+ role inheritance, though with some limitations.+ + Use `author` rather than `authors` in metadata.+ + Better handling of directives. We now correctly handle field+ lists that are indented more than three spaces. We treat an+ `aafig` directive as a code block with attributes, so it can be+ processed in a filter (#1212).++ * LaTeX writer:++ + Mark span contents with label if span has an ID (Albert Krewinkel).+ + Made `--toc-depth` work well with books in latex/pdf output (#1210).+ + Handle line breaks in simple table cells (#1217).+ + Workaround for level 4-5 headers in quotes. These previously produced+ invalid LaTeX: `\paragraph` or `\subparagraph` in a `quote` environment.+ This adds an `mbox{}` in these contexts to work around the problem.+ See <http://tex.stackexchange.com/a/169833/22451> (#1221).+ + Use `\/` to avoid en-dash ligature instead of `-{}-` (Vaclav Zeman).+ This is to fix LuaLaTeX output. The `-{}-` sequence does not avoid the+ ligature with LuaLaTeX but `\/` does.+ + Fixed string escaping in `hyperref` and `hyperdef` (#1130).++ * ConTeXt writer: Improved autolinks (#1270).++ * DocBook writer:++ + Improve handling of hard line breaks in Docbook writer+ (Neil Mayhew). Use a `<literallayout>` for the entire paragraph, not+ just for the newline character.+ + Don't let line breaks inside footnotes influence the enclosing+ paragraph (Neil Mayhew).+ + Distinguish tight and loose lists in DocBook output, using+ `spacing="compact"` (Neil Mayhew, #1250).++ * Docx writer: When needed files are not present in the user's+ `reference.docx`, fall back on the versions in the `reference.docx`+ in pandoc's data files. This fixes a bug that occurs when a+ `reference.docx` saved by LibreOffice is used. (#1185)++ * EPUB writer:++ + Include extension in epub ids. This fixes a problem with duplicate+ extensions for fonts and images with the same base name but different+ extensions (#1254).+ + Handle files linked in raw `img` tags (#1170).+ + Handle media in `audio` source tags (#1170).+ Note that we now use a `media` directory rather than `images`.+ + Incorporate files linked in `video` tags (#1170). `src` and `poster`+ will both be incorporated into `content.opf` and the epub container.++ * HTML writer:++ + Add colgroup around col tags (#877). Also affects EPUB writer.+ + Fixed bug with unnumbered section headings. Unnumbered section+ headings (with class `unnumbered`) were getting numbers.+ + Improved detection of image links. Previously image links with+ queries were not recognized, causing `<embed>` to be used instead+ of `<img>`.++ * Man writer: Ensure that terms in definition lists aren't line wrapped+ (#1195).++ * Markdown writer:++ + Use proper escapes to avoid unwanted lists (#980). Previously we used+ 0-width spaces, an ugly hack.+ + Use longer backtick fences if needed (#1206). If the content contains a+ backtick fence and there are attributes, make sure longer fences are+ used to delimit the code. Note: This works well in pandoc, but github+ markdown is more limited, and will interpret the first string of three+ or more backticks as ending the code block.++ * RST writer: Avoid stack overflow with certain tables (#1197).++ * RTF writer: Fixed table cells containing paragraphs.++ * Custom writer:++ + Correctly handle UTF-8 in custom lua scripts (#1189).+ + Fix bugs with lua scripts with mixed-case filenames and+ paths containing `+` or `-` (#1267). Note that `getWriter`+ in `Text.Pandoc` no longer returns a custom writer on input+ `foo.lua`.++ * AsciiDoc writer: Handle multiblock and empty table cells+ (#1245, #1246). Added tests.++ * `Text.Pandoc.Options`: Added `readerTrace` to `ReaderOptions`++ * `Text.Pandoc.Shared`:++ + Added `compactify'DL` (formerly in markdown reader) (Albert Krewinkel).+ + Fixed bug in `toRomanNumeral`: numbers ending with '9' would+ be rendered as Roman numerals ending with 'IXIV' (#1249). Thanks to+ Jesse Rosenthal.+ + `openURL`: set proxy with value of http_proxy env variable (#1211).+ Note: proxies with non-root paths are not supported, due to+ limitations in `http-conduit`.++ * `Text.Pandoc.PDF`:++ + Ensure that temp directories deleted on Windows (#1192). The PDF is+ now read as a strict bytestring, ensuring that process ownership will+ be terminated, so the temp directory can be deleted.+ + Use `/` as path separators in a few places, even on Windows.+ This seems to be necessary for texlive (#1151, thanks to Tim Lin).+ + Use `;` for `TEXINPUTS` separator on Windows (#1151).+ + Changes to error reporting, to handle non-UTF8 error output.++ * `Text.Pandoc.Templates`:++ + Removed unneeded datatype context (Merijn Verstraaten).++ + YAML objects resolve to "true" in conditionals (#1133).+ Note: If `address` is a YAML object and you just have `$address$`+ in your template, the word `true` will appear, which may be+ unexpected. (Previously nothing would appear.)++ * `Text.Pandoc.SelfContained`: Handle `poster` attribute in `video`+ tags (#1188).++ * `Text.Pandoc.Parsing`:++ + Made `F` an instance of Applicative (#1138).+ + Added `stateCaption`.+ + Added `HasMacros`, simplified other typeclasses.+ Removed `updateHeaderMap`, `setHeaderMap`, `getHeaderMap`,+ `updateIdentifierList`, `setIdentifierList`, `getIdentifierList`.+ + Changed the smart punctuation parser to return `Inlines`+ rather than `Inline` (Matthew Pickering).+ + Changed `HasReaderOptions`, `HasHeaderMap`, `HasIdentifierList`+ from typeclasses of monads to typeclasses of states. This simplifies+ the instance definitions and provides more flexibility. Generalized+ type of `getOption` and added a default definition. Removed+ `askReaderOption`. Added `extractReaderOption`. Added+ `extractHeaderMap` and `updateHeaderMap` in `HasHeaderMap`.+ Gave default definitions for `getHeaderMap`, `putHeaderMap`,+ `modifyHeaderMap`. Added `extractIdentifierList` and+ `updateIdentifierList` in `HasIdentifierList`. Gave defaults+ for `getIdentifierList`, `putIdentifierList`, and+ `modifyIdentifierList`. The ultimate goal here is to allow different+ parsers to use their own, tailored parser states (instead of+ `ParserState`) while still using shared functions.++ * Template changes:++ + LaTeX template: Use `fontenc` package only with `pdflatex` (#1164).+ + LaTeX template: Add `linestretch` and `fontfamily` variables.+ + LaTeX template: Conditionalize author and date commands.+ + Beamer template: Consistent styles for figure and table captions+ (aaronwolen).+ + LaTeX and beamer template: Adjust widths correctly for oversized+ images. Use `\setkeys{Gin}{}` to set appropriate defaults for+ `\includegraphics` (Yihui Xie, Garrick Aden-Buie). Load+ `upquote` only after `fontenc` (Yihui Xie).+ + Beamer template: Added caption package (#1200).+ + Beamer template: changes for better unicode handling (KarolS).+ + DocBook template: use `authorgroup` if there are authors.+ + revealjs template: Move `include-after` to end (certainlyakey).+ + revealjs template: Fixed PDF print function (#1220, kevinkenan).++ * Bumped version bounds of dependencies.++ * Added a `--trace` command line option, for debugging backtracking+ bugs. So far this only works with the markdown reader.++ * MathMLinHTML: Fixed deprecation warning (#362, gwern, Albert Krewinkel).++ * Updated travis script to test with multiple GHC versions.++ * Force failure of a Travis build if GHC produces warnings (Albert+ Krewinkel).++ * Add `.editorconfig` (Albert Krewinkel).+ See <http://editorconfig.org/> for details.++ * Give more useful error message if '-t pdf' is specified (#1155).++ * Added `Cite`, `SmallCaps` to `Arbitrary` instance (#1269).++ * Allow `html4` as a synonym of `html` as a reader (it already works+ as a writer).++ * README:++ + Added an explanation of how to use YAML metadata to+ force items to appear in the bibliography without citations in+ the text (like LaTeX `\nocite`).+ + Added note to `--bibtex/--natbib`: not for use in making PDF+ (#1194, thanks to nahoj).+ + Added explanatory notes about `--natbib` and `--biblatex`.+ + Added specification of legal syntax for citation keys.+ + Fixed variable defaults documentation (Albert Krewinkel).++ * Removed copyright statements for files that have been removed+ (Albert Krewinkel).++ * Moved some doc files from `data-files` to `extra-source-files` (#1123).+ They aren't needed at runtime. We keep README and COPYRIGHT in data+ to ensure that they'll be available on all systems on which pandoc+ is installed.++ * Use cabal sandboxes in Windows build script.+ pandoc (1.12.3.3) * To changes to source; recompiled tarball with latest alex and
data/MathMLinHTML.js view
@@ -1,4 +1,4 @@-/* +/* March 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen Released under the GNU General Public License version 2 or later. See the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)@@ -7,15 +7,15 @@ function convertMath(node) {// for Gecko if (node.nodeType==1) {- var newnode = + var newnode = document.createElementNS("http://www.w3.org/1998/Math/MathML", node.nodeName.toLowerCase()); for(var i=0; i < node.attributes.length; i++) newnode.setAttribute(node.attributes[i].nodeName,- node.attributes[i].nodeValue);+ node.attributes[i].value); for (var i=0; i<node.childNodes.length; i++) { var st = node.childNodes[i].nodeValue;- if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n") + if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n") newnode.appendChild(convertMath(node.childNodes[i])); } return newnode;@@ -37,14 +37,14 @@ if (st=="#text") str += node.nodeValue; else { str += (st.slice(0,1)=="/" ? "</m:"+st.slice(1) : "<m:"+st);- if (st.slice(0,1)!="/") + if (st.slice(0,1)!="/") for(var j=0; j < node.attributes.length; j++)- if (node.attributes[j].nodeValue!="italic" &&- node.attributes[j].nodeValue!="" &&- node.attributes[j].nodeValue!="inherit" &&- node.attributes[j].nodeValue!=undefined)+ if (node.attributes[j].value!="italic" &&+ node.attributes[j].value!="" &&+ node.attributes[j].value!="inherit" &&+ node.attributes[j].value!=undefined) str += " "+node.attributes[j].nodeName+"="+- "\""+node.attributes[j].nodeValue+"\"";+ "\""+node.attributes[j].value+"\""; str += ">"; } node = node.nextSibling;
data/templates/default.beamer view
@@ -8,20 +8,34 @@ $if(fonttheme)$ \usefonttheme{$fonttheme$} $endif$+\setbeamertemplate{caption}[numbered]+\setbeamertemplate{caption label separator}{:}+\setbeamercolor{caption name}{fg=normal text.fg} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript+\usepackage{lmodern} \ifxetex \usepackage{fontspec,xltxtra,xunicode} \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}+ \newcommand{\euro}{€} \else \ifluatex \usepackage{fontspec} \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}+ \newcommand{\euro}{€} \else+ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc}+ $if(euro)$+ \usepackage{eurosym}+ $endif$ \fi \fi+% use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}+% use microtype if available+\IfFileExists{microtype.sty}{\usepackage{microtype}}{} $if(natbib)$ \usepackage{natbib} \bibliographystyle{plainnat}@@ -46,6 +60,7 @@ $endif$ $if(tables)$ \usepackage{longtable,booktabs}+\usepackage{caption} % These lines are needed to make table captions work with longtable: \makeatletter \def\fnum@table{\tablename~\thetable}@@ -56,24 +71,14 @@ $endif$ $if(graphics)$ \usepackage{graphicx}-% Redefine \includegraphics so that, unless explicit options are-% given, the image width will not exceed the width of the page.-% Images get their normal width if they fit onto the page, but-% are scaled down if they would overflow the margins. \makeatletter-\def\ScaleIfNeeded{%- \ifdim\Gin@nat@width>\linewidth- \linewidth- \else- \Gin@nat@width- \fi-}+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}+\def\maxheight{\ifdim\Gin@nat@height>\textheight0.8\textheight\else\Gin@nat@height\fi} \makeatother-\let\Oldincludegraphics\includegraphics-{%- \catcode`\@=11\relax%- \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%-}%+% Scale images if necessary, so that they will not overflow the page+% margins by default, and it is still possible to overwrite the defaults+% using explicit options in \includegraphics[width, height, ...]{}+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} $endif$ % Comment these out if you don't want a slide with just the
data/templates/default.docbook view
@@ -9,11 +9,15 @@ <article> <articleinfo> <title>$title$</title>+$if(author)$+ <authorgroup> $for(author)$- <author>- $author$- </author>+ <author>+ $author$+ </author> $endfor$+ </authorgroup>+$endif$ $if(date)$ <date>$date$</date> $endif$
data/templates/default.latex view
@@ -1,12 +1,18 @@ \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}-\usepackage[T1]{fontenc}+$if(fontfamily)$+\usepackage{$fontfamily$}+$else$ \usepackage{lmodern}+$endif$+$if(linestretch)$+\usepackage{setspace}+\setstretch{$linestretch$}+$endif$ \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript-% use upquote if available, for straight quotes in verbatim environments-\IfFileExists{upquote.sty}{\usepackage{upquote}}{} \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex+ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} $if(euro)$ \usepackage{eurosym}@@ -33,6 +39,8 @@ \setmathfont(Digits,Latin,Greek){$mathfont$} $endif$ \fi+% use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{} % use microtype if available \IfFileExists{microtype.sty}{\usepackage{microtype}}{} $if(geometry)$@@ -65,24 +73,14 @@ $endif$ $if(graphics)$ \usepackage{graphicx}-% Redefine \includegraphics so that, unless explicit options are-% given, the image width will not exceed the width of the page.-% Images get their normal width if they fit onto the page, but-% are scaled down if they would overflow the margins. \makeatletter-\def\ScaleIfNeeded{%- \ifdim\Gin@nat@width>\linewidth- \linewidth- \else- \Gin@nat@width- \fi-}+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}+\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} \makeatother-\let\Oldincludegraphics\includegraphics-{%- \catcode`\@=11\relax%- \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%-}%+% Scale images if necessary, so that they will not overflow the page+% margins by default, and it is still possible to overwrite the defaults+% using explicit options in \includegraphics[width, height, ...]{}+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} $endif$ \ifxetex \usepackage[setpagesize=false, % page size defined by xetex@@ -136,8 +134,12 @@ $if(subtitle)$ \subtitle{$subtitle$} $endif$+$if(author)$ \author{$for(author)$$author$$sep$ \and $endfor$}+$endif$+$if(date)$ \date{$date$}+$endif$ $for(header-includes)$ $header-includes$ $endfor$
data/templates/default.revealjs view
@@ -27,10 +27,19 @@ $else$ <link rel="stylesheet" href="$revealjs-url$/css/theme/simple.css" id="theme"> $endif$- <link rel="stylesheet" media="print" href="$revealjs-url$/css/print/pdf.css" />- <!--[if lt IE 9]>- <script src="$revealjs-url$/lib/js/html5shiv.js"></script>- <![endif]-->+ <!-- If the query includes 'print-pdf', include the PDF print sheet -->+ <script>+ if( window.location.search.match( /print-pdf/gi ) ) {+ var link = document.createElement( 'link' );+ link.rel = 'stylesheet';+ link.type = 'text/css';+ link.href = '$revealjs-url$/css/print/pdf.css';+ document.getElementsByTagName( 'head' )[0].appendChild( link );+ }+ </script>+ <!--[if lt IE 9]>+ <script src="$revealjs-url$/lib/js/html5shiv.js"></script>+ <![endif]--> $if(math)$ $math$ $endif$@@ -66,10 +75,8 @@ $body$ </div> </div>-$for(include-after)$-$include-after$-$endfor$ + <script src="$revealjs-url$/lib/js/head.min.js"></script> <script src="$revealjs-url$/js/reveal.min.js"></script> @@ -94,5 +101,8 @@ // { src: '$revealjs-url$/plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } } ]}); </script>+ $for(include-after)$+ $include-after$+ $endfor$ </body> </html>
− dist/build/Text/Pandoc/Data.hs
@@ -1,8 +0,0 @@-# 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 = [("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&¬ifyIfNoMathML)\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].nodeValue);\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].nodeValue!=\"italic\" &&\n node.attributes[j].nodeValue!=\"\" &&\n node.attributes[j].nodeValue!=\"inherit\" &&\n node.attributes[j].nodeValue!=undefined)\n str += \" \"+node.attributes[j].nodeName+\"=\"+\n \"\\\"\"+node.attributes[j].nodeValue+\"\\\"\";\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"),("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 '<'\n elseif x == '>' then\n return '>'\n elseif x == '&' then\n return '&'\n elseif x == '\"' then\n return '"'\n elseif x == \"'\" then\n return '''\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-- One could use some kind of templating\n-- system here; this just gives you a simple standalone HTML file.\nfunction Doc(body, metadata, variables)\n local buffer = {}\n local function add(s)\n table.insert(buffer, s)\n end\n add('<!DOCTYPE html>')\n add('<html>')\n add('<head>')\n add('<title>' .. (metadata['title'] or '') .. '</title>')\n add('</head>')\n add('<body>')\n if metadata['title'] and metadata['title'] ~= \"\" then\n add('<h1 class=\"title\">' .. metadata['title'] .. '</h1>')\n end\n for _, author in pairs(metadata['author'] or {}) do\n add('<h2 class=\"author\">' .. author .. '</h2>')\n end\n if metadata['date'] and metadata['date'] ~= \"\" then\n add('<h3 class=\"date\">' .. metadata.date .. '</h3>')\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 add('</body>')\n add('</html>')\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 .. '\">↩</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)\n return \"<span class=\\\"cite\\\">\" .. 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"),("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"),("reference.docx","PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\FS\NUL[Content_Types].xmlUT\t\NUL\ETX\153\186)Q\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\181\149\203n\131\&0\DLEE\247\249\n\196\182\STX\167]tQ\133n\218n\219H\205\SI8f n\253\146=y\253}\199P\161\144E \175\r\210\216\190\231^\198\131\152-\246\SOB\178\211\202\132\"]!\186\ETB\198\130X\129\230!\183\SO\f\237T\214k\142T\250\154\&9.~y\r\236i:}f\194\SUB\EOT\131\EMFF\250:I\146\217\215\ACK\188\151%$s\238\241\147k(R\182\181\190d[X~\ETX\162\&4u\200\137\153&o\173\&8\250\ETB)wNI\193QZ\195\&6\166<r\206lUI\SOH\165\NAKkM\146<\STX\157\183\STXB \158V\249\SOH\252!\194\217\233,f\173\151\224\233\244\237\147t\232\&19\194\221\SUB\DC2\206\232\ACK\210eC\251|\188:I\131\EM\227Z\145\199\130/\NAK\220\254\229;\244@\SO\"\204\189u\129\145\223\213)`G\202\DC2\202\140\162\&8\240(a\168\249\157\189\176\254\130.\252\DEL\137yT\143\&7m\231\SO\247\n\238\&1u\rwL\130\142q\243\f\221\142\230\210\140\ESCD\139\198\226=\250\209\161\SIr\188C\197\215\n/\186j\SI\170\&9\DC3V\210\181\204\228#\142]\160\181\"\165\221\&0\214\228X{F>WV=i\172OH\165\142\191\139]\ACK\186/\139\245\160\204\153\186\239E\245\160\232\199A_\213,\f\202j\217\SI\CANk\DC2\205X\243\135|\157\252\SOHPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\FS\NUL_rels/UT\t\NUL\ETX4\249\232P\172\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\FS\NUL_rels/.relsUT\t\NUL\ETXxx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\173\146\193J\196\&0\DLE\134\207.\236;\132\185o\211U\DC1\145\198\189\136\176\&7\145\250\NULCf\218\ACK\219$$\163\238\190\189\DC1\EOT\183 U\193c\254\204|\243MH\179;L\163z\229\148]\240\ACK\182U\r\138\189\r\228|o\224\169\189\223\\\131\202\130\158p\f\158\r\FS9\195\238v\189j\RSyD)Myp1\171B\241\217\192 \DC2o\180\206v\224\ts\NAK\"\251r\211\133\&4\161\148c\234uD\251\140=\235\243\186\190\210\233\148\SOH\133\186^\157\205\192jO\ACK\210\158.A\181\199\200\191\EM\DLE\186\206Y\190\v\246eb/\223\204\209|\DLE\246\196\180\137\169\244'qe%\213b\234Y\fP\176\SI%\206\SUBc\172\n\SUB\244\130\214\246?\181\230\NAK_Fo!\145\166\207\248G\165\139\191*\209\130\210\196\130\132\130\218\134\196\203\207\245Qq\"\215\232\217\255(\217;PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\FS\NULdocProps/UT\t\NUL\ETX4\249\232P\172\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\FS\NULdocProps/app.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157R\193N\195\&0\f\189\239+\170\221i\198`\ETXM!\DC2\218\SO\FS\NULMZa\231(u\219hi\DC2%\EM\218\254\RS{\221J'8\209\147\253\158\223\179\251Z\190\SO\206CH\SUBbvh\141\141O\227&%\191`,\170\ACKZ\EMs\164-2\149\v\173L\216\134\154\185\170\210\nVN\237[\176\137M'\147\&9\131C\STX[By\227{\195q\231\184\248J\255\&5-\157\162\251\226gq\244\232'FY\198\183.\148Q<\222q\214U\132m\SUB\EM\160D\173\168\164\137\192\217\SI@\244\v\170\131\209v\ETB\151\141\180\&5\148\151\177\223\EOT\141\191j\vQ\220N9\235*\194\158\189\255\132\DLE\181\179H\228\DC3|8\ESC`g\217.~\248\194\173d\130\203\134k\240\236d\180\146\137doZ\ENQ\ETB]\149\&2z\151\140\156\243\206\184\US!\t\RS\ETB\164J\184k\171S\179\241R\225U3\138\224O\134$\ENQ\180\222\208\202w\138\216\228\165K-g=J#\152\206\ACK\212>\232t\DC4\184t\216\158\FS\\\146\166\208-\136\&9\n\251\230\DC4\183\146\ACK\150\248a\250\184{\224\250\\q\255\&0\ESC\RSy\162\215\216\213A\250\ACK\191\"g\131\174#k\202\158p*FX\244\255\147\CAN}\ETXPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\FS\NULdocProps/core.xmlUT\t\NUL\ETXFx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\205\147?O\195\&0\DLE\197\247~\138({\234\&8\165\fQ\155\SOH\DLE\DC3\149*Q\t\196f\236kk\154\216\209\249J\218o\143\ESC\236\136 \150n\140\231\247\238\231w\254\179\&0./\165EX\163m\SOHI\131KNMm\\\233\133e\186'jK\198\156\220C#\220\212[\140W\183\SYN\ESCA\190\196\GSk\133<\136\GS\176\"\207oY\ETX$\148 \193.\196\172\GS\144i5I\146\133\146%i\170!l\160\228\192o\143X\247\&4%\EM\212\208\128!\199\248\148\179\180Z\v\163\172L\DLE\182\128`$$\190:-XdE\176;\190\DEL\128\164\171\208=%4F\142D\DLEd\241zNh\236\&9\151\&3=\192\185\179\168\156WGe\212k\225he\149\222jPw\231\224\250\181\CAN\189\b\159\218ik*\254m\ESC\234h\144\130`g1b\134\&2\f\165\192I\212-\249\150\235\a\251\209\FSx\EOT\216\184\239\129A\ENQ\224\201\233\129\216u\221\180\155\245L\255*8{]==\247\SI(\211\198\145\240\151\152\SO1z\214\159Yz\133y\167\211%\157[X\166q\231\151\217\253\195\230\&1\173\138\156\ETBY\206\179|\182\225\188,\230\229\252\230\237\DC2y\148o\148\185\tg\251oC\199\128\213$\220\228\232gV\147/PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\FS\NULword/UT\t\NUL\ETX\n\250\232P\172\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/_rels/UT\t\NUL\ETX\ETB\250\232P\172\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\FS\NULword/_rels/document.xml.relsUT\t\NUL\ETX\157\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\189\212K\SO\194 \DC4\ENQ\208\185\171 ,@\180\254\DC2\211:r\226T\187\SOHZ_?\177|\STX\207\168\187\151\168i\159\209\129\DC3\EM\146\v\151\ETX!\164{\232$\182F\251\166\181\158]U\167}\198\ESCD\187\SYN\194\151\r(\233\199\198\130\SOIe\156\146\CAN\134\174\SYNV\150'Y\131H&\147\165p\180\131oF\140\165\180\150\229\&7\v\191\148\154\170jK\216\154\242\172@\227\151n\161\207\170\NUL\215\234\154\135Mv\199\140\187\221q\202Y.]\r\152\241>\RS\135f\206\196?)\RSo\GSx\226H\ACK\199\&3\139\129\NUL\196p\\\202\152\DC1\198+\141\NUL\185@q\248\180\204\a\v\153\DLE\129S\EM\141\185,: \152\197\128\233\227\b\DC4\fk)c90\RS\209s\194\&4\202\165\CAN\212\ACK\223\RS\237\138^\202+\238)\169x\251\GS6\163;PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\FS\NULword/document.xmlUT\t\NUL\ETX\252x\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULE\142I\SO\194\&0\fE\247=\133\149=Ma\129P\213a\203\&5B\226\SOR\DC2GIJ\225\246\184\131\196\234?\235\235?\185\233?\206\194\ESCc\154\201\183\226ZV\STX\208k2\179\US[\177\228\225\242\DLE\208wE\179\214\134\244\226\208g\224\133O\245\218\138)\231PK\153\244\132N\165\146\STXz\238\ACK\138Ne>\227(W\138&D\210\152\DC2\v\157\149\183\170\186K\167f/v\231\139\204w\135\208\NAK\NUL\156q\203\157\242A\NULO\180\150\128M\214\148G)\207v\ETX\RSl\DC1\142\&8}\242\255mW\252\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\FS\NULword/fontTable.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\229\149MK\195@\DLE\134\207\n\254\135\176w\155MZ5\150F\209J\143\RS\252\192\243\&4\221\&4\v\251\DC1v\182\141\253\247N\210\134\182\168Q\EOTO\t,l\222wvvx\152I&\183\239Z\ENQk\225PZ\147\178h\192Y Lf\ETB\210,S\246\250\&2;OX\128\RS\204\STX\148\&5\"e\ESC\129\236\246\230\236tR\141sk<\ACKt\222\224\216\165\172\240\190\FS\135!f\133\208\128\ETX[\nC^n\157\ACKO\175n\EM\218<\151\153x\176\217J\v\227\195\152\243\203\208\t\ENQ\158\238\198B\150\200v\217\170\223d\171\172[\148\206f\STX\145\138\213j\155O\131\&4\140\234;\217\NAK\CANTc\ETX\154\n\DEL\222\232\185U\141U{%\CAN\139\"\"{\r*e\156\SO\243\v~\244\176\176\r\206\np(\252>xo\229\160\165\218\180\SO\172\188\221{\165\244Y\209Zkp\DC2\230J\236m\148K2W8\231\148\178\189s\171D\159\148\184Q\162\ETXex\FS\147\&5y\146c\229\&0Os\239$\220b\249\138\208\139\212\STX\131GQ\ENQOV\131\233@\NAK\243K>$\\#Z1\237F\223\163\226\255\133j\248\ETX\170C\229KT;!\250\v\170\169]9)\\\r\171\ETX\211\NAK\161\185np\213\152F\253\195\244F\131Y\DELI\240[H5\152\168Y\t\SOHJ\bY\210\183\177\155\130\158S\141\GS}T\143\217v\220\234\177\139\251\215GSP\146\CANu \154\&5\157\DC47\176z\137\232\142\n\236\250\187\221S\239\140v\136\226\RS\NULj\183H\251\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\FS\NULword/footnotes.xmlUT\t\NUL\ETX\232\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157\146\193j\195\&0\f\134\239y\138\224{\234t\135\&1L\211^\202\158`{\NUL\227\216\141!\182\140\164\196{\252y\180\ETX\247RB|\DC1F\250?\161\159\255t\249\ts\187Z$\SIq\DLE\199C/Z\ESC\r\140>\222\ACK\241\253\245\217}\136\203\185\&9e\229\NUL8\STX[j\218\242\138*\146\202\131\152\152\147\146\146\204d\131\166\ETX$\ESCK\207\SOH\ACK\205\229\139\&7\153\SOH\199\132`,Q\129\134Y\190\245\253\187\f\218GQ\161\194\SYN\DC48\231\141\189\130Y\130\141\252\SI\226\169\ACK\225^\DLE\218Ysq\129&\159\168&\194 \SYN\140\234\129\235\130\&7\b\EOT\142;\ETXA\221I\143R\171\214W\170\&5\204\245l>\246\ESCv\252\EMY\171\244\150KG\212\249\133\237\201\155\GS\148\162\226\ENQ\159\206\205i\a\231\&9\SUB\215{S\148\184\201*o\231\230\ETBPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\FS\NULword/numbering.xmlUT\t\NUL\ETXK\ENQ\ETBO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\213\153\221N\219\&0\DC4\199\175\199ST\145v\t\249\254hE\139\DLEPi\DC3b\147\198\180\235\&4q\169\&5\DELDv\218\194\237\246\&0{\132I{\169\189\194\236\164\t)\DC4\226RGk\185\169\227s\206\223'?;\246\177\&8=\187\199\168\183\NUL\140CJ\134\134}b\EM=@\DC2\154Br74\190\222\142\143#\163\199\243\152\164\&1\162\EOT\f\141\a\192\141\179\209\209\233r@\230x\STX\152\240\235\t\t\194\ax14\230\140\fx2\ETX8\230\199\CAN&\140r:\205\143\DC3\138\a8N\ACK\v\140\140\202\153\SO\141Y\158g\ETX\211\\\249\159\212\254'\194\223\164\211)L\128)\194\170\166cY\145x\134\164\210X\128g\SUB4\ETXD\CAN\167\148\225\&8\ETB\143\236ND\176\239\243L\230\144\197\&9\156@\EOT\243\a\169\NAKT2\244\181\180\203\177W?U\EOTS\EM\183\f\185\164\201\FS\ETX\146\ETB#\154\f \145\ETX%|\ACK3^\163x\171\154\&0\206j\SYN\175\189D\131\251\210\182\DC4^wIYZG\168\164'\ETX2F\DC3\192\185X\DLE\CANU\t>N\214\146<\159\173\141\&3.\165\202p\217jd\158\169$\146\178x\217\200`=\175\203\210h\140\142\222\137\245\ESCOx\206\226$\191\153\227\222\218\211\135thX\210Iz\DC1\SOSa^\196hh\140\139?\251\210\&0WF<G9\188\ACK\v\128n\US2P\185\NAK\189H\246\214\142\&9\206Pe\190\180<\171\DEL\DC1^\212F\180\144\&6(~\170qe\175\248\232X^\197\216\165\243\187\242\179\ESC\227\218\&0\153#\EOT\242G\171\DLE\185\ENQ\247\181y\205\240\&1\169\186\DC1\152\&6b\178\207\172h\SYN\137\n\SO\229\195\234\169\n\DC1\195\SUB\162\157Q.\147\&4W\SOHf3B\EOT@\"aIy\233%\154S\200x~\r\229\228WQ2\168\SUBR\132\176\198\232lLI\206\229l\240\EOT\194\161\241\229\SOHO(\146:\179s1\DC1k\GS\144\136\&1R0\141\ENQ\237\134\242JN6\197+o l\235%\252\247\199\239n \135\142\SUBf\219\138\n\210\179\152\220\NAK\155\182\ESC\236\tiG/i\218\rg\219\243\DC4AG\150\ACK\208\ETBt\206 `\189\ESC\176l\208~\218\251V\228\174\238\197\253\171\ESC\232\142\GS\168Aw|G\ETX\244o\"TV4\188\129|\189\239\173\192=\205\192\DEL\254\233\bx\DC4\169\SOHw\GSo\175\129\251\a\178}\vl\138\192\251\193\158\238\223\193A\236\223\158\171xPz\129\142\131\178\219\253;<\144\253\219\183\DC4\SIM\223\211qhv\183\157D\a\178\DEL\251\161\226\129\EM\216\251u`\202V\227n5j\191z\217\155\174^\174\229G~?tw\187z\157{\225\149\237_\\i\185z\165 \129\&8F/\174\133\247\246\201\255\189\EM\132OV\194c\\c%\232\187(\181\242p:\226\161^\193{\222ND\182\189\208\180\DC2q;\"\162^^\219\193ND\182\189o\180\DC2\241\186\"\162Z\255\SYN\142;\DLE\217\246B\208J\196\239\136\136z\129\SUBX;\DC1\217\182bo%\DC2tDD\189\146tw\219Y\183-\172[\137\132\GS\DC1Q/\243\172\221v\214m\235\222V\"QWDT\235\176\194q\a\"\219\SYN\166\173D\250\GS\DC1\t<\197\157\181p\220\130\200\198\202\145\DC4\NAK#yR)\174U\144U\146\165\184T!\ESC\163\157W\163\237f\141\248i\SOH\CAN\131)x\169Vl\216\215\130\205\181\232W\244l\205z\142f=W\179\158\167Y\207\215\172\ETBh\214\v5\235Eo\212\171\191\134U\163\252\a\238\232\232\USPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\FS\NULword/settings.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157UMs\218\&0\DLE\189\231Wx|.\177\249\ACK\SI$S $\a\210a\226\164wY^\131\ACK\201\242H\STX\151\254\250\174\193\178=M\157dzBzo\223j\181\214>f\247\191\EOTwN\160\&4\147\233\220\237\222\250\174\ETX)\149\&1Kws\247\237u\221\153\184\142\&6$\141\t\151)\204\221\&3h\247\254\238f\150\a\SUB\140\193(\237`\134T\ar\238\RSU\SUBh\186\aAtG0\170\164\150\137\233P)\STX\153$\140B\249\227\150\n5w\247\198d\129\231\149\162[\153A\138\\\"\149 \ACK\183j\231]%+I\143\STXR\227\245|\DEL\228)\224\196`\189z\207\&2m\179\137\255\205\134\228\222&9}t\137\147\224\&6.\239\250_\184n.U\\)\190R^!\200\148\164\160\&5vVp[ Km\SUB\205\191\146\231JmX\164\136:7\146\220\221\&8\SO~\185\223R\n'\SI2P\DC4\187\&0w\167\190\235\149\DC4\136\b\226\240\172\r\136\181L\141\182\&8V%\147\208\DLE\ETX(\212\EMp~y \148\ETX\193\218\242`\167\136\DLEDY\196\202\180\&9s\216\146\DC4\214\151\234\214\140\ESCP\CAN~\"x\SI\223\247\aUd,\DELH\243\170\b=<\203\DC3T\231\198\144\144#7\175$\n\141\204\172r\220\171+\142\NAK\201\177\150G\197\226'\169\216o\172\154\240\&0#\DC4A\ESC\223\US\253\&3\254'(\195\232\199\209Lg\156\156\235\204\171Z\254\128cs\174.\243\183\196&\255\\@\247\EOT\239\141\141)\235X\226AJr\ESCx\233\204R\138L\225\179\168;KN\176Upb\144o\EM5G\ENQ\150\193Q\142u\177\174v/R\154\186\233\195\169\191\242\199\215DUH\227\155t\187\203\201\162\149\RS<\244\166\139~+\253I\242\241d\176\SUBNZ\233\201j4\EM\181'_LF\139\241\176\157^\SO&\171vz\217\US\245\198\211V\250\161\223\GS~/\207\158y\141\&6\206DPX\196V\149\194\235\182\152\SOG\\\197\155#e1q\RS\NAK\218$T\a\136 R\135\ENQKmT\EOT8\162\239\233\240\CAN\217\136N\167\193jA8_\227\195\176lB\184n\202\139w\182\130\164\141\230\207D\237\234\211\253\ACK\165\218\169\\\145\236\133\237\246\166\134Xj6L\216`}\140\194c\214P\164h1-\252\204k\182\SO;n\208\150\160\232\220\134\212\227\ACKi\231-\172\135\129\171\176p/x&Yv\GS\202h\215\157\187\188(\170[X\141\193]L\212\225\178\137v\189\146\235]\184\222\149\187l\b-\236\r\163\203E\141\245,\214\136\235[\172_c\ETX\139\rjlh\177a\141\141,6*\176\253\EM\157\NAK\253\241\128Vm\151\ENQ\158H\206e\SO\241S\205\191\131j\ETB\SOH\202\240\ENQ\132g\DC1\213Vp[\209\156i\DC3B\134\198ade\168\223\n\186x\187\246\175\249\238\230\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\144n\155C\197\SYN\145\220\207\EOT\NUL\NUL\210$\NUL\NUL\SI\NUL\FS\NULword/styles.xmlUT\t\NUL\ETX\159\246\189R}\196WQux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237Y\223s\226\&6\DLE~\231\175\240\248=\199\207\164\148\t\185!\164\153d&\189\230\n\185{\SYN\182\192\186\216\146+\201!\220_\223\149l\131el\195\DC17i2\188\161\221\213\238~\171O+!\159\DEL~\SO|\235\tsA\CAN\GS\218\237O-\219\194\212a.\161\139\161\GS\201\249I\223\182\132D\212E>\163xh\175\176\176?_4\206\151\ETX!W>\SYN\SYN\204\167b\192\135\182'e8h6\133\227\225\NUL\137O,\196\DC4ts\198\ETX$a\200\ETBM6\159\DC3\a_1'\n0\149\205N\171u\214\228\216G\DC2b\v\143\132\194n\196\222\150\251x[2\238\134\156\&9X\bH6\240c\DEL\SOH\"\212\190hX\SYNd\232\&2\231\n\207Q\228K\161$Z\198\239y\"\139E\169\&0\GS\197\227kF\165\176\150\ETX$\FSB\166\144\STX \SI\be\252fD\ENQ\177\215\182\203\SOHFB\142\EOTA\219F\160\244\212\143\202\233\142\144\EM\245%qa^\211\200E\252\EOT\179'\228\SI\237No[7\SYN\229Z\US\209E\170\197\244\228abg\242\205\136f\DLEuh#~2\EMe\\\156\&73uI\ACKF\229 BXT\204\&0WL\DC1\"\135\232L\208\\b \n\172S.N\152\141c:U\146\220:jh\DC2\CAN4\137\EM\b\ACKx~\199\156G\236N$(\134v\203\142\133\SI\183\247\156\&0N\228J\201\SUBV,\157\224\128\220\DLE\215\197\&4cI=\226\226\239\RS\166\SI\STX\187\ESC\249\215k\205\184\245t\135E\DC4F\157\223\206\DC2\b\233F\NUL\157\\\133\DLE;D\FS-8\n\189\196\131J\ESC6\150\SUBi\195[\240\254E9\245\237u\GS)\np\186R\137.-\DLEh\255\137s\200H2%6\n<\195\176A \135v_\231\159\212[\143\154F\129\211\202\234\140v\195X'>f\SOH\EOT\147\197\153\167\202L\162\&3\EOT\213\252\139\214\137\173{\150\129\214=\171\v\217\148H\US\ETB\227\138U\191\130\138\226gy8\230G\140\195/\202C3'\188#\DC4\232\222\172,O\207X\250N\207\216j\203\193\SI'\205\203\129\r\132yQ\249\242-\177\180!\162\US\185\142\182\221\SO\149\201\US\137l\171#\SYN\204\223\244C\165\204\245CUzs46\203\225\&0\159\241\DC4`\183w:\234\143TP\237r\172t\208\230\FS\ENQ\188\189\137\168\149\DC3\SI\185\DLE\244\242\212\140\182\233\189\EM\162mu\222\FS\t\249\225$\FSE\210c\\\DC4\211\&0U\190\ENQ\207\246\161\205!\128\175\160]\ETB\163\213\154\143\EOT\245\ACK#u\169j\ETB\195M\180V\187\198>\DC3\145\244\244Km~\DEL\163\&6\148kB,\146>\248\184{\242\211\196\n\SI\168c\USz\171>\148\176\177S\205\213\206\235q52\174g\175Eb}Q\221\159\196\237\SIL\226\222u\191}yUF\226\&2\178v*\200\218\169\153\172\221j\178v\143d=\146\181\138\172\157~9Y3\186z\200\218\171&k\239H\214#Y+\201\218\171 k\175f\178\158V\147\245\244H\214\247MVb\142\222)Y/}\230<~\141X\217\USJ\173\183b\131\255?a\v\222\244\f\SYN\182[\239\239/S\142X\EM\130\180*\b\210\170\139 \215\140I\n\171?\133\ENQ-\166Hjai\147CIb\196\169\155*\213\192\GS\SI\144;\250\209\194x{nX\198\163K\172\184O\171\164\bR\242\b\DC3[ZkSK\219f\146\DC3\235\183\244\GSP\170\DC3\151h\166\158XK\US\204\167J\191\251\213\220\154\198~\SO\200\175dW\202\153o\236&\CAN\223R\ETB\162.\147o\EOTq\254\238\&32)\fvc\236\251\DEL\"\243[\136d\225\142\185\218\204\199s\EM\219\181[\253J\203\EM\147\146\ENQ\251\248\228d\225\237v\170\150)\159{\"{\193+\US\158\DC3J\212W\190)\230A)\213\DC2\ESCK\ESC\GS\186\251\&6~\236\210\230z\208m`\235\248\175n\187\179\154\186V\ACK\207\142\186\237[\178\131\SOW\230\174\202\251\166\210\254z\207\132k\211c\214\131r0\134\ACKV\190n[\139\209\238\212\246eKw\142\&1\n\203+\173-\172\212\228\181\144\166\199\191q\248\ETB\195.`!\169\137\133\183\SOHZTWG[|\248\234\CAN\a\172\DC3\t\232\189\250#\244\246!k \169\222\&5V\RSm\174d\133\231\245\142\STX\238\181\215\247G\243\r\243\EM\146$(G\147Z\236\STXS\182\194U\151V\245i\153\n\230#\177\190\135fE%\151\202\ETX\RS\CAN\247/Hz\201\251\ESC\207w\220%\149\197K\203\241\132\185\FS\249d\177\158&\162\DLEs\225p\DC2\202\255\DC2%\156\135\143\197\240\180\230\165\176\SO\248kY\fr\253S\\4\254\ENQPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/theme/UT\t\NUL\ETX4\249\232P\172\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\FS\NULword/theme/theme1.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237YMo\219\&6\CAN\190\SI\216\DEL to\229/\165NP\167\136\GS\187\221\154\180A\226v\232\145\150h\137\r%\n$\157\196\183\161=\SO\CAN0\172\ESCvX\129\221v\CAN\182\NAKh\129]\186_\147\173\195\214\SOH\253\v{\245a\153\178\233\196I\211\173C\155\131#R\207\251\253\242!i_\189v\DC42t@\132\164<jY\213\203\NAK\v\145\200\229\RS\141\252\150u\167\223\187\212\180\144T8\242\&0\227\DC1iYc\"\173k\235\US~p\NAK\175\169\128\132\EOT\129|$\215p\203\n\148\138\215l[\186\&0\141\229e\RS\147\b\222\r\185\b\177\130\161\240mO\224C\208\ESC2\187V\169\172\216!\166\145\133\"\FS\130\218\219\195!u\t\234'*\173\245\137\242.\131\143H\201d\194eb\207M-\234\DC2)\214\219\175&\255\228Xv\152@\a\152\181,\176\227\241\195>9R\SYNbX*x\209\178*\233\159e\175_\181\v!\166\SYN\200jr\189\244/\151\203\ENQ\188\253Z*'\252A!X\237\&5V\175l\SYN\250k\153\254y\\\183\219\237t\171\133\190\DC4\128]\ETB\"\173\206a\ESC\189f\181=\209\169\129\178\199y\221\157\138Si\148\241\154\254\250\FS~\181\221n;\171%|}\138o\204\225\155\149\149\198F\173\132oL\241\206\188\255\237\141Ng\165\132w\166\248\149\&9|\239\202\234J\163\140OA\SOH\163\209\254\FS:\169gQ\153\STX2\228\236\134\DC1\222\EOTxs\210\NULS\148\173uW&\US\169E\189\SYN\226\251\\\244\NUL\144\SYN\ETB+\SUB!5\142\201\DLE\187\128\235`F\a\130&\ACK\240\SUB\193\218\155l\202\149sS\137-$]Ac\213\178>\142\&1\172\136)\228\213\243\US_=\DEL\138\142\US<;~\240\203\241\195\135\199\SI~6H\221\192\145\175K\189\252\254\139\191\US\DEL\138\254z\250\221\203G_\153\241R\199\255\254\211g\191\253\250\165\EM\168t\224\139\175\159\252\241\236\201\139o>\255\243\135G\ACK\248\134\192\ETX\GS\222\167!\145\232\SYN9D\187<\132\192\f\ACK\200@\156M\162\US`\170KlD\190\196\DC1Nd\f\232\174\nJ\232[c\204\176\SOH\215&\229\f\222\NAK@\SOH&\224\245\209\253\146\195{\129\CAN)j\NUL\222\f\194\DC2p\155s\214\230\194\CAN\211\205\196\150\158\133Q\228\155\141\139\145\142\219\197\248\192d\187\&3S\223\238(\134^\166&\149\157\128\148\220\220aPr\236\147\136(\148\188\227\251\132\CAN\196\238QZ\202\235\&6u\ENQ\151|\168\208=\138\218\152\SUBS\210\167\ETXe\SYN\186AC\168\203\216\228 \212\187\148\155\237\187\168\205\153I\253&9(#aU`fRIX)\141\215\241H\225\208\232\&1\SO\153\142\220\194*09\185\&7\SYNn)\225RA\165}\194\&8\234zDJ\147\204m1.\185{\DC3\168\195\\\246m6\SO\203H\161\232\190\t\185\133\&9\215\145\155|\191\DC3\224\&06\250L\163@\199~$\247\161E1\218\225\202\232\EOT/\175\144d\fu\192\209\194r\223\165D\157mm\223\161~`n\144\228\205H\228\188]b\224\144F'\209q\bl\140/\154\142\129\NUL_|\251\248\DELD\196\ESC\144\EOT\211J\152\165\223E\184Y\210\237p\225\209\183\159s7\241(\218!\208\230\239)\247=\229\190\139\148\187h=/K\180Sn\181\245Cq\170/\\xB\RSR\198\246\212\152\145-\153\178\178\EOT\167\189\RSL\166\131T\168\&8\144\199\SOH<\230\230J8_\224\244\EM\t\174>\161*\216\vp\ff\170\169\ENQ_\230\170}\137b.\225\SUB`-\212\157\222%)\EOT\159\206\&9\147\v \160\177\218\230^6]\215/\134\133\154t\228K\221P=Q\176\172\177\250\149\215\&3V\205\128KZ\171:fk\206\137\214l-\155\176\SUB\DLEN\174\253\213\149Zf\SUB:\ACK3\226%y\207\DC4L\202\242\ACKKT\173h5\n\176G\f\211Z|\213\250\ESC\201\166s&'.&\201\149\185$\219\243\171\137E\229\DC1:\132;\188Ss,\228\226\184e\r\225\f\EOT\143a\f\250d\194\US\152\249Q\203rU\SYN\224\233kq&\226UsWU+\206\162\128K&b!\213&\150A&\149\190\154|\237\DC1M\253\175\&9\141$\SI\ETB\DC3\128\129L\150\243\162\222\172\254\135^\216\179\165%\195!q\213\130\153\233\&0\DEL\199G\138\136\189\192;D\ETX6\DC2\187\CAN\252nd\221\229Q\t\148_\155\f\EOT\244v#o\188\242\194\205\215\198\236\215+\249\154\193,\SOp\222\237M\173\246\EM<}.|HG\154{\246\STX\223\207\EMJ\253\STXCq\222\221P\146\206\133Sg\221K\175B\176\139\v\140\146\RSmY\\\168\128\ETX\v\197\SOHu{\STX\246\253\212\SYN\248\133`Y$.!\150|Y\156\248J\SO\166\188\149\233\200H\206\SI\212.\245\145\160\192t*\DLE\132\236\168<\206S\148Uk\250\246\&8Q\148\243L\225\174\140\179\255\ETXr@X?Y\189+I\252\SYN\n&l\146'\"\197\205\SYN\205\&6\173\174\129\223{\139\SI.\141sm<SC\141\179l~\r\141\244\181\173`\245\245\\Xf\ETX\214\204\213\204\DC1\215\156\133;\207\236V\ESC\195\221\SOH%\US@\220T\184lz<\237\243]\168>*\246y\EOT\141x\169\153/\191br\NUL>7\181\224\DC2U\255\214)\168\185\160\222\ETByv\212\146]_\144\236\147\205\157?\217\142!\215\206\201\169\182\231\151\168\173\221C\210\209\220\143F|p\USlo\194=g\196\178\EM\EM\195({\216\DC1i\192\ETX\238\141\243G&3J\200\DC21\161t\SYN\237\146!\162\222\209\164\172\&3\EM\205\DEL\149)6\243\221\204@\DC2{!X?]0\199O7\145B\184v\186p!1\185\236\NAK\194\233-\206\164\128M-g\248\172\202\ENQE\SYN\153b\209\235\164l\t\231\205)3v\239\178)[\162P\231H\153::9ey\166lS\227\145#%pg\242\&3\DC3\244\175=m\217\245\DEL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\FS\NULword/webSettings.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL]\142\&1\SO\194\&0\DLE\EOT\251\188\194\202\ETX8\139\130\194\&2\145h\160\139\144\252\STX\147\FS\137\165\179\207\242Y\152\231c\SUB\n\202\157\213\172\214&\209\166\225\195a\173!m\162\222\145\146\152N\207\227^k6\NUL\178\236\CAN\189\FS8c\234\237\147K\244\181\199\178A\227\178\230\194\v\138t9\DC2\FS\181>A\244!\141\211\160\148\253\142{\"n\247\249\ACK?\178\242\204\213\249\ETB^\196u\141\240\SUB\b{m\225\239\204\&4|\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\NUL\NUL\NUL\NUL[Content_Types].xmlUT\ENQ\NUL\ETX\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\186\SOH\NUL\NUL_rels/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\250\SOH\NUL\NUL_rels/.relsUT\ENQ\NUL\ETXxx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A-\ETX\NUL\NULdocProps/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129p\ETX\NUL\NULdocProps/app.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\EOT\ENQ\NUL\NULdocProps/core.xmlUT\ENQ\NUL\ETXFx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\162\ACK\NUL\NULword/UT\ENQ\NUL\ETX\n\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\225\ACK\NUL\NULword/_rels/UT\ENQ\NUL\ETX\ETB\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129&\a\NUL\NULword/_rels/document.xml.relsUT\ENQ\NUL\ETX\157\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129^\b\NUL\NULword/document.xmlUT\ENQ\NUL\ETX\252x\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129F\t\NUL\NULword/fontTable.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129-\v\NUL\NULword/footnotes.xmlUT\ENQ\NUL\ETX\232\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129]\f\NUL\NULword/numbering.xmlUT\ENQ\NUL\ETXK\ENQ\ETBOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129Q\DLE\NUL\NULword/settings.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\144n\155C\197\SYN\145\220\207\EOT\NUL\NUL\210$\NUL\NUL\SI\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\145\DC3\NUL\NULword/styles.xmlUT\ENQ\NUL\ETX\159\246\189Rux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\169\CAN\NUL\NULword/theme/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\238\CAN\NUL\NULword/theme/theme1.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129_\US\NUL\NULword/webSettings.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ENQ\ACK\NUL\NUL\NUL\NUL\DC2\NUL\DC2\NUL\SOH\ACK\NUL\NUL. \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"),("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/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"),("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\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n\\ifxetex\n \\usepackage{fontspec,xltxtra,xunicode}\n \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n\\else\n \\ifluatex\n \\usepackage{fontspec}\n \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n \\else\n \\usepackage[utf8]{inputenc}\n \\fi\n\\fi\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% 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% Redefine \\includegraphics so that, unless explicit options are\n% given, the image width will not exceed the width of the page.\n% Images get their normal width if they fit onto the page, but\n% are scaled down if they would overflow the margins.\n\\makeatletter\n\\def\\ScaleIfNeeded{%\n \\ifdim\\Gin@nat@width>\\linewidth\n \\linewidth\n \\else\n \\Gin@nat@width\n \\fi\n}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n{%\n \\catcode`\\@=11\\relax%\n \\gdef\\includegraphics{\\@ifnextchar[{\\Oldincludegraphics}{\\Oldincludegraphics[width=\\ScaleIfNeeded]}}%\n}%\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$if(date)$\n\\date{$date$}\n$endif$\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$for(author)$\n <author>\n $author$\n </author>\n$endfor$\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.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>\n$if(titlepage)$\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$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\" href=\"$css$\" />\n$endfor$\n</head>\n<body>\n$if(titlepage)$\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$else$\n$body$\n$endif$\n</body>\n</html>\n\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.latex","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}\n\\usepackage[T1]{fontenc}\n\\usepackage{lmodern}\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n% use upquote if available, for straight quotes in verbatim environments\n\\IfFileExists{upquote.sty}{\\usepackage{upquote}}{}\n\\ifnum 0\\ifxetex 1\\fi\\ifluatex 1\\fi=0 % if pdftex\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 microtype if available\n\\IfFileExists{microtype.sty}{\\usepackage{microtype}}{}\n$if(geometry)$\n\\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}\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$endif$\n$if(tables)$\n\\usepackage{longtable,booktabs}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n% Redefine \\includegraphics so that, unless explicit options are\n% given, the image width will not exceed the width of the page.\n% Images get their normal width if they fit onto the page, but\n% are scaled down if they would overflow the margins.\n\\makeatletter\n\\def\\ScaleIfNeeded{%\n \\ifdim\\Gin@nat@width>\\linewidth\n \\linewidth\n \\else\n \\Gin@nat@width\n \\fi\n}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n{%\n \\catcode`\\@=11\\relax%\n \\gdef\\includegraphics{\\@ifnextchar[{\\Oldincludegraphics}{\\Oldincludegraphics[width=\\ScaleIfNeeded]}}%\n}%\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$if(lang)$\n\\ifxetex\n \\usepackage{polyglossia}\n \\setmainlanguage{$mainlang$}\n\\else\n \\usepackage[$lang$]{babel}\n\\fi\n$endif$\n\n$if(title)$\n\\title{$title$}\n$endif$\n$if(subtitle)$\n\\subtitle{$subtitle$}\n$endif$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\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$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.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.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\">«</button>\n<button id=\"previtembutton\" title=\"previous item\">‹</button>\n<button id=\"nextitembutton\" title=\"next item\">›</button>\n<button id=\"nextslidebutton\" title=\"next slide\">»</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\">½</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/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.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 <link rel=\"stylesheet\" media=\"print\" href=\"$revealjs-url$/css/print/pdf.css\" />\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$for(include-after)$\n$include-after$\n$endfor$\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 </body>\n</html>\n")]
− dist/build/Text/Pandoc/Readers/Haddock/Lex.hs
@@ -1,486 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 10 "src/Text/Pandoc/Readers/Haddock/Lex.x" #-}--{-# LANGUAGE BangPatterns #-} -- Generated by Alex-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See--- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Text.Pandoc.Readers.Haddock.Lex (- Token(..),- LToken,- tokenise,- tokenPos- ) where--import Data.Char-import Numeric (readHex)--#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Char (ord)-import Data.Array.Base (unsafeAt)-#else-import Array-import Char (ord)-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/wrappers.hs" #-}--- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.--import Data.Word (Word8)-{-# LINE 22 "templates/wrappers.hs" #-}--import qualified Data.Bits---- | Encode a Haskell String to a list of Word8 values, in UTF8 format.-utf8Encode :: Char -> [Word8]-utf8Encode = map fromIntegral . go . ord- where- go oc- | oc <= 0x7f = [oc]-- | oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6)- , 0x80 + oc Data.Bits..&. 0x3f- ]-- | oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]- | otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18)- , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]----type Byte = Word8---- -------------------------------------------------------------------------------- The input type---type AlexInput = (AlexPosn, -- current position,- Char, -- previous char- [Byte], -- pending bytes on current char- String) -- current input string--ignorePendingBytes :: AlexInput -> AlexInput-ignorePendingBytes (p,c,ps,s) = (p,c,[],s)--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,bs,s) = c--alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)-alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))-alexGetByte (p,c,[],[]) = Nothing-alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c - (b:bs) = utf8Encode c- in p' `seq` Just (b, (p', c, bs, s))---{-# LINE 92 "templates/wrappers.hs" #-}--{-# LINE 106 "templates/wrappers.hs" #-}--{-# LINE 121 "templates/wrappers.hs" #-}---- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text. It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.---data AlexPosn = AlexPn !Int !Int !Int- deriving (Eq,Show)--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1-alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)----- -------------------------------------------------------------------------------- Default monad--{-# LINE 242 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Monad (with ByteString input)--{-# LINE 333 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper--{-# LINE 360 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper, ByteString version--{-# LINE 378 "templates/wrappers.hs" #-}--{-# LINE 392 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Posn wrapper---- Adds text positions to the basic model.-----alexScanTokens :: String -> [token]-alexScanTokens str = go (alexStartPos,'\n',[],str)- where go inp@(pos,_,_,str) =- case alexScan inp 0 of- AlexEOF -> []- AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)- AlexSkip inp' len -> go inp'- AlexToken inp' len act -> act pos (take len str) : go inp'------ -------------------------------------------------------------------------------- Posn wrapper, ByteString version--{-# LINE 424 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- GScan wrapper---- For compatibility with previous versions of Alex, and because we can.--alex_base :: AlexAddr-alex_base = AlexA# "\xf8\xff\xff\xff\xfc\xff\xff\xff\xf2\x00\x00\x00\xfe\xff\xff\xff\xe8\x01\x00\x00\xde\x02\x00\x00\x03\x00\x00\x00\xea\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x12\x00\x00\x00\xca\x04\x00\x00\xc0\x05\x00\x00\xc8\x02\x00\x00\x24\x00\x00\x00\xf4\x00\x00\x00\x40\x06\x00\x00\xc0\x06\x00\x00\x40\x07\x00\x00\xc0\x07\x00\x00\x40\x08\x00\x00\xc0\x08\x00\x00\x40\x09\x00\x00\xc0\x09\x00\x00\x40\x0a\x00\x00\xc0\x0a\x00\x00\x40\x0b\x00\x00\xc0\x0b\x00\x00\x40\x0c\x00\x00\xc0\x0c\x00\x00\xa2\xff\xff\xff\x40\x0d\x00\x00\xc0\x0d\x00\x00\x40\x0e\x00\x00\xc0\x0e\x00\x00\x40\x0f\x00\x00\xc0\x0f\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\x31\x10\x00\x00\x00\x00\x00\x00\xa2\x10\x00\x00\x00\x00\x00\x00\x13\x11\x00\x00\x00\x00\x00\x00\x84\x11\x00\x00\x00\x00\x00\x00\xf5\x11\x00\x00\x00\x00\x00\x00\x66\x12\x00\x00\x00\x00\x00\x00\xd7\x12\x00\x00\x00\x00\x00\x00\x48\x13\x00\x00\x00\x00\x00\x00\xb9\x13\x00\x00\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\xfa\x13\x00\x00\x00\x00\x00\x00\x3b\x14\x00\x00\x00\x00\x00\x00\x7c\x14\x00\x00\x00\x00\x00\x00\xbd\x14\x00\x00\x00\x00\x00\x00\x2e\x15\x00\x00\xa3\xff\xff\xff\x00\x00\x00\x00\x6f\x15\x00\x00\x00\x00\x00\x00\xb0\x15\x00\x00\xda\x00\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\xf1\x15\x00\x00\xf1\x16\x00\x00\xb1\x16\x00\x00\x00\x00\x00\x00\xb1\x17\x00\x00\x71\x17\x00\x00\x00\x00\x00\x00\x71\x18\x00\x00\x31\x18\x00\x00\x00\x00\x00\x00\x31\x19\x00\x00\xf1\x18\x00\x00\x00\x00\x00\x00\xf1\x19\x00\x00\xb1\x19\x00\x00\x00\x00\x00\x00\xb1\x1a\x00\x00\x71\x1a\x00\x00\x00\x00\x00\x00\xd6\xff\xff\xff\x00\x00\x00\x00\xb2\x1a\x00\x00\x39\x00\x00\x00\xb2\x1b\x00\x00\xd7\xff\xff\xff\x72\x1b\x00\x00\x00\x00\x00\x00\x72\x1c\x00\x00\x32\x1c\x00\x00\x00\x00\x00\x00\x32\x1d\x00\x00\xf2\x1c\x00\x00\x00\x00\x00\x00\xe8\x1d\x00\x00\xde\x1e\x00\x00\xd8\xff\xff\xff\xf6\x00\x00\x00\xde\x1f\x00\x00\x67\x1d\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\x20\x02\x00\x00\x13\x01\x00\x00\xdb\xff\xff\xff\x54\x20\x00\x00\x00\x00\x00\x00\xdc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x21\x00\x00\x40\x22\x00\x00\x41\x21\x00\x00\xfa\xff\xff\xff\x36\x23\x00\x00\x2c\x24\x00\x00\x00\x00\x00\x00\x22\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x86\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x46\x00\x1e\x00\x66\x00\x71\x00\x7a\x00\x88\x00\x84\x00\x07\x00\x7e\x00\x79\x00\x76\x00\x8c\x00\x4c\x00\x72\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x77\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x74\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x63\x00\x14\x00\x44\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x8b\x00\x96\x00\x72\x00\x00\x00\x99\x00\x98\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x97\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x9b\x00\x95\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x61\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x82\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x9a\x00\x9e\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x89\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5f\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x1f\x00\x30\x00\x30\x00\x30\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5c\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x41\x00\x20\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x96\x00\x00\x00\x00\x00\x99\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x9f\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x59\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3f\x00\x21\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x67\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x1d\x00\x32\x00\x32\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x8f\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6d\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x1b\x00\x36\x00\x36\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x72\x00\x70\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x20\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x23\x00\x20\x00\xff\xff\x28\x00\xff\xff\x2a\x00\x20\x00\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x23\x00\x20\x00\xff\xff\x26\x00\x27\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2f\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x00\x3b\x00\xff\xff\xff\xff\x40\x00\xff\xff\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x58\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x78\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x23\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\x01\x00\x9d\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\x9d\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x3a\x00\x3a\x00\x3c\x00\x3c\x00\x3e\x00\x3e\x00\x40\x00\x40\x00\x42\x00\x42\x00\x47\x00\x47\x00\x49\x00\x49\x00\x4d\x00\x4d\x00\x51\x00\x51\x00\x54\x00\x54\x00\x57\x00\x57\x00\x5a\x00\x5a\x00\x5d\x00\x5d\x00\x60\x00\x60\x00\x62\x00\x62\x00\xff\xff\x68\x00\x68\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\x6e\x00\x6e\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\x6f\x00\x6f\x00\x6f\x00\x70\x00\x70\x00\x70\x00\x05\x00\x05\x00\x05\x00\x04\x00\x04\x00\x04\x00\xff\xff\x75\x00\x75\x00\xff\xff\x7a\x00\xff\xff\x7a\x00\x7a\x00\x9d\x00\x9d\x00\x9d\x00\x93\x00\x93\x00\x93\x00\x6f\x00\x70\x00\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\x93\x00\x6f\x00\xff\xff\x9d\x00\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,159) [AlexAcc (alex_action_8),AlexAcc (alex_action_13),AlexAccNone,AlexAcc (alex_action_17),AlexAccNone,AlexAccNone,AlexAcc (alex_action_12),AlexAcc (alex_action_8),AlexAcc (alex_action_14),AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAcc (alex_action_1),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_13),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33)]-{-# LINE 112 "src/Text/Pandoc/Readers/Haddock/Lex.x" #-}---- | A located token-type LToken = (Token, AlexPosn)--data Token- = TokPara- | TokNumber- | TokBullet- | TokDefStart- | TokDefEnd- | TokSpecial Char- | TokIdent String- | TokString String- | TokURL String- | TokPic String- | TokEmphasis String- | TokAName String- | TokBirdTrack String- | TokProperty String- | TokExamplePrompt String- | TokExampleExpression String- | TokExampleResult String- deriving Show--tokenPos :: LToken -> (Int, Int)-tokenPos t = let AlexPn _ line col = snd t in (line, col)--type StartCode = Int-type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> [LToken]--tokenise :: String -> (Int, Int) -> [LToken]-tokenise str (line, col) = go (posn,'\n',[],eofHack str) para- where posn = AlexPn 0 line col- go inp@(pos,_,_,str) sc =- case alexScan inp sc of- AlexEOF -> []- AlexError _ -> []- AlexSkip inp' len -> go inp' sc- AlexToken inp' len act -> act pos (take len str) sc (\sc -> go inp' sc)---- NB. we add a final \n to the string, (see comment in the beginning of line--- production above).-eofHack str = str++"\n"--andBegin :: Action -> StartCode -> Action-andBegin act new_sc = \pos str _ cont -> act pos str new_sc cont--token :: Token -> Action-token t = \pos _ sc cont -> (t, pos) : cont sc--strtoken, strtokenNL :: (String -> Token) -> Action-strtoken t = \pos str sc cont -> (t str, pos) : cont sc-strtokenNL t = \pos str sc cont -> (t (filter (/= '\r') str), pos) : cont sc--- ^ We only want LF line endings in our internal doc string format, so we--- filter out all CRs.--begin :: StartCode -> Action-begin sc = \_ _ _ cont -> cont sc----birdtrack,def,example,exampleexpr,exampleresult,line,para,property,string :: Int-birdtrack = 1-def = 2-example = 3-exampleexpr = 4-exampleresult = 5-line = 6-para = 7-property = 8-string = 9-alex_action_1 = begin birdtrack -alex_action_2 = strtoken TokProperty `andBegin` property-alex_action_3 = strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_4 = token TokBullet `andBegin` string -alex_action_5 = token TokDefStart `andBegin` def -alex_action_6 = token TokNumber `andBegin` string -alex_action_7 = token TokNumber `andBegin` string -alex_action_8 = begin string -alex_action_9 = begin birdtrack -alex_action_10 = strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_11 = token TokPara `andBegin` para -alex_action_12 = begin string -alex_action_13 = strtokenNL TokBirdTrack `andBegin` line -alex_action_14 = token TokPara `andBegin` para -alex_action_15 = token TokPara `andBegin` para -alex_action_16 = strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_17 = begin exampleresult -alex_action_18 = strtokenNL TokExampleExpression `andBegin` example -alex_action_19 = strtokenNL TokExampleResult `andBegin` example -alex_action_20 = strtoken $ \s -> TokSpecial (head s) -alex_action_21 = strtoken $ \s -> TokPic (init $ init $ tail $ tail s) -alex_action_22 = strtoken $ \s -> TokURL (init (tail s)) -alex_action_23 = strtoken $ \s -> TokAName (init (tail s)) -alex_action_24 = strtoken $ \s -> TokEmphasis (init (tail s)) -alex_action_25 = strtoken $ \s -> TokIdent (init (tail s)) -alex_action_26 = strtoken (TokString . tail) -alex_action_27 = strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] -alex_action_28 = strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] -alex_action_29 = strtoken TokString -alex_action_30 = strtokenNL TokString `andBegin` line -alex_action_31 = strtoken TokString -alex_action_32 = token TokDefEnd `andBegin` string -alex_action_33 = strtoken TokString -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine--{-# LINE 21 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define GTE(n,m) (tagToEnum# (n >=# m))-#define EQ(n,m) (tagToEnum# (n ==# m))-#else-#define GTE(n,m) (n >=# m)-#define EQ(n,m) (n ==# m)-#endif-{-# LINE 51 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN- narrow16Int# i- where- i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)- high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- low = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 2#-#else- indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN- narrow32Int# i- where- i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`- (b2 `uncheckedShiftL#` 16#) `or#`- (b1 `uncheckedShiftL#` 8#) `or#` b0)- b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 4#-#else- indexInt32OffAddr# arr off-#endif-------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a- = AlexEOF- | AlexError !AlexInput- | AlexSkip !AlexInput !Int- | AlexToken !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))- = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))- = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetByte input of- Nothing -> ---- AlexEOF- Just _ ->---- AlexError input'-- (AlexLastSkip input'' len, _) ->---- AlexSkip input'' len-- (AlexLastAcc k input''' len, _) ->---- AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =- input `seq` -- strict in the input- let - new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))- in- new_acc `seq`- case alexGetByte input of- Nothing -> (new_acc, input)- Just (c, new_input) -> ---- case fromIntegral c of { (I# (ord_c)) ->- let- base = alexIndexInt32OffAddr alex_base s- offset = (base +# ord_c)- check = alexIndexInt16OffAddr alex_check offset- - new_s = if GTE(offset,0#) && EQ(check,ord_c)- then alexIndexInt16OffAddr alex_table offset- else alexIndexInt16OffAddr alex_deflt s- in- case new_s of- -1# -> (new_acc, input)- -- on an error, we want to keep the input *before* the- -- character that failed, not after.- _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)- -- note that the length is increased ONLY if this is the 1st byte in a char encoding)- new_input new_s new_acc- }- where- check_accs (AlexAccNone) = last_acc- check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))-{-# LINE 198 "templates/GenericTemplate.hs" #-}--data AlexLastAcc a- = AlexNone- | AlexLastAcc a !AlexInput !Int- | AlexLastSkip !AlexInput !Int--instance Functor AlexLastAcc where- fmap f AlexNone = AlexNone- fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z- fmap f (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user- = AlexAccNone- | AlexAcc a- | AlexAccSkip-{-# LINE 242 "templates/GenericTemplate.hs" #-}---- used by wrappers-iUnbox (I# (i)) = i
− dist/build/Text/Pandoc/Readers/Haddock/Parse.hs
@@ -1,879 +0,0 @@-{-# OPTIONS_GHC -w #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See--- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Text.Pandoc.Readers.Haddock.Parse (parseString, parseParas) where--import Text.Pandoc.Readers.Haddock.Lex-import Text.Pandoc.Builder-import Text.Pandoc.Shared (trim, trimr)-import Data.Generics (everywhere, mkT)-import Data.Char (isSpace)-import Data.Maybe (fromMaybe)-import Data.List (stripPrefix, intersperse)-import Data.Monoid (mempty, mconcat)-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.19.3--newtype HappyAbsSyn = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn5 :: (Blocks) -> (HappyAbsSyn )-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (Blocks)-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Blocks) -> (HappyAbsSyn )-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Blocks)-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (Blocks) -> (HappyAbsSyn )-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> (Blocks)-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Blocks) -> (HappyAbsSyn )-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (Blocks)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: ((Inlines, [Blocks])) -> (HappyAbsSyn )-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> ((Inlines, [Blocks]))-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (Blocks) -> (HappyAbsSyn )-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> (Blocks)-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (String) -> (HappyAbsSyn )-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (String)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Blocks) -> (HappyAbsSyn )-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Blocks)-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: (Blocks) -> (HappyAbsSyn )-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> (Blocks)-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (Blocks) -> (HappyAbsSyn )-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (Blocks)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (String) -> (HappyAbsSyn )-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (String)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Inlines) -> (HappyAbsSyn )-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> (Inlines)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Inlines) -> (HappyAbsSyn )-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> (Inlines)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Inlines) -> (HappyAbsSyn )-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Inlines)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (Inlines) -> (HappyAbsSyn )-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (Inlines)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (String) -> (HappyAbsSyn )-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (String)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyInTok :: (LToken) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (LToken)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xff\xff\x31\x00\x11\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x31\x00\x00\x00\x6d\x00\x31\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x21\x00\x6f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x68\x00\x68\x00\x67\x00\xff\xff\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x4b\x00\x4e\x00\x3d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x63\x00\x98\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x6c\x00\x00\x00\x1e\x00\x35\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x45\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf1\xff\xf0\xff\xef\xff\xea\xff\xf2\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\xdc\xff\xdb\xff\xda\xff\xdd\xff\x00\x00\x00\x00\xed\xff\xec\xff\x00\x00\xd9\xff\xde\xff\x00\x00\x00\x00\xfb\xff\xfa\xff\xfc\xff\xfa\xff\xe8\xff\xee\xff\xf4\xff\xf5\xff\x00\x00\xd7\xff\x00\x00\x00\x00\xdf\xff\x00\x00\xe5\xff\xeb\xff\xe1\xff\xe0\xff\xe2\xff\x00\x00\xd6\xff\xd8\xff\xe9\xff\xe6\xff\xfd\xff\xe7\xff\xf3\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x12\x00\x13\x00\x02\x00\x03\x00\x0f\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x02\x00\x13\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0d\x00\x0e\x00\x0c\x00\x0d\x00\x0e\x00\x08\x00\x09\x00\x11\x00\x02\x00\x13\x00\x06\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x0f\x00\x0e\x00\x02\x00\x0b\x00\x0c\x00\x11\x00\x0e\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x04\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x13\x00\x0b\x00\x0c\x00\x05\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x10\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x0c\x00\x14\x00\x13\x00\x11\x00\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0e\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x10\x00\x11\x00\x38\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x2f\x00\x2b\x00\x1c\x00\x21\x00\x1d\x00\x10\x00\x11\x00\x33\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x30\x00\x2b\x00\x1c\x00\x10\x00\x1d\x00\x35\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2a\x00\x2b\x00\x19\x00\x1a\x00\x1b\x00\x2e\x00\x0b\x00\x1c\x00\x10\x00\x1d\x00\x24\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x39\x00\x0d\x00\x27\x00\x0e\x00\x32\x00\x29\x00\x0d\x00\x1c\x00\x0e\x00\x1d\x00\x37\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x33\x00\x0e\x00\x21\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x0c\x00\x0d\x00\x35\x00\x0e\x00\x1e\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x24\x00\x0e\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0d\x00\x23\x00\x0e\x00\x19\x00\xff\xff\x29\x00\x1c\x00\x2d\x00\x1d\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x1b\x00\x0c\x00\x0d\x00\x23\x00\x0e\x00\x25\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x26\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x1d\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (2, 41) [- (2 , happyReduce_2),- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41)- ]--happy_n_terms = 21 :: Int-happy_n_nonterms = 16 :: Int--happyReduce_2 = happySpecReduce_3 0# happyReduction_2-happyReduction_2 happy_x_3- happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_3 of { happy_var_3 -> - happyIn5- (happy_var_1 <> happy_var_3- )}}--happyReduce_3 = happySpecReduce_2 0# happyReduction_3-happyReduction_3 happy_x_2- happy_x_1- = case happyOut5 happy_x_2 of { happy_var_2 -> - happyIn5- (happy_var_2- )}--happyReduce_4 = happySpecReduce_1 0# happyReduction_4-happyReduction_4 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn5- (happy_var_1- )}--happyReduce_5 = happySpecReduce_0 0# happyReduction_5-happyReduction_5 = happyIn5- (mempty- )--happyReduce_6 = happySpecReduce_1 1# happyReduction_6-happyReduction_6 happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - happyIn6- (bulletList [happy_var_1]- )}--happyReduce_7 = happySpecReduce_1 1# happyReduction_7-happyReduction_7 happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn6- (orderedList [happy_var_1]- )}--happyReduce_8 = happySpecReduce_1 1# happyReduction_8-happyReduction_8 happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - happyIn6- (definitionList [happy_var_1]- )}--happyReduce_9 = happySpecReduce_1 1# happyReduction_9-happyReduction_9 happy_x_1- = case happyOut10 happy_x_1 of { happy_var_1 -> - happyIn6- (happy_var_1- )}--happyReduce_10 = happySpecReduce_2 2# happyReduction_10-happyReduction_10 happy_x_2- happy_x_1- = case happyOut10 happy_x_2 of { happy_var_2 -> - happyIn7- (happy_var_2- )}--happyReduce_11 = happySpecReduce_2 3# happyReduction_11-happyReduction_11 happy_x_2- happy_x_1- = case happyOut10 happy_x_2 of { happy_var_2 -> - happyIn8- (happy_var_2- )}--happyReduce_12 = happyReduce 4# 4# happyReduction_12-happyReduction_12 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut16 happy_x_4 of { happy_var_4 -> - happyIn9- ((trimInlines happy_var_2, [plain $ trimInlines happy_var_4])- ) `HappyStk` happyRest}}--happyReduce_13 = happySpecReduce_1 5# happyReduction_13-happyReduction_13 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn10- (para' happy_var_1- )}--happyReduce_14 = happySpecReduce_1 5# happyReduction_14-happyReduction_14 happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn10- (codeBlockWith ([], ["haskell"], []) happy_var_1- )}--happyReduce_15 = happySpecReduce_1 5# happyReduction_15-happyReduction_15 happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn10- (happy_var_1- )}--happyReduce_16 = happySpecReduce_1 5# happyReduction_16-happyReduction_16 happy_x_1- = case happyOut13 happy_x_1 of { happy_var_1 -> - happyIn10- (happy_var_1- )}--happyReduce_17 = happySpecReduce_2 6# happyReduction_17-happyReduction_17 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> - case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn11- (happy_var_1 ++ happy_var_2- )}}--happyReduce_18 = happySpecReduce_1 6# happyReduction_18-happyReduction_18 happy_x_1- = case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> - happyIn11- (happy_var_1- )}--happyReduce_19 = happySpecReduce_1 7# happyReduction_19-happyReduction_19 happy_x_1- = case happyOutTok happy_x_1 of { ((TokProperty happy_var_1,_)) -> - happyIn12- (makeProperty happy_var_1- )}--happyReduce_20 = happySpecReduce_2 8# happyReduction_20-happyReduction_20 happy_x_2- happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - case happyOut13 happy_x_2 of { happy_var_2 -> - happyIn13- (happy_var_1 <> happy_var_2- )}}--happyReduce_21 = happySpecReduce_1 8# happyReduction_21-happyReduction_21 happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn13- (happy_var_1- )}--happyReduce_22 = happySpecReduce_3 9# happyReduction_22-happyReduction_22 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> - case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> - case happyOut15 happy_x_3 of { happy_var_3 -> - happyIn14- (makeExample happy_var_1 happy_var_2 (lines happy_var_3)- )}}}--happyReduce_23 = happySpecReduce_2 9# happyReduction_23-happyReduction_23 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> - case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> - happyIn14- (makeExample happy_var_1 happy_var_2 []- )}}--happyReduce_24 = happySpecReduce_2 10# happyReduction_24-happyReduction_24 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> - case happyOut15 happy_x_2 of { happy_var_2 -> - happyIn15- (happy_var_1 ++ happy_var_2- )}}--happyReduce_25 = happySpecReduce_1 10# happyReduction_25-happyReduction_25 happy_x_1- = case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> - happyIn15- (happy_var_1- )}--happyReduce_26 = happySpecReduce_2 11# happyReduction_26-happyReduction_26 happy_x_2- happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn16- (happy_var_1 <> happy_var_2- )}}--happyReduce_27 = happySpecReduce_1 11# happyReduction_27-happyReduction_27 happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn16- (happy_var_1- )}--happyReduce_28 = happySpecReduce_1 12# happyReduction_28-happyReduction_28 happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - happyIn17- (happy_var_1- )}--happyReduce_29 = happySpecReduce_3 12# happyReduction_29-happyReduction_29 happy_x_3- happy_x_2- happy_x_1- = case happyOut18 happy_x_2 of { happy_var_2 -> - happyIn17- (monospace happy_var_2- )}--happyReduce_30 = happySpecReduce_2 13# happyReduction_30-happyReduction_30 happy_x_2- happy_x_1- = case happyOut18 happy_x_2 of { happy_var_2 -> - happyIn18- (linebreak <> happy_var_2- )}--happyReduce_31 = happySpecReduce_2 13# happyReduction_31-happyReduction_31 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut18 happy_x_2 of { happy_var_2 -> - happyIn18- (happy_var_1 <> happy_var_2- )}}--happyReduce_32 = happySpecReduce_1 13# happyReduction_32-happyReduction_32 happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - happyIn18- (happy_var_1- )}--happyReduce_33 = happySpecReduce_1 14# happyReduction_33-happyReduction_33 happy_x_1- = case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> - happyIn19- (text happy_var_1- )}--happyReduce_34 = happySpecReduce_1 14# happyReduction_34-happyReduction_34 happy_x_1- = case happyOutTok happy_x_1 of { ((TokEmphasis happy_var_1,_)) -> - happyIn19- (emph (str happy_var_1)- )}--happyReduce_35 = happySpecReduce_1 14# happyReduction_35-happyReduction_35 happy_x_1- = case happyOutTok happy_x_1 of { ((TokURL happy_var_1,_)) -> - happyIn19- (makeHyperlink happy_var_1- )}--happyReduce_36 = happySpecReduce_1 14# happyReduction_36-happyReduction_36 happy_x_1- = case happyOutTok happy_x_1 of { ((TokPic happy_var_1,_)) -> - happyIn19- (image happy_var_1 happy_var_1 mempty- )}--happyReduce_37 = happySpecReduce_1 14# happyReduction_37-happyReduction_37 happy_x_1- = happyIn19- (mempty- )--happyReduce_38 = happySpecReduce_1 14# happyReduction_38-happyReduction_38 happy_x_1- = case happyOutTok happy_x_1 of { ((TokIdent happy_var_1,_)) -> - happyIn19- (codeWith ([], ["haskell"], []) happy_var_1- )}--happyReduce_39 = happySpecReduce_3 14# happyReduction_39-happyReduction_39 happy_x_3- happy_x_2- happy_x_1- = case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn19- (codeWith ([], ["haskell"], []) happy_var_2- )}--happyReduce_40 = happySpecReduce_1 15# happyReduction_40-happyReduction_40 happy_x_1- = case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> - happyIn20- (happy_var_1- )}--happyReduce_41 = happySpecReduce_2 15# happyReduction_41-happyReduction_41 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> - case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn20- (happy_var_1 ++ happy_var_2- )}}--happyNewToken action sts stk [] =- happyDoAction 20# notHappyAtAll action sts stk []--happyNewToken action sts stk (tk:tks) =- let cont i = happyDoAction i tk action sts stk tks in- case tk of {- (TokSpecial '/',_) -> cont 1#;- (TokSpecial '@',_) -> cont 2#;- (TokDefStart,_) -> cont 3#;- (TokDefEnd,_) -> cont 4#;- (TokSpecial '\"',_) -> cont 5#;- (TokURL happy_dollar_dollar,_) -> cont 6#;- (TokPic happy_dollar_dollar,_) -> cont 7#;- (TokAName happy_dollar_dollar,_) -> cont 8#;- (TokEmphasis happy_dollar_dollar,_) -> cont 9#;- (TokBullet,_) -> cont 10#;- (TokNumber,_) -> cont 11#;- (TokBirdTrack happy_dollar_dollar,_) -> cont 12#;- (TokProperty happy_dollar_dollar,_) -> cont 13#;- (TokExamplePrompt happy_dollar_dollar,_) -> cont 14#;- (TokExampleResult happy_dollar_dollar,_) -> cont 15#;- (TokExampleExpression happy_dollar_dollar,_) -> cont 16#;- (TokIdent happy_dollar_dollar,_) -> cont 17#;- (TokPara,_) -> cont 18#;- (TokString happy_dollar_dollar,_) -> cont 19#;- _ -> happyError' (tk:tks)- }--happyError_ 20# tk tks = happyError' tks-happyError_ _ tk tks = happyError' (tk:tks)--happyThen :: () => Either [LToken] a -> (a -> Either [LToken] b) -> Either [LToken] b-happyThen = (>>=)-happyReturn :: () => a -> Either [LToken] a-happyReturn = (return)-happyThen1 m k tks = (>>=) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> Either [LToken] a-happyReturn1 = \a tks -> (return) a-happyError' :: () => [(LToken)] -> Either [LToken] a-happyError' = happyError--parseParas tks = happySomeParser where- happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut5 x))--parseString tks = happySomeParser where- happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut16 x))--happySeq = happyDontSeq---happyError :: [LToken] -> Either [LToken] a-happyError toks = Left toks--para' :: Inlines -> Blocks-para' = para . trimInlines--monospace :: Inlines -> Inlines-monospace = everywhere (mkT go)- where- go (Str s) = Code nullAttr s- go x = x---- | Create a `Hyperlink` from given string.------ A hyperlink consists of a URL and an optional label. The label is separated--- from the url by one or more whitespace characters.-makeHyperlink :: String -> Inlines-makeHyperlink input = case break isSpace $ trim input of- (url, "") -> link url url (str url)- (url, lb) -> link url url (trimInlines $ text lb)--makeProperty :: String -> Blocks-makeProperty s = case trim s of- 'p':'r':'o':'p':'>':xs ->- codeBlockWith ([], ["property"], []) (dropWhile isSpace xs)- xs ->- error $ "makeProperty: invalid input " ++ show xs---- | Create an 'Example', stripping superfluous characters as appropriate-makeExample :: String -> String -> [String] -> Blocks-makeExample prompt expression result =- para $ codeWith ([], ["haskell","expr"], []) (trim expression)- <> linebreak- <> (mconcat $ intersperse linebreak $ map coder result')- where- -- 1. drop trailing whitespace from the prompt, remember the prefix- prefix = takeWhile isSpace prompt-- -- 2. drop, if possible, the exact same sequence of whitespace- -- characters from each result line- --- -- 3. interpret lines that only contain the string "<BLANKLINE>" as an- -- empty line- result' = map (substituteBlankLine . tryStripPrefix prefix) result- where- tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys-- substituteBlankLine "<BLANKLINE>" = ""- substituteBlankLine line = line- coder = codeWith ([], ["result"], [])-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 13 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)-#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)-#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)-#else-#define LT(n,m) (n Happy_GHC_Exts.<# m)-#define GTE(n,m) (n Happy_GHC_Exts.>=# m)-#define EQ(n,m) (n Happy_GHC_Exts.==# m)-#endif-{-# LINE 46 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 67 "templates/GenericTemplate.hs" #-}--{-# LINE 77 "templates/GenericTemplate.hs" #-}--{-# LINE 86 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser). We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =- happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st- = {- nothing -}--- case action of- 0# -> {- nothing -}- happyFail i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}-- (happyReduceArr Happy_Data_Array.! rule) i tk st- where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))- n -> {- nothing -}--- happyShift new_state i tk st- where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))- where off = indexShortOffAddr happyActOffsets st- off_i = (off Happy_GHC_Exts.+# i)- check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))- then EQ(indexShortOffAddr happyCheck off_i, i)- else False- action- | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st---indexShortOffAddr (HappyA# arr) off =- Happy_GHC_Exts.narrow16Int# i- where- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)- high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))- low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))- off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "shifting the error token" $- happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =- happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk- = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')- = let r = fn v1 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')- = let r = fn v1 v2 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')- = let r = fn v1 v2 v3 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk- = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of- sts1@((HappyCons (st1@(action)) (_))) ->- let r = fn stk in -- it doesn't hurt to always seq here...- happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =- case happyDrop k (HappyCons (st) (sts)) of- sts1@((HappyCons (st1@(action)) (_))) ->- let drop_stk = happyDropStk k stk in- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))--happyMonad2Reduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =- case happyDrop k (HappyCons (st) (sts)) of- sts1@((HappyCons (st1@(action)) (_))) ->- let drop_stk = happyDropStk k stk-- off = indexShortOffAddr happyGotoOffsets st1- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i---- in- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))--happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where off = indexShortOffAddr happyGotoOffsets st- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "failing" $ - happyError_ i tk--{- We don't need state discarding for our restricted implementation of- "error". In fact, it can cause some bogus parses, so I've disabled it- for now --SDM---- discard a state-happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) =--- trace ("discarding state, depth " ++ show (length stk)) $- happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,--- save the old token and carry on.-happyFail i tk (action) sts stk =--- trace "entering error recovery" $- happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq--- otherwise it emits--- happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template. GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
man/man1/pandoc.1 view
@@ -9,12 +9,13 @@ 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, and DocBook; 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, EPUB (v2 or-v3), FictionBook2, Textile, groff man pages, Emacs Org\-Mode, AsciiDoc,-and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide shows.+LaTeX, MediaWiki markup, Haddock markup, OPML, Emacs Org\-mode and+DocBook; 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,+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,@@ -160,8 +161,7 @@ .SH OPTIONS .SS General options .TP-.B \f[C]\-f\f[] \f[I]FORMAT\f[], \f[C]\-r\f[] \f[I]FORMAT\f[],-\f[C]\-\-from=\f[]\f[I]FORMAT\f[], \f[C]\-\-read=\f[]\f[I]FORMAT\f[]+.B \f[C]\-f\f[] \f[I]FORMAT\f[], \f[C]\-r\f[] \f[I]FORMAT\f[], \f[C]\-\-from=\f[]\f[I]FORMAT\f[], \f[C]\-\-read=\f[]\f[I]FORMAT\f[] Specify input format. \f[I]FORMAT\f[] can be \f[C]native\f[] (native Haskell), \f[C]json\f[] (JSON version of native AST), \f[C]markdown\f[] (pandoc\[aq]s extended@@ -169,9 +169,9 @@ \f[C]markdown_phpextra\f[] (PHP Markdown Extra extended markdown), \f[C]markdown_github\f[] (github extended markdown), \f[C]textile\f[] (Textile), \f[C]rst\f[] (reStructuredText), \f[C]html\f[] (HTML),-\f[C]docbook\f[] (DocBook), \f[C]opml\f[] (OPML), \f[C]mediawiki\f[]-(MediaWiki markup), \f[C]haddock\f[] (Haddock markup), or \f[C]latex\f[]-(LaTeX).+\f[C]docbook\f[] (DocBook), \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). 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.@@ -187,8 +187,7 @@ .RS .RE .TP-.B \f[C]\-t\f[] \f[I]FORMAT\f[], \f[C]\-w\f[] \f[I]FORMAT\f[],-\f[C]\-\-to=\f[]\f[I]FORMAT\f[], \f[C]\-\-write=\f[]\f[I]FORMAT\f[]+.B \f[C]\-t\f[] \f[I]FORMAT\f[], \f[C]\-w\f[] \f[I]FORMAT\f[], \f[C]\-\-to=\f[]\f[I]FORMAT\f[], \f[C]\-\-write=\f[]\f[I]FORMAT\f[] Specify output format. \f[I]FORMAT\f[] can be \f[C]native\f[] (native Haskell), \f[C]json\f[] (JSON version of native AST), \f[C]plain\f[] (plain text),@@ -205,12 +204,12 @@ \f[C]odt\f[] (OpenOffice text document), \f[C]docx\f[] (Word docx), \f[C]rtf\f[] (rich text format), \f[C]epub\f[] (EPUB v2 book), \f[C]epub3\f[] (EPUB v3), \f[C]fb2\f[] (FictionBook2 e\-book),-\f[C]asciidoc\f[] (AsciiDoc), \f[C]slidy\f[] (Slidy HTML and javascript-slide show), \f[C]slideous\f[] (Slideous HTML and javascript slide-show), \f[C]dzslides\f[] (DZSlides HTML5 + javascript slide show),-\f[C]revealjs\f[] (reveal.js HTML5 + javascript slide show), \f[C]s5\f[]-(S5 HTML and javascript slide show), or the path of a custom lua writer-(see Custom writers, below).+\f[C]asciidoc\f[] (AsciiDoc), \f[C]icml\f[] (InDesign ICML),+\f[C]slidy\f[] (Slidy HTML and javascript slide show), \f[C]slideous\f[]+(Slideous HTML and javascript slide show), \f[C]dzslides\f[] (DZSlides+HTML5 + javascript slide show), \f[C]revealjs\f[] (reveal.js HTML5 ++javascript slide show), \f[C]s5\f[] (S5 HTML and javascript slide show),+or the path of a custom lua writer (see Custom writers, below). Note that \f[C]odt\f[], \f[C]epub\f[], and \f[C]epub3\f[] output will not be directed to \f[I]stdout\f[]; an output filename must be specified using the \f[C]\-o/\-\-output\f[] option.@@ -377,8 +376,7 @@ filename with \f[C]\&./\f[]. .RE .TP-.B \f[C]\-M\f[] \f[I]KEY[=VAL]\f[],-\f[C]\-\-metadata=\f[]\f[I]KEY[:VAL]\f[]+.B \f[C]\-M\f[] \f[I]KEY[=VAL]\f[], \f[C]\-\-metadata=\f[]\f[I]KEY[:VAL]\f[] Set the metadata field \f[I]KEY\f[] to the value \f[I]VAL\f[]. A value specified on the command line overrides a value specified in the document.@@ -435,8 +433,7 @@ .RS .RE .TP-.B \f[C]\-V\f[] \f[I]KEY[=VAL]\f[],-\f[C]\-\-variable=\f[]\f[I]KEY[:VAL]\f[]+.B \f[C]\-V\f[] \f[I]KEY[=VAL]\f[], \f[C]\-\-variable=\f[]\f[I]KEY[:VAL]\f[] Set the template variable \f[I]KEY\f[] to the value \f[I]VAL\f[] when rendering the document in standalone mode. This is generally only useful when the \f[C]\-\-template\f[] option is@@ -447,8 +444,7 @@ .RS .RE .TP-.B \f[C]\-D\f[] \f[I]FORMAT\f[],-\f[C]\-\-print\-default\-template=\f[]\f[I]FORMAT\f[]+.B \f[C]\-D\f[] \f[I]FORMAT\f[], \f[C]\-\-print\-default\-template=\f[]\f[I]FORMAT\f[] Print the default template for an output \f[I]FORMAT\f[]. (See \f[C]\-t\f[] for a list of possible \f[I]FORMAT\f[]s.) .RS@@ -502,8 +498,7 @@ .RS .RE .TP-.B \f[C]\-H\f[] \f[I]FILE\f[],-\f[C]\-\-include\-in\-header=\f[]\f[I]FILE\f[]+.B \f[C]\-H\f[] \f[I]FILE\f[], \f[C]\-\-include\-in\-header=\f[]\f[I]FILE\f[] Include contents of \f[I]FILE\f[], verbatim, at the end of the header. This can be used, for example, to include special CSS or javascript in HTML documents.@@ -514,8 +509,7 @@ .RS .RE .TP-.B \f[C]\-B\f[] \f[I]FILE\f[],-\f[C]\-\-include\-before\-body=\f[]\f[I]FILE\f[]+.B \f[C]\-B\f[] \f[I]FILE\f[], \f[C]\-\-include\-before\-body=\f[]\f[I]FILE\f[] Include contents of \f[I]FILE\f[], verbatim, at the beginning of the document body (e.g. after the \f[C]<body>\f[] tag in HTML, or the \f[C]\\begin{document}\f[]@@ -528,8 +522,7 @@ .RS .RE .TP-.B \f[C]\-A\f[] \f[I]FILE\f[],-\f[C]\-\-include\-after\-body=\f[]\f[I]FILE\f[]+.B \f[C]\-A\f[] \f[I]FILE\f[], \f[C]\-\-include\-after\-body=\f[]\f[I]FILE\f[] Include contents of \f[I]FILE\f[], verbatim, at the end of the document body (before the \f[C]</body>\f[] tag in HTML, or the \f[C]\\end{document}\f[] command in LaTeX).@@ -694,8 +687,7 @@ .RS .RE .TP-.B \f[C]\-T\f[] \f[I]STRING\f[],-\f[C]\-\-title\-prefix=\f[]\f[I]STRING\f[]+.B \f[C]\-T\f[] \f[I]STRING\f[], \f[C]\-\-title\-prefix=\f[]\f[I]STRING\f[] Specify \f[I]STRING\f[] as a prefix at the beginning of the title that appears in the HTML header (but not in the title as it appears at the beginning of the HTML body).@@ -872,11 +864,19 @@ .TP .B \f[C]\-\-natbib\f[] Use natbib for citations in LaTeX output.+This option is not for use with the \f[C]pandoc\-citeproc\f[] filter or+with PDF output.+It is intended for use in producing a LaTeX file that can be processed+with pdflatex and bibtex. .RS .RE .TP .B \f[C]\-\-biblatex\f[] Use biblatex for citations in LaTeX output.+This option is not for use with the \f[C]pandoc\-citeproc\f[] filter or+with PDF output.+It is intended for use in producing a LaTeX file that can be processed+with pdflatex and bibtex or biber. .RS .RE .SS Math rendering in HTML@@ -1066,12 +1066,12 @@ .RE .TP .B \f[C]slideous\-url\f[]-base URL for Slideous documents (defaults to \f[C]default\f[])+base URL for Slideous documents (defaults to \f[C]slideous\f[]) .RS .RE .TP .B \f[C]s5\-url\f[]-base URL for S5 documents (defaults to \f[C]ui/default\f[])+base URL for S5 documents (defaults to \f[C]s5/default\f[]) .RS .RE .TP@@ -1112,8 +1112,23 @@ .RS .RE .TP-.B \f[C]mainfont\f[], \f[C]sansfont\f[], \f[C]monofont\f[],-\f[C]mathfont\f[]+.B \f[C]linestretch\f[]+adjusts line spacing (requires the \f[C]setspace\f[] package)+.RS+.RE+.TP+.B \f[C]fontfamily\f[]+font package to use for LaTeX documents (with pdflatex): TeXLive has+\f[C]bookman\f[] (Bookman), \f[C]utopia\f[] or \f[C]fourier\f[]+(Utopia), \f[C]fouriernc\f[] (New Century Schoolbook), \f[C]times\f[] or+\f[C]txfonts\f[] (Times), \f[C]mathpazo\f[] or \f[C]pxfonts\f[] or+\f[C]mathpple\f[] (Palatino), \f[C]libertine\f[] (Linux Libertine),+\f[C]arev\f[] (Arev Sans), and the default \f[C]lmodern\f[], among+others.+.RS+.RE+.TP+.B \f[C]mainfont\f[], \f[C]sansfont\f[], \f[C]monofont\f[], \f[C]mathfont\f[] fonts for LaTeX documents (works only with xelatex and lualatex) .RS .RE@@ -1684,7 +1699,7 @@ Latter, Ralf Stephan, Eric Seidel, B. Scott Michel, Gavin Beatty, Sergey Astanin, Arlo O\[aq]Keeffe, Denis Laxalde, Brent Yorgey, David Lazar, Jamie F.-Olson.+Olson, Matthew Pickering, Albert Krewinkel, mb21, Jesse Rosenthal. .SH PANDOC'S MARKDOWN For a complete description of pandoc's extensions to standard markdown, see \f[C]pandoc_markdown\f[] (5).
man/man5/pandoc_markdown.5 view
@@ -2101,6 +2101,9 @@ Each citation must have a key, composed of \[aq]\@\[aq] + the citation identifier from the database, and may optionally have a prefix, a locator, and a suffix.+The citation key must begin with a letter or \f[C]_\f[], and may contain+alphanumerics, \f[C]_\f[], and internal punctuation characters+(\f[C]:.#$%&\-+?<>~/\f[]). Here are some examples: .IP .nf@@ -2146,6 +2149,27 @@ .fi .PP The bibliography will be inserted after this header.+Note that the \f[C]unnumbered\f[] class will be added to this header, so+that the section will not be numbered.+.PP+If you want to include items in the bibliography without actually citing+them in the body text, you can define a dummy \f[C]nocite\f[] metadata+field and put the citations there:+.IP+.nf+\f[C]+\-\-\-+nocite:+\ |\ \@item1,\ \@item2+\&...++\@item3+\f[]+.fi+.PP+In this example, the document will contain a citation for \f[C]item3\f[]+only, but the bibliography will contain entries for \f[C]item1\f[],+\f[C]item2\f[], and \f[C]item3\f[]. .SH NON\-PANDOC EXTENSIONS .PP The following markdown syntax extensions are not enabled by default in
pandoc.cabal view
@@ -1,5 +1,5 @@ Name: pandoc-Version: 1.12.3.3+Version: 1.12.4 Cabal-Version: >= 1.10 Build-Type: Custom License: GPL@@ -11,18 +11,18 @@ Stability: alpha Homepage: http://johnmacfarlane.net/pandoc Category: Text-Tested-With: GHC == 7.4.2, GHC == 7.6.1+Tested-With: GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.1 Synopsis: Conversion between markup formats 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, and Textile, and it can write markdown,- reStructuredText, HTML, LaTeX, ConTeXt, Docbook, OPML,+ markup, OPML, Emacs Org-Mode, and Textile, and it can write+ markdown, reStructuredText, HTML, LaTeX, ConTeXt, Docbook, OPML, OpenDocument, ODT, Word docx, RTF, MediaWiki, Textile, groff man pages, plain text, Emacs Org-Mode, AsciiDoc,- EPUB (v2 and v3), FictionBook2, and several kinds of- HTML/javascript slide shows (S5, Slidy, Slideous, DZSlides,+ 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,@@ -46,11 +46,11 @@ data/templates/default.beamer, data/templates/default.opendocument, data/templates/default.opml,- data/templates/default.latex,+ data/templates/default.latex, data/templates/default.context,- data/templates/default.texinfo,+ data/templates/default.texinfo, data/templates/default.man,- data/templates/default.markdown,+ data/templates/default.markdown, data/templates/default.rst, data/templates/default.plain, data/templates/default.mediawiki,@@ -60,7 +60,7 @@ data/templates/default.slideous, data/templates/default.revealjs, data/templates/default.dzslides,- data/templates/default.asciidoc,+ data/templates/default.asciidoc, data/templates/default.textile, data/templates/default.org, data/templates/default.epub,@@ -79,8 +79,10 @@ -- sample lua custom writer data/sample.lua -- documentation- README, INSTALL, COPYRIGHT, BUGS, CONTRIBUTING.md, changelog+ README, COPYRIGHT Extra-Source-Files:+ -- documentation+ INSTALL, BUGS, CONTRIBUTING.md, changelog -- code to create pandoc.1 man page man/man1/pandoc.1.template, man/man5/pandoc_markdown.5.template,@@ -204,8 +206,8 @@ unordered-containers >= 0.2 && < 0.3, array >= 0.3 && < 0.6, parsec >= 3.1 && < 3.2,- mtl >= 1.1 && < 2.2,- network >= 2 && < 2.5,+ mtl >= 1.1 && < 2.3,+ network >= 2 && < 2.6, filepath >= 1.1 && < 1.4, process >= 1 && < 1.3, directory >= 1 && < 1.3,@@ -215,34 +217,37 @@ old-locale >= 1 && < 1.1, time >= 1.2 && < 1.5, HTTP >= 4000.0.5 && < 4000.3,- texmath >= 0.6.6 && < 0.7,+ texmath >= 0.6.6.1 && < 0.7, xml >= 1.3.12 && < 1.4, random >= 1 && < 1.1, extensible-exceptions >= 0.1 && < 0.2,- pandoc-types >= 1.12.3 && < 1.13,- aeson >= 0.6 && < 0.8,- tagsoup >= 0.12.5 && < 0.14,+ pandoc-types >= 1.12.3.3 && < 1.13,+ aeson >= 0.7 && < 0.8,+ tagsoup >= 0.13.1 && < 0.14, base64-bytestring >= 0.1 && < 1.1, zlib >= 0.5 && < 0.6,- highlighting-kate >= 0.5.6 && < 0.6,+ highlighting-kate >= 0.5.7 && < 0.6, data-default >= 0.4 && < 0.6, temporary >= 1.1 && < 1.3, blaze-html >= 0.5 && < 0.8, blaze-markup >= 0.5.1 && < 0.7, attoparsec >= 0.10 && < 0.12,- yaml >= 0.8.3 && < 0.9,+ yaml >= 0.8.8.2 && < 0.9,+ scientific >= 0.2 && < 0.3, vector >= 0.10 && < 0.11, hslua >= 0.3 && < 0.4, binary >= 0.5 && < 0.8 Build-Tools: alex, happy if flag(http-conduit)- Build-Depends: http-conduit >= 1.9 && < 2.1,+ Build-Depends: http-conduit >= 1.9 && < 2.2, http-types >= 0.8 && < 0.9 cpp-options: -DHTTP_CONDUIT if flag(embed_data_files) cpp-options: -DEMBED_DATA_FILES -- Build-Tools: hsb2hs -- not yet recognized by cabal other-modules: Text.Pandoc.Data+ if os(windows)+ Cpp-options: -D_WINDOWS Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind Ghc-Prof-Options: -auto-all -caf-all -rtsopts Default-Language: Haskell98@@ -261,6 +266,7 @@ Text.Pandoc.Readers.Markdown, Text.Pandoc.Readers.MediaWiki, Text.Pandoc.Readers.RST,+ Text.Pandoc.Readers.Org, Text.Pandoc.Readers.DocBook, Text.Pandoc.Readers.OPML, Text.Pandoc.Readers.TeXMath,@@ -271,6 +277,7 @@ Text.Pandoc.Writers.Docbook, Text.Pandoc.Writers.OPML, Text.Pandoc.Writers.HTML,+ Text.Pandoc.Writers.ICML, Text.Pandoc.Writers.LaTeX, Text.Pandoc.Writers.ConTeXt, Text.Pandoc.Writers.OpenDocument,@@ -312,17 +319,17 @@ Executable pandoc Build-Depends: pandoc,- pandoc-types >= 1.12.3 && < 1.13,+ pandoc-types >= 1.12.3.3 && < 1.13, base >= 4.2 && <5, directory >= 1 && < 1.3, filepath >= 1.1 && < 1.4,- network >= 2 && < 2.5,+ network >= 2 && < 2.6, text >= 0.11 && < 1.2, bytestring >= 0.9 && < 0.11, extensible-exceptions >= 0.1 && < 0.2,- highlighting-kate >= 0.5.6 && < 0.6,- aeson >= 0.6 && < 0.8,- yaml >= 0.8.3 && < 0.9,+ highlighting-kate >= 0.5.7 && < 0.6,+ aeson >= 0.7 && < 0.8,+ yaml >= 0.8.8.2 && < 0.9, containers >= 0.1 && < 0.6, HTTP >= 4000.0.5 && < 4000.3 Ghc-Options: -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind@@ -357,18 +364,18 @@ Build-Depends: base >= 4.2 && < 5, syb >= 0.1 && < 0.5, pandoc,- pandoc-types >= 1.12.3 && < 1.13,+ pandoc-types >= 1.12.3.3 && < 1.13, bytestring >= 0.9 && < 0.11, text >= 0.11 && < 1.2, directory >= 1 && < 1.3, filepath >= 1.1 && < 1.4, process >= 1 && < 1.3,- highlighting-kate >= 0.5.6 && < 0.6,+ highlighting-kate >= 0.5.7 && < 0.6, Diff >= 0.2 && < 0.4, test-framework >= 0.3 && < 0.9, test-framework-hunit >= 0.2 && < 0.4, test-framework-quickcheck2 >= 0.2.9 && < 0.4,- QuickCheck >= 2.4 && < 2.7,+ QuickCheck >= 2.4 && < 2.8, HUnit >= 1.2 && < 1.3, containers >= 0.1 && < 0.6, ansi-terminal >= 0.5 && < 0.7@@ -379,11 +386,13 @@ Tests.Walk Tests.Readers.LaTeX Tests.Readers.Markdown+ Tests.Readers.Org Tests.Readers.RST Tests.Writers.Native Tests.Writers.ConTeXt Tests.Writers.HTML Tests.Writers.Markdown+ Tests.Writers.AsciiDoc Tests.Writers.LaTeX Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind Default-Language: Haskell98
pandoc.hs view
@@ -47,8 +47,9 @@ import System.FilePath import System.Console.GetOpt import Data.Char ( toLower )-import Data.List ( intercalate, isPrefixOf, sort )-import System.Directory ( getAppUserDataDirectory, findExecutable )+import Data.List ( intercalate, isPrefixOf, isSuffixOf, sort )+import System.Directory ( getAppUserDataDirectory, findExecutable,+ doesFileExist ) import System.IO ( stdout, stderr ) import System.IO.Error ( isDoesNotExistError ) import qualified Control.Exception as E@@ -97,8 +98,23 @@ externalFilter :: FilePath -> [String] -> Pandoc -> IO Pandoc externalFilter f args' d = do+ mbexe <- findExecutable f+ (f', args'') <- case mbexe of+ Just x -> return (x, args')+ Nothing -> do+ exists <- doesFileExist f+ if exists+ then return $+ case map toLower $ takeExtension f of+ ".py" -> ("python", f:args')+ ".hs" -> ("runhaskell", f:args')+ ".pl" -> ("perl", f:args')+ ".rb" -> ("ruby", f:args')+ ".php" -> ("php", f:args')+ _ -> (f, args')+ else err 85 $ "Filter " ++ f ++ " not found" (exitcode, outbs, errbs) <- E.handle filterException $- pipeProcess Nothing f args' $ encode d+ pipeProcess Nothing f' args'' $ encode d when (not $ B.null errbs) $ B.hPutStr stderr errbs case exitcode of ExitSuccess -> return $ either error id $ eitherDecode' outbs@@ -162,6 +178,7 @@ , optAscii :: Bool -- ^ Use ascii characters only in html , optTeXLigatures :: Bool -- ^ Use TeX ligatures for quotes/dashes , optDefaultImageExtension :: String -- ^ Default image extension+ , optTrace :: Bool -- ^ Print debug information } -- | Defaults for command-line options.@@ -217,6 +234,7 @@ , optAscii = False , optTeXLigatures = True , optDefaultImageExtension = ""+ , optTrace = False } -- | A list of functions, each transforming the options data structure@@ -225,13 +243,13 @@ options = [ Option "fr" ["from","read"] (ReqArg- (\arg opt -> return opt { optReader = map toLower arg })+ (\arg opt -> return opt { optReader = arg }) "FORMAT") "" , Option "tw" ["to","write"] (ReqArg- (\arg opt -> return opt { optWriter = map toLower arg })+ (\arg opt -> return opt { optWriter = arg }) "FORMAT") "" @@ -758,6 +776,11 @@ (\opt -> return opt { optHTMLMathMethod = GladTeX })) "" -- "Use gladtex for HTML math" + , Option "" ["trace"]+ (NoArg+ (\opt -> return opt { optTrace = True }))+ "" -- "Turn on diagnostic tracing in readers."+ , Option "" ["dump-args"] (NoArg (\opt -> return opt { optDumpArgs = True }))@@ -827,6 +850,7 @@ ".latex" -> "latex" ".ltx" -> "latex" ".rst" -> "rst"+ ".org" -> "org" ".lhs" -> "markdown+lhs" ".db" -> "docbook" ".opml" -> "opml"@@ -952,6 +976,7 @@ , optAscii = ascii , optTeXLigatures = texLigatures , optDefaultImageExtension = defaultImageExtension+ , optTrace = trace } = opts when dumpArgs $@@ -978,36 +1003,37 @@ Just _ -> return mbDataDir -- assign reader and writer based on options and filenames- let readerName' = if null readerName- then let fallback = if any isURI sources- then "html"- else "markdown"- in defaultReaderName fallback sources- else readerName+ let readerName' = case map toLower readerName of+ [] -> defaultReaderName+ (if any isURI sources+ then "html"+ else "markdown") sources+ "html4" -> "html"+ x -> x - let writerName' = if null writerName- then defaultWriterName outputFile- else case writerName of- "epub2" -> "epub"- "html4" -> "html"- x -> x+ let writerName' = case map toLower writerName of+ [] -> defaultWriterName outputFile+ "epub2" -> "epub"+ "html4" -> "html"+ x -> x let pdfOutput = map toLower (takeExtension outputFile) == ".pdf" let laTeXOutput = "latex" `isPrefixOf` writerName' || "beamer" `isPrefixOf` writerName' - when pdfOutput $ do- -- make sure writer is latex or beamer- unless laTeXOutput $- err 47 $ "cannot produce pdf output with " ++ writerName' ++ " writer"- -- check for latex program- mbLatex <- findExecutable latexEngine- case mbLatex of- Nothing -> err 41 $- latexEngine ++ " not found. " ++- latexEngine ++ " is needed for pdf output."- Just _ -> return ()+ writer <- if ".lua" `isSuffixOf` writerName'+ -- note: use non-lowercased version writerName+ then return $ IOStringWriter $ writeCustom writerName+ else case getWriter writerName' of+ Left e -> err 9 $+ if writerName' == "pdf"+ then e ++ "\nTo create a pdf with pandoc, use " +++ "the latex or beamer writer and specify\n" +++ "an output file with .pdf extension " +++ "(pandoc -t latex -o filename.pdf)."+ else e+ Right w -> return w reader <- case getReader readerName' of Right r -> return r@@ -1074,6 +1100,7 @@ , readerIndentedCodeClasses = codeBlockClasses , readerApplyMacros = not laTeXOutput , readerDefaultImageExtension = defaultImageExtension+ , readerTrace = trace } let writerOptions = def { writerStandalone = standalone',@@ -1153,16 +1180,29 @@ writerFn "-" = UTF8.putStr writerFn f = UTF8.writeFile f - case getWriter writerName' of- Left e -> err 9 e- Right (IOStringWriter f) -> f writerOptions doc2 >>= writerFn outputFile- Right (IOByteStringWriter f) -> f writerOptions doc2 >>= writeBinary- Right (PureStringWriter f)+ case writer of+ IOStringWriter f -> f writerOptions doc2 >>= writerFn outputFile+ IOByteStringWriter f -> f writerOptions doc2 >>= writeBinary+ PureStringWriter f | pdfOutput -> do+ -- make sure writer is latex or beamer+ unless laTeXOutput $+ err 47 $ "cannot produce pdf output with " ++ writerName' +++ " writer"++ -- check for latex program+ mbLatex <- findExecutable latexEngine+ when (mbLatex == Nothing) $+ err 41 $ latexEngine ++ " not found. " +++ latexEngine ++ " is needed for pdf output."+ res <- makePDF latexEngine f writerOptions doc2 case res of Right pdf -> writeBinary pdf- Left err' -> err 43 $ UTF8.toStringLazy err'+ Left err' -> do+ B.hPutStr stderr $ err'+ B.hPut stderr $ B.pack [10]+ err 43 "Error producing PDF from TeX source" | otherwise -> selfcontain (f writerOptions doc2 ++ ['\n' | not standalone']) >>= writerFn outputFile . handleEntities
src/Text/Pandoc.hs view
@@ -65,6 +65,7 @@ , readMarkdown , readMediaWiki , readRST+ , readOrg , readLaTeX , readHtml , readTextile@@ -85,6 +86,7 @@ , writeTexinfo , writeHtml , writeHtmlString+ , writeICML , writeDocbook , writeOPML , writeOpenDocument@@ -115,6 +117,7 @@ import Text.Pandoc.Readers.Markdown import Text.Pandoc.Readers.MediaWiki import Text.Pandoc.Readers.RST+import Text.Pandoc.Readers.Org import Text.Pandoc.Readers.DocBook import Text.Pandoc.Readers.OPML import Text.Pandoc.Readers.LaTeX@@ -133,6 +136,7 @@ import Text.Pandoc.Writers.Docx import Text.Pandoc.Writers.EPUB import Text.Pandoc.Writers.FB2+import Text.Pandoc.Writers.ICML import Text.Pandoc.Writers.Docbook import Text.Pandoc.Writers.OPML import Text.Pandoc.Writers.OpenDocument@@ -148,7 +152,7 @@ import Text.Pandoc.Shared (safeRead, warn) import Data.Aeson import qualified Data.ByteString.Lazy as BL-import Data.List (intercalate, isSuffixOf)+import Data.List (intercalate) import Data.Version (showVersion) import Data.Set (Set) import qualified Data.Set as Set@@ -201,6 +205,7 @@ ,("mediawiki" , \o s -> return $ readMediaWiki o s) ,("docbook" , \o s -> return $ readDocBook o s) ,("opml" , \o s -> return $ readOPML o s)+ ,("org" , \o s -> return $ readOrg o s) ,("textile" , \o s -> return $ readTextile o s) -- TODO : textile+lhs ,("html" , \o s -> return $ readHtml o s) ,("latex" , \o s -> return $ readLaTeX o s)@@ -226,6 +231,7 @@ ,("html" , PureStringWriter writeHtmlString) ,("html5" , PureStringWriter $ \o -> writeHtmlString o{ writerHtml5 = True })+ ,("icml" , PureStringWriter writeICML) ,("s5" , PureStringWriter $ \o -> writeHtmlString o{ writerSlideVariant = S5Slides , writerTableOfContents = False })@@ -286,24 +292,21 @@ -- | Retrieve writer based on formatSpec (format+extensions). getWriter :: String -> Either String Writer-getWriter s =- case parseFormatSpec s of- Left e -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]- Right (writerName, setExts) ->- case lookup writerName writers of- Nothing- | ".lua" `isSuffixOf` s ->- Right $ IOStringWriter $ writeCustom s- | otherwise -> Left $ "Unknown writer: " ++ writerName- Just (PureStringWriter r) -> Right $ PureStringWriter $- \o -> r o{ writerExtensions = setExts $- getDefaultExtensions writerName }- Just (IOStringWriter r) -> Right $ IOStringWriter $- \o -> r o{ writerExtensions = setExts $- getDefaultExtensions writerName }- Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $- \o -> r o{ writerExtensions = setExts $- getDefaultExtensions writerName }+getWriter s+ = case parseFormatSpec s of+ Left e -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]+ Right (writerName, setExts) ->+ case lookup writerName writers of+ Nothing -> Left $ "Unknown writer: " ++ writerName+ Just (PureStringWriter r) -> Right $ PureStringWriter $+ \o -> r o{ writerExtensions = setExts $+ getDefaultExtensions writerName }+ Just (IOStringWriter r) -> Right $ IOStringWriter $+ \o -> r o{ writerExtensions = setExts $+ getDefaultExtensions writerName }+ Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $+ \o -> r o{ writerExtensions = setExts $+ getDefaultExtensions writerName } {-# DEPRECATED toJsonFilter "Use 'toJSONFilter' from 'Text.Pandoc.JSON' instead" #-} -- | Deprecated. Use @toJSONFilter@ from @Text.Pandoc.JSON@ instead.
src/Text/Pandoc/MIME.hs view
@@ -246,6 +246,7 @@ ,("lzx","application/x-lzx") ,("m3u","audio/mpegurl") ,("m4a","audio/mpeg")+ ,("m4v","video/x-m4v") ,("maker","application/x-maker") ,("man","application/x-troff-man") ,("mcif","chemical/x-mmcif")
src/Text/Pandoc/Options.hs view
@@ -210,6 +210,7 @@ , readerIndentedCodeClasses :: [String] -- ^ Default classes for -- indented code blocks , readerDefaultImageExtension :: String -- ^ Default extension for images+ , readerTrace :: Bool -- ^ Print debugging info } deriving (Show, Read) instance Default ReaderOptions@@ -225,6 +226,7 @@ , readerApplyMacros = True , readerIndentedCodeClasses = [] , readerDefaultImageExtension = ""+ , readerTrace = False } --
src/Text/Pandoc/PDF.hs view
@@ -51,6 +51,9 @@ import Text.Pandoc.MIME (extensionFromMimeType) import Text.Pandoc.Process (pipeProcess) import qualified Data.ByteString.Lazy as BL+#ifdef _WINDOWS+import Data.List (intercalate)+#endif withTempDir :: String -> (FilePath -> IO a) -> IO a withTempDir =@@ -60,6 +63,11 @@ withSystemTempDirectory #endif +#ifdef _WINDOWS+changePathSeparators :: FilePath -> FilePath+changePathSeparators = intercalate "/" . splitDirectories+#endif+ makePDF :: String -- ^ pdf creator (pdflatex, lualatex, xelatex) -> (WriterOptions -> Pandoc -> String) -- ^ writer -> WriterOptions -- ^ options@@ -108,7 +116,6 @@ then 3 -- to get page numbers else 2 -- 1 run won't give you PDF bookmarks (exit, log', mbPdf) <- runTeXProgram program numruns tmpDir source- let msg = "Error producing PDF from TeX source.\n" case (exit, mbPdf) of (ExitFailure _, _) -> do let logmsg = extractMsg log'@@ -117,8 +124,8 @@ x | "! Package inputenc Error" `BC.isPrefixOf` x -> "\nTry running pandoc with --latex-engine=xelatex." _ -> ""- return $ Left $ msg <> logmsg <> extramsg- (ExitSuccess, Nothing) -> return $ Left msg+ return $ Left $ logmsg <> extramsg+ (ExitSuccess, Nothing) -> return $ Left "" (ExitSuccess, Just pdf) -> return $ Right pdf (<>) :: ByteString -> ByteString -> ByteString@@ -146,10 +153,19 @@ let file = tmpDir </> "input.tex" exists <- doesFileExist file unless exists $ UTF8.writeFile file source+#ifdef _WINDOWS+ -- note: we want / even on Windows, for TexLive+ let tmpDir' = changePathSeparators tmpDir+ let file' = changePathSeparators file+#else+ let tmpDir' = tmpDir+ let file' = file+#endif let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",- "-output-directory", tmpDir, file]+ "-output-directory", tmpDir', file'] env' <- getEnvironment- let texinputs = maybe (tmpDir ++ ":") ((tmpDir ++ ":") ++)+ let sep = searchPathSeparator:[]+ let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++) $ lookup "TEXINPUTS" env' let env'' = ("TEXINPUTS", texinputs) : [(k,v) | (k,v) <- env', k /= "TEXINPUTS"]@@ -160,7 +176,10 @@ let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir pdfExists <- doesFileExist pdfFile pdf <- if pdfExists- then Just `fmap` B.readFile pdfFile+ -- We read PDF as a strict bytestring to make sure that the+ -- temp directory is removed on Windows.+ -- See https://github.com/jgm/pandoc/issues/1192.+ then (Just . B.fromChunks . (:[])) `fmap` BS.readFile pdfFile else return Nothing return (exit, out <> err, pdf)
src/Text/Pandoc/Parsing.hs view
@@ -64,13 +64,13 @@ gridTableWith, readWith, testStringWith,- getOption, guardEnabled, guardDisabled, ParserState (..), HasReaderOptions (..), HasHeaderMap (..), HasIdentifierList (..),+ HasMacros (..), defaultParserState, HeaderType (..), ParserContext (..),@@ -174,13 +174,13 @@ import Data.Default import qualified Data.Set as Set import Control.Monad.Reader-import Control.Applicative ((*>), (<*), (<$), liftA2)+import Control.Applicative ((*>), (<*), (<$), liftA2, Applicative) import Data.Monoid import Data.Maybe (catMaybes) type Parser t s = Parsec t s -newtype F a = F { unF :: Reader ParserState a } deriving (Monad, Functor)+newtype F a = F { unF :: Reader ParserState a } deriving (Monad, Applicative, Functor) runF :: F a -> ParserState -> a runF = runReader . unF@@ -504,7 +504,7 @@ -- | Applies a parser and returns the raw string that was parsed, -- along with the value produced by the parser.-withRaw :: Parser [Char] st a -> Parser [Char] st (a, [Char])+withRaw :: Monad m => ParsecT [Char] st m a -> ParsecT [Char] st m (a, [Char]) withRaw parser = do pos1 <- getPosition inp <- getInput@@ -853,6 +853,11 @@ 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+ -- 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).+ stateCaption :: Maybe Inlines, -- ^ Caption in current environment stateWarnings :: [String] -- ^ Warnings generated by the parser } @@ -865,34 +870,40 @@ deleteMeta field st = st{ stateMeta = deleteMeta field $ stateMeta st } -class Monad m => HasReaderOptions m where- askReaderOption :: (ReaderOptions -> b) -> m b--class Monad m => HasHeaderMap m where- getHeaderMap :: m (M.Map Inlines String)- putHeaderMap :: M.Map Inlines String -> m ()- modifyHeaderMap :: (M.Map Inlines String -> M.Map Inlines String) -> m ()+class HasReaderOptions st where+ extractReaderOptions :: st -> ReaderOptions+ getOption :: (ReaderOptions -> b) -> Parser s st b -- default- modifyHeaderMap f = getHeaderMap >>= putHeaderMap . f+ getOption f = (f . extractReaderOptions) `fmap` getState -class Monad m => HasIdentifierList m where- getIdentifierList :: m [String]- putIdentifierList :: [String] -> m ()- modifyIdentifierList :: ([String] -> [String]) -> m ()- -- default- modifyIdentifierList f = getIdentifierList >>= putIdentifierList . f+instance HasReaderOptions ParserState where+ extractReaderOptions = stateOptions -instance HasReaderOptions (Parser s ParserState) where- askReaderOption = getOption+class HasHeaderMap st where+ extractHeaderMap :: st -> M.Map Inlines String+ updateHeaderMap :: (M.Map Inlines String -> M.Map Inlines String) ->+ st -> st -instance HasHeaderMap (Parser s ParserState) where- getHeaderMap = fmap stateHeaders getState- putHeaderMap hm = updateState $ \st -> st{ stateHeaders = hm }+instance HasHeaderMap ParserState where+ extractHeaderMap = stateHeaders+ updateHeaderMap f st = st{ stateHeaders = f $ stateHeaders st } -instance HasIdentifierList (Parser s ParserState) where- getIdentifierList = fmap stateIdentifiers getState- putIdentifierList l = updateState $ \st -> st{ stateIdentifiers = l }+class HasIdentifierList st where+ extractIdentifierList :: st -> [String]+ updateIdentifierList :: ([String] -> [String]) -> st -> st +instance HasIdentifierList ParserState where+ extractIdentifierList = stateIdentifiers+ updateIdentifierList f st = st{ stateIdentifiers = f $ stateIdentifiers st }++class HasMacros st where+ extractMacros :: st -> [Macro]+ updateMacros :: ([Macro] -> [Macro]) -> st -> st++instance HasMacros ParserState where+ extractMacros = stateMacros+ updateMacros f st = st{ stateMacros = f $ stateMacros st }+ defaultParserState :: ParserState defaultParserState = ParserState { stateOptions = def,@@ -915,17 +926,16 @@ stateHasChapters = False, stateMacros = [], stateRstDefaultRole = "title-reference",+ stateRstCustomRoles = M.empty,+ stateCaption = Nothing, stateWarnings = []} -getOption :: (ReaderOptions -> a) -> Parser s ParserState a-getOption f = (f . stateOptions) `fmap` getState- -- | Succeed only if the extension is enabled.-guardEnabled :: Extension -> Parser s ParserState ()+guardEnabled :: HasReaderOptions st => Extension -> Parser s st () guardEnabled ext = getOption readerExtensions >>= guard . Set.member ext -- | Succeed only if the extension is disabled.-guardDisabled :: Extension -> Parser s ParserState ()+guardDisabled :: HasReaderOptions st => Extension -> Parser s st () guardDisabled ext = getOption readerExtensions >>= guard . not . Set.member ext data HeaderType@@ -962,11 +972,11 @@ -- and the auto_identifers extension is set, generate a new -- unique identifier, and update the list of identifiers -- in state.-registerHeader :: (HasReaderOptions m, HasHeaderMap m, HasIdentifierList m)- => Attr -> Inlines -> m Attr+registerHeader :: (HasReaderOptions st, HasHeaderMap st, HasIdentifierList st)+ => Attr -> Inlines -> Parser s st Attr registerHeader (ident,classes,kvs) header' = do- ids <- getIdentifierList- exts <- askReaderOption readerExtensions+ ids <- extractIdentifierList `fmap` getState+ exts <- getOption readerExtensions let insert' = M.insertWith (\_new old -> old) if null ident && Ext_auto_identifiers `Set.member` exts then do@@ -974,30 +984,30 @@ let id'' = if Ext_ascii_identifiers `Set.member` exts then catMaybes $ map toAsciiChar id' else id'- putIdentifierList $ if id' == id''- then id' : ids- else id' : id'' : ids- modifyHeaderMap $ insert' header' id'+ updateState $ updateIdentifierList $+ if id' == id'' then (id' :) else ([id', id''] ++)+ updateState $ updateHeaderMap $ insert' header' id' return (id'',classes,kvs) else do- unless (null ident) $ modifyHeaderMap $ insert' header' ident+ unless (null ident) $+ updateState $ updateHeaderMap $ insert' header' ident return (ident,classes,kvs) -- | Fail unless we're in "smart typography" mode.-failUnlessSmart :: Parser [tok] ParserState ()+failUnlessSmart :: HasReaderOptions st => Parser s st () failUnlessSmart = getOption readerSmart >>= guard -smartPunctuation :: Parser [Char] ParserState Inline- -> Parser [Char] ParserState Inline+smartPunctuation :: Parser [Char] ParserState Inlines+ -> Parser [Char] ParserState Inlines smartPunctuation inlineParser = do failUnlessSmart choice [ quoted inlineParser, apostrophe, dash, ellipses ] -apostrophe :: Parser [Char] ParserState Inline-apostrophe = (char '\'' <|> char '\8217') >> return (Str "\x2019")+apostrophe :: Parser [Char] ParserState Inlines+apostrophe = (char '\'' <|> char '\8217') >> return (B.str "\x2019") -quoted :: Parser [Char] ParserState Inline- -> Parser [Char] ParserState Inline+quoted :: Parser [Char] ParserState Inlines+ -> Parser [Char] ParserState Inlines quoted inlineParser = doubleQuoted inlineParser <|> singleQuoted inlineParser withQuoteContext :: QuoteContext@@ -1012,20 +1022,19 @@ setState newState { stateQuoteContext = oldQuoteContext } return result -singleQuoted :: Parser [Char] ParserState Inline- -> Parser [Char] ParserState Inline+singleQuoted :: Parser [Char] ParserState Inlines+ -> Parser [Char] ParserState Inlines singleQuoted inlineParser = try $ do singleQuoteStart withQuoteContext InSingleQuote $ many1Till inlineParser singleQuoteEnd >>=- return . Quoted SingleQuote . normalizeSpaces+ return . B.singleQuoted . mconcat -doubleQuoted :: Parser [Char] ParserState Inline- -> Parser [Char] ParserState Inline+doubleQuoted :: Parser [Char] ParserState Inlines+ -> Parser [Char] ParserState Inlines doubleQuoted inlineParser = try $ do doubleQuoteStart- withQuoteContext InDoubleQuote $ do- contents <- manyTill inlineParser doubleQuoteEnd- return . Quoted DoubleQuote . normalizeSpaces $ contents+ withQuoteContext InDoubleQuote $ manyTill inlineParser doubleQuoteEnd >>=+ return . B.doubleQuoted . mconcat failIfInQuoteContext :: QuoteContext -> Parser [tok] ParserState () failIfInQuoteContext context = do@@ -1069,17 +1078,17 @@ charOrRef "\"\8221\148" return () -ellipses :: Parser [Char] st Inline+ellipses :: Parser [Char] st Inlines ellipses = do try (charOrRef "\8230\133") <|> try (string "..." >> return '…')- return (Str "\8230")+ return (B.str "\8230") -dash :: Parser [Char] ParserState Inline+dash :: Parser [Char] ParserState Inlines dash = do oldDashes <- getOption readerOldDashes if oldDashes then emDashOld <|> enDashOld- else Str `fmap` (hyphenDash <|> emDash <|> enDash)+ else B.str `fmap` (hyphenDash <|> emDash <|> enDash) -- Two hyphens = en-dash, three = em-dash hyphenDash :: Parser [Char] st String@@ -1097,16 +1106,16 @@ try (charOrRef "\8212\151") return "\8211" -enDashOld :: Parser [Char] st Inline+enDashOld :: Parser [Char] st Inlines enDashOld = do try (charOrRef "\8211\150") <|> try (char '-' >> lookAhead (satisfy isDigit) >> return '–')- return (Str "\8211")+ return (B.str "\8211") -emDashOld :: Parser [Char] st Inline+emDashOld :: Parser [Char] st Inlines emDashOld = do try (charOrRef "\8212\151") <|> (try $ string "--" >> optional (char '-') >> return '-')- return (Str "\8212")+ return (B.str "\8212") -- This is used to prevent exponential blowups for things like: -- a**a*a**a*a**a*a**a*a**a*a**a*a**@@ -1125,7 +1134,7 @@ -- -- | Parse a \newcommand or \renewcommand macro definition.-macro :: Parser [Char] ParserState Blocks+macro :: (HasMacros st, HasReaderOptions st) => Parser [Char] st Blocks macro = do apply <- getOption readerApplyMacros inp <- getInput@@ -1135,7 +1144,7 @@ if apply then do updateState $ \st ->- st { stateMacros = ms ++ stateMacros st }+ updateMacros (ms ++) st return mempty else return $ rawBlock "latex" def' @@ -1144,7 +1153,7 @@ applyMacros' target = do apply <- getOption readerApplyMacros if apply- then do macros <- liftM stateMacros getState+ then do macros <- extractMacros `fmap` getState return $ applyMacros macros target else return target
src/Text/Pandoc/Pretty.hs view
@@ -81,8 +81,7 @@ import Control.Monad.State import Data.Char (isSpace) -data Monoid a =>- RenderState a = RenderState{+data RenderState a = RenderState{ output :: [a] -- ^ In reverse order , prefix :: String , usePrefix :: Bool
src/Text/Pandoc/Readers/DocBook.hs view
@@ -45,7 +45,7 @@ [ ] audioobject - A wrapper for audio data and its associated meta-information [x] author - The name of an individual author [ ] authorblurb - A short description or note about an author-[ ] authorgroup - Wrapper for author information when a document has+[x] authorgroup - Wrapper for author information when a document has multiple authors or collabarators [x] authorinitials - The initials or other short identifier for an author [o] beginpage - The location of a page break in a print version of the document@@ -341,7 +341,7 @@ [x] refsectioninfo - Meta-information for a refsection [ ] refsynopsisdiv - A syntactic synopsis of the subject of the reference page [ ] refsynopsisdivinfo - Meta-information for a RefSynopsisDiv-[ ] releaseinfo - Information about a particular release of a document+[x] releaseinfo - Information about a particular release of a document [ ] remark - A remark (or comment) intended for presentation in a draft manuscript [ ] replaceable - Content that may or must be replaced by the user@@ -499,24 +499,19 @@ data DBState = DBState{ dbSectionLevel :: Int , dbQuoteType :: QuoteType- , dbDocTitle :: Inlines- , dbDocAuthors :: [Inlines]- , dbDocDate :: Inlines+ , dbMeta :: Meta+ , dbAcceptsMeta :: Bool , dbBook :: Bool , dbFigureTitle :: Inlines } deriving Show readDocBook :: ReaderOptions -> String -> Pandoc-readDocBook _ inp = setTitle (dbDocTitle st')- $ setAuthors (dbDocAuthors st')- $ setDate (dbDocDate st')- $ doc $ mconcat bs+readDocBook _ inp = Pandoc (dbMeta st') (toList $ mconcat bs) where (bs, st') = runState (mapM parseBlock $ normalizeTree $ parseXML inp) DBState{ dbSectionLevel = 0 , dbQuoteType = DoubleQuote- , dbDocTitle = mempty- , dbDocAuthors = []- , dbDocDate = mempty+ , dbMeta = mempty+ , dbAcceptsMeta = False , dbBook = False , dbFigureTitle = mempty }@@ -560,6 +555,30 @@ named :: String -> Element -> Bool named s e = qName (elName e) == s +--++acceptingMetadata :: DB a -> DB a+acceptingMetadata p = do+ modify (\s -> s { dbAcceptsMeta = True } )+ res <- p+ modify (\s -> s { dbAcceptsMeta = False })+ return res++checkInMeta :: Monoid a => DB () -> DB a+checkInMeta p = do+ accepts <- dbAcceptsMeta <$> get+ when accepts p+ return mempty++++addMeta :: ToMetaValue a => String -> a -> DB ()+addMeta field val = modify (setMeta field val)++instance HasMeta DBState where+ setMeta field v s = s {dbMeta = setMeta field v (dbMeta s)}+ deleteMeta field s = s {dbMeta = deleteMeta field (dbMeta s)}+ isBlockElement :: Content -> Bool isBlockElement (Elem e) = qName (elName e) `elem` blocktags where blocktags = ["toc","index","para","formalpara","simpara",@@ -606,6 +625,7 @@ getBlocks :: Element -> DB Blocks getBlocks e = mconcat <$> (mapM parseBlock $ elContent e) + parseBlock :: Content -> DB Blocks parseBlock (Text (CData CDataRaw _ _)) = return mempty -- DOCTYPE parseBlock (Text (CData _ s _)) = if all isSpace s@@ -619,10 +639,10 @@ "para" -> parseMixed para (elContent e) "formalpara" -> do tit <- case filterChild (named "title") e of- Just t -> (<> str "." <> linebreak) <$> emph- <$> getInlines t+ Just t -> (para . strong . (<> str ".")) <$>+ getInlines t Nothing -> return mempty- addToStart tit <$> parseMixed para (elContent e)+ (tit <>) <$> parseMixed para (elContent e) "simpara" -> parseMixed para (elContent e) "ackno" -> parseMixed para (elContent e) "epigraph" -> parseBlockquote@@ -630,7 +650,11 @@ "attribution" -> return mempty "titleabbrev" -> return mempty "authorinitials" -> return mempty- "title" -> return mempty -- handled by getTitle or sect or figure+ "title" -> checkInMeta getTitle+ "author" -> checkInMeta getAuthor+ "authorgroup" -> checkInMeta getAuthorGroup+ "releaseinfo" -> checkInMeta (getInlines e >>= addMeta "release")+ "date" -> checkInMeta getDate "bibliography" -> sect 0 "bibliodiv" -> sect 1 "biblioentry" -> parseMixed para (elContent e)@@ -693,8 +717,8 @@ "figure" -> getFigure e "mediaobject" -> para <$> getImage e "caption" -> return mempty- "info" -> getTitle >> getAuthors >> getDate >> return mempty- "articleinfo" -> getTitle >> getAuthors >> getDate >> return mempty+ "info" -> metaBlock+ "articleinfo" -> metaBlock "sectioninfo" -> return mempty -- keywords & other metadata "refsectioninfo" -> return mempty -- keywords & other metadata "refsect1info" -> return mempty -- keywords & other metadata@@ -708,10 +732,10 @@ "chapterinfo" -> return mempty -- keywords & other metadata "glossaryinfo" -> return mempty -- keywords & other metadata "appendixinfo" -> return mempty -- keywords & other metadata- "bookinfo" -> getTitle >> getAuthors >> getDate >> return mempty+ "bookinfo" -> metaBlock "article" -> modify (\st -> st{ dbBook = False }) >>- getTitle >> getBlocks e- "book" -> modify (\st -> st{ dbBook = True }) >> getTitle >> getBlocks e+ getBlocks e+ "book" -> modify (\st -> st{ dbBook = True }) >> getBlocks e "table" -> parseTable "informaltable" -> parseTable "literallayout" -> codeBlockWithLang@@ -757,24 +781,19 @@ terms' <- mapM getInlines terms items' <- mapM getBlocks items return (mconcat $ intersperse (str "; ") terms', items')- getTitle = case filterChild (named "title") e of- Just t -> do- tit <- getInlines t- subtit <- case filterChild (named "subtitle") e of- Just s -> (text ": " <>) <$>- getInlines s- Nothing -> return mempty- modify $ \st -> st{dbDocTitle = tit <> subtit}- Nothing -> return ()- getAuthors = do- auths <- mapM getInlines- $ filterChildren (named "author") e- modify $ \st -> st{dbDocAuthors = auths}- getDate = case filterChild (named "date") e of- Just t -> do- dat <- getInlines t- modify $ \st -> st{dbDocDate = dat}- Nothing -> return ()+ getTitle = do+ tit <- getInlines e+ subtit <- case filterChild (named "subtitle") e of+ Just s -> (text ": " <>) <$>+ getInlines s+ Nothing -> return mempty+ addMeta "title" (tit <> subtit)++ getAuthor = (:[]) <$> getInlines e >>= addMeta "author"+ getAuthorGroup = do+ let terms = filterChildren (named "author") e+ mapM getInlines terms >>= addMeta "author"+ getDate = getInlines e >>= addMeta "date" parseTable = do let isCaption x = named "title" x || named "caption" x caption <- case filterChild isCaption e of@@ -836,6 +855,7 @@ b <- getBlocks e modify $ \st -> st{ dbSectionLevel = n - 1 } return $ header n' headerText <> b+ metaBlock = acceptingMetadata (getBlocks e) >> return mempty getInlines :: Element -> DB Inlines getInlines e' = (trimInlines . mconcat) <$> (mapM parseInline $ elContent e')@@ -899,6 +919,7 @@ _ -> emph <$> innerInlines "footnote" -> (note . mconcat) <$> (mapM parseBlock $ elContent e) "title" -> return mempty+ "affiliation" -> return mempty _ -> innerInlines where innerInlines = (trimInlines . mconcat) <$> (mapM parseInline $ elContent e)
src/Text/Pandoc/Readers/HTML.hs view
@@ -40,6 +40,7 @@ import Text.HTML.TagSoup.Match import Text.Pandoc.Definition import qualified Text.Pandoc.Builder as B+import Text.Pandoc.Builder (Blocks, Inlines, trimInlines) import Text.Pandoc.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing@@ -48,6 +49,8 @@ import Data.Char ( isDigit ) import Control.Monad ( liftM, guard, when, mzero ) import Control.Applicative ( (<$>), (<$), (<*) )+import Data.Monoid+import Data.Sequence (ViewL(..), ViewR(..), viewr, viewl) isSpace :: Char -> Bool isSpace ' ' = True@@ -66,30 +69,30 @@ where tags = canonicalizeTags $ parseTagsOptions parseOptions{ optTagPosition = True } inp parseDoc = do- blocks <- (fixPlains False . concat) <$> manyTill block eof+ blocks <- (fixPlains False) . mconcat <$> manyTill block eof meta <- stateMeta <$> getState- return $ Pandoc meta blocks+ return $ Pandoc meta (B.toList blocks) type TagParser = Parser [Tag String] ParserState -pBody :: TagParser [Block]+pBody :: TagParser Blocks pBody = pInTags "body" block -pHead :: TagParser [Block]-pHead = pInTags "head" $ pTitle <|> pMetaTag <|> ([] <$ pAnyTag)- where pTitle = pInTags "title" inline >>= setTitle . normalizeSpaces- setTitle t = [] <$ (updateState $ B.setMeta "title" (B.fromList t))+pHead :: TagParser Blocks+pHead = pInTags "head" $ pTitle <|> pMetaTag <|> (mempty <$ pAnyTag)+ where pTitle = pInTags "title" inline >>= setTitle . trimInlines+ setTitle t = mempty <$ (updateState $ B.setMeta "title" t) pMetaTag = do mt <- pSatisfy (~== TagOpen "meta" []) let name = fromAttrib "name" mt if null name- then return []+ then return mempty else do let content = fromAttrib "content" mt updateState $ B.setMeta name (B.text content)- return []+ return mempty -block :: TagParser [Block]+block :: TagParser Blocks block = choice [ pPara , pHeader@@ -105,10 +108,10 @@ , pRawHtmlBlock ] -pList :: TagParser [Block]+pList :: TagParser Blocks pList = pBulletList <|> pOrderedList <|> pDefinitionList -pBulletList :: TagParser [Block]+pBulletList :: TagParser Blocks pBulletList = try $ do pSatisfy (~== TagOpen "ul" []) let nonItem = pSatisfy (\t ->@@ -118,9 +121,9 @@ -- treat it as a list item, though it's not valid xhtml... skipMany nonItem items <- manyTill (pInTags "li" block >>~ skipMany nonItem) (pCloses "ul")- return [BulletList $ map (fixPlains True) items]+ return $ B.bulletList $ map (fixPlains True) items -pOrderedList :: TagParser [Block]+pOrderedList :: TagParser Blocks pOrderedList = try $ do TagOpen _ attribs <- pSatisfy (~== TagOpen "ol" []) let (start, style) = (sta', sty')@@ -146,27 +149,27 @@ -- treat it as a list item, though it's not valid xhtml... skipMany nonItem items <- manyTill (pInTags "li" block >>~ skipMany nonItem) (pCloses "ol")- return [OrderedList (start, style, DefaultDelim) $ map (fixPlains True) items]+ return $ B.orderedListWith (start, style, DefaultDelim) $ map (fixPlains True) items -pDefinitionList :: TagParser [Block]+pDefinitionList :: TagParser Blocks pDefinitionList = try $ do pSatisfy (~== TagOpen "dl" []) items <- manyTill pDefListItem (pCloses "dl")- return [DefinitionList items]+ return $ B.definitionList items -pDefListItem :: TagParser ([Inline],[[Block]])+pDefListItem :: TagParser (Inlines, [Blocks]) pDefListItem = try $ do let nonItem = pSatisfy (\t -> not (t ~== TagOpen "dt" []) && not (t ~== TagOpen "dd" []) && not (t ~== TagClose "dl")) terms <- many1 (try $ skipMany nonItem >> pInTags "dt" inline) defs <- many1 (try $ skipMany nonItem >> pInTags "dd" block) skipMany nonItem- let term = intercalate [LineBreak] terms+ let term = foldl1 (\x y -> x <> B.linebreak <> y) terms return (term, map (fixPlains True) defs) -fixPlains :: Bool -> [Block] -> [Block]-fixPlains inList bs = if any isParaish bs- then map plainToPara bs+fixPlains :: Bool -> Blocks -> Blocks+fixPlains inList bs = if any isParaish bs'+ then B.fromList $ map plainToPara bs' else bs where isParaish (Para _) = True isParaish (CodeBlock _ _) = True@@ -178,6 +181,7 @@ isParaish _ = False plainToPara (Plain xs) = Para xs plainToPara x = x+ bs' = B.toList bs pRawTag :: TagParser String pRawTag = do@@ -187,20 +191,20 @@ then return [] else return $ renderTags' [tag] -pDiv :: TagParser [Block]+pDiv :: TagParser Blocks pDiv = try $ do getOption readerParseRaw >>= guard TagOpen _ attr <- lookAhead $ pSatisfy $ tagOpen (=="div") (const True) contents <- pInTags "div" block- return [Div (mkAttr attr) contents]+ return $ B.divWith (mkAttr attr) contents -pRawHtmlBlock :: TagParser [Block]+pRawHtmlBlock :: TagParser Blocks pRawHtmlBlock = do raw <- pHtmlBlock "script" <|> pHtmlBlock "style" <|> pRawTag parseRaw <- getOption readerParseRaw if parseRaw && not (null raw)- then return [RawBlock (Format "html") raw]- else return []+ then return $ B.rawBlock "html" raw+ else return mempty pHtmlBlock :: String -> TagParser String pHtmlBlock t = try $ do@@ -208,35 +212,34 @@ contents <- manyTill pAnyTag (pSatisfy (~== TagClose t)) return $ renderTags' $ [open] ++ contents ++ [TagClose t] -pHeader :: TagParser [Block]+pHeader :: TagParser Blocks pHeader = try $ do TagOpen tagtype attr <- pSatisfy $ tagOpen (`elem` ["h1","h2","h3","h4","h5","h6"]) (const True) let bodyTitle = TagOpen tagtype attr ~== TagOpen "h1" [("class","title")] let level = read (drop 1 tagtype)- contents <- liftM concat $ manyTill inline (pCloses tagtype <|> eof)+ contents <- trimInlines . mconcat <$> manyTill inline (pCloses tagtype <|> eof) let ident = fromMaybe "" $ lookup "id" attr let classes = maybe [] words $ lookup "class" attr let keyvals = [(k,v) | (k,v) <- attr, k /= "class", k /= "id"] return $ if bodyTitle- then [] -- skip a representation of the title in the body- else [Header level (ident, classes, keyvals) $- normalizeSpaces contents]+ then mempty -- skip a representation of the title in the body+ else B.headerWith (ident, classes, keyvals) level contents -pHrule :: TagParser [Block]+pHrule :: TagParser Blocks pHrule = do pSelfClosing (=="hr") (const True)- return [HorizontalRule]+ return B.horizontalRule -pTable :: TagParser [Block]+pTable :: TagParser Blocks pTable = try $ do TagOpen _ _ <- pSatisfy (~== TagOpen "table" []) skipMany pBlank- caption <- option [] $ pInTags "caption" inline >>~ skipMany pBlank+ caption <- option mempty $ pInTags "caption" inline >>~ skipMany pBlank -- TODO actually read these and take width information from them widths' <- pColgroup <|> many pCol- head' <- option [] $ pOptInTag "thead" $ pInTags "tr" (pCell "th")+ head' <- option mempty $ pOptInTag "thead" $ pInTags "tr" (pCell "th") skipMany pBlank rows <- pOptInTag "tbody" $ many1 $ try $ skipMany pBlank >> pInTags "tr" (pCell "td")@@ -245,19 +248,21 @@ let isSinglePlain [] = True isSinglePlain [Plain _] = True isSinglePlain _ = False- let isSimple = all isSinglePlain $ concat (head':rows)- let cols = length $ if null head'- then head rows- else head'+ let lHead = B.toList head'+ let lRows = map B.toList rows+ let isSimple = all isSinglePlain (lHead:lRows)+ let cols = length $ if null lHead+ then head lRows+ else lHead -- fail if there are colspans or rowspans- guard $ all (\r -> length r == cols) rows+ guard $ all (\r -> length r == cols) lRows let aligns = replicate cols AlignLeft let widths = if null widths' then if isSimple then replicate cols 0 else replicate cols (1.0 / fromIntegral cols) else widths'- return [Table caption aligns widths head' rows]+ return $ B.table caption (zip aligns widths) [head'] [rows] pCol :: TagParser Double pCol = try $ do@@ -275,31 +280,31 @@ skipMany pBlank manyTill pCol (pCloses "colgroup" <|> eof) <* skipMany pBlank -pCell :: String -> TagParser [TableCell]+pCell :: String -> TagParser Blocks pCell celltype = try $ do skipMany pBlank res <- pInTags celltype block skipMany pBlank- return [res]+ return res -pBlockQuote :: TagParser [Block]+pBlockQuote :: TagParser Blocks pBlockQuote = do contents <- pInTags "blockquote" block- return [BlockQuote $ fixPlains False contents]+ return $ B.blockQuote $ fixPlains False contents -pPlain :: TagParser [Block]+pPlain :: TagParser Blocks pPlain = do- contents <- liftM (normalizeSpaces . concat) $ many1 inline- if null contents- then return []- else return [Plain contents]+ contents <- trimInlines . mconcat <$> many1 inline+ if B.isNull contents+ then return mempty+ else return $ B.plain contents -pPara :: TagParser [Block]+pPara :: TagParser Blocks pPara = do- contents <- pInTags "p" inline- return [Para $ normalizeSpaces contents]+ contents <- trimInlines <$> pInTags "p" inline+ return $ B.para contents -pCodeBlock :: TagParser [Block]+pCodeBlock :: TagParser Blocks pCodeBlock = try $ do TagOpen _ attr <- pSatisfy (~== TagOpen "pre" []) contents <- manyTill pAnyTag (pCloses "pre" <|> eof)@@ -312,9 +317,9 @@ let result = case reverse result' of '\n':_ -> init result' _ -> result'- return [CodeBlock (mkAttr attr) result]+ return $ B.codeBlockWith (mkAttr attr) result -inline :: TagParser [Inline]+inline :: TagParser Inlines inline = choice [ pTagText , pQ@@ -354,7 +359,7 @@ optional $ pSatisfy (tagClose f) return open -pQ :: TagParser [Inline]+pQ :: TagParser Inlines pQ = do quoteContext <- stateQuoteContext `fmap` getState let quoteType = case quoteContext of@@ -363,82 +368,92 @@ let innerQuoteContext = if quoteType == SingleQuote then InSingleQuote else InDoubleQuote- withQuoteContext innerQuoteContext $ pInlinesInTags "q" (Quoted quoteType)+ let constructor = case quoteType of+ SingleQuote -> B.singleQuoted + DoubleQuote -> B.doubleQuoted+ withQuoteContext innerQuoteContext $ + pInlinesInTags "q" constructor -pEmph :: TagParser [Inline]-pEmph = pInlinesInTags "em" Emph <|> pInlinesInTags "i" Emph+pEmph :: TagParser Inlines+pEmph = pInlinesInTags "em" B.emph <|> pInlinesInTags "i" B.emph -pStrong :: TagParser [Inline]-pStrong = pInlinesInTags "strong" Strong <|> pInlinesInTags "b" Strong+pStrong :: TagParser Inlines+pStrong = pInlinesInTags "strong" B.strong <|> pInlinesInTags "b" B.strong -pSuperscript :: TagParser [Inline]-pSuperscript = pInlinesInTags "sup" Superscript+pSuperscript :: TagParser Inlines+pSuperscript = pInlinesInTags "sup" B.superscript -pSubscript :: TagParser [Inline]-pSubscript = pInlinesInTags "sub" Subscript+pSubscript :: TagParser Inlines+pSubscript = pInlinesInTags "sub" B.subscript -pStrikeout :: TagParser [Inline]+pStrikeout :: TagParser Inlines pStrikeout = do- pInlinesInTags "s" Strikeout <|>- pInlinesInTags "strike" Strikeout <|>- pInlinesInTags "del" Strikeout <|>+ pInlinesInTags "s" B.strikeout <|>+ pInlinesInTags "strike" B.strikeout <|>+ pInlinesInTags "del" B.strikeout <|> try (do pSatisfy (~== TagOpen "span" [("class","strikeout")])- contents <- liftM concat $ manyTill inline (pCloses "span")- return [Strikeout contents])+ contents <- mconcat <$> manyTill inline (pCloses "span")+ return $ B.strikeout contents) -pLineBreak :: TagParser [Inline]+pLineBreak :: TagParser Inlines pLineBreak = do pSelfClosing (=="br") (const True)- return [LineBreak]+ return B.linebreak -pLink :: TagParser [Inline]+pLink :: TagParser Inlines pLink = try $ do tag <- pSatisfy (tagOpenLit "a" (isJust . lookup "href")) let url = fromAttrib "href" tag let title = fromAttrib "title" tag- lab <- liftM concat $ manyTill inline (pCloses "a")- return [Link (normalizeSpaces lab) (escapeURI url, title)]+ lab <- trimInlines . mconcat <$> manyTill inline (pCloses "a")+ return $ B.link (escapeURI url) title lab -pImage :: TagParser [Inline]+pImage :: TagParser Inlines pImage = do tag <- pSelfClosing (=="img") (isJust . lookup "src") let url = fromAttrib "src" tag let title = fromAttrib "title" tag let alt = fromAttrib "alt" tag- return [Image (B.toList $ B.text alt) (escapeURI url, title)]+ return $ B.image (escapeURI url) title (B.text alt) -pCode :: TagParser [Inline]+pCode :: TagParser Inlines pCode = try $ do (TagOpen open attr) <- pSatisfy $ tagOpen (`elem` ["code","tt"]) (const True) result <- manyTill pAnyTag (pCloses open)- return [Code (mkAttr attr) $ intercalate " " $ lines $ innerText result]+ return $ B.codeWith (mkAttr attr) $ intercalate " " $ lines $ innerText result -pSpan :: TagParser [Inline]+pSpan :: TagParser Inlines pSpan = try $ do getOption readerParseRaw >>= guard TagOpen _ attr <- lookAhead $ pSatisfy $ tagOpen (=="span") (const True) contents <- pInTags "span" inline- return [Span (mkAttr attr) contents]+ return $ B.spanWith (mkAttr attr) contents -pRawHtmlInline :: TagParser [Inline]+pRawHtmlInline :: TagParser Inlines pRawHtmlInline = do result <- pSatisfy (tagComment (const True)) <|> pSatisfy isInlineTag parseRaw <- getOption readerParseRaw if parseRaw- then return [RawInline (Format "html") $ renderTags' [result]]- else return []+ then return $ B.rawInline "html" $ renderTags' [result]+ else return mempty -pInlinesInTags :: String -> ([Inline] -> Inline)- -> TagParser [Inline]+pInlinesInTags :: String -> (Inlines -> Inlines)+ -> TagParser Inlines pInlinesInTags tagtype f = do- contents <- pInTags tagtype inline- return [f $ normalizeSpaces contents]+ contents <- B.unMany <$> pInTags tagtype inline+ let left = case viewl contents of+ (Space :< _) -> B.space+ _ -> mempty+ let right = case viewr contents of+ (_ :> Space) -> B.space+ _ -> mempty+ return (left <> f (trimInlines . B.Many $ contents) <> right) -pInTags :: String -> TagParser [a]- -> TagParser [a]+pInTags :: (Monoid a) => String -> TagParser a+ -> TagParser a pInTags tagtype parser = try $ do pSatisfy (~== TagOpen tagtype [])- liftM concat $ manyTill parser (pCloses tagtype <|> eof)+ mconcat <$> manyTill parser (pCloses tagtype <|> eof) pOptInTag :: String -> TagParser a -> TagParser a@@ -454,43 +469,43 @@ pCloses tagtype = try $ do t <- lookAhead $ pSatisfy $ \tag -> isTagClose tag || isTagOpen tag case t of- (TagClose t') | t' == tagtype -> pAnyTag >> return ()+ (TagClose t') | t' == tagtype -> pAnyTag >> return () (TagOpen t' _) | t' `closes` tagtype -> return () (TagClose "ul") | tagtype == "li" -> return () (TagClose "ol") | tagtype == "li" -> return () (TagClose "dl") | tagtype == "li" -> return () _ -> mzero -pTagText :: TagParser [Inline]+pTagText :: TagParser Inlines pTagText = try $ do (TagText str) <- pSatisfy isTagText st <- getState case runParser (many pTagContents) st "text" str of Left _ -> fail $ "Could not parse `" ++ str ++ "'"- Right result -> return result+ Right result -> return $ mconcat result pBlank :: TagParser () pBlank = try $ do (TagText str) <- pSatisfy isTagText guard $ all isSpace str -pTagContents :: Parser [Char] ParserState Inline+pTagContents :: Parser [Char] ParserState Inlines pTagContents =- Math DisplayMath `fmap` mathDisplay- <|> Math InlineMath `fmap` mathInline+ B.displayMath <$> mathDisplay+ <|> B.math <$> mathInline <|> pStr <|> pSpace <|> smartPunctuation pTagContents <|> pSymbol <|> pBad -pStr :: Parser [Char] ParserState Inline+pStr :: Parser [Char] ParserState Inlines pStr = do result <- many1 $ satisfy $ \c -> not (isSpace c) && not (isSpecial c) && not (isBad c) pos <- getPosition updateState $ \s -> s{ stateLastStrPos = Just pos }- return $ Str result+ return $ B.str result isSpecial :: Char -> Bool isSpecial '"' = True@@ -504,13 +519,13 @@ isSpecial '\8221' = True isSpecial _ = False -pSymbol :: Parser [Char] ParserState Inline-pSymbol = satisfy isSpecial >>= return . Str . (:[])+pSymbol :: Parser [Char] ParserState Inlines+pSymbol = satisfy isSpecial >>= return . B.str . (:[]) isBad :: Char -> Bool isBad c = c >= '\128' && c <= '\159' -- not allowed in HTML -pBad :: Parser [Char] ParserState Inline+pBad :: Parser [Char] ParserState Inlines pBad = do c <- satisfy isBad let c' = case c of@@ -542,10 +557,10 @@ '\158' -> '\382' '\159' -> '\376' _ -> '?'- return $ Str [c']+ return $ B.str [c'] -pSpace :: Parser [Char] ParserState Inline-pSpace = many1 (satisfy isSpace) >> return Space+pSpace :: Parser [Char] ParserState Inlines+pSpace = many1 (satisfy isSpace) >> return B.space -- -- Constants@@ -595,15 +610,19 @@ blockTags = blockHtmlTags ++ blockDocBookTags isInlineTag :: Tag String -> Bool-isInlineTag t = tagOpen (`notElem` blockTags) (const True) t ||- tagClose (`notElem` blockTags) t ||+isInlineTag t = tagOpen isInlineTagName (const True) t ||+ tagClose isInlineTagName t || tagComment (const True) t+ where isInlineTagName x = x `notElem` blockTags isBlockTag :: Tag String -> Bool-isBlockTag t = tagOpen (`elem` blocktags) (const True) t ||- tagClose (`elem` blocktags) t ||+isBlockTag t = tagOpen isBlockTagName (const True) t ||+ tagClose isBlockTagName t || tagComment (const True) t- where blocktags = blockTags ++ eitherBlockOrInline+ where isBlockTagName ('?':_) = True+ isBlockTagName ('!':_) = True+ isBlockTagName x = x `elem` blockTags+ || x `elem` eitherBlockOrInline isTextTag :: Tag String -> Bool isTextTag = tagText (const True)@@ -612,7 +631,7 @@ isCommentTag = tagComment (const True) -- taken from HXT and extended-+-- See http://www.w3.org/TR/html5/syntax.html sec 8.1.2.4 optional tags closes :: String -> String -> Bool _ `closes` "body" = False _ `closes` "html" = False@@ -620,11 +639,18 @@ "li" `closes` "li" = True "th" `closes` t | t `elem` ["th","td"] = True "tr" `closes` t | t `elem` ["th","td","tr"] = True+"dd" `closes` t | t `elem` ["dt", "dd"] = True "dt" `closes` t | t `elem` ["dt","dd"] = True-"hr" `closes` "p" = True-"p" `closes` "p" = True+"rt" `closes` t | t `elem` ["rb", "rt", "rtc"] = True+"optgroup" `closes` "optgroup" = True+"optgroup" `closes` "option" = True+"option" `closes` "option" = True+-- http://www.w3.org/TR/html-markup/p.html+x `closes` "p" | x `elem` ["address", "article", "aside", "blockquote",+ "dir", "div", "dl", "fieldset", "footer", "form", "h1", "h2", "h3", "h4",+ "h5", "h6", "header", "hr", "menu", "nav", "ol", "p", "pre", "section",+ "table", "ul"] = True "meta" `closes` "meta" = True-"colgroup" `closes` "colgroup" = True "form" `closes` "form" = True "label" `closes` "label" = True "map" `closes` "map" = True@@ -678,4 +704,5 @@ where attribsId = fromMaybe "" $ lookup "id" attr attribsClasses = words $ fromMaybe "" $ lookup "class" attr attribsKV = filter (\(k,_) -> k /= "class" && k /= "id") attr+
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -40,8 +40,10 @@ import Text.Pandoc.Options import Text.Pandoc.Parsing hiding ((<|>), many, optional, space, mathDisplay, mathInline)+import Text.Parsec.Prim (ParsecT, runParserT) import qualified Text.Pandoc.UTF8 as UTF8 import Data.Char ( chr, ord )+import Control.Monad.Trans (lift) import Control.Monad import Text.Pandoc.Builder import Data.Char (isLetter, isAlphaNum)@@ -302,6 +304,9 @@ , ("item", skipopts *> loose_item) , ("documentclass", skipopts *> braced *> preamble) , ("centerline", (para . trimInlines) <$> (skipopts *> tok))+ , ("caption", tok >>= setCaption)+ , ("PandocStartInclude", startInclude)+ , ("PandocEndInclude", endInclude) ] ++ map ignoreBlocks -- these commands will be ignored unless --parse-raw is specified, -- in which case they will appear as raw latex blocks@@ -321,8 +326,17 @@ ] addMeta :: ToMetaValue a => String -> a -> LP ()-addMeta field val = updateState $ setMeta field val+addMeta field val = updateState $ \st ->+ st{ stateMeta = addMetaField field val $ stateMeta st } +setCaption :: Inlines -> LP Blocks+setCaption ils = do+ updateState $ \st -> st{ stateCaption = Just ils }+ return mempty++resetCaption :: LP ()+resetCaption = updateState $ \st -> st{ stateCaption = Nothing }+ authors :: LP () authors = try $ do char '{'@@ -332,7 +346,7 @@ -- skip e.g. \vspace{10pt} auths <- sepBy oneAuthor (controlSeq "and") char '}'- addMeta "authors" (map trimInlines auths)+ addMeta "author" (map trimInlines auths) section :: Attr -> Int -> LP Blocks section (ident, classes, kvs) lvl = do@@ -516,25 +530,21 @@ , ("citeauthor", (try (tok *> optional sp *> controlSeq "citetext") *> complexNatbibCitation AuthorInText) <|> citation "citeauthor" AuthorInText False)+ , ("nocite", mempty <$ (citation "nocite" NormalCitation False >>=+ addMeta "nocite")) ] ++ map ignoreInlines -- these commands will be ignored unless --parse-raw is specified, -- in which case they will appear as raw latex blocks:- [ "noindent", "index", "nocite" ]+ [ "noindent", "index" ] mkImage :: String -> LP Inlines mkImage src = do- -- try for a caption- (alt, tit) <- option (str "image", "") $ try $ do- spaces- controlSeq "caption"- optional (char '*')- ils <- grouped inline- return (ils, "fig:")+ let alt = str "image" case takeExtension src of "" -> do defaultExt <- getOption readerDefaultImageExtension- return $ image (addExtension src defaultExt) tit alt- _ -> return $ image src tit alt+ return $ image (addExtension src defaultExt) "" alt+ _ -> return $ image src "" alt inNote :: Inlines -> Inlines inNote ils =@@ -788,32 +798,108 @@ (withRaw (env name blocks) >>= applyMacros' . snd) else env name blocks +----++type IncludeParser = ParsecT [Char] [String] IO String+ -- | Replace "include" commands with file contents. handleIncludes :: String -> IO String-handleIncludes = handleIncludes' []+handleIncludes s = do+ res <- runParserT includeParser' [] "input" s+ case res of+ Right s' -> return s'+ Left e -> error $ show e --- parents parameter prevents infinite include loops-handleIncludes' :: [FilePath] -> String -> IO String-handleIncludes' _ [] = return []-handleIncludes' parents ('\\':'%':xs) =- ("\\%"++) `fmap` handleIncludes' parents xs-handleIncludes' parents ('%':xs) = handleIncludes' parents- $ drop 1 $ dropWhile (/='\n') xs-handleIncludes' parents ('\\':xs) =- case runParser include defaultParserState "input" ('\\':xs) of- Right (fs, rest) -> do yss <- mapM (\f -> if f `elem` parents- then "" <$ warn ("Include file loop in '"- ++ f ++ "'.")- else readTeXFile f >>=- handleIncludes' (f:parents)) fs- rest' <- handleIncludes' parents rest- return $ intercalate "\n" yss ++ rest'- _ -> case runParser (verbCmd <|> verbatimEnv) defaultParserState- "input" ('\\':xs) of- Right (r, rest) -> (r ++) `fmap` handleIncludes' parents rest- _ -> ('\\':) `fmap` handleIncludes' parents xs-handleIncludes' parents (x:xs) = (x:) `fmap` handleIncludes' parents xs+includeParser' :: IncludeParser+includeParser' =+ concat <$> many (comment' <|> escaped' <|> blob' <|> include'+ <|> startMarker' <|> endMarker'+ <|> verbCmd' <|> verbatimEnv' <|> backslash') +comment' :: IncludeParser+comment' = do+ char '%'+ xs <- manyTill anyChar newline+ return ('%':xs ++ "\n")++escaped' :: IncludeParser+escaped' = try $ string "\\%" <|> string "\\\\"++verbCmd' :: IncludeParser+verbCmd' = fmap snd <$>+ withRaw $ try $ do+ string "\\verb"+ c <- anyChar+ manyTill anyChar (char c)++verbatimEnv' :: IncludeParser+verbatimEnv' = fmap snd <$>+ withRaw $ try $ do+ string "\\begin"+ name <- braced'+ guard $ name `elem` ["verbatim", "Verbatim", "lstlisting",+ "minted", "alltt"]+ manyTill anyChar (try $ string $ "\\end{" ++ name ++ "}")++blob' :: IncludeParser+blob' = try $ many1 (noneOf "\\%")++backslash' :: IncludeParser+backslash' = string "\\"++braced' :: IncludeParser+braced' = try $ char '{' *> manyTill (satisfy (/='}')) (char '}')++include' :: IncludeParser+include' = do+ fs' <- try $ do+ char '\\'+ name <- try (string "include")+ <|> try (string "input")+ <|> string "usepackage"+ -- skip options+ skipMany $ try $ char '[' *> (manyTill anyChar (char ']'))+ fs <- (map trim . splitBy (==',')) <$> braced'+ return $ if name == "usepackage"+ then map (flip replaceExtension ".sty") fs+ else map (flip replaceExtension ".tex") fs+ pos <- getPosition+ containers <- getState+ let fn = case containers of+ (f':_) -> f'+ [] -> "input"+ -- now process each include file in order...+ rest <- getInput+ results' <- forM fs' (\f -> do+ when (f `elem` containers) $+ fail "Include file loop!"+ contents <- lift $ readTeXFile f+ return $ "\\PandocStartInclude{" ++ f ++ "}" +++ contents ++ "\\PandocEndInclude{" +++ fn ++ "}{" ++ show (sourceLine pos) ++ "}{"+ ++ show (sourceColumn pos) ++ "}")+ setInput $ concat results' ++ rest+ return ""++startMarker' :: IncludeParser+startMarker' = try $ do+ string "\\PandocStartInclude"+ fn <- braced'+ updateState (fn:)+ setPosition $ newPos fn 1 1+ return $ "\\PandocStartInclude{" ++ fn ++ "}"++endMarker' :: IncludeParser+endMarker' = try $ do+ string "\\PandocEndInclude"+ fn <- braced'+ ln <- braced'+ co <- braced'+ updateState tail+ setPosition $ newPos fn (fromMaybe 1 $ safeRead ln) (fromMaybe 1 $ safeRead co)+ return $ "\\PandocEndInclude{" ++ fn ++ "}{" ++ ln ++ "}{" +++ co ++ "}"+ readTeXFile :: FilePath -> IO String readTeXFile f = do texinputs <- E.catch (getEnv "TEXINPUTS") $ \(_ :: E.SomeException) ->@@ -827,27 +913,7 @@ E.catch (UTF8.readFile $ d </> f) $ \(_ :: E.SomeException) -> readFileFromDirs ds f -include :: LP ([FilePath], String)-include = do- name <- controlSeq "include"- <|> controlSeq "input"- <|> controlSeq "usepackage"- skipopts- fs <- (splitBy (==',')) <$> braced- rest <- getInput- let fs' = if name == "usepackage"- then map (flip replaceExtension ".sty") fs- else map (flip replaceExtension ".tex") fs- return (fs', rest)--verbCmd :: LP (String, String)-verbCmd = do- (_,r) <- withRaw $ do- controlSeq "verb"- c <- anyChar- manyTill anyChar (char c)- rest <- getInput- return (r, rest)+---- keyval :: LP (String, String) keyval = try $ do@@ -869,17 +935,6 @@ where strToCode (Str s) = Code nullAttr s strToCode x = x -verbatimEnv :: LP (String, String)-verbatimEnv = do- (_,r) <- withRaw $ do- controlSeq "begin"- name <- braced- guard $ name `elem` ["verbatim", "Verbatim", "lstlisting",- "minted", "alltt"]- verbEnv name- rest <- getInput- return (r,rest)- rawLaTeXBlock :: Parser [Char] ParserState String rawLaTeXBlock = snd <$> try (withRaw (environment <|> blockCommand)) @@ -888,12 +943,33 @@ raw <- (snd <$> withRaw inlineCommand) <|> (snd <$> withRaw blockCommand) RawInline "latex" <$> applyMacros' raw +addImageCaption :: Blocks -> LP Blocks+addImageCaption = walkM go+ where go (Image alt (src,tit)) = do+ mbcapt <- stateCaption <$> getState+ case mbcapt of+ Just ils -> return (Image (toList ils) (src, "fig:"))+ Nothing -> return (Image alt (src,tit))+ go x = return x++addTableCaption :: Blocks -> LP Blocks+addTableCaption = walkM go+ where go (Table c als ws hs rs) = do+ mbcapt <- stateCaption <$> getState+ case mbcapt of+ Just ils -> return (Table (toList ils) als ws hs rs)+ Nothing -> return (Table c als ws hs rs)+ go x = return x+ environments :: M.Map String (LP Blocks) environments = M.fromList [ ("document", env "document" blocks <* skipMany anyChar) , ("letter", env "letter" letter_contents)- , ("figure", env "figure" $ skipopts *> blocks)+ , ("figure", env "figure" $+ resetCaption *> skipopts *> blocks >>= addImageCaption) , ("center", env "center" blocks)+ , ("table", env "table" $+ resetCaption *> skipopts *> blocks >>= addTableCaption) , ("tabular", env "tabular" simpTable) , ("quote", blockQuote <$> env "quote" blocks) , ("quotation", blockQuote <$> env "quotation" blocks)@@ -1144,12 +1220,13 @@ parseAligns :: LP [Alignment] parseAligns = try $ do char '{'- let maybeBar = try $ spaces >> optional (char '|')+ let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ try (string "@{}") maybeBar let cAlign = AlignCenter <$ char 'c' let lAlign = AlignLeft <$ char 'l' let rAlign = AlignRight <$ char 'r'- let alignChar = optional sp *> (cAlign <|> lAlign <|> rAlign)+ let parAlign = AlignLeft <$ (char 'p' >> braced)+ let alignChar = cAlign <|> lAlign <|> rAlign <|> parAlign aligns' <- sepEndBy alignChar maybeBar spaces char '}'@@ -1190,3 +1267,16 @@ lookAhead $ controlSeq "end" -- make sure we're at end return $ table mempty (zip aligns (repeat 0)) header'' rows +startInclude :: LP Blocks+startInclude = do+ fn <- braced+ setPosition $ newPos fn 1 1+ return mempty++endInclude :: LP Blocks+endInclude = do+ fn <- braced+ ln <- braced+ co <- braced+ setPosition $ newPos fn (fromMaybe 1 $ safeRead ln) (fromMaybe 1 $ safeRead co)+ return mempty
src/Text/Pandoc/Readers/Markdown.hs view
@@ -33,6 +33,7 @@ import Data.List ( transpose, sortBy, findIndex, intersperse, intercalate ) import qualified Data.Map as M+import Data.Scientific (coefficient, base10Exponent) import Data.Ord ( comparing ) import Data.Char ( isAlphaNum, toLower ) import Data.Maybe@@ -60,6 +61,8 @@ import Text.HTML.TagSoup import Text.HTML.TagSoup.Match (tagOpen) import qualified Data.Set as Set+import Text.Printf (printf)+import Debug.Trace (trace) type MarkdownParser = Parser [Char] ParserState @@ -283,7 +286,11 @@ yamlToMeta :: ReaderOptions -> Yaml.Value -> MetaValue yamlToMeta opts (Yaml.String t) = toMetaValue opts t-yamlToMeta _ (Yaml.Number n) = MetaString $ show n+yamlToMeta _ (Yaml.Number n)+ -- avoid decimal points for numbers that don't need them:+ | base10Exponent n >= 0 = MetaString $ show+ $ coefficient n * (10 ^ base10Exponent n)+ | otherwise = MetaString $ show n yamlToMeta _ (Yaml.Bool b) = MetaBool b yamlToMeta opts (Yaml.Array xs) = B.toMetaValue $ map (yamlToMeta opts) $ V.toList xs@@ -342,10 +349,8 @@ char ':' skipSpaces >> optional newline >> skipSpaces >> notFollowedBy (char '[') let sourceURL = liftM unwords $ many $ try $ do- notFollowedBy' referenceTitle skipMany spaceChar- optional $ newline >> notFollowedBy blankline- skipMany spaceChar+ notFollowedBy' referenceTitle notFollowedBy' (() <$ reference) many1 $ notFollowedBy space >> litChar let betweenAngles = try $ char '<' >>@@ -354,7 +359,7 @@ tit <- option "" referenceTitle -- currently we just ignore MMD-style link/image attributes _kvs <- option [] $ guardEnabled Ext_link_attributes- >> many (spnl >> keyValAttr)+ >> many (try $ spnl >> keyValAttr) blanklines let target = (escapeURI $ trimr src, tit) st <- getState@@ -440,7 +445,10 @@ parseBlocks = mconcat <$> manyTill block eof block :: MarkdownParser (F Blocks)-block = choice [ mempty <$ blanklines+block = do+ tr <- getOption readerTrace+ pos <- getPosition+ res <- choice [ mempty <$ blanklines , codeBlockFenced , yamlMetaBlock , guardEnabled Ext_latex_macros *> (macro >>= return . return)@@ -465,6 +473,11 @@ , para , plain ] <?> "block"+ when tr $ do+ st <- getState+ trace (printf "line %d: %s" (sourceLine pos)+ (take 60 $ show $ B.toList $ runF res st)) (return ())+ return res -- -- header blocks@@ -733,6 +746,7 @@ many spaceChar listStart) notFollowedBy' $ htmlTag (~== TagClose "div")+ optional (() <$ indentSpaces) chunks <- manyTill ( many1 (satisfy $ \c -> c /= '\n' && c /= '<') <|> liftM snd (htmlTag isCommentTag)@@ -851,22 +865,6 @@ items <- fmap sequence $ many1 definitionListItem return $ B.definitionList <$> fmap compactify'DL items -compactify'DL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]-compactify'DL items =- let defs = concatMap snd items- defBlocks = reverse $ concatMap B.toList defs- isPara (Para _) = True- isPara _ = False- in case defBlocks of- (Para x:_) -> if not $ any isPara (drop 1 defBlocks)- then let (t,ds) = last items- lastDef = B.toList $ last ds- ds' = init ds ++- [B.fromList $ init lastDef ++ [Plain x]]- in init items ++ [(t, ds')]- else items- _ -> items- -- -- paragraph block --@@ -944,6 +942,8 @@ htmlBlocks <- many1 $ try $ do s <- rawVerbatimBlock <|> try ( do (t,raw) <- htmlTag isBlockTag+ guard $ t ~/= TagOpen "div" [] &&+ t ~/= TagClose "div" exts <- getOption readerExtensions -- if open tag, need markdown="1" if -- markdown_attributes extension is set@@ -1220,11 +1220,20 @@ gridTableFooter :: MarkdownParser [Char] gridTableFooter = blanklines +pipeBreak :: MarkdownParser [Alignment]+pipeBreak = try $ do+ nonindentSpaces+ openPipe <- (True <$ char '|') <|> return False+ first <- pipeTableHeaderPart+ rest <- many $ sepPipe *> pipeTableHeaderPart+ -- surrounding pipes needed for a one-column table:+ guard $ not (null rest && not openPipe)+ optional (char '|')+ blankline+ return (first:rest)+ pipeTable :: MarkdownParser ([Alignment], [Double], F [Blocks], F [[Blocks]]) pipeTable = try $ do- let pipeBreak = nonindentSpaces *> optional (char '|') *>- pipeTableHeaderPart `sepBy1` sepPipe <*- optional (char '|') <* blankline (heads,aligns) <- try ( pipeBreak >>= \als -> return (return $ replicate (length als) mempty, als)) <|> ( pipeTableRow >>= \row -> pipeBreak >>= \als ->@@ -1243,12 +1252,13 @@ pipeTableRow :: MarkdownParser (F [Blocks]) pipeTableRow = do nonindentSpaces- optional (char '|')+ openPipe <- (True <$ char '|') <|> return False let cell = mconcat <$> many (notFollowedBy (blankline <|> char '|') >> inline) first <- cell- sepPipe- rest <- cell `sepBy1` sepPipe+ rest <- many $ sepPipe *> cell+ -- surrounding pipes needed for a one-column table:+ guard $ not (null rest && not openPipe) optional (char '|') blankline let cells = sequence (first:rest)@@ -1374,7 +1384,7 @@ ltSign = do guardDisabled Ext_raw_html <|> guardDisabled Ext_markdown_in_html_blocks- <|> (notFollowedBy' rawHtmlBlocks >> return ())+ <|> (notFollowedBy' (htmlTag isBlockTag) >> return ()) char '<' return $ return $ B.str "<" @@ -1540,16 +1550,14 @@ endline = try $ do newline notFollowedBy blankline+ -- parse potential list-starts differently if in a list:+ st <- getState+ when (stateParserContext st == ListItemState) $ notFollowedBy 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- guardEnabled Ext_backtick_code_blocks >>+ guardDisabled Ext_backtick_code_blocks <|> notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))- -- parse potential list-starts differently if in a list:- st <- getState- when (stateParserContext st == ListItemState) $ do- notFollowedBy' bulletListStart- notFollowedBy' anyOrderedListStart (guardEnabled Ext_hard_line_breaks >> return (return B.linebreak)) <|> (guardEnabled Ext_ignore_line_breaks >> return mempty) <|> (return $ return B.space)@@ -1730,12 +1738,19 @@ divHtml :: MarkdownParser (F Blocks) divHtml = try $ do guardEnabled Ext_markdown_in_html_blocks- (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "div" [])- contents <- mconcat <$> manyTill block (htmlTag (~== TagClose "div"))- let ident = fromMaybe "" $ lookup "id" attrs- let classes = maybe [] words $ lookup "class" attrs- let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]- return $ B.divWith (ident, classes, keyvals) <$> contents+ (TagOpen _ attrs, rawtag) <- htmlTag (~== TagOpen "div" [])+ bls <- option "" (blankline >> option "" blanklines)+ contents <- mconcat <$>+ many (notFollowedBy' (htmlTag (~== TagClose "div")) >> block)+ closed <- option False (True <$ htmlTag (~== TagClose "div"))+ if closed+ then do+ let ident = fromMaybe "" $ lookup "id" attrs+ let classes = maybe [] words $ lookup "class" attrs+ let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]+ return $ B.divWith (ident, classes, keyvals) <$> contents+ else -- avoid backtracing+ return $ return (B.rawBlock "html" (rawtag <> bls)) <> contents rawHtmlInline :: MarkdownParser (F Inlines) rawHtmlInline = do@@ -1856,7 +1871,7 @@ smart = do getOption readerSmart >>= guard doubleQuoted <|> singleQuoted <|>- choice (map (return . B.singleton <$>) [apostrophe, dash, ellipses])+ choice (map (return <$>) [apostrophe, dash, ellipses]) singleQuoted :: MarkdownParser (F Inlines) singleQuoted = try $ do@@ -1875,4 +1890,3 @@ (withQuoteContext InDoubleQuote $ doubleQuoteEnd >> return (fmap B.doubleQuoted . trimInlinesF $ contents)) <|> (return $ return (B.str "\8220") <> contents)-
src/Text/Pandoc/Readers/MediaWiki.hs view
@@ -82,16 +82,16 @@ type MWParser = Parser [Char] MWState -instance HasReaderOptions MWParser where- askReaderOption f = (f . mwOptions) `fmap` getState+instance HasReaderOptions MWState where+ extractReaderOptions = mwOptions -instance HasHeaderMap MWParser where- getHeaderMap = fmap mwHeaderMap getState- putHeaderMap hm = updateState $ \st -> st{ mwHeaderMap = hm }+instance HasHeaderMap MWState where+ extractHeaderMap = mwHeaderMap+ updateHeaderMap f st = st{ mwHeaderMap = f $ mwHeaderMap st } -instance HasIdentifierList MWParser where- getIdentifierList = fmap mwIdentifierList getState- putIdentifierList l = updateState $ \st -> st{ mwIdentifierList = l }+instance HasIdentifierList MWState where+ extractIdentifierList = mwIdentifierList+ updateIdentifierList f st = st{ mwIdentifierList = f $ mwIdentifierList st } -- -- auxiliary functions@@ -227,6 +227,7 @@ let widths' = map (\w -> if w == 0 then defaultwidth else w) widths let cellspecs = zip (map fst cellspecs') widths' rows' <- many $ try $ rowsep *> (map snd <$> tableRow)+ optional blanklines tableEnd let cols = length hdr let (headers,rows) = if hasheader@@ -275,7 +276,7 @@ (trimInlines . mconcat) <$> many (notFollowedBy (cellsep <|> rowsep) *> inline) tableRow :: MWParser [((Alignment, Double), Blocks)]-tableRow = try $ many tableCell+tableRow = try $ skipMany htmlComment *> many tableCell tableCell :: MWParser ((Alignment, Double), Blocks) tableCell = try $ do@@ -438,7 +439,8 @@ skipMany spaceChar first <- concat <$> manyTill listChunk newline rest <- many- (try $ string extras *> (concat <$> manyTill listChunk newline))+ (try $ string extras *> lookAhead listStartChar *>+ (concat <$> manyTill listChunk newline)) contents <- parseFromString (many1 $ listItem' c) (unlines (first : rest)) case c of@@ -555,10 +557,14 @@ notFollowedBy' header <* notFollowedBy anyListStart) +imageIdentifiers :: [MWParser ()]+imageIdentifiers = [sym (identifier ++ ":") | identifier <- identifiers]+ where identifiers = ["File", "Image", "Archivo", "Datei", "Fichier"]+ image :: MWParser Inlines image = try $ do sym "[["- sym "File:" <|> sym "Image:"+ choice imageIdentifiers fname <- many1 (noneOf "|]") _ <- many (try $ char '|' *> imageOption) caption <- (B.str fname <$ sym "]]")
+ src/Text/Pandoc/Readers/Org.hs view
@@ -0,0 +1,1250 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-+Copyright (C) 2014 Albert Krewinkel <tarleb@moltkeplatz.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.Org+ Copyright : Copyright (C) 2014 Albert Krewinkel+ License : GNU GPL, version 2 or above++ Maintainer : Albert Krewinkel <tarleb@moltkeplatz.de>++Conversion of org-mode formatted plain text to 'Pandoc' document.+-}+module Text.Pandoc.Readers.Org ( readOrg ) where++import qualified Text.Pandoc.Builder as B+import Text.Pandoc.Builder ( Inlines, Blocks, HasMeta(..), (<>)+ , trimInlines )+import Text.Pandoc.Definition+import Text.Pandoc.Options+import qualified Text.Pandoc.Parsing as P+import Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF+ , newline, orderedListMarker+ , parseFromString+ , updateLastStrPos )+import Text.Pandoc.Shared (compactify', compactify'DL)++import Control.Applicative ( Applicative, pure+ , (<$>), (<$), (<*>), (<*), (*>), (<**>) )+import Control.Arrow (first)+import Control.Monad (foldM, guard, liftM, liftM2, mzero, when)+import Control.Monad.Reader (Reader, runReader, ask, asks)+import Data.Char (isAlphaNum, toLower)+import Data.Default+import Data.List (intersperse, isPrefixOf, isSuffixOf)+import qualified Data.Map as M+import Data.Maybe (listToMaybe, fromMaybe, isJust)+import Data.Monoid (Monoid, mconcat, mempty, mappend)+import Network.HTTP (urlEncode)++-- | Parse org-mode string and return a Pandoc document.+readOrg :: ReaderOptions -- ^ Reader options+ -> String -- ^ String to parse (assuming @'\n'@ line endings)+ -> Pandoc+readOrg opts s = readWith parseOrg def{ orgStateOptions = opts } (s ++ "\n\n")++type OrgParser = Parser [Char] OrgParserState++parseOrg :: OrgParser Pandoc+parseOrg = do+ blocks' <- parseBlocks+ st <- getState+ let meta = runF (orgStateMeta' st) st+ return $ Pandoc meta $ filter (/= Null) (B.toList $ runF blocks' st)++--+-- Parser State for Org+--++type OrgNoteRecord = (String, F Blocks)+type OrgNoteTable = [OrgNoteRecord]++type OrgBlockAttributes = M.Map String String++type OrgLinkFormatters = M.Map String (String -> String)++-- | Org-mode parser state+data OrgParserState = OrgParserState+ { orgStateOptions :: ReaderOptions+ , orgStateAnchorIds :: [String]+ , orgStateBlockAttributes :: OrgBlockAttributes+ , orgStateEmphasisCharStack :: [Char]+ , orgStateEmphasisNewlines :: Maybe Int+ , orgStateLastForbiddenCharPos :: Maybe SourcePos+ , orgStateLastPreCharPos :: Maybe SourcePos+ , orgStateLastStrPos :: Maybe SourcePos+ , orgStateLinkFormatters :: OrgLinkFormatters+ , orgStateMeta :: Meta+ , orgStateMeta' :: F Meta+ , orgStateNotes' :: OrgNoteTable+ }++instance HasReaderOptions OrgParserState where+ extractReaderOptions = orgStateOptions++instance HasMeta OrgParserState where+ setMeta field val st =+ st{ orgStateMeta = setMeta field val $ orgStateMeta st }+ deleteMeta field st =+ st{ orgStateMeta = deleteMeta field $ orgStateMeta st }++instance Default OrgParserState where+ def = defaultOrgParserState++defaultOrgParserState :: OrgParserState+defaultOrgParserState = OrgParserState+ { orgStateOptions = def+ , orgStateAnchorIds = []+ , orgStateBlockAttributes = M.empty+ , orgStateEmphasisCharStack = []+ , orgStateEmphasisNewlines = Nothing+ , orgStateLastForbiddenCharPos = Nothing+ , orgStateLastPreCharPos = Nothing+ , orgStateLastStrPos = Nothing+ , orgStateLinkFormatters = M.empty+ , orgStateMeta = nullMeta+ , orgStateMeta' = return nullMeta+ , orgStateNotes' = []+ }++recordAnchorId :: String -> OrgParser ()+recordAnchorId i = updateState $ \s ->+ s{ orgStateAnchorIds = i : (orgStateAnchorIds s) }++addBlockAttribute :: String -> String -> OrgParser ()+addBlockAttribute key val = updateState $ \s ->+ let attrs = orgStateBlockAttributes s+ in s{ orgStateBlockAttributes = M.insert key val attrs }++lookupBlockAttribute :: String -> OrgParser (Maybe String)+lookupBlockAttribute key =+ M.lookup key . orgStateBlockAttributes <$> getState++resetBlockAttributes :: OrgParser ()+resetBlockAttributes = updateState $ \s ->+ s{ orgStateBlockAttributes = orgStateBlockAttributes def }++updateLastStrPos :: OrgParser ()+updateLastStrPos = getPosition >>= \p ->+ updateState $ \s -> s{ orgStateLastStrPos = Just p }++updateLastForbiddenCharPos :: OrgParser ()+updateLastForbiddenCharPos = getPosition >>= \p ->+ updateState $ \s -> s{ orgStateLastForbiddenCharPos = Just p}++updateLastPreCharPos :: OrgParser ()+updateLastPreCharPos = getPosition >>= \p ->+ updateState $ \s -> s{ orgStateLastPreCharPos = Just p}++pushToInlineCharStack :: Char -> OrgParser ()+pushToInlineCharStack c = updateState $ \s ->+ s{ orgStateEmphasisCharStack = c:orgStateEmphasisCharStack s }++popInlineCharStack :: OrgParser ()+popInlineCharStack = updateState $ \s ->+ s{ orgStateEmphasisCharStack = drop 1 . orgStateEmphasisCharStack $ s }++surroundingEmphasisChar :: OrgParser [Char]+surroundingEmphasisChar = take 1 . drop 1 . orgStateEmphasisCharStack <$> getState++startEmphasisNewlinesCounting :: Int -> OrgParser ()+startEmphasisNewlinesCounting maxNewlines = updateState $ \s ->+ s{ orgStateEmphasisNewlines = Just maxNewlines }++decEmphasisNewlinesCount :: OrgParser ()+decEmphasisNewlinesCount = updateState $ \s ->+ s{ orgStateEmphasisNewlines = (\n -> n - 1) <$> orgStateEmphasisNewlines s }++newlinesCountWithinLimits :: OrgParser Bool+newlinesCountWithinLimits = do+ st <- getState+ return $ ((< 0) <$> orgStateEmphasisNewlines st) /= Just True++resetEmphasisNewlines :: OrgParser ()+resetEmphasisNewlines = updateState $ \s ->+ s{ orgStateEmphasisNewlines = Nothing }++addLinkFormat :: String+ -> (String -> String)+ -> OrgParser ()+addLinkFormat key formatter = updateState $ \s ->+ let fs = orgStateLinkFormatters s+ in s{ orgStateLinkFormatters = M.insert key formatter fs }++addToNotesTable :: OrgNoteRecord -> OrgParser ()+addToNotesTable note = do+ oldnotes <- orgStateNotes' <$> getState+ updateState $ \s -> s{ orgStateNotes' = note:oldnotes }++-- The version Text.Pandoc.Parsing cannot be used, as we need additional parts+-- of the state saved and restored.+parseFromString :: OrgParser a -> String -> OrgParser a+parseFromString parser str' = do+ oldLastPreCharPos <- orgStateLastPreCharPos <$> getState+ updateState $ \s -> s{ orgStateLastPreCharPos = Nothing }+ result <- P.parseFromString parser str'+ updateState $ \s -> s{ orgStateLastPreCharPos = oldLastPreCharPos }+ return result+++--+-- Adaptions and specializations of parsing utilities+--++newtype F a = F { unF :: Reader OrgParserState a+ } deriving (Monad, Applicative, Functor)++runF :: F a -> OrgParserState -> a+runF = runReader . unF++askF :: F OrgParserState+askF = F ask++asksF :: (OrgParserState -> a) -> F a+asksF f = F $ asks f++instance Monoid a => Monoid (F a) where+ mempty = return mempty+ mappend = liftM2 mappend+ mconcat = fmap mconcat . sequence++trimInlinesF :: F Inlines -> F Inlines+trimInlinesF = liftM trimInlines++returnF :: a -> OrgParser (F a)+returnF = return . return+++-- | Like @Text.Parsec.Char.newline@, but causes additional state changes.+newline :: OrgParser Char+newline =+ P.newline+ <* updateLastPreCharPos+ <* updateLastForbiddenCharPos++--+-- parsing blocks+--++parseBlocks :: OrgParser (F Blocks)+parseBlocks = mconcat <$> manyTill block eof++block :: OrgParser (F Blocks)+block = choice [ mempty <$ blanklines+ , optionalAttributes $ choice+ [ orgBlock+ , figure+ , table+ ]+ , example+ , drawer+ , specialLine+ , header+ , return <$> hline+ , list+ , latexFragment+ , noteBlock+ , paraOrPlain+ ] <?> "block"++optionalAttributes :: OrgParser (F Blocks) -> OrgParser (F Blocks)+optionalAttributes parser = try $+ resetBlockAttributes *> parseBlockAttributes *> parser++parseBlockAttributes :: OrgParser ()+parseBlockAttributes = do+ attrs <- many attribute+ () <$ mapM (uncurry parseAndAddAttribute) attrs+ where+ attribute :: OrgParser (String, String)+ attribute = try $ do+ key <- metaLineStart *> many1Till (noneOf "\n\r") (char ':')+ val <- skipSpaces *> anyLine+ return (map toLower key, val)++parseAndAddAttribute :: String -> String -> OrgParser ()+parseAndAddAttribute key value = do+ let key' = map toLower key+ () <$ addBlockAttribute key' value++lookupInlinesAttr :: String -> OrgParser (Maybe (F Inlines))+lookupInlinesAttr attr = try $ do+ val <- lookupBlockAttribute attr+ maybe (return Nothing)+ (fmap Just . parseFromString parseInlines)+ val+++--+-- Org Blocks (#+BEGIN_... / #+END_...)+--++orgBlock :: OrgParser (F Blocks)+orgBlock = try $ do+ (indent, blockType, args) <- blockHeader+ content <- rawBlockContent indent blockType+ contentBlocks <- parseFromString parseBlocks (content ++ "\n")+ let classArgs = [ translateLang . fromMaybe [] $ listToMaybe args ]+ case blockType of+ "comment" -> return mempty+ "html" -> returnF $ B.rawBlock "html" content+ "latex" -> returnF $ B.rawBlock "latex" content+ "ascii" -> returnF $ B.rawBlock "ascii" content+ "example" -> returnF $ exampleCode content+ "quote" -> return $ B.blockQuote <$> contentBlocks+ "verse" -> parseVerse content+ "src" -> codeBlockWithAttr classArgs content+ _ -> return $ B.divWith ("", [blockType], []) <$> contentBlocks+ where+ parseVerse :: String -> OrgParser (F Blocks)+ parseVerse cs =+ fmap B.para . mconcat . intersperse (pure B.linebreak)+ <$> mapM (parseFromString parseInlines) (lines cs)++blockHeader :: OrgParser (Int, String, [String])+blockHeader = (,,) <$> blockIndent+ <*> blockType+ <*> (skipSpaces *> blockArgs)+ where blockIndent = length <$> many spaceChar+ blockType = map toLower <$> (stringAnyCase "#+begin_" *> many letter)+ blockArgs = manyTill (many nonspaceChar <* skipSpaces) newline++codeBlockWithAttr :: [String] -> String -> OrgParser (F Blocks)+codeBlockWithAttr classArgs content = do+ identifier <- fromMaybe "" <$> lookupBlockAttribute "name"+ caption <- lookupInlinesAttr "caption"+ let codeBlck = B.codeBlockWith (identifier, classArgs, []) content+ return $ maybe (pure codeBlck) (labelDiv codeBlck) caption+ where+ labelDiv blk value =+ B.divWith nullAttr <$> (mappend <$> labelledBlock value+ <*> pure blk)+ labelledBlock = fmap (B.plain . B.spanWith ("", ["label"], []))++rawBlockContent :: Int -> String -> OrgParser String+rawBlockContent indent blockType =+ unlines . map commaEscaped <$> manyTill indentedLine blockEnder+ where+ indentedLine = try $ choice [ blankline *> pure "\n"+ , indentWith indent *> anyLine+ ]+ blockEnder = try $ indentWith indent *> stringAnyCase ("#+end_" <> blockType)++-- indent by specified number of spaces (or equiv. tabs)+indentWith :: Int -> OrgParser String+indentWith num = do+ tabStop <- getOption readerTabStop+ if num < tabStop+ then count num (char ' ')+ else choice [ try (count num (char ' '))+ , try (char '\t' >> count (num - tabStop) (char ' ')) ]++translateLang :: String -> String+translateLang "C" = "c"+translateLang "C++" = "cpp"+translateLang "emacs-lisp" = "commonlisp" -- emacs lisp is not supported+translateLang "js" = "javascript"+translateLang "lisp" = "commonlisp"+translateLang "R" = "r"+translateLang "sh" = "bash"+translateLang "sqlite" = "sql"+translateLang cs = cs++commaEscaped :: String -> String+commaEscaped (',':cs@('*':_)) = cs+commaEscaped (',':cs@('#':'+':_)) = cs+commaEscaped cs = cs++example :: OrgParser (F Blocks)+example = try $ do+ return . return . exampleCode =<< unlines <$> many1 exampleLine++exampleCode :: String -> Blocks+exampleCode = B.codeBlockWith ("", ["example"], [])++exampleLine :: OrgParser String+exampleLine = try $ string ": " *> anyLine++-- Drawers for properties or a logbook+drawer :: OrgParser (F Blocks)+drawer = try $ do+ drawerStart+ manyTill drawerLine (try drawerEnd)+ return mempty++drawerStart :: OrgParser String+drawerStart = try $+ skipSpaces *> drawerName <* skipSpaces <* newline+ where drawerName = try $ char ':' *> validDrawerName <* char ':'+ validDrawerName = stringAnyCase "PROPERTIES"+ <|> stringAnyCase "LOGBOOK"++drawerLine :: OrgParser String+drawerLine = try anyLine++drawerEnd :: OrgParser String+drawerEnd = try $+ skipSpaces *> stringAnyCase ":END:" <* skipSpaces <* newline+++--+-- Figures+--++-- Figures (Image on a line by itself, preceded by name and/or caption)+figure :: OrgParser (F Blocks)+figure = try $ do+ (cap, nam) <- nameAndCaption+ src <- skipSpaces *> selfTarget <* skipSpaces <* newline+ guard (isImageFilename src)+ return $ do+ cap' <- cap+ return $ B.para $ B.image src nam cap'+ where+ nameAndCaption =+ do+ maybeCap <- lookupInlinesAttr "caption"+ maybeNam <- lookupBlockAttribute "name"+ guard $ isJust maybeCap || isJust maybeNam+ return ( fromMaybe mempty maybeCap+ , maybe mempty withFigPrefix maybeNam )+ withFigPrefix cs =+ if "fig:" `isPrefixOf` cs+ then cs+ else "fig:" ++ cs++--+-- Comments, Options and Metadata+specialLine :: OrgParser (F Blocks)+specialLine = fmap return . try $ metaLine <|> commentLine++metaLine :: OrgParser Blocks+metaLine = try $ mempty+ <$ (metaLineStart *> (optionLine <|> declarationLine))++commentLine :: OrgParser Blocks+commentLine = try $ commentLineStart *> anyLine *> pure mempty++-- The order, in which blocks are tried, makes sure that we're not looking at+-- the beginning of a block, so we don't need to check for it+metaLineStart :: OrgParser String+metaLineStart = try $ mappend <$> many spaceChar <*> string "#+"++commentLineStart :: OrgParser String+commentLineStart = try $ mappend <$> many spaceChar <*> string "# "++declarationLine :: OrgParser ()+declarationLine = try $ do+ key <- metaKey+ inlinesF <- metaInlines+ updateState $ \st ->+ let meta' = B.setMeta <$> pure key <*> inlinesF <*> pure nullMeta+ in st { orgStateMeta' = orgStateMeta' st <> meta' }+ return ()++metaInlines :: OrgParser (F MetaValue)+metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline++metaKey :: OrgParser String+metaKey = map toLower <$> many1 (noneOf ": \n\r")+ <* char ':'+ <* skipSpaces++optionLine :: OrgParser ()+optionLine = try $ do+ key <- metaKey+ case key of+ "link" -> parseLinkFormat >>= uncurry addLinkFormat+ _ -> mzero++parseLinkFormat :: OrgParser ((String, String -> String))+parseLinkFormat = try $ do+ linkType <- (:) <$> letter <*> many (alphaNum <|> oneOf "-_") <* skipSpaces+ linkSubst <- parseFormat+ return (linkType, linkSubst)++-- | An ad-hoc, single-argument-only implementation of a printf-style format+-- parser.+parseFormat :: OrgParser (String -> String)+parseFormat = try $ do+ replacePlain <|> replaceUrl <|> justAppend+ where+ -- inefficient, but who cares+ replacePlain = try $ (\x -> concat . flip intersperse x)+ <$> sequence [tillSpecifier 's', rest]+ replaceUrl = try $ (\x -> concat . flip intersperse x . urlEncode)+ <$> sequence [tillSpecifier 'h', rest]+ justAppend = try $ (++) <$> rest++ rest = manyTill anyChar (eof <|> () <$ oneOf "\n\r")+ tillSpecifier c = manyTill (noneOf "\n\r") (try $ string ('%':c:""))++--+-- Headers+--++-- | Headers+header :: OrgParser (F Blocks)+header = try $ do+ level <- headerStart+ title <- inlinesTillNewline+ return $ B.header level <$> title++headerStart :: OrgParser Int+headerStart = try $+ (length <$> many1 (char '*')) <* many1 (char ' ')+++-- Don't use (or need) the reader wrapper here, we want hline to be+-- @show@able. Otherwise we can't use it with @notFollowedBy'@.++-- | Horizontal Line (five -- dashes or more)+hline :: OrgParser Blocks+hline = try $ do+ skipSpaces+ string "-----"+ many (char '-')+ skipSpaces+ newline+ return B.horizontalRule++--+-- Tables+--++data OrgTableRow = OrgContentRow (F [Blocks])+ | OrgAlignRow [Alignment]+ | OrgHlineRow++data OrgTable = OrgTable+ { orgTableColumns :: Int+ , orgTableAlignments :: [Alignment]+ , orgTableHeader :: [Blocks]+ , orgTableRows :: [[Blocks]]+ }++table :: OrgParser (F Blocks)+table = try $ do+ lookAhead tableStart+ do+ rows <- tableRows+ cptn <- fromMaybe (pure "") <$> lookupInlinesAttr "caption"+ return $ (<$> cptn) . orgToPandocTable . normalizeTable =<< rowsToTable rows++orgToPandocTable :: OrgTable+ -> Inlines+ -> Blocks+orgToPandocTable (OrgTable _ aligns heads lns) caption =+ B.table caption (zip aligns $ repeat 0) heads lns++tableStart :: OrgParser Char+tableStart = try $ skipSpaces *> char '|'++tableRows :: OrgParser [OrgTableRow]+tableRows = try $ many (tableAlignRow <|> tableHline <|> tableContentRow)++tableContentRow :: OrgParser OrgTableRow+tableContentRow = try $+ OrgContentRow . sequence <$> (tableStart *> manyTill tableContentCell newline)++tableContentCell :: OrgParser (F Blocks)+tableContentCell = try $+ fmap B.plain . trimInlinesF . mconcat <$> many1Till inline endOfCell++endOfCell :: OrgParser Char+endOfCell = try $ char '|' <|> lookAhead newline++tableAlignRow :: OrgParser OrgTableRow+tableAlignRow = try $+ OrgAlignRow <$> (tableStart *> manyTill tableAlignCell newline)++tableAlignCell :: OrgParser Alignment+tableAlignCell =+ choice [ try $ emptyCell *> return AlignDefault+ , try $ skipSpaces+ *> char '<'+ *> tableAlignFromChar+ <* many digit+ <* char '>'+ <* emptyCell+ ] <?> "alignment info"+ where emptyCell = try $ skipSpaces *> endOfCell++tableAlignFromChar :: OrgParser Alignment+tableAlignFromChar = try $ choice [ char 'l' *> return AlignLeft+ , char 'c' *> return AlignCenter+ , char 'r' *> return AlignRight+ ]++tableHline :: OrgParser OrgTableRow+tableHline = try $+ OrgHlineRow <$ (tableStart *> char '-' *> anyLine)++rowsToTable :: [OrgTableRow]+ -> F OrgTable+rowsToTable = foldM (flip rowToContent) zeroTable+ where zeroTable = OrgTable 0 mempty mempty mempty++normalizeTable :: OrgTable+ -> OrgTable+normalizeTable (OrgTable cols aligns heads lns) =+ let aligns' = fillColumns aligns AlignDefault+ heads' = if heads == mempty+ then mempty+ else fillColumns heads (B.plain mempty)+ lns' = map (`fillColumns` B.plain mempty) lns+ fillColumns base padding = take cols $ base ++ repeat padding+ in OrgTable cols aligns' heads' lns'+++-- One or more horizontal rules after the first content line mark the previous+-- line as a header. All other horizontal lines are discarded.+rowToContent :: OrgTableRow+ -> OrgTable+ -> F OrgTable+rowToContent OrgHlineRow t = maybeBodyToHeader t+rowToContent (OrgAlignRow as) t = setLongestRow as =<< setAligns as t+rowToContent (OrgContentRow rf) t = do+ rs <- rf+ setLongestRow rs =<< appendToBody rs t++setLongestRow :: [a]+ -> OrgTable+ -> F OrgTable+setLongestRow rs t =+ return t{ orgTableColumns = max (length rs) (orgTableColumns t) }++maybeBodyToHeader :: OrgTable+ -> F OrgTable+maybeBodyToHeader t = case t of+ OrgTable{ orgTableHeader = [], orgTableRows = b:[] } ->+ return t{ orgTableHeader = b , orgTableRows = [] }+ _ -> return t++appendToBody :: [Blocks]+ -> OrgTable+ -> F OrgTable+appendToBody r t = return t{ orgTableRows = orgTableRows t ++ [r] }++setAligns :: [Alignment]+ -> OrgTable+ -> F OrgTable+setAligns aligns t = return $ t{ orgTableAlignments = aligns }+++--+-- LaTeX fragments+--+latexFragment :: OrgParser (F Blocks)+latexFragment = try $ do+ envName <- latexEnvStart+ content <- mconcat <$> manyTill anyLineNewline (latexEnd envName)+ return . return $ B.rawBlock "latex" (content `inLatexEnv` envName)+ where+ c `inLatexEnv` e = mconcat [ "\\begin{", e, "}\n"+ , c+ , "\\end{", e, "}\n"+ ]++latexEnvStart :: OrgParser String+latexEnvStart = try $ do+ skipSpaces *> string "\\begin{"+ *> latexEnvName+ <* string "}"+ <* blankline++latexEnd :: String -> OrgParser ()+latexEnd envName = try $+ () <$ skipSpaces+ <* string ("\\end{" ++ envName ++ "}")+ <* blankline++-- | Parses a LaTeX environment name.+latexEnvName :: OrgParser String+latexEnvName = try $ do+ mappend <$> many1 alphaNum+ <*> option "" (string "*")+++--+-- Footnote defintions+--+noteBlock :: OrgParser (F Blocks)+noteBlock = try $ do+ ref <- noteMarker <* skipSpaces+ content <- mconcat <$> blocksTillHeaderOrNote+ addToNotesTable (ref, content)+ return mempty+ where+ blocksTillHeaderOrNote =+ many1Till block (eof <|> () <$ lookAhead noteMarker+ <|> () <$ lookAhead headerStart)++-- Paragraphs or Plain text+paraOrPlain :: OrgParser (F Blocks)+paraOrPlain = try $+ parseInlines <**> (fmap <$> option B.plain (try $ newline *> pure B.para))++inlinesTillNewline :: OrgParser (F Inlines)+inlinesTillNewline = trimInlinesF . mconcat <$> manyTill inline newline+++--+-- list blocks+--++list :: OrgParser (F Blocks)+list = choice [ definitionList, bulletList, orderedList ] <?> "list"++definitionList :: OrgParser (F Blocks)+definitionList = fmap B.definitionList . fmap compactify'DL . sequence+ <$> many1 (definitionListItem bulletListStart)++bulletList :: OrgParser (F Blocks)+bulletList = fmap B.bulletList . fmap compactify' . sequence+ <$> many1 (listItem bulletListStart)++orderedList :: OrgParser (F Blocks)+orderedList = fmap B.orderedList . fmap compactify' . sequence+ <$> many1 (listItem orderedListStart)++genericListStart :: OrgParser String+ -> OrgParser Int+genericListStart listMarker = try $+ (+) <$> (length <$> many spaceChar)+ <*> (length <$> listMarker <* many1 spaceChar)++-- parses bullet list start and returns its length (excl. following whitespace)+bulletListStart :: OrgParser Int+bulletListStart = genericListStart bulletListMarker+ where bulletListMarker = pure <$> oneOf "*-+"++orderedListStart :: OrgParser Int+orderedListStart = genericListStart orderedListMarker+ -- Ordered list markers allowed in org-mode+ where orderedListMarker = mappend <$> many1 digit <*> (pure <$> oneOf ".)")++definitionListItem :: OrgParser Int+ -> OrgParser (F (Inlines, [Blocks]))+definitionListItem parseMarkerGetLength = try $ do+ markerLength <- parseMarkerGetLength+ term <- manyTill (noneOf "\n\r") (try $ string "::")+ line1 <- anyLineNewline+ blank <- option "" ("\n" <$ blankline)+ cont <- concat <$> many (listContinuation markerLength)+ term' <- parseFromString inline term+ contents' <- parseFromString parseBlocks $ line1 ++ blank ++ cont+ return $ (,) <$> term' <*> fmap (:[]) contents'+++-- parse raw text for one list item, excluding start marker and continuations+listItem :: OrgParser Int+ -> OrgParser (F Blocks)+listItem start = try $ do+ markerLength <- try start+ firstLine <- anyLineNewline+ blank <- option "" ("\n" <$ blankline)+ rest <- concat <$> many (listContinuation markerLength)+ parseFromString parseBlocks $ firstLine ++ blank ++ rest++-- continuation of a list item - indented and separated by blankline or endline.+-- Note: nested lists are parsed as continuations.+listContinuation :: Int+ -> OrgParser String+listContinuation markerLength = try $+ notFollowedBy' blankline+ *> (mappend <$> (concat <$> many1 listLine)+ <*> many blankline)+ where listLine = try $ indentWith markerLength *> anyLineNewline++anyLineNewline :: OrgParser String+anyLineNewline = (++ "\n") <$> anyLine+++--+-- inline+--++inline :: OrgParser (F Inlines)+inline =+ choice [ whitespace+ , linebreak+ , footnote+ , linkOrImage+ , anchor+ , inlineCodeBlock+ , str+ , endline+ , emph+ , strong+ , strikeout+ , underline+ , code+ , math+ , displayMath+ , verbatim+ , subscript+ , superscript+ , symbol+ ] <* (guard =<< newlinesCountWithinLimits)+ <?> "inline"++parseInlines :: OrgParser (F Inlines)+parseInlines = trimInlinesF . mconcat <$> many1 inline++-- treat these as potentially non-text when parsing inline:+specialChars :: [Char]+specialChars = "\"$'()*+-./:<=>[\\]^_{|}~"+++whitespace :: OrgParser (F Inlines)+whitespace = pure B.space <$ skipMany1 spaceChar+ <* updateLastPreCharPos+ <* updateLastForbiddenCharPos+ <?> "whitespace"++linebreak :: OrgParser (F Inlines)+linebreak = try $ pure B.linebreak <$ string "\\\\" <* skipSpaces <* newline++str :: OrgParser (F Inlines)+str = return . B.str <$> many1 (noneOf $ specialChars ++ "\n\r ")+ <* updateLastStrPos++-- | An endline character that can be treated as a space, not a structural+-- break. This should reflect the values of the Emacs variable+-- @org-element-pagaraph-separate@.+endline :: OrgParser (F Inlines)+endline = try $ do+ newline+ notFollowedBy blankline+ notFollowedBy' exampleLine+ notFollowedBy' hline+ notFollowedBy' noteMarker+ notFollowedBy' tableStart+ notFollowedBy' drawerStart+ notFollowedBy' headerStart+ notFollowedBy' metaLineStart+ notFollowedBy' latexEnvStart+ notFollowedBy' commentLineStart+ notFollowedBy' bulletListStart+ notFollowedBy' orderedListStart+ decEmphasisNewlinesCount+ guard =<< newlinesCountWithinLimits+ updateLastPreCharPos+ return . return $ B.space++footnote :: OrgParser (F Inlines)+footnote = try $ inlineNote <|> referencedNote++inlineNote :: OrgParser (F Inlines)+inlineNote = try $ do+ string "[fn:"+ ref <- many alphaNum+ char ':'+ note <- fmap B.para . trimInlinesF . mconcat <$> many1Till inline (char ']')+ when (not $ null ref) $+ addToNotesTable ("fn:" ++ ref, note)+ return $ B.note <$> note++referencedNote :: OrgParser (F Inlines)+referencedNote = try $ do+ ref <- noteMarker+ return $ do+ notes <- asksF orgStateNotes'+ case lookup ref notes of+ Nothing -> return $ B.str $ "[" ++ ref ++ "]"+ Just contents -> do+ st <- askF+ let contents' = runF contents st{ orgStateNotes' = [] }+ return $ B.note contents'++noteMarker :: OrgParser String+noteMarker = try $ do+ char '['+ choice [ many1Till digit (char ']')+ , (++) <$> string "fn:"+ <*> many1Till (noneOf "\n\r\t ") (char ']')+ ]++linkOrImage :: OrgParser (F Inlines)+linkOrImage = explicitOrImageLink+ <|> selflinkOrImage+ <|> angleLink+ <|> plainLink+ <?> "link or image"++explicitOrImageLink :: OrgParser (F Inlines)+explicitOrImageLink = try $ do+ char '['+ srcF <- applyCustomLinkFormat =<< linkTarget+ title <- enclosedRaw (char '[') (char ']')+ title' <- parseFromString (mconcat <$> many inline) title+ char ']'+ return $ do+ src <- srcF+ if isImageFilename src && isImageFilename title+ then pure $ B.link src "" $ B.image title mempty mempty+ else linkToInlinesF src =<< title'++selflinkOrImage :: OrgParser (F Inlines)+selflinkOrImage = try $ do+ src <- char '[' *> linkTarget <* char ']'+ return $ linkToInlinesF src (B.str src)++plainLink :: OrgParser (F Inlines)+plainLink = try $ do+ (orig, src) <- uri+ returnF $ B.link src "" (B.str orig)++angleLink :: OrgParser (F Inlines)+angleLink = try $ do+ char '<'+ link <- plainLink+ char '>'+ return link++selfTarget :: OrgParser String+selfTarget = try $ char '[' *> linkTarget <* char ']'++linkTarget :: OrgParser String+linkTarget = enclosed (char '[') (char ']') (noneOf "\n\r[]")++applyCustomLinkFormat :: String -> OrgParser (F String)+applyCustomLinkFormat link = do+ let (linkType, rest) = break (== ':') link+ return $ do+ formatter <- M.lookup linkType <$> asksF orgStateLinkFormatters+ return $ maybe link ($ drop 1 rest) formatter+++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++isRelativeUrl :: String -> Bool+isRelativeUrl s = (':' `notElem` s) && ("./" `isPrefixOf` s)++isUri :: String -> Bool+isUri s = let (scheme, path) = break (== ':') s+ in all (\c -> isAlphaNum c || c `elem` ".-") scheme+ && not (null path)++isImageFilename :: String -> Bool+isImageFilename filename =+ any (\x -> ('.':x) `isSuffixOf` filename) imageExtensions &&+ (any (\x -> (x++":") `isPrefixOf` filename) protocols ||+ ':' `notElem` filename)+ where+ imageExtensions = [ "jpeg" , "jpg" , "png" , "gif" , "svg" ]+ protocols = [ "file", "http", "https" ]++-- | 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+-- @anchor-id@ contains spaces, we are more restrictive in what is accepted as+-- an anchor.++anchor :: OrgParser (F Inlines)+anchor = try $ do+ anchorId <- parseAnchor+ recordAnchorId anchorId+ returnF $ B.spanWith (solidify anchorId, [], []) mempty+ where+ parseAnchor = string "<<"+ *> many1 (noneOf "\t\n\r<>\"' ")+ <* string ">>"+ <* skipSpaces++-- | Replace every char but [a-zA-Z0-9_.-:] with a hypen '-'. This mirrors+-- the org function @org-export-solidify-link-text@.++solidify :: String -> String+solidify = map replaceSpecialChar+ where replaceSpecialChar c+ | isAlphaNum c = c+ | c `elem` "_.-:" = c+ | otherwise = '-'++-- | Parses an inline code block and marks it as an babel block.+inlineCodeBlock :: OrgParser (F Inlines)+inlineCodeBlock = try $ do+ string "src_"+ lang <- many1 orgArgWordChar+ opts <- option [] $ enclosedByPair '[' ']' blockOption+ inlineCode <- enclosedByPair '{' '}' (noneOf "\n\r")+ let attrClasses = [translateLang lang, rundocBlockClass]+ let attrKeyVal = map toRundocAttrib (("language", lang) : opts)+ returnF $ B.codeWith ("", attrClasses, attrKeyVal) inlineCode+ where enclosedByPair s e p = char s *> many1Till p (char e)++-- | The class-name used to mark rundoc blocks.+rundocBlockClass :: String+rundocBlockClass = "rundoc-block"++blockOption :: OrgParser (String, String)+blockOption = try $ (,) <$> orgArgKey <*> orgArgValue++orgArgKey :: OrgParser String+orgArgKey = try $+ skipSpaces *> char ':'+ *> many1 orgArgWordChar+ <* many1 spaceChar++orgArgValue :: OrgParser String+orgArgValue = try $+ skipSpaces *> many1 orgArgWordChar+ <* skipSpaces++orgArgWordChar :: OrgParser Char+orgArgWordChar = alphaNum <|> oneOf "-_"++toRundocAttrib :: (String, String) -> (String, String)+toRundocAttrib = first ("rundoc-" ++)++emph :: OrgParser (F Inlines)+emph = fmap B.emph <$> emphasisBetween '/'++strong :: OrgParser (F Inlines)+strong = fmap B.strong <$> emphasisBetween '*'++strikeout :: OrgParser (F Inlines)+strikeout = fmap B.strikeout <$> emphasisBetween '+'++-- There is no underline, so we use strong instead.+underline :: OrgParser (F Inlines)+underline = fmap B.strong <$> emphasisBetween '_'++code :: OrgParser (F Inlines)+code = return . B.code <$> verbatimBetween '='++verbatim :: OrgParser (F Inlines)+verbatim = return . B.rawInline "" <$> verbatimBetween '~'++subscript :: OrgParser (F Inlines)+subscript = fmap B.subscript <$> try (char '_' *> subOrSuperExpr)++superscript :: OrgParser (F Inlines)+superscript = fmap B.superscript <$> try (char '^' *> subOrSuperExpr)++math :: OrgParser (F Inlines)+math = return . B.math <$> choice [ math1CharBetween '$'+ , mathStringBetween '$'+ , rawMathBetween "\\(" "\\)"+ ]++displayMath :: OrgParser (F Inlines)+displayMath = return . B.displayMath <$> choice [ rawMathBetween "\\[" "\\]"+ , rawMathBetween "$$" "$$"+ ]+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++emphasisBetween :: Char+ -> OrgParser (F Inlines)+emphasisBetween c = try $ do+ startEmphasisNewlinesCounting emphasisAllowedNewlines+ res <- enclosedInlines (emphasisStart c) (emphasisEnd c)+ isTopLevelEmphasis <- null . orgStateEmphasisCharStack <$> getState+ when isTopLevelEmphasis+ resetEmphasisNewlines+ return res++verbatimBetween :: Char+ -> OrgParser String+verbatimBetween c = try $+ emphasisStart c *>+ many1TillNOrLessNewlines 1 (noneOf "\n\r") (emphasisEnd c)++-- | Parses a raw string delimited by @c@ using Org's math rules+mathStringBetween :: Char+ -> OrgParser String+mathStringBetween c = try $ do+ mathStart c+ body <- many1TillNOrLessNewlines mathAllowedNewlines+ (noneOf (c:"\n\r"))+ (lookAhead $ mathEnd c)+ final <- mathEnd c+ return $ body ++ [final]++-- | Parse a single character between @c@ using math rules+math1CharBetween :: Char+ -> OrgParser String+math1CharBetween c = try $ do+ char c+ res <- noneOf $ c:mathForbiddenBorderChars+ char c+ eof <|> () <$ lookAhead (oneOf mathPostChars)+ return [res]++rawMathBetween :: String+ -> String+ -> OrgParser String+rawMathBetween s e = try $ string s *> manyTill anyChar (try $ string e)++-- | Parses the start (opening character) of emphasis+emphasisStart :: Char -> OrgParser Char+emphasisStart c = try $ do+ guard =<< afterEmphasisPreChar+ guard =<< notAfterString+ char c+ lookAhead (noneOf emphasisForbiddenBorderChars)+ pushToInlineCharStack c+ return c++-- | Parses the closing character of emphasis+emphasisEnd :: Char -> OrgParser Char+emphasisEnd c = try $ do+ guard =<< notAfterForbiddenBorderChar+ char c+ eof <|> () <$ lookAhead acceptablePostChars+ updateLastStrPos+ popInlineCharStack+ return c+ where acceptablePostChars =+ surroundingEmphasisChar >>= \x -> oneOf (x ++ emphasisPostChars)++mathStart :: Char -> OrgParser Char+mathStart c = try $+ char c <* notFollowedBy' (oneOf (c:mathForbiddenBorderChars))++mathEnd :: Char -> OrgParser Char+mathEnd c = try $ do+ res <- noneOf (c:mathForbiddenBorderChars)+ char c+ eof <|> () <$ lookAhead (oneOf mathPostChars)+ return res+++enclosedInlines :: OrgParser a+ -> OrgParser b+ -> OrgParser (F Inlines)+enclosedInlines start end = try $+ trimInlinesF . mconcat <$> enclosed start end inline++enclosedRaw :: OrgParser a+ -> OrgParser b+ -> OrgParser String+enclosedRaw start end = try $+ start *> (onSingleLine <|> spanningTwoLines)+ where onSingleLine = try $ many1Till (noneOf "\n\r") end+ spanningTwoLines = try $+ anyLine >>= \f -> mappend (f <> " ") <$> onSingleLine++-- | Like many1Till, but parses at most @n+1@ lines. @p@ must not consume+-- newlines.+many1TillNOrLessNewlines :: Int+ -> OrgParser Char+ -> OrgParser a+ -> OrgParser String+many1TillNOrLessNewlines n p end = try $+ nMoreLines (Just n) mempty >>= oneOrMore+ where+ nMoreLines Nothing cs = return cs+ nMoreLines (Just 0) cs = try $ (cs ++) <$> finalLine+ nMoreLines k cs = try $ (final k cs <|> rest k cs)+ >>= uncurry nMoreLines+ final _ cs = (\x -> (Nothing, cs ++ x)) <$> try finalLine+ rest m cs = (\x -> (minus1 <$> m, cs ++ x ++ "\n")) <$> try (manyTill p P.newline)+ finalLine = try $ manyTill p end+ minus1 k = k - 1+ oneOrMore cs = guard (not $ null cs) *> return cs++-- Org allows customization of the way it reads emphasis. We use the defaults+-- here (see, e.g., the Emacs Lisp variable `org-emphasis-regexp-components`+-- for details).++-- | Chars allowed to occur before emphasis (spaces and newlines are ok, too)+emphasisPreChars :: [Char]+emphasisPreChars = "\t \"'({"++-- | Chars allowed at after emphasis+emphasisPostChars :: [Char]+emphasisPostChars = "\t\n !\"'),-.:;?\\}"++-- | Chars not allowed at the (inner) border of emphasis+emphasisForbiddenBorderChars :: [Char]+emphasisForbiddenBorderChars = "\t\n\r \"',"++-- | The maximum number of newlines within+emphasisAllowedNewlines :: Int+emphasisAllowedNewlines = 1++-- LaTeX-style math: see `org-latex-regexps` for details++-- | Chars allowed after an inline ($...$) math statement+mathPostChars :: [Char]+mathPostChars = "\t\n \"'),-.:;?"++-- | Chars not allowed at the (inner) border of math+mathForbiddenBorderChars :: [Char]+mathForbiddenBorderChars = "\t\n\r ,;.$"++-- | Maximum number of newlines in an inline math statement+mathAllowedNewlines :: Int+mathAllowedNewlines = 2++-- | Whether we are right behind a char allowed before emphasis+afterEmphasisPreChar :: OrgParser Bool+afterEmphasisPreChar = do+ pos <- getPosition+ lastPrePos <- orgStateLastPreCharPos <$> getState+ return . fromMaybe True $ (== pos) <$> lastPrePos++-- | Whether we are right after the end of a string+notAfterString :: OrgParser Bool+notAfterString = do+ pos <- getPosition+ lastStrPos <- orgStateLastStrPos <$> getState+ return $ lastStrPos /= Just pos++-- | Whether the parser is right after a forbidden border char+notAfterForbiddenBorderChar :: OrgParser Bool+notAfterForbiddenBorderChar = do+ pos <- getPosition+ lastFBCPos <- orgStateLastForbiddenCharPos <$> getState+ return $ lastFBCPos /= Just pos++-- | Read a sub- or superscript expression+subOrSuperExpr :: OrgParser (F Inlines)+subOrSuperExpr = try $+ choice [ id <$> charsInBalanced '{' '}' (noneOf "\n\r")+ , enclosing ('(', ')') <$> charsInBalanced '(' ')' (noneOf "\n\r")+ , simpleSubOrSuperString+ ] >>= parseFromString (mconcat <$> many inline)+ where enclosing (left, right) s = left : s ++ [right]++simpleSubOrSuperString :: OrgParser String+simpleSubOrSuperString = try $+ choice [ string "*"+ , mappend <$> option [] ((:[]) <$> oneOf "+-")+ <*> many1 alphaNum+ ]
src/Text/Pandoc/Readers/RST.hs view
@@ -36,12 +36,13 @@ import Text.Pandoc.Shared import Text.Pandoc.Parsing import Text.Pandoc.Options-import Control.Monad ( when, liftM, guard, mzero )+import Control.Monad ( when, liftM, guard, mzero, mplus ) import Data.List ( findIndex, intersperse, intercalate, transpose, sort, deleteFirstsBy, isSuffixOf )+import Data.Maybe (fromMaybe) import qualified Data.Map as M import Text.Printf ( printf )-import Control.Applicative ((<$>), (<$), (<*), (*>))+import Control.Applicative ((<$>), (<$), (<*), (*>), (<*>)) import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>)) import qualified Text.Pandoc.Builder as B import Data.Monoid (mconcat, mempty)@@ -112,15 +113,16 @@ metaFromDefList :: [([Inline], [[Block]])] -> Meta -> Meta metaFromDefList ds meta = adjustAuthors $ foldr f meta ds where f (k,v) = setMeta (map toLower $ stringify k) (mconcat $ map fromList v)- adjustAuthors (Meta metamap) = Meta $ M.adjust toPlain "author"+ adjustAuthors (Meta metamap) = Meta $ M.adjust splitAuthors "author" $ M.adjust toPlain "date" $ M.adjust toPlain "title"- $ M.adjust splitAuthors "authors"+ $ M.mapKeys (\k -> if k == "authors" then "author" else k) $ metamap toPlain (MetaBlocks [Para xs]) = MetaInlines xs toPlain x = x- splitAuthors (MetaBlocks [Para xs]) = MetaList $ map MetaInlines- $ splitAuthors' xs+ splitAuthors (MetaBlocks [Para xs])+ = MetaList $ map MetaInlines+ $ splitAuthors' xs splitAuthors x = x splitAuthors' = map normalizeSpaces . splitOnSemi . concatMap factorSemi@@ -184,22 +186,22 @@ -- field list -- -rawFieldListItem :: String -> RSTParser (String, String)-rawFieldListItem indent = try $ do- string indent+rawFieldListItem :: Int -> RSTParser (String, String)+rawFieldListItem minIndent = try $ do+ indent <- length <$> many (char ' ')+ guard $ indent >= minIndent char ':' name <- many1Till (noneOf "\n") (char ':') (() <$ lookAhead newline) <|> skipMany1 spaceChar first <- anyLine- rest <- option "" $ try $ do lookAhead (string indent >> spaceChar)+ rest <- option "" $ try $ do lookAhead (count indent (char ' ') >> spaceChar) indentedBlock let raw = (if null first then "" else (first ++ "\n")) ++ rest ++ "\n" return (name, raw) -fieldListItem :: String- -> RSTParser (Inlines, [Blocks])-fieldListItem indent = try $ do- (name, raw) <- rawFieldListItem indent+fieldListItem :: Int -> RSTParser (Inlines, [Blocks])+fieldListItem minIndent = try $ do+ (name, raw) <- rawFieldListItem minIndent let term = B.str name contents <- parseFromString parseBlocks raw optional blanklines@@ -207,7 +209,7 @@ fieldList :: RSTParser Blocks fieldList = try $ do- indent <- lookAhead $ many spaceChar+ indent <- length <$> lookAhead (many spaceChar) items <- many1 $ fieldListItem indent case items of [] -> return mempty@@ -520,17 +522,17 @@ skipMany spaceChar top <- many $ satisfy (/='\n') <|> try (char '\n' <*- notFollowedBy' (rawFieldListItem " ") <*+ notFollowedBy' (rawFieldListItem 3) <* count 3 (char ' ') <* notFollowedBy blankline) newline- fields <- many $ rawFieldListItem " "+ fields <- many $ rawFieldListItem 3 body <- option "" $ try $ blanklines >> indentedBlock optional blanklines let body' = body ++ "\n\n" case label of "raw" -> return $ B.rawBlock (trim top) (stripTrailingNewlines body)- "role" -> return mempty+ "role" -> addNewRole top $ map (\(k,v) -> (k, trim v)) fields "container" -> parseFromString parseBlocks body' "replace" -> B.para <$> -- consumed by substKey parseFromString (trimInlines . mconcat <$> many inline)@@ -575,12 +577,15 @@ role -> role }) "code" -> codeblock (lookup "number-lines" fields) (trim top) body "code-block" -> codeblock (lookup "number-lines" fields) (trim top) body+ "aafig" -> do+ let attribs = ("", ["aafig"], map (\(k,v) -> (k, trimr v)) fields)+ return $ B.codeBlockWith attribs $ stripTrailingNewlines body "math" -> return $ B.para $ mconcat $ map B.displayMath $ toChunks $ top ++ "\n\n" ++ body "figure" -> do (caption, legend) <- parseFromString extractCaption body' let src = escapeURI $ trim top- return $ B.para (B.image src "" caption) <> legend+ return $ B.para (B.image src "fig:" caption) <> legend "image" -> do let src = escapeURI $ trim top let alt = B.str $ maybe "image" trim $ lookup "alt" fields@@ -591,7 +596,38 @@ Nothing -> B.image src "" alt _ -> return mempty --- Can contain haracter codes as decimal numbers or+-- 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"+ then lookup "language" fields+ else Nothing++ updateState $ \s -> s {+ stateRstCustomRoles =+ M.insert role (baseRole, fmt, (,) parentRole . annotate) customRoles+ }++ return $ B.singleton Null+ where+ addLanguage lang (ident, classes, keyValues) =+ (ident, "sourceCode" : lang : classes, keyValues)+ inheritedRole =+ (,) <$> roleNameEndingIn (char '(') <*> roleNameEndingIn (char ')')++-- 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. ᨫ -- or text, which is used as-is. Comments start with ..@@ -930,17 +966,56 @@ -- Note, this doesn't precisely implement the complex rule in -- http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#inline-markup-recognition-rules -- but it should be good enough for most purposes+--+-- TODO:+-- - Classes are silently discarded in addNewRole+-- - Lacks sensible implementation for title-reference (which is the default)+-- - Allows direct use of the :raw: role, rST only allows inherited use. interpretedRole :: RSTParser Inlines interpretedRole = try $ do (role, contents) <- roleBefore <|> roleAfter- case role of- "sup" -> return $ B.superscript $ B.str contents- "sub" -> return $ B.subscript $ B.str contents- "math" -> return $ B.math contents- _ -> return $ B.str contents --unknown+ renderRole contents Nothing role nullAttr +renderRole :: String -> Maybe String -> String -> Attr -> RSTParser Inlines+renderRole contents fmt role attr = case role of+ "sup" -> return $ B.superscript $ B.str contents+ "superscript" -> return $ B.superscript $ B.str contents+ "sub" -> return $ B.subscript $ B.str contents+ "subscript" -> return $ B.subscript $ B.str contents+ "emphasis" -> return $ B.emph $ B.str contents+ "strong" -> return $ B.strong $ B.str contents+ "rfc-reference" -> return $ rfcLink contents+ "RFC" -> return $ rfcLink contents+ "pep-reference" -> return $ pepLink contents+ "PEP" -> return $ pepLink contents+ "literal" -> return $ B.str contents+ "math" -> return $ B.math contents+ "title-reference" -> titleRef contents+ "title" -> titleRef contents+ "t" -> titleRef contents+ "code" -> return $ B.codeWith attr 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+ where+ titleRef ref = return $ B.str ref -- FIXME: Not a sensible behaviour+ rfcLink rfcNo = B.link rfcUrl ("RFC " ++ rfcNo) $ B.str ("RFC " ++ rfcNo)+ where rfcUrl = "http://www.faqs.org/rfcs/rfc" ++ rfcNo ++ ".html"+ pepLink pepNo = B.link pepUrl ("PEP " ++ pepNo) $ B.str ("PEP " ++ pepNo)+ 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+ roleMarker :: RSTParser String-roleMarker = char ':' *> many1Till (letter <|> char '-') (char ':')+roleMarker = char ':' *> roleNameEndingIn (char ':') roleBefore :: RSTParser (String,String) roleBefore = try $ do@@ -1069,7 +1144,7 @@ smart = do getOption readerSmart >>= guard doubleQuoted <|> singleQuoted <|>- choice (map (B.singleton <$>) [apostrophe, dash, ellipses])+ choice [apostrophe, dash, ellipses] singleQuoted :: RSTParser Inlines singleQuoted = try $ do
src/Text/Pandoc/Readers/Textile.hs view
@@ -50,10 +50,9 @@ module Text.Pandoc.Readers.Textile ( readTextile) where- import Text.Pandoc.Definition+import Text.Pandoc.Builder (Inlines, Blocks, trimInlines) import qualified Text.Pandoc.Builder as B-import Text.Pandoc.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing import Text.Pandoc.Readers.HTML ( htmlTag, isInlineTag, isBlockTag )@@ -61,9 +60,12 @@ import Text.HTML.TagSoup (parseTags, innerText, fromAttrib, Tag(..)) import Text.HTML.TagSoup.Match import Data.List ( intercalate )-import Data.Char ( digitToInt, isUpper )-import Control.Monad ( guard, liftM )-import Control.Applicative ((<$>), (*>), (<*))+import Data.Char ( digitToInt, isUpper)+import Control.Monad ( guard, liftM, when )+import Text.Printf+import Control.Applicative ((<$>), (*>), (<*), (<$))+import Data.Monoid+import Debug.Trace (trace) -- | Parse a Textile text and return a Pandoc document. readTextile :: ReaderOptions -- ^ Reader options@@ -95,7 +97,7 @@ updateState $ \s -> s { stateNotes = reverse reversedNotes } -- now parse it for real... blocks <- parseBlocks- return $ Pandoc nullMeta blocks -- FIXME+ return $ Pandoc nullMeta (B.toList blocks) -- FIXME noteMarker :: Parser [Char] ParserState [Char] noteMarker = skipMany spaceChar >> string "fn" >> manyTill digit (char '.')@@ -115,11 +117,11 @@ return $ replicate (sourceLine endPos - sourceLine startPos) '\n' -- | Parse document blocks-parseBlocks :: Parser [Char] ParserState [Block]-parseBlocks = manyTill block eof+parseBlocks :: Parser [Char] ParserState Blocks+parseBlocks = mconcat <$> manyTill block eof -- | Block parsers list tried in definition order-blockParsers :: [Parser [Char] ParserState Block]+blockParsers :: [Parser [Char] ParserState Blocks] blockParsers = [ codeBlock , header , blockQuote@@ -130,29 +132,40 @@ , rawLaTeXBlock' , maybeExplicitBlock "table" table , maybeExplicitBlock "p" para+ , endBlock ] +endBlock :: Parser [Char] ParserState Blocks+endBlock = string "\n\n" >> return mempty+ -- | Any block in the order of definition of blockParsers-block :: Parser [Char] ParserState Block-block = choice blockParsers <?> "block"+block :: Parser [Char] ParserState Blocks+block = do+ res <- choice blockParsers <?> "block"+ pos <- getPosition+ tr <- getOption readerTrace+ when tr $+ trace (printf "line %d: %s" (sourceLine pos)+ (take 60 $ show $ B.toList res)) (return ())+ return res -commentBlock :: Parser [Char] ParserState Block+commentBlock :: Parser [Char] ParserState Blocks commentBlock = try $ do string "###." manyTill anyLine blanklines- return Null+ return mempty -codeBlock :: Parser [Char] ParserState Block+codeBlock :: Parser [Char] ParserState Blocks codeBlock = codeBlockBc <|> codeBlockPre -codeBlockBc :: Parser [Char] ParserState Block+codeBlockBc :: Parser [Char] ParserState Blocks codeBlockBc = try $ do string "bc. " contents <- manyTill anyLine blanklines- return $ CodeBlock ("",[],[]) $ unlines contents+ return $ B.codeBlock (unlines contents) -- | Code Blocks in Textile are between <pre> and </pre>-codeBlockPre :: Parser [Char] ParserState Block+codeBlockPre :: Parser [Char] ParserState Blocks codeBlockPre = try $ do (t@(TagOpen _ attrs),_) <- htmlTag (tagOpen (=="pre") (const True)) result' <- (innerText . parseTags) `fmap` -- remove internal tags@@ -169,29 +182,29 @@ let classes = words $ fromAttrib "class" t let ident = fromAttrib "id" t let kvs = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]- return $ CodeBlock (ident,classes,kvs) result'''+ return $ B.codeBlockWith (ident,classes,kvs) result''' -- | Header of the form "hN. content" with N in 1..6-header :: Parser [Char] ParserState Block+header :: Parser [Char] ParserState Blocks header = try $ do char 'h' level <- digitToInt <$> oneOf "123456" attr <- attributes char '.'- whitespace- name <- normalizeSpaces <$> manyTill inline blockBreak- attr' <- registerHeader attr (B.fromList name)- return $ Header level attr' name+ lookAhead whitespace+ name <- trimInlines . mconcat <$> manyTill inline blockBreak+ attr' <- registerHeader attr name+ return $ B.headerWith attr' level name -- | Blockquote of the form "bq. content"-blockQuote :: Parser [Char] ParserState Block+blockQuote :: Parser [Char] ParserState Blocks blockQuote = try $ do string "bq" >> attributes >> char '.' >> whitespace- BlockQuote . singleton <$> para+ B.blockQuote <$> para -- Horizontal rule -hrule :: Parser [Char] st Block+hrule :: Parser [Char] st Blocks hrule = try $ do skipSpaces start <- oneOf "-*"@@ -199,62 +212,62 @@ skipMany (spaceChar <|> char start) newline optional blanklines- return HorizontalRule+ return B.horizontalRule -- Lists handling -- | Can be a bullet list or an ordered list. This implementation is -- strict in the nesting, sublist must start at exactly "parent depth -- plus one"-anyList :: Parser [Char] ParserState Block+anyList :: Parser [Char] ParserState Blocks anyList = try $ anyListAtDepth 1 <* blanklines -- | This allow one type of list to be nested into an other type, -- provided correct nesting-anyListAtDepth :: Int -> Parser [Char] ParserState Block+anyListAtDepth :: Int -> Parser [Char] ParserState Blocks anyListAtDepth depth = choice [ bulletListAtDepth depth, orderedListAtDepth depth, definitionList ] -- | Bullet List of given depth, depth being the number of leading '*'-bulletListAtDepth :: Int -> Parser [Char] ParserState Block-bulletListAtDepth depth = try $ BulletList <$> many1 (bulletListItemAtDepth depth)+bulletListAtDepth :: Int -> Parser [Char] ParserState Blocks+bulletListAtDepth depth = try $ B.bulletList <$> many1 (bulletListItemAtDepth depth) -- | Bullet List Item of given depth, depth being the number of -- leading '*'-bulletListItemAtDepth :: Int -> Parser [Char] ParserState [Block]+bulletListItemAtDepth :: Int -> Parser [Char] ParserState Blocks bulletListItemAtDepth = genericListItemAtDepth '*' -- | Ordered List of given depth, depth being the number of -- leading '#'-orderedListAtDepth :: Int -> Parser [Char] ParserState Block+orderedListAtDepth :: Int -> Parser [Char] ParserState Blocks orderedListAtDepth depth = try $ do items <- many1 (orderedListItemAtDepth depth)- return (OrderedList (1, DefaultStyle, DefaultDelim) items)+ return $ B.orderedList items -- | Ordered List Item of given depth, depth being the number of -- leading '#'-orderedListItemAtDepth :: Int -> Parser [Char] ParserState [Block]+orderedListItemAtDepth :: Int -> Parser [Char] ParserState Blocks orderedListItemAtDepth = genericListItemAtDepth '#' -- | Common implementation of list items-genericListItemAtDepth :: Char -> Int -> Parser [Char] ParserState [Block]+genericListItemAtDepth :: Char -> Int -> Parser [Char] ParserState Blocks genericListItemAtDepth c depth = try $ do count depth (char c) >> attributes >> whitespace- p <- many listInline+ p <- mconcat <$> many listInline newline- sublist <- option [] (singleton <$> anyListAtDepth (depth + 1))- return (Plain p : sublist)+ sublist <- option mempty (anyListAtDepth (depth + 1))+ return $ (B.plain p) <> sublist -- | A definition list is a set of consecutive definition items-definitionList :: Parser [Char] ParserState Block-definitionList = try $ DefinitionList <$> many1 definitionListItem+definitionList :: Parser [Char] ParserState Blocks+definitionList = try $ B.definitionList <$> many1 definitionListItem -- | List start character. listStart :: Parser [Char] st Char listStart = oneOf "*#-" -listInline :: Parser [Char] ParserState Inline+listInline :: Parser [Char] ParserState Inlines listInline = try (notFollowedBy newline >> inline) <|> try (endline <* notFollowedBy listStart) @@ -262,16 +275,16 @@ -- the term defined, then spaces and ":=". The definition follows, on -- the same single line, or spaned on multiple line, after a line -- break.-definitionListItem :: Parser [Char] ParserState ([Inline], [[Block]])+definitionListItem :: Parser [Char] ParserState (Inlines, [Blocks]) definitionListItem = try $ do string "- "- term <- many1Till inline (try (whitespace >> string ":="))+ term <- mconcat <$> many1Till inline (try (whitespace >> string ":=")) def' <- multilineDef <|> inlineDef return (term, def')- where inlineDef :: Parser [Char] ParserState [[Block]]- inlineDef = liftM (\d -> [[Plain d]])- $ optional whitespace >> many listInline <* newline- multilineDef :: Parser [Char] ParserState [[Block]]+ where inlineDef :: Parser [Char] ParserState [Blocks]+ inlineDef = liftM (\d -> [B.plain d])+ $ optional whitespace >> (trimInlines . mconcat <$> many listInline) <* newline+ multilineDef :: Parser [Char] ParserState [Blocks] multilineDef = try $ do optional whitespace >> newline s <- many1Till anyChar (try (string "=:" >> newline))@@ -288,59 +301,57 @@ -- raw content -- | A raw Html Block, optionally followed by blanklines-rawHtmlBlock :: Parser [Char] ParserState Block+rawHtmlBlock :: Parser [Char] ParserState Blocks rawHtmlBlock = try $ do (_,b) <- htmlTag isBlockTag optional blanklines- return $ RawBlock (Format "html") b+ return $ B.rawBlock "html" b -- | Raw block of LaTeX content-rawLaTeXBlock' :: Parser [Char] ParserState Block+rawLaTeXBlock' :: Parser [Char] ParserState Blocks rawLaTeXBlock' = do guardEnabled Ext_raw_tex- RawBlock (Format "latex") <$> (rawLaTeXBlock <* spaces)+ B.rawBlock "latex" <$> (rawLaTeXBlock <* spaces) -- | In textile, paragraphs are separated by blank lines.-para :: Parser [Char] ParserState Block-para = try $ Para . normalizeSpaces <$> manyTill inline blockBreak-+para :: Parser [Char] ParserState Blocks+para = B.para . trimInlines . mconcat <$> manyTill inline blockBreak -- Tables -- | A table cell spans until a pipe |-tableCell :: Parser [Char] ParserState TableCell+tableCell :: Parser [Char] ParserState Blocks tableCell = do c <- many1 (noneOf "|\n")- content <- parseFromString (many1 inline) c- return $ [ Plain $ normalizeSpaces content ]+ content <- trimInlines . mconcat <$> parseFromString (many1 inline) c+ return $ B.plain content -- | A table row is made of many table cells-tableRow :: Parser [Char] ParserState [TableCell]+tableRow :: Parser [Char] ParserState [Blocks] tableRow = try $ ( char '|' *> (endBy1 tableCell (optional blankline *> char '|')) <* newline) -- | Many table rows-tableRows :: Parser [Char] ParserState [[TableCell]]+tableRows :: Parser [Char] ParserState [[Blocks]] tableRows = many1 tableRow -- | Table headers are made of cells separated by a tag "|_."-tableHeaders :: Parser [Char] ParserState [TableCell]+tableHeaders :: Parser [Char] ParserState [Blocks] tableHeaders = let separator = (try $ string "|_.") in try $ ( separator *> (sepBy1 tableCell separator) <* char '|' <* newline ) -- | A table with an optional header. Current implementation can -- handle tables with and without header, but will parse cells -- alignment attributes as content.-table :: Parser [Char] ParserState Block+table :: Parser [Char] ParserState Blocks table = try $ do- headers <- option [] tableHeaders+ headers <- option mempty tableHeaders rows <- tableRows blanklines let nbOfCols = max (length headers) (length $ head rows)- return $ Table []- (replicate nbOfCols AlignDefault)- (replicate nbOfCols 0.0)+ return $ B.table mempty+ (zip (replicate nbOfCols AlignDefault) (replicate nbOfCols 0.0)) headers rows @@ -348,8 +359,8 @@ -- | Blocks like 'p' and 'table' do not need explicit block tag. -- However, they can be used to set HTML/CSS attributes when needed. maybeExplicitBlock :: String -- ^ block tag name- -> Parser [Char] ParserState Block -- ^ implicit block- -> Parser [Char] ParserState Block+ -> Parser [Char] ParserState Blocks -- ^ implicit block+ -> Parser [Char] ParserState Blocks maybeExplicitBlock name blk = try $ do optional $ try $ string name >> attributes >> char '.' >> optional whitespace >> optional endline@@ -363,73 +374,74 @@ -- | Any inline element-inline :: Parser [Char] ParserState Inline-inline = choice inlineParsers <?> "inline"+inline :: Parser [Char] ParserState Inlines+inline = do+ choice inlineParsers <?> "inline" -- | Inline parsers tried in order-inlineParsers :: [Parser [Char] ParserState Inline]+inlineParsers :: [Parser [Char] ParserState Inlines] inlineParsers = [ str , whitespace , endline , code , escapedInline- , htmlSpan+ , inlineMarkup+ , groupedInlineMarkup , rawHtmlInline , rawLaTeXInline' , note- , try $ (char '[' *> inlineMarkup <* char ']')- , inlineMarkup , link , image , mark- , (Str . (:[])) <$> characterReference+ , (B.str . (:[])) <$> characterReference , smartPunctuation inline , symbol ] -- | Inline markups-inlineMarkup :: Parser [Char] ParserState Inline-inlineMarkup = choice [ simpleInline (string "??") (Cite [])- , simpleInline (string "**") Strong- , simpleInline (string "__") Emph- , simpleInline (char '*') Strong- , simpleInline (char '_') Emph- , simpleInline (char '+') Emph -- approximates underline- , simpleInline (char '-' <* notFollowedBy (char '-')) Strikeout- , simpleInline (char '^') Superscript- , simpleInline (char '~') Subscript+inlineMarkup :: Parser [Char] ParserState Inlines+inlineMarkup = choice [ simpleInline (string "??") (B.cite [])+ , simpleInline (string "**") B.strong+ , simpleInline (string "__") B.emph+ , simpleInline (char '*') B.strong+ , simpleInline (char '_') B.emph+ , simpleInline (char '+') B.emph -- approximates underline+ , simpleInline (char '-' <* notFollowedBy (char '-')) B.strikeout+ , simpleInline (char '^') B.superscript+ , simpleInline (char '~') B.subscript+ , simpleInline (char '%') id ] -- | Trademark, registered, copyright-mark :: Parser [Char] st Inline+mark :: Parser [Char] st Inlines mark = try $ char '(' >> (try tm <|> try reg <|> copy) -reg :: Parser [Char] st Inline+reg :: Parser [Char] st Inlines reg = do oneOf "Rr" char ')'- return $ Str "\174"+ return $ B.str "\174" -tm :: Parser [Char] st Inline+tm :: Parser [Char] st Inlines tm = do oneOf "Tt" oneOf "Mm" char ')'- return $ Str "\8482"+ return $ B.str "\8482" -copy :: Parser [Char] st Inline+copy :: Parser [Char] st Inlines copy = do oneOf "Cc" char ')'- return $ Str "\169"+ return $ B.str "\169" -note :: Parser [Char] ParserState Inline+note :: Parser [Char] ParserState Inlines note = try $ do ref <- (char '[' *> many1 digit <* char ']') notes <- stateNotes <$> getState case lookup ref notes of Nothing -> fail "note not found"- Just raw -> liftM Note $ parseFromString parseBlocks raw+ Just raw -> B.note <$> parseFromString parseBlocks raw -- | Special chars markupChars :: [Char]@@ -450,7 +462,7 @@ hyphenedWords :: Parser [Char] ParserState String hyphenedWords = do x <- wordChunk- xs <- many (try $ char '-' >> wordChunk)+ xs <- many (try $ char '-' >> wordChunk) return $ intercalate "-" (x:xs) wordChunk :: Parser [Char] ParserState String@@ -462,99 +474,99 @@ return $ hd:tl -- | Any string-str :: Parser [Char] ParserState Inline+str :: Parser [Char] ParserState Inlines str = do baseStr <- hyphenedWords -- RedCloth compliance : if parsed word is uppercase and immediatly -- followed by parens, parens content is unconditionally word acronym fullStr <- option baseStr $ try $ do guard $ all isUpper baseStr- acro <- enclosed (char '(') (char ')') anyChar+ acro <- enclosed (char '(') (char ')') anyChar' return $ concat [baseStr, " (", acro, ")"] updateLastStrPos- return $ Str fullStr---- | Textile allows HTML span infos, we discard them-htmlSpan :: Parser [Char] ParserState Inline-htmlSpan = try $ Str <$> ( char '%' *> attributes *> manyTill anyChar (char '%') )+ return $ B.str fullStr -- | Some number of space chars-whitespace :: Parser [Char] ParserState Inline-whitespace = many1 spaceChar >> return Space <?> "whitespace"+whitespace :: Parser [Char] ParserState Inlines+whitespace = many1 spaceChar >> return B.space <?> "whitespace" -- | In Textile, an isolated endline character is a line break-endline :: Parser [Char] ParserState Inline+endline :: Parser [Char] ParserState Inlines endline = try $ do newline >> notFollowedBy blankline- return LineBreak+ return B.linebreak -rawHtmlInline :: Parser [Char] ParserState Inline-rawHtmlInline = RawInline (Format "html") . snd <$> htmlTag isInlineTag+rawHtmlInline :: Parser [Char] ParserState Inlines+rawHtmlInline = B.rawInline "html" . snd <$> htmlTag isInlineTag -- | Raw LaTeX Inline-rawLaTeXInline' :: Parser [Char] ParserState Inline+rawLaTeXInline' :: Parser [Char] ParserState Inlines rawLaTeXInline' = try $ do guardEnabled Ext_raw_tex- rawLaTeXInline+ B.singleton <$> rawLaTeXInline -- | Textile standard link syntax is "label":target. But we -- can also have ["label":target].-link :: Parser [Char] ParserState Inline-link = linkB <|> linkNoB--linkNoB :: Parser [Char] ParserState Inline-linkNoB = try $ do- name <- surrounded (char '"') inline- char ':'- let stopChars = "!.,;:"- url <- manyTill nonspaceChar (lookAhead $ space <|> try (oneOf stopChars >> (space <|> newline)))- let name' = if name == [Str "$"] then [Str url] else name- return $ Link name' (url, "")--linkB :: Parser [Char] ParserState Inline-linkB = try $ do- char '['- name <- surrounded (char '"') inline+link :: Parser [Char] ParserState Inlines+link = try $ do+ bracketed <- (True <$ char '[') <|> return False+ char '"' *> notFollowedBy (oneOf " \t\n\r")+ attr <- attributes+ name <- trimInlines . mconcat <$>+ withQuoteContext InDoubleQuote (many1Till inline (char '"')) char ':'- url <- manyTill nonspaceChar (char ']')- let name' = if name == [Str "$"] then [Str url] else name- return $ Link name' (url, "")+ let stop = if bracketed+ then char ']'+ else lookAhead $ space <|>+ try (oneOf "!.,;:" *> (space <|> newline))+ url <- manyTill nonspaceChar stop+ let name' = if B.toList name == [Str "$"] then B.str url else name+ return $ if attr == nullAttr+ then B.link url "" name'+ else B.spanWith attr $ B.link url "" name' -- | image embedding-image :: Parser [Char] ParserState Inline+image :: Parser [Char] ParserState Inlines image = try $ do char '!' >> notFollowedBy space- src <- manyTill anyChar (lookAhead $ oneOf "!(")- alt <- option "" (try $ (char '(' >> manyTill anyChar (char ')')))+ src <- manyTill anyChar' (lookAhead $ oneOf "!(")+ alt <- option "" (try $ (char '(' >> manyTill anyChar' (char ')'))) char '!'- return $ Image [Str alt] (src, alt)+ return $ B.image src alt (B.str alt) -escapedInline :: Parser [Char] ParserState Inline+escapedInline :: Parser [Char] ParserState Inlines escapedInline = escapedEqs <|> escapedTag -escapedEqs :: Parser [Char] ParserState Inline-escapedEqs = Str <$> (try $ string "==" *> manyTill anyChar (try $ string "=="))+escapedEqs :: Parser [Char] ParserState Inlines+escapedEqs = B.str <$>+ (try $ string "==" *> manyTill anyChar' (try $ string "==")) -- | literal text escaped btw <notextile> tags-escapedTag :: Parser [Char] ParserState Inline-escapedTag = Str <$>- (try $ string "<notextile>" *> manyTill anyChar (try $ string "</notextile>"))+escapedTag :: Parser [Char] ParserState Inlines+escapedTag = B.str <$>+ (try $ string "<notextile>" *>+ manyTill anyChar' (try $ string "</notextile>")) -- | Any special symbol defined in wordBoundaries-symbol :: Parser [Char] ParserState Inline-symbol = Str . singleton <$> (oneOf wordBoundaries <|> oneOf markupChars)+symbol :: Parser [Char] ParserState Inlines+symbol = B.str . singleton <$> (oneOf wordBoundaries <|> oneOf markupChars) -- | Inline code-code :: Parser [Char] ParserState Inline+code :: Parser [Char] ParserState Inlines code = code1 <|> code2 -code1 :: Parser [Char] ParserState Inline-code1 = Code nullAttr <$> surrounded (char '@') anyChar+-- any character except a newline before a blank line+anyChar' :: Parser [Char] ParserState Char+anyChar' =+ satisfy (/='\n') <|> (try $ char '\n' <* notFollowedBy blankline) -code2 :: Parser [Char] ParserState Inline+code1 :: Parser [Char] ParserState Inlines+code1 = B.code <$> surrounded (char '@') anyChar'++code2 :: Parser [Char] ParserState Inlines code2 = do htmlTag (tagOpen (=="tt") null)- Code nullAttr <$> manyTill anyChar (try $ htmlTag $ tagClose (=="tt"))+ B.code <$> manyTill anyChar' (try $ htmlTag $ tagClose (=="tt")) -- | Html / CSS attributes attributes :: Parser [Char] ParserState Attr@@ -566,7 +578,7 @@ classIdAttr :: Parser [Char] ParserState (Attr -> Attr) classIdAttr = try $ do -- (class class #id) char '('- ws <- words `fmap` manyTill anyChar (char ')')+ ws <- words `fmap` manyTill anyChar' (char ')') case reverse ws of [] -> return $ \(_,_,keyvals) -> ("",[],keyvals) (('#':ident'):classes') -> return $ \(_,_,keyvals) ->@@ -576,28 +588,49 @@ styleAttr :: Parser [Char] ParserState (Attr -> Attr) styleAttr = do- style <- try $ enclosed (char '{') (char '}') anyChar+ style <- try $ enclosed (char '{') (char '}') anyChar' return $ \(id',classes,keyvals) -> (id',classes,("style",style):keyvals) langAttr :: Parser [Char] ParserState (Attr -> Attr) langAttr = do- lang <- try $ enclosed (char '[') (char ']') anyChar+ lang <- try $ enclosed (char '[') (char ']') alphaNum return $ \(id',classes,keyvals) -> (id',classes,("lang",lang):keyvals) -- | Parses material surrounded by a parser. surrounded :: Parser [Char] st t -- ^ surrounding parser -> Parser [Char] st a -- ^ content parser (to be used repeatedly) -> Parser [Char] st [a]-surrounded border = enclosed (border *> notFollowedBy (oneOf " \t\n\r")) (try border)+surrounded border =+ enclosed (border *> notFollowedBy (oneOf " \t\n\r")) (try border) --- | Inlines are most of the time of the same form simpleInline :: Parser [Char] ParserState t -- ^ surrounding parser- -> ([Inline] -> Inline) -- ^ Inline constructor- -> Parser [Char] ParserState Inline -- ^ content parser (to be used repeatedly)-simpleInline border construct = surrounded border inlineWithAttribute >>=- return . construct . normalizeSpaces- where inlineWithAttribute = (try $ optional attributes) >> inline+ -> (Inlines -> Inlines) -- ^ Inline constructor+ -> Parser [Char] ParserState Inlines -- ^ content parser (to be used repeatedly)+simpleInline border construct = try $ do+ st <- getState+ pos <- getPosition+ let afterString = stateLastStrPos st == Just pos+ guard $ not afterString+ border *> notFollowedBy (oneOf " \t\n\r")+ attr <- attributes+ body <- trimInlines . mconcat <$>+ withQuoteContext InSingleQuote+ (manyTill inline (try border <* notFollowedBy alphaNum))+ return $ construct $+ if attr == nullAttr+ then body+ else B.spanWith attr body +groupedInlineMarkup :: Parser [Char] ParserState Inlines+groupedInlineMarkup = try $ do+ char '['+ sp1 <- option mempty $ B.space <$ whitespace+ result <- withQuoteContext InSingleQuote inlineMarkup+ sp2 <- option mempty $ B.space <$ whitespace+ char ']'+ return $ sp1 <> result <> sp2+ -- | Create a singleton list singleton :: a -> [a] singleton x = [x]+
src/Text/Pandoc/SelfContained.hs view
@@ -50,14 +50,16 @@ convertTag :: Maybe FilePath -> Tag String -> IO (Tag String) convertTag userdata t@(TagOpen tagname as)- | tagname `elem` ["img", "embed", "video", "input", "audio", "source"] =- case fromAttrib "src" t of- [] -> return t- src -> do- (raw, mime) <- getRaw userdata (fromAttrib "type" t) src- let enc = "data:" ++ mime ++ ";base64," ++ toString (encode raw)- return $ TagOpen tagname- (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])+ | tagname `elem` ["img", "embed", "video", "input", "audio", "source"] = do+ as' <- mapM processAttribute as+ return $ TagOpen tagname as'+ where processAttribute (x,y) =+ if x == "src" || x == "href" || x == "poster"+ then do+ (raw, mime) <- getRaw userdata (fromAttrib "type" t) y+ let enc = "data:" ++ mime ++ ";base64," ++ toString (encode raw)+ return (x, enc)+ else return (x,y) convertTag userdata t@(TagOpen "script" as) = case fromAttrib "src" t of [] -> return t
@@ -1,5 +1,5 @@ {-# LANGUAGE DeriveDataTypeable, CPP, MultiParamTypeClasses,- FlexibleContexts #-}+ FlexibleContexts, ScopedTypeVariables #-} {- Copyright (C) 2006-2013 John MacFarlane <jgm@berkeley.edu> @@ -56,6 +56,7 @@ stringify, compactify, compactify',+ compactify'DL, Element (..), hierarchicalize, uniqueIdent,@@ -82,7 +83,7 @@ import Text.Pandoc.Definition import Text.Pandoc.Walk import Text.Pandoc.Generic-import Text.Pandoc.Builder (Blocks, ToMetaValue(..))+import Text.Pandoc.Builder (Inlines, Blocks, ToMetaValue(..)) import qualified Text.Pandoc.Builder as B import qualified Text.Pandoc.UTF8 as UTF8 import System.Environment (getProgName)@@ -120,7 +121,9 @@ #ifdef HTTP_CONDUIT import Data.ByteString.Lazy (toChunks) import Network.HTTP.Conduit (httpLbs, parseUrl, withManager,- responseBody, responseHeaders)+ responseBody, responseHeaders, addProxy,+ Request(port,host))+import System.Environment (getEnv) import Network.HTTP.Types.Header ( hContentType) import Network (withSocketsDo) #else@@ -232,9 +235,9 @@ _ | x >= 50 -> "L" ++ toRomanNumeral (x - 50) _ | x >= 40 -> "XL" ++ toRomanNumeral (x - 40) _ | x >= 10 -> "X" ++ toRomanNumeral (x - 10)- _ | x >= 9 -> "IX" ++ toRomanNumeral (x - 5)+ _ | x == 9 -> "IX" _ | x >= 5 -> "V" ++ toRomanNumeral (x - 5)- _ | x >= 4 -> "IV" ++ toRomanNumeral (x - 4)+ _ | x == 4 -> "IV" _ | x >= 1 -> "I" ++ toRomanNumeral (x - 1) _ -> "" @@ -433,6 +436,21 @@ _ -> items _ -> items +-- | Like @compactify'@, but akts on items of definition lists.+compactify'DL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]+compactify'DL items =+ let defs = concatMap snd items+ defBlocks = reverse $ concatMap B.toList defs+ in case defBlocks of+ (Para x:_) -> if not $ any isPara (drop 1 defBlocks)+ then let (t,ds) = last items+ lastDef = B.toList $ last ds+ ds' = init ds +++ [B.fromList $ init lastDef ++ [Plain x]]+ in init items ++ [(t, ds')]+ else items+ _ -> items+ isPara :: Block -> Bool isPara (Para _) = True isPara _ = False@@ -648,7 +666,13 @@ #ifdef HTTP_CONDUIT | otherwise = withSocketsDo $ E.try $ do req <- parseUrl u- resp <- withManager $ httpLbs req+ (proxy :: Either E.SomeException String) <- E.try $ getEnv "http_proxy"+ let req' = case proxy of+ Left _ -> req+ Right pr -> case parseUrl pr of+ Just r -> addProxy (host r) (port r) req+ Nothing -> req+ resp <- withManager $ httpLbs req' return (BS.concat $ toChunks $ responseBody resp, UTF8.toString `fmap` lookup hContentType (responseHeaders resp)) #else@@ -690,5 +714,3 @@ (d,x):_ | all isSpace x -> return d _ -> fail $ "Could not read `" ++ s ++ "'"--
src/Text/Pandoc/Templates.hs view
@@ -190,6 +190,7 @@ Just (String t) -> T.stripEnd t Just (Number n) -> T.pack $ show n Just (Bool True) -> "true"+ Just (Object _) -> "true" Just _ -> mempty Nothing -> mempty
src/Text/Pandoc/Writers/AsciiDoc.hs view
@@ -217,7 +217,9 @@ let makeCell [Plain x] = do d <- blockListToAsciiDoc opts [Plain x] return $ text "|" <> chomp d makeCell [Para x] = makeCell [Plain x]- makeCell _ = return $ text "|" <> "[multiblock cell omitted]"+ makeCell [] = return $ text "|"+ makeCell bs = do d <- blockListToAsciiDoc opts bs+ return $ text "a|" $$ d let makeRow cells = hsep `fmap` mapM makeCell cells rows' <- mapM makeRow rows head' <- makeRow headers@@ -227,7 +229,7 @@ else 100000 let maxwidth = maximum $ map offset (head':rows') let body = if maxwidth > colwidth then vsep rows' else vcat rows'- let border = text $ "|" ++ replicate ((min maxwidth colwidth) - 1) '='+ let border = text $ "|" ++ replicate (max 5 (min maxwidth colwidth) - 1) '=' return $ caption'' $$ tablespec $$ border $$ head'' $$ body $$ border $$ blankline blockToAsciiDoc opts (BulletList items) = do
src/Text/Pandoc/Writers/ConTeXt.hs view
@@ -35,7 +35,7 @@ import Text.Pandoc.Options import Text.Pandoc.Walk (query) import Text.Printf ( printf )-import Data.List ( intercalate, isPrefixOf )+import Data.List ( intercalate ) import Control.Monad.State import Text.Pandoc.Pretty import Text.Pandoc.Templates ( renderTemplate' )@@ -283,14 +283,6 @@ inlineToConTeXt (RawInline _ _) = return empty inlineToConTeXt (LineBreak) = return $ text "\\crlf" <> cr inlineToConTeXt Space = return space--- autolink-inlineToConTeXt (Link [Str str] (src, tit))- | if "mailto:" `isPrefixOf` src- then src == escapeURI ("mailto:" ++ str)- else src == escapeURI str =- inlineToConTeXt (Link- [RawInline "context" "\\hyphenatedurl{", Str str, RawInline "context" "}"]- (src, tit)) -- Handle HTML-like internal document references to sections inlineToConTeXt (Link txt (('#' : ref), _)) = do opts <- gets stOptions@@ -305,6 +297,7 @@ <> brackets (text ref) inlineToConTeXt (Link txt (src, _)) = do+ let isAutolink = txt == [Str src] st <- get let next = stNextRef st put $ st {stNextRef = next + 1}@@ -313,8 +306,9 @@ return $ "\\useURL" <> brackets (text ref) <> brackets (text $ escapeStringUsing [('#',"\\#"),('%',"\\%")] src)- <> brackets empty- <> brackets label+ <> (if isAutolink+ then empty+ else brackets empty <> brackets label) <> "\\from" <> brackets (text ref) inlineToConTeXt (Image _ (src, _)) = do
src/Text/Pandoc/Writers/Custom.hs view
@@ -131,7 +131,7 @@ -- | Convert Pandoc to custom markup. writeCustom :: FilePath -> WriterOptions -> Pandoc -> IO String writeCustom luaFile opts doc = do- luaScript <- readFile luaFile+ luaScript <- C8.unpack `fmap` C8.readFile luaFile lua <- Lua.newstate Lua.openlibs lua Lua.loadstring lua luaScript "custom"
src/Text/Pandoc/Writers/Docbook.hs view
@@ -32,12 +32,14 @@ import Text.Pandoc.Definition import Text.Pandoc.XML import Text.Pandoc.Shared+import Text.Pandoc.Walk import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Readers.TeXMath import Data.List ( isPrefixOf, intercalate, isSuffixOf ) import Data.Char ( toLower )+import Data.Monoid ( Any(..) ) import Text.Pandoc.Highlighting ( languages, languagesByExtension ) import Text.Pandoc.Pretty import qualified Text.Pandoc.Builder as B@@ -165,8 +167,9 @@ (inTagsIndented "imageobject" (selfClosingTag "imagedata" [("fileref",src)])) $$ inTagsSimple "textobject" (inTagsSimple "phrase" alt))-blockToDocbook opts (Para lst) =- inTagsIndented "para" $ inlinesToDocbook opts lst+blockToDocbook opts (Para lst)+ | hasLineBreaks lst = flush $ nowrap $ inTagsSimple "literallayout" $ inlinesToDocbook opts lst+ | otherwise = inTagsIndented "para" $ inlinesToDocbook opts lst blockToDocbook opts (BlockQuote blocks) = inTagsIndented "blockquote" $ blocksToDocbook opts blocks blockToDocbook _ (CodeBlock (_,classes,_) str) =@@ -182,10 +185,11 @@ else languagesByExtension . map toLower $ s langs = concatMap langsFrom classes blockToDocbook opts (BulletList lst) =- inTagsIndented "itemizedlist" $ listItemsToDocbook opts lst+ let attribs = [("spacing", "compact") | isTightList lst]+ in inTags True "itemizedlist" attribs $ listItemsToDocbook opts lst blockToDocbook _ (OrderedList _ []) = empty blockToDocbook opts (OrderedList (start, numstyle, _) (first:rest)) =- let attribs = case numstyle of+ let numeration = case numstyle of DefaultStyle -> [] Decimal -> [("numeration", "arabic")] Example -> [("numeration", "arabic")]@@ -193,14 +197,17 @@ LowerAlpha -> [("numeration", "loweralpha")] UpperRoman -> [("numeration", "upperroman")] LowerRoman -> [("numeration", "lowerroman")]- items = if start == 1- then listItemsToDocbook opts (first:rest)- else (inTags True "listitem" [("override",show start)]- (blocksToDocbook opts $ map plainToPara first)) $$- listItemsToDocbook opts rest+ spacing = [("spacing", "compact") | isTightList (first:rest)]+ attribs = numeration ++ spacing+ items = if start == 1+ then listItemsToDocbook opts (first:rest)+ else (inTags True "listitem" [("override",show start)]+ (blocksToDocbook opts $ map plainToPara first)) $$+ listItemsToDocbook opts rest in inTags True "orderedlist" attribs items blockToDocbook opts (DefinitionList lst) =- inTagsIndented "variablelist" $ deflistItemsToDocbook opts lst+ let attribs = [("spacing", "compact") | isTightList $ concatMap snd lst]+ in inTags True "variablelist" attribs $ deflistItemsToDocbook opts lst blockToDocbook _ (RawBlock f str) | f == "docbook" = text str -- raw XML block | f == "html" = text str -- allow html for backwards compatibility@@ -226,6 +233,16 @@ (inTags True "tgroup" [("cols", show (length headers))] $ coltags $$ head' $$ body') +hasLineBreaks :: [Inline] -> Bool+hasLineBreaks = getAny . query isLineBreak . walk removeNote+ where+ removeNote :: Inline -> Inline+ removeNote (Note _) = Str ""+ removeNote x = x+ isLineBreak :: Inline -> Any+ isLineBreak LineBreak = Any True+ isLineBreak _ = Any False+ alignmentToString :: Alignment -> [Char] alignmentToString alignment = case alignment of AlignLeft -> "left"@@ -293,7 +310,7 @@ fixNS = everywhere (mkT fixNS') inlineToDocbook _ (RawInline f x) | f == "html" || f == "docbook" = text x | otherwise = empty-inlineToDocbook _ LineBreak = flush $ inTagsSimple "literallayout" (text "\n")+inlineToDocbook _ LineBreak = text "\n" inlineToDocbook _ Space = space inlineToDocbook opts (Link txt (src, _)) = if isPrefixOf "mailto:" src
src/Text/Pandoc/Writers/Docx.hs view
@@ -116,6 +116,7 @@ case writerReferenceDocx opts of Just f -> B.readFile f Nothing -> readDataFile datadir "reference.docx"+ distArchive <- liftM (toArchive . toLazy) $ readDataFile Nothing "reference.docx" ((contents, footnotes), st) <- runStateT (writeOpenXML opts{writerWrapText = False} doc') defaultWriterState@@ -217,7 +218,7 @@ -- styles let newstyles = styleToOpenXml $ writerHighlightStyle opts let stylepath = "word/styles.xml"- styledoc <- parseXml refArchive stylepath+ styledoc <- parseXml refArchive distArchive stylepath let styledoc' = styledoc{ elContent = elContent styledoc ++ [Elem x | x <- newstyles, writerHighlight opts] } let styleEntry = toEntry stylepath epochtime $ renderXml styledoc'@@ -256,8 +257,9 @@ ] let relsEntry = toEntry relsPath epochtime $ renderXml rels - let entryFromArchive path = (toEntry path epochtime . renderXml) `fmap`- parseXml refArchive path+ let entryFromArchive path =+ (toEntry path epochtime . renderXml) `fmap`+ parseXml refArchive distArchive path docPropsAppEntry <- entryFromArchive "docProps/app.xml" themeEntry <- entryFromArchive "word/theme/theme1.xml" fontTableEntry <- entryFromArchive "word/fontTable.xml"@@ -814,10 +816,10 @@ br :: Element br = mknode "w:r" [] [mknode "w:br" [("w:type","textWrapping")] () ] -parseXml :: Archive -> String -> IO Element-parseXml refArchive relpath =- case findEntryByPath relpath refArchive of- Just e -> case parseXMLDoc $ UTF8.toStringLazy $ fromEntry e of- Just d -> return d- Nothing -> fail $ relpath ++ " corrupt in reference docx"- Nothing -> fail $ relpath ++ " missing in reference docx"+parseXml :: Archive -> Archive -> String -> IO Element+parseXml refArchive distArchive relpath =+ case ((findEntryByPath relpath refArchive `mplus`+ findEntryByPath relpath distArchive)+ >>= parseXMLDoc . UTF8.toStringLazy . fromEntry) of+ Just d -> return d+ Nothing -> fail $ relpath ++ " corrupt or missing in reference docx"
src/Text/Pandoc/Writers/EPUB.hs view
@@ -35,7 +35,7 @@ import Data.List ( isInfixOf, intercalate ) import System.Environment ( getEnv ) import Text.Printf (printf)-import System.FilePath ( (</>), takeBaseName, 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@@ -56,7 +56,7 @@ import Text.Pandoc.UUID import Text.Pandoc.Writers.HTML import Text.Pandoc.Writers.Markdown ( writePlain )-import Data.Char ( toLower, isDigit )+import Data.Char ( toLower, isDigit, isAlphaNum ) import Network.URI ( unEscapeString ) import Text.Pandoc.MIME (getMimeType) #if MIN_VERSION_base(4,6,0)@@ -65,6 +65,7 @@ #endif import Control.Exception (catch, SomeException) import Text.Blaze.Html.Renderer.Utf8 (renderHtml)+import Text.HTML.TagSoup -- A Chapter includes a list of blocks and maybe a section -- number offset. Note, some chapters are unnumbered. The section@@ -131,6 +132,11 @@ removeNote (Note _) = Str "" removeNote x = x +toId :: FilePath -> String+toId = map (\x -> if isAlphaNum x || x == '-' || x == '_'+ then x+ else '_') . takeFileName+ getEPUBMetadata :: WriterOptions -> Meta -> IO EPUBMetadata getEPUBMetadata opts meta = do let md = metadataFromMeta opts meta@@ -341,15 +347,15 @@ let tpEntry = mkEntry "title_page.xhtml" tpContent -- handle pictures- picsRef <- newIORef []- Pandoc _ blocks <- walkM- (transformInline opts' picsRef) doc- pics <- readIORef picsRef+ mediaRef <- newIORef []+ Pandoc _ blocks <- walkM (transformInline opts' mediaRef) doc >>=+ walkM (transformBlock opts' mediaRef)+ pics <- readIORef mediaRef let readPicEntry entries (oldsrc, newsrc) = do res <- fetchItem (writerSourceURL opts') oldsrc case res of Left _ -> do- warn $ "Could not find image `" ++ oldsrc ++ "', skipping..."+ warn $ "Could not find media `" ++ oldsrc ++ "', skipping..." return entries Right (img,_) -> return $ (toEntry newsrc epochtime $ B.fromChunks . (:[]) $ img) : entries@@ -426,7 +432,7 @@ -- contents.opf let chapterNode ent = unode "item" !- ([("id", takeBaseName $ eRelativePath ent),+ ([("id", toId $ eRelativePath ent), ("href", eRelativePath ent), ("media-type", "application/xhtml+xml")] ++ case props ent of@@ -434,14 +440,14 @@ xs -> [("properties", unwords xs)]) $ () let chapterRefNode ent = unode "itemref" !- [("idref", takeBaseName $ eRelativePath ent)] $ ()+ [("idref", toId $ eRelativePath ent)] $ () let pictureNode ent = unode "item" !- [("id", takeBaseName $ eRelativePath ent),+ [("id", toId $ eRelativePath ent), ("href", eRelativePath ent), ("media-type", fromMaybe "application/octet-stream"- $ imageTypeOf $ eRelativePath ent)] $ ()+ $ mediaTypeOf $ eRelativePath ent)] $ () let fontNode ent = unode "item" !- [("id", takeBaseName $ eRelativePath ent),+ [("id", toId $ eRelativePath ent), ("href", eRelativePath ent), ("media-type", fromMaybe "" $ getMimeType $ eRelativePath ent)] $ () let plainTitle = case docTitle meta of@@ -482,8 +488,8 @@ case epubCoverImage metadata of Nothing -> [] Just _ -> [ unode "itemref" !- [("idref", "cover"),("linear","no")] $ () ]- ++ ((unode "itemref" ! [("idref", "title_page")+ [("idref", "cover_xhtml"),("linear","no")] $ () ]+ ++ ((unode "itemref" ! [("idref", "title_page_xhtml") ,("linear", if null (docTitle meta) then "no" else "yes")] $ ()) :@@ -715,21 +721,55 @@ showDateTimeISO8601 :: UTCTime -> String showDateTimeISO8601 = formatTime defaultTimeLocale "%FT%TZ" +transformTag :: WriterOptions+ -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media+ -> Tag String+ -> IO (Tag String)+transformTag opts mediaRef tag@(TagOpen name attr)+ | name == "video" || name == "source" || name == "img" = 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+ 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++modifyMediaRef :: IORef [(FilePath, FilePath)] -> FilePath -> IO FilePath+modifyMediaRef _ "" = return ""+modifyMediaRef mediaRef oldsrc = do+ media <- readIORef mediaRef+ case lookup oldsrc media of+ Just n -> return n+ Nothing -> do+ let new = "media/file" ++ show (length media) +++ takeExtension oldsrc+ modifyIORef mediaRef ( (oldsrc, new): )+ return new++transformBlock :: WriterOptions+ -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media+ -> Block+ -> IO Block+transformBlock opts mediaRef (RawBlock fmt raw)+ | fmt == Format "html" = do+ let tags = parseTags raw+ tags' <- mapM (transformTag opts mediaRef) tags+ return $ RawBlock fmt (renderTags tags')+transformBlock _ _ b = return b+ transformInline :: WriterOptions- -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) images+ -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) media -> Inline -> IO Inline-transformInline opts picsRef (Image lab (src,tit)) = do+transformInline opts mediaRef (Image lab (src,tit)) = do let src' = unEscapeString src- pics <- readIORef picsRef let oldsrc = maybe src' (</> src) $ writerSourceURL opts- let ext = takeExtension src'- newsrc <- case lookup oldsrc pics of- Just n -> return n- Nothing -> do- let new = "images/img" ++ show (length pics) ++ ext- modifyIORef picsRef ( (oldsrc, new): )- return new+ newsrc <- modifyMediaRef mediaRef oldsrc return $ Image lab (newsrc, tit) transformInline opts _ (x@(Math _ _)) | WebTeX _ <- writerHTMLMathMethod opts = do@@ -759,9 +799,11 @@ Nothing -> '&':'#':unEntity xs unEntity (x:xs) = x : unEntity xs -imageTypeOf :: FilePath -> Maybe String-imageTypeOf x = case getMimeType x of+mediaTypeOf :: FilePath -> Maybe String+mediaTypeOf x = case getMimeType x of Just y@('i':'m':'a':'g':'e':_) -> Just y+ Just y@('v':'i':'d':'e':'o':_) -> Just y+ Just y@('a':'u':'d':'i':'o':_) -> Just y _ -> Nothing data IdentState = IdentState{
src/Text/Pandoc/Writers/HTML.hs view
@@ -40,6 +40,7 @@ import Text.Pandoc.Highlighting ( highlight, styleToCss, formatHtmlInline, formatHtmlBlock ) import Text.Pandoc.XML (fromEntities, escapeStringForXML)+import Network.URI ( parseURIReference, URI(..) ) import Network.HTTP ( urlEncode ) import Numeric ( showHex ) import Data.Char ( ord, toLower )@@ -396,7 +397,10 @@ treatAsImage :: FilePath -> Bool treatAsImage fp =- let ext = map toLower $ drop 1 $ takeExtension fp+ let path = case uriPath `fmap` parseURIReference fp of+ Nothing -> fp+ Just up -> up+ ext = map toLower $ drop 1 $ takeExtension path in null ext || ext `elem` imageExts -- | Convert Pandoc block element to HTML.@@ -475,10 +479,11 @@ else do contents <- blockListToHtml opts blocks return $ H.blockquote $ nl opts >> contents >> nl opts-blockToHtml opts (Header level (_,_,_) lst) = do+blockToHtml opts (Header level (_,classes,_) lst) = do contents <- inlineListToHtml opts lst secnum <- liftM stSecNum get let contents' = if writerNumberSections opts && not (null secnum)+ && "unnumbered" `notElem` classes then (H.span ! A.class_ "header-section-number" $ toHtml $ showSecNum secnum) >> strToHtml " " >> contents else contents@@ -532,11 +537,16 @@ let percent w = show (truncate (100*w) :: Integer) ++ "%" let coltags = if all (== 0.0) widths then mempty- else mconcat $ map (\w ->- if writerHtml5 opts- then H.col ! A.style (toValue $ "width: " ++ percent w)- else H.col ! A.width (toValue $ percent w) >> nl opts)- widths+ else do+ H.colgroup $ do+ nl opts+ mapM_ (\w -> do+ if writerHtml5 opts+ then H.col ! A.style (toValue $ "width: " +++ percent w)+ else H.col ! A.width (toValue $ percent w)+ nl opts) widths+ nl opts head' <- if all null headers then return mempty else do
+ src/Text/Pandoc/Writers/ICML.hs view
@@ -0,0 +1,525 @@+{-# LANGUAGE OverloadedStrings #-}++{- |+ Module : Text.Pandoc.Writers.ICML+ Copyright : Copyright (C) 2013 github.com/mb21+ License : GNU GPL, version 2 or above++ Stability : alpha++Conversion of 'Pandoc' documents to Adobe InCopy ICML, a stand-alone XML format+which is a subset of the zipped IDML format for which the documentation is+available here: http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/idml/idml-specification.pdf+InCopy is the companion word-processor to Adobe InDesign and ICML documents can be integrated+into InDesign with File -> Place.+-}+module Text.Pandoc.Writers.ICML (writeICML) where+import Text.Pandoc.Definition+import Text.Pandoc.XML+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Shared (splitBy)+import Text.Pandoc.Options+import Text.Pandoc.Templates (renderTemplate')+import Text.Pandoc.Pretty+import Data.List (isPrefixOf, isInfixOf, stripPrefix)+import Data.Text as Text (breakOnAll, pack)+import Data.Monoid (mappend)+import Control.Monad.State+import qualified Data.Set as Set++type Style = [String]+type Hyperlink = [(Int, String)]++data WriterState = WriterState{+ blockStyles :: Set.Set String+ , inlineStyles :: Set.Set String+ , links :: Hyperlink+ , listDepth :: Int+ , maxListDepth :: Int+ }++type WS a = State WriterState a++defaultWriterState :: WriterState+defaultWriterState = WriterState{+ blockStyles = Set.empty + , inlineStyles = Set.empty+ , links = []+ , listDepth = 1+ , maxListDepth = 0+ }++-- inline names (appear in InDesign's character styles pane)+emphName :: String+strongName :: String+strikeoutName :: String+superscriptName :: String+subscriptName :: String+smallCapsName :: String+codeName :: String+linkName :: String+emphName = "Italic"+strongName = "Bold"+strikeoutName = "Strikeout"+superscriptName = "Superscript"+subscriptName = "Subscript"+smallCapsName = "SmallCaps"+codeName = "Code"+linkName = "Link"++-- block element names (appear in InDesign's paragraph styles pane)+paragraphName :: String+codeBlockName :: String+rawBlockName :: String+blockQuoteName :: String+orderedListName :: String+bulletListName :: String+defListTermName :: String+defListDefName :: String+headerName :: String+tableName :: String+tableHeaderName :: String+tableCaptionName :: String+alignLeftName :: String+alignRightName :: String+alignCenterName :: String+firstListItemName :: String+beginsWithName :: String+lowerRomanName :: String+upperRomanName :: String+lowerAlphaName :: String+upperAlphaName :: String+subListParName :: String+footnoteName :: String+paragraphName = "Paragraph"+codeBlockName = "CodeBlock"+rawBlockName = "Rawblock"+blockQuoteName = "Blockquote"+orderedListName = "NumList"+bulletListName = "BulList"+defListTermName = "DefListTerm"+defListDefName = "DefListDef"+headerName = "Header"+tableName = "TablePar"+tableHeaderName = "TableHeader"+tableCaptionName = "TableCaption"+alignLeftName = "LeftAlign"+alignRightName = "RightAlign"+alignCenterName = "CenterAlign"+firstListItemName = "first"+beginsWithName = "beginsWith-"+lowerRomanName = "lowerRoman"+upperRomanName = "upperRoman"+lowerAlphaName = "lowerAlpha"+upperAlphaName = "upperAlpha"+subListParName = "subParagraph"+footnoteName = "Footnote"+++-- | Convert Pandoc document to string in ICML format.+writeICML :: WriterOptions -> Pandoc -> String+writeICML opts (Pandoc meta blocks) =+ let colwidth = if writerWrapText opts+ then Just $ writerColumns opts+ else Nothing+ render' = render colwidth+ renderMeta f s = Just $ render' $ fst $ runState (f opts [] s) defaultWriterState+ Just metadata = metaToJSON opts+ (renderMeta blocksToICML)+ (renderMeta inlinesToICML)+ meta+ (doc, st) = runState (blocksToICML opts [] blocks) defaultWriterState+ main = render' doc+ context = defField "body" main+ $ defField "charStyles" (render' $ charStylesToDoc st)+ $ defField "parStyles" (render' $ parStylesToDoc st)+ $ defField "hyperlinks" (render' $ hyperlinksToDoc $ links st)+ $ metadata+ in if writerStandalone opts+ then renderTemplate' (writerTemplate opts) context+ else main++-- | Auxilary functions for parStylesToDoc and charStylesToDoc.+contains :: String -> (String, (String, String)) -> [(String, String)]+contains s rule =+ if isInfixOf (fst rule) s+ then [snd rule]+ else []++-- | The monospaced font to use as default.+monospacedFont :: Doc+monospacedFont = inTags False "AppliedFont" [("type", "string")] $ text "Courier New"++-- | How much to indent blockquotes etc.+defaultIndent :: Int+defaultIndent = 20++-- | How much to indent numbered lists before the number.+defaultListIndent :: Int+defaultListIndent = 10++-- other constants+lineSeparator :: String+lineSeparator = "
"++-- | Convert a WriterState with its block styles to the ICML listing of Paragraph Styles.+parStylesToDoc :: WriterState -> Doc+parStylesToDoc st = vcat $ map makeStyle $ Set.toAscList $ blockStyles st+ where+ makeStyle s =+ let countSubStrs sub str = length $ Text.breakOnAll (Text.pack sub) (Text.pack str)+ attrs = concat $ map (contains s) $ [+ (defListTermName, ("BulletsAndNumberingListType", "BulletList"))+ , (defListTermName, ("FontStyle", "Bold"))+ , (tableHeaderName, ("FontStyle", "Bold"))+ , (alignLeftName, ("Justification", "LeftAlign"))+ , (alignRightName, ("Justification", "RightAlign"))+ , (alignCenterName, ("Justification", "CenterAlign"))+ , (headerName++"1", ("PointSize", "36"))+ , (headerName++"2", ("PointSize", "30"))+ , (headerName++"3", ("PointSize", "24"))+ , (headerName++"4", ("PointSize", "18"))+ , (headerName++"5", ("PointSize", "14"))+ ]+ -- what is the most nested list type, if any?+ (isBulletList, isOrderedList) = findList $ reverse $ splitBy (==' ') s+ where+ findList [] = (False, False)+ findList (x:xs) | x == bulletListName = (True, False)+ | x == orderedListName = (False, True)+ | otherwise = findList xs+ nBuls = countSubStrs bulletListName s+ nOrds = countSubStrs orderedListName s+ attrs' = numbering ++ listType ++ indent ++ attrs+ where+ numbering | isOrderedList = [("NumberingExpression", "^#.^t"), ("NumberingLevel", show nOrds)]+ | otherwise = []+ listType | isOrderedList && (not $ isInfixOf subListParName s)+ = [("BulletsAndNumberingListType", "NumberedList")]+ | isBulletList && (not $ isInfixOf subListParName s)+ = [("BulletsAndNumberingListType", "BulletList")]+ | otherwise = []+ indent = [("LeftIndent", show indt)]+ where+ nBlockQuotes = countSubStrs blockQuoteName s+ nDefLists = countSubStrs defListDefName s+ indt = max 0 $ defaultListIndent*(nBuls + nOrds - 1) + defaultIndent*(nBlockQuotes + nDefLists)+ props = inTags True "Properties" [] $ (basedOn $$ tabList $$ numbForm)+ where+ font = if isInfixOf codeBlockName s+ then monospacedFont+ else empty+ basedOn = inTags False "BasedOn" [("type", "object")] (text "$ID/NormalParagraphStyle") $$ font+ tabList = if isBulletList+ then inTags True "TabList" [("type","list")] $ inTags True "ListItem" [("type","record")]+ $ vcat [+ inTags False "Alignment" [("type","enumeration")] $ text "LeftAlign"+ , inTags False "AlignmentCharacter" [("type","string")] $ text "."+ , selfClosingTag "Leader" [("type","string")]+ , inTags False "Position" [("type","unit")] $ text+ $ show $ defaultListIndent * (nBuls + nOrds)+ ]+ else empty+ makeNumb name = inTags False "NumberingFormat" [("type", "string")] (text name)+ numbForm | isInfixOf lowerRomanName s = makeNumb "i, ii, iii, iv..."+ | isInfixOf upperRomanName s = makeNumb "I, II, III, IV..."+ | isInfixOf lowerAlphaName s = makeNumb "a, b, c, d..."+ | isInfixOf upperAlphaName s = makeNumb "A, B, C, D..."+ | otherwise = empty+ in inTags True "ParagraphStyle" ([("Self", "ParagraphStyle/"++s), ("Name", s)] ++ attrs') props++-- | Convert a WriterState with its inline styles to the ICML listing of Character Styles.+charStylesToDoc :: WriterState -> Doc+charStylesToDoc st = vcat $ map makeStyle $ Set.toAscList $ inlineStyles st+ where+ makeStyle s =+ let attrs = concat $ map (contains s) [+ (strikeoutName, ("StrikeThru", "true"))+ , (superscriptName, ("Position", "Superscript"))+ , (subscriptName, ("Position", "Subscript"))+ , (smallCapsName, ("Capitalization", "SmallCaps"))+ ]+ attrs' | isInfixOf emphName s && isInfixOf strongName s = ("FontStyle", "Bold Italic") : attrs+ | isInfixOf strongName s = ("FontStyle", "Bold") : attrs+ | isInfixOf emphName s = ("FontStyle", "Italic") : attrs+ | otherwise = attrs+ props = inTags True "Properties" [] $+ inTags False "BasedOn" [("type", "object")] (text "$ID/NormalCharacterStyle") $$ font+ where+ font =+ if isInfixOf codeName s+ then monospacedFont+ else empty+ in inTags True "CharacterStyle" ([("Self", "CharacterStyle/"++s), ("Name", s)] ++ attrs') props++-- | Convert a list of (identifier, url) pairs to the ICML listing of hyperlinks.+hyperlinksToDoc :: Hyperlink -> Doc+hyperlinksToDoc [] = empty+hyperlinksToDoc (x:xs) = hyp x $$ hyperlinksToDoc xs+ where+ hyp (ident, url) = hdest $$ hlink+ where+ hdest = selfClosingTag "HyperlinkURLDestination"+ [("Self", "HyperlinkURLDestination/"++url), ("Name","link"), ("DestinationURL",url), ("DestinationUniqueKey","1")]+ hlink = inTags True "Hyperlink" [("Self","uf-"++show ident), ("Name",url),+ ("Source","htss-"++show ident), ("Visible","true"), ("DestinationUniqueKey","1")]+ $ inTags True "Properties" []+ $ inTags False "BorderColor" [("type","enumeration")] (text "Black")+ $$ (inTags False "Destination" [("type","object")]+ $ text $ "HyperlinkURLDestination/"++(escapeStringForXML url))+ ++-- | Convert a list of Pandoc blocks to ICML.+blocksToICML :: WriterOptions -> Style -> [Block] -> WS Doc+blocksToICML opts style lst = vcat `fmap` mapM (blockToICML opts style) lst++-- | Convert a Pandoc block element to ICML.+blockToICML :: WriterOptions -> Style -> Block -> WS Doc+blockToICML opts style (Plain lst) = parStyle opts style lst+blockToICML opts style (Para lst) = parStyle opts (paragraphName:style) lst+blockToICML opts style (CodeBlock _ str) = parStyle opts (codeBlockName:style) $ [Str str]+blockToICML opts style (RawBlock _ str) = parStyle opts (rawBlockName:style) $ [Str str]+blockToICML opts style (BlockQuote blocks) = blocksToICML opts (blockQuoteName:style) blocks+blockToICML opts style (OrderedList attribs lst) = listItemsToICML opts orderedListName style (Just attribs) lst+blockToICML opts style (BulletList lst) = listItemsToICML opts bulletListName style Nothing lst+blockToICML opts style (DefinitionList lst) = vcat `fmap` mapM (definitionListItemToICML opts style) lst+blockToICML opts style (Header lvl _ lst) =+ let stl = (headerName ++ show lvl):style+ in parStyle opts stl lst+blockToICML _ _ HorizontalRule = return empty -- we could insert a page break instead+blockToICML opts style (Table caption aligns widths headers rows) =+ let style' = tableName : style+ noHeader = all null headers+ nrHeaders = if noHeader+ then "0"+ else "1"+ nrRows = length rows+ nrCols = if null rows+ then 0+ else length $ head rows+ rowsToICML [] _ = return empty+ rowsToICML (col:rest) rowNr =+ liftM2 ($$) (colsToICML col rowNr (0::Int)) $ rowsToICML rest (rowNr+1)+ colsToICML [] _ _ = return empty+ colsToICML (cell:rest) rowNr colNr = do+ let stl = if rowNr == 0 && not noHeader+ then tableHeaderName:style'+ else style'+ alig = aligns !! colNr+ stl' | alig == AlignLeft = alignLeftName : stl+ | alig == AlignRight = alignRightName : stl+ | alig == AlignCenter = alignCenterName : stl+ | otherwise = stl+ c <- blocksToICML opts stl' cell+ let cl = return $ inTags True "Cell"+ [("Name", show colNr ++":"++ show rowNr), ("AppliedCellStyle","CellStyle/Cell")] c+ liftM2 ($$) cl $ colsToICML rest rowNr (colNr+1)+ in do+ let tabl = if noHeader+ then rows+ else headers:rows+ cells <- rowsToICML tabl (0::Int)+ let colWidths w = if w > 0+ then [("SingleColumnWidth",show $ 500 * w)]+ else []+ let tupToDoc tup = selfClosingTag "Column" $ [("Name",show $ fst tup)] ++ (colWidths $ snd tup)+ let colDescs = vcat $ map tupToDoc $ zip [0..nrCols-1] widths+ let tableDoc = return $ inTags True "Table" [+ ("AppliedTableStyle","TableStyle/Table")+ , ("HeaderRowCount", nrHeaders)+ , ("BodyRowCount", show nrRows)+ , ("ColumnCount", show nrCols)+ ] (colDescs $$ cells)+ liftM2 ($$) tableDoc $ parStyle opts (tableCaptionName:style) caption+blockToICML opts style (Div _ lst) = blocksToICML opts style lst+blockToICML _ _ Null = return empty++-- | Convert a list of lists of blocks to ICML list items.+listItemsToICML :: WriterOptions -> String -> Style -> Maybe ListAttributes -> [[Block]] -> WS Doc+listItemsToICML _ _ _ _ [] = return empty+listItemsToICML opts listType style attribs (first:rest) = do+ st <- get+ put st{ listDepth = 1 + listDepth st}+ let stl = listType:style+ let f = listItemToICML opts stl True attribs first+ let r = map (listItemToICML opts stl False attribs) rest+ docs <- sequence $ f:r+ s <- get+ let maxD = max (maxListDepth s) (listDepth s)+ put s{ listDepth = 1, maxListDepth = maxD }+ return $ vcat docs++-- | Convert a list of blocks to ICML list items.+listItemToICML :: WriterOptions -> Style -> Bool-> Maybe ListAttributes -> [Block] -> WS Doc+listItemToICML opts style isFirst attribs item =+ let makeNumbStart (Just (beginsWith, numbStl, _)) = + let doN DefaultStyle = []+ doN LowerRoman = [lowerRomanName]+ doN UpperRoman = [upperRomanName]+ doN LowerAlpha = [lowerAlphaName]+ doN UpperAlpha = [upperAlphaName]+ doN _ = []+ bw = if beginsWith > 1+ then [beginsWithName ++ show beginsWith]+ else []+ in doN numbStl ++ bw+ makeNumbStart Nothing = []+ stl = if isFirst+ then firstListItemName:style+ else style+ stl' = makeNumbStart attribs ++ stl+ in if length item > 1+ then do+ let insertTab (Para lst) = blockToICML opts (subListParName:style) $ Para $ (Str "\t"):lst+ insertTab block = blockToICML opts style block+ f <- blockToICML opts stl' $ head item+ r <- fmap vcat $ mapM insertTab $ tail item+ return $ f $$ r+ else blocksToICML opts stl' item++definitionListItemToICML :: WriterOptions -> Style -> ([Inline],[[Block]]) -> WS Doc+definitionListItemToICML opts style (term,defs) = do+ term' <- parStyle opts (defListTermName:style) term+ defs' <- vcat `fmap` mapM (blocksToICML opts (defListDefName:style)) defs+ return $ term' $$ defs'+++-- | Convert a list of inline elements to ICML.+inlinesToICML :: WriterOptions -> Style -> [Inline] -> WS Doc+inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (mergeSpaces lst)++-- | Convert an inline element to ICML.+inlineToICML :: WriterOptions -> Style -> Inline -> WS Doc+inlineToICML _ style (Str str) = charStyle style $ text $ escapeStringForXML str+inlineToICML opts style (Emph lst) = inlinesToICML opts (emphName:style) lst+inlineToICML opts style (Strong lst) = inlinesToICML opts (strongName:style) lst+inlineToICML opts style (Strikeout lst) = inlinesToICML opts (strikeoutName:style) lst+inlineToICML opts style (Superscript lst) = inlinesToICML opts (superscriptName:style) lst+inlineToICML opts style (Subscript lst) = inlinesToICML opts (subscriptName:style) lst+inlineToICML opts style (SmallCaps lst) = inlinesToICML opts (smallCapsName:style) lst+inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $ [Str "‘"] ++ lst ++ [Str "’"]+inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $ [Str "“"] ++ lst ++ [Str "”"]+inlineToICML opts style (Cite _ lst) = footnoteToICML opts style [Para lst]+inlineToICML _ style (Code _ str) = charStyle (codeName:style) $ text $ escapeStringForXML str+inlineToICML _ style Space = charStyle style space+inlineToICML _ style LineBreak = charStyle style $ text lineSeparator+inlineToICML _ style (Math _ str) = charStyle style $ text $ escapeStringForXML str --InDesign doesn't really do math+inlineToICML _ style (RawInline _ str) = charStyle style $ text $ escapeStringForXML str+inlineToICML opts style (Link lst (url, title)) = do+ content <- inlinesToICML opts (linkName:style) lst+ state $ \st ->+ let ident = if null $ links st+ then 1::Int+ else 1 + (fst $ head $ links st)+ newst = st{ links = (ident, url):(links st) }+ cont = inTags True "HyperlinkTextSource"+ [("Self","htss-"++show ident), ("Name",title), ("Hidden","false")] content+ in (cont, newst)+inlineToICML opts style (Image alt target) = imageICML opts style alt target+inlineToICML opts style (Note lst) = footnoteToICML opts style lst+inlineToICML opts style (Span _ lst) = inlinesToICML opts style lst++-- | Convert a list of block elements to an ICML footnote.+footnoteToICML :: WriterOptions -> Style -> [Block] -> WS Doc+footnoteToICML opts style lst =+ let insertTab (Para ls) = blockToICML opts (footnoteName:style) $ Para $ (Str "\t"):ls+ insertTab block = blockToICML opts (footnoteName:style) block+ in do+ contents <- mapM insertTab lst+ let number = inTags True "ParagraphStyleRange" [] $+ inTags True "CharacterStyleRange" [] $ inTagsSimple "Content" "<?ACE 4?>"+ return $ inTags True "CharacterStyleRange"+ [("AppliedCharacterStyle","$ID/NormalCharacterStyle"), ("Position","Superscript")]+ $ inTags True "Footnote" [] $ number $$ vcat contents++-- | Auxiliary function to merge Space elements into the adjacent Strs.+mergeSpaces :: [Inline] -> [Inline]+mergeSpaces ((Str s):(Space:((Str s'):xs))) = mergeSpaces $ Str(s++" "++s') : xs+mergeSpaces (Space:((Str s):xs)) = mergeSpaces $ Str (" "++s) : xs+mergeSpaces ((Str s):(Space:xs)) = mergeSpaces $ Str (s++" ") : xs+mergeSpaces (x:xs) = x : (mergeSpaces xs)+mergeSpaces [] = []++-- | Wrap a list of inline elements in an ICML Paragraph Style+parStyle :: WriterOptions -> Style -> [Inline] -> WS Doc+parStyle opts style lst =+ let slipIn x y = if null y+ then x+ else x ++ " > " ++ y+ stlStr = foldr slipIn [] $ reverse style+ stl = if null stlStr+ then ""+ else "ParagraphStyle/" ++ stlStr+ attrs = ("AppliedParagraphStyle", stl)+ attrs' = if firstListItemName `elem` style+ then let ats = attrs : [("NumberingContinue", "false")]+ begins = filter (isPrefixOf beginsWithName) style+ in if null begins+ then ats+ else let i = maybe "" id $ stripPrefix beginsWithName $ head begins+ in ("NumberingStartAt", i) : ats+ else [attrs]+ in do+ content <- inlinesToICML opts [] lst+ let cont = inTags True "ParagraphStyleRange" attrs'+ $ mappend content $ selfClosingTag "Br" []+ state $ \st -> (cont, st{ blockStyles = Set.insert stlStr $ blockStyles st })++-- | Wrap a Doc in an ICML Character Style.+charStyle :: Style -> Doc -> WS Doc+charStyle style content = + let (stlStr, attrs) = styleToStrAttr style+ doc = inTags True "CharacterStyleRange" attrs $ inTagsSimple "Content" $ flush content+ in do+ state $ \st ->+ let styles = if null stlStr+ then st+ else st{ inlineStyles = Set.insert stlStr $ inlineStyles st }+ in (doc, styles)++-- | Transform a Style to a tuple of String (eliminating duplicates and ordered) and corresponding attribute.+styleToStrAttr :: Style -> (String, [(String, String)])+styleToStrAttr style =+ let stlStr = unwords $ Set.toAscList $ Set.fromList style+ stl = if null style+ then "$ID/NormalCharacterStyle"+ else "CharacterStyle/" ++ stlStr+ attrs = [("AppliedCharacterStyle", stl)]+ in (stlStr, attrs)++-- | Assemble an ICML Image.+imageICML :: WriterOptions -> Style -> [Inline] -> Target -> WS Doc+imageICML _ style _ (linkURI, _) =+ let imgWidth = 300::Int --TODO: set width, height dynamically as in Docx.hs+ imgHeight = 200::Int+ scaleFact = show (1::Double) --TODO: set scaling factor so image is scaled exactly to imgWidth x imgHeight+ hw = show $ imgWidth `div` 2+ hh = show $ imgHeight `div` 2+ qw = show $ imgWidth `div` 4+ qh = show $ imgHeight `div` 4+ (stlStr, attrs) = styleToStrAttr style+ props = inTags True "Properties" [] $ inTags True "PathGeometry" []+ $ inTags True "GeometryPathType" [("PathOpen","false")]+ $ inTags True "PathPointArray" []+ $ vcat [+ selfClosingTag "PathPointType" [("Anchor", "-"++qw++" -"++qh),+ ("LeftDirection", "-"++qw++" -"++qh), ("RightDirection", "-"++qw++" -"++qh)]+ , selfClosingTag "PathPointType" [("Anchor", "-"++qw++" "++qh),+ ("LeftDirection", "-"++qw++" "++qh), ("RightDirection", "-"++qw++" "++qh)]+ , selfClosingTag "PathPointType" [("Anchor", qw++" "++qh),+ ("LeftDirection", qw++" "++qh), ("RightDirection", qw++" "++qh)]+ , selfClosingTag "PathPointType" [("Anchor", qw++" -"++qh),+ ("LeftDirection", qw++" -"++qh), ("RightDirection", qw++" -"++qh)]+ ]+ image = inTags True "Image"+ [("Self","ue6"), ("ItemTransform", scaleFact++" 0 0 "++scaleFact++" -"++qw++" -"++qh)]+ $ vcat [+ inTags True "Properties" [] $ inTags True "Profile" [("type","string")] $ text "$ID/Embedded"+ $$ selfClosingTag "GraphicBounds" [("Left","0"), ("Top","0"), ("Right", hw), ("Bottom", hh)]+ , selfClosingTag "Link" [("Self", "ueb"), ("LinkResourceURI", linkURI)]+ ]+ doc = inTags True "CharacterStyleRange" attrs+ $ inTags True "Rectangle" [("Self","uec"), ("ItemTransform", "1 0 0 1 "++qw++" -"++qh)]+ $ (props $$ image)+ in do+ state $ \st -> (doc, st{ inlineStyles = Set.insert stlStr $ inlineStyles st } )
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -51,6 +51,7 @@ data WriterState = WriterState { stInNote :: Bool -- true if we're in a note+ , stInQuote :: Bool -- true if in a blockquote , stInMinipage :: Bool -- true if in minipage , stNotes :: [Doc] -- notes in a minipage , stOLLevel :: Int -- level of ordered list nesting@@ -73,7 +74,8 @@ writeLaTeX :: WriterOptions -> Pandoc -> String writeLaTeX options document = evalState (pandocToLaTeX options document) $- WriterState { stInNote = False, stInMinipage = False, stNotes = [],+ WriterState { stInNote = False, stInQuote = False,+ stInMinipage = False, stNotes = [], stOLLevel = 1, stOptions = options, stVerbInNote = False, stTable = False, stStrikeout = False,@@ -133,7 +135,7 @@ authorsMeta <- mapM (stringToLaTeX TextString . stringify) $ docAuthors meta let context = defField "toc" (writerTableOfContents options) $ defField "toc-depth" (show (writerTOCDepth options -- if writerChapters options+ if stBook st then 1 else 0)) $ defField "body" main $@@ -141,7 +143,7 @@ defField "author-meta" (intercalate "; " authorsMeta) $ defField "documentclass" (if writerBeamer options then ("beamer" :: String)- else if writerChapters options+ else if stBook st then "book" else "article") $ defField "verbatim-in-note" (stVerbInNote st) $@@ -191,7 +193,7 @@ stringToLaTeX ctx (x:xs) = do opts <- gets stOptions rest <- stringToLaTeX ctx xs- let ligatures = writerTeXLigatures opts && (ctx /= CodeString)+ let ligatures = writerTeXLigatures opts && ctx == TextString let isUrl = ctx == URLString when (x == '€') $ modify $ \st -> st{ stUsesEuro = True }@@ -205,8 +207,9 @@ '&' -> "\\&" ++ rest '_' | not isUrl -> "\\_" ++ rest '#' -> "\\#" ++ rest- '-' -> case xs of -- prevent adjacent hyphens from forming ligatures- ('-':_) -> "-{}" ++ rest+ '-' | not isUrl -> case xs of+ -- prevent adjacent hyphens from forming ligatures+ ('-':_) -> "-\\/" ++ rest _ -> '-' : rest '~' | not isUrl -> "\\textasciitilde{}" ++ rest '^' -> "\\^{}" ++ rest@@ -227,12 +230,13 @@ '\x2013' | ligatures -> "--" ++ rest _ -> x : rest -toLabel :: String -> String-toLabel [] = ""-toLabel (x:xs)- | (isLetter x || isDigit x) && isAscii x = x:toLabel xs- | elem x "-+=:;." = x:toLabel xs- | otherwise = "ux" ++ printf "%x" (ord x) ++ toLabel xs+toLabel :: String -> State WriterState String+toLabel z = go `fmap` stringToLaTeX URLString z+ where go [] = ""+ go (x:xs)+ | (isLetter x || isDigit x) && isAscii x = x:go xs+ | elem x "-+=:;." = x:go xs+ | otherwise = "ux" ++ printf "%x" (ord x) ++ go xs -- | Puts contents into LaTeX command. inCmd :: String -> Doc -> Doc@@ -331,61 +335,64 @@ modify $ \s -> s{ stIncremental = oldIncremental } return result _ -> do+ oldInQuote <- gets stInQuote+ modify (\s -> s{stInQuote = True}) contents <- blockListToLaTeX lst+ modify (\s -> s{stInQuote = oldInQuote}) return $ "\\begin{quote}" $$ contents $$ "\\end{quote}" blockToLaTeX (CodeBlock (identifier,classes,keyvalAttr) str) = do opts <- gets stOptions+ ref <- toLabel identifier+ let linkAnchor = if null identifier+ then empty+ else "\\hyperdef{}" <> braces (text ref) <>+ braces ("\\label" <> braces (text ref))+ let lhsCodeBlock = do+ modify $ \s -> s{ stLHS = True }+ return $ flush (linkAnchor $$ "\\begin{code}" $$ text str $$+ "\\end{code}") $$ cr+ let rawCodeBlock = do+ st <- get+ env <- if stInNote st+ then modify (\s -> s{ stVerbInNote = True }) >>+ return "Verbatim"+ else return "verbatim"+ return $ flush (linkAnchor $$ text ("\\begin{" ++ env ++ "}") $$+ text str $$ text ("\\end{" ++ env ++ "}")) <> cr+ let listingsCodeBlock = do+ st <- get+ let params = if writerListings (stOptions st)+ then (case getListingsLanguage classes of+ Just l -> [ "language=" ++ l ]+ Nothing -> []) +++ [ "numbers=left" | "numberLines" `elem` classes+ || "number" `elem` classes+ || "number-lines" `elem` classes ] +++ [ (if key == "startFrom"+ then "firstnumber"+ else key) ++ "=" ++ attr |+ (key,attr) <- keyvalAttr ] +++ (if identifier == ""+ then []+ else [ "label=" ++ ref ])++ else []+ printParams+ | null params = empty+ | otherwise = brackets $ hcat (intersperse ", " (map text params))+ return $ flush ("\\begin{lstlisting}" <> printParams $$ text str $$+ "\\end{lstlisting}") $$ cr+ let highlightedCodeBlock =+ case highlight formatLaTeXBlock ("",classes,keyvalAttr) str of+ Nothing -> rawCodeBlock+ Just h -> modify (\st -> st{ stHighlighting = True }) >>+ return (flush $ linkAnchor $$ text h) case () of _ | isEnabled Ext_literate_haskell opts && "haskell" `elem` classes && "literate" `elem` classes -> lhsCodeBlock | writerListings opts -> listingsCodeBlock | writerHighlight opts && not (null classes) -> highlightedCodeBlock | otherwise -> rawCodeBlock- where ref = text $ toLabel identifier- linkAnchor = if null identifier- then empty- else "\\hyperdef{}" <> braces ref <>- braces ("\\label" <> braces ref)- lhsCodeBlock = do- modify $ \s -> s{ stLHS = True }- return $ flush (linkAnchor $$ "\\begin{code}" $$ text str $$- "\\end{code}") $$ cr- rawCodeBlock = do- st <- get- env <- if stInNote st- then modify (\s -> s{ stVerbInNote = True }) >>- return "Verbatim"- else return "verbatim"- return $ flush (linkAnchor $$ text ("\\begin{" ++ env ++ "}") $$- text str $$ text ("\\end{" ++ env ++ "}")) <> cr- listingsCodeBlock = do- st <- get- let params = if writerListings (stOptions st)- then (case getListingsLanguage classes of- Just l -> [ "language=" ++ l ]- Nothing -> []) ++- [ "numbers=left" | "numberLines" `elem` classes- || "number" `elem` classes- || "number-lines" `elem` classes ] ++- [ (if key == "startFrom"- then "firstnumber"- else key) ++ "=" ++ attr |- (key,attr) <- keyvalAttr ] ++- (if identifier == ""- then []- else [ "label=" ++ toLabel identifier ])-- else []- printParams- | null params = empty- | otherwise = brackets $ hcat (intersperse ", " (map text params))- return $ flush ("\\begin{lstlisting}" <> printParams $$ text str $$- "\\end{lstlisting}") $$ cr- highlightedCodeBlock =- case highlight formatLaTeXBlock ("",classes,keyvalAttr) str of- Nothing -> rawCodeBlock- Just h -> modify (\st -> st{ stHighlighting = True }) >>- return (flush $ linkAnchor $$ text h) blockToLaTeX (RawBlock f x) | f == Format "latex" || f == Format "tex" = return $ text x@@ -500,9 +507,28 @@ cells <- mapM (tableCellToLaTeX header) $ zip3 widths' aligns cols return $ hsep (intersperse "&" cells) $$ "\\\\\\addlinespace" +-- For simple latex tables (without minipages or parboxes),+-- we need to go to some lengths to get line breaks working:+-- as LineBreak bs = \vtop{\hbox{\strut as}\hbox{\strut bs}}.+fixLineBreaks :: Block -> Block+fixLineBreaks (Para ils) = Para $ fixLineBreaks' ils+fixLineBreaks (Plain ils) = Plain $ fixLineBreaks' ils+fixLineBreaks x = x++fixLineBreaks' :: [Inline] -> [Inline]+fixLineBreaks' ils = case splitBy (== LineBreak) ils of+ [] -> []+ [xs] -> xs+ chunks -> RawInline "tex" "\\vtop{" :+ concatMap tohbox chunks +++ [RawInline "tex" "}"]+ where tohbox ys = RawInline "tex" "\\hbox{\\strut " : ys +++ [RawInline "tex" "}"]+ tableCellToLaTeX :: Bool -> (Double, Alignment, [Block]) -> State WriterState Doc-tableCellToLaTeX _ (0, _, blocks) = blockListToLaTeX blocks+tableCellToLaTeX _ (0, _, blocks) =+ blockListToLaTeX $ walk fixLineBreaks blocks tableCellToLaTeX header (width, align, blocks) = do modify $ \st -> st{ stInMinipage = True, stNotes = [] } cellContents <- blockListToLaTeX blocks@@ -555,6 +581,7 @@ -> State WriterState Doc sectionHeader unnumbered ref level lst = do txt <- inlineListToLaTeX lst+ lab <- text `fmap` toLabel ref let noNote (Note _) = Str "" noNote x = x let lstNoNotes = walk noNote lst@@ -575,13 +602,13 @@ let refLabel x = (if ref `elem` internalLinks then text "\\hyperdef" <> braces empty- <> braces (text $ toLabel ref)+ <> braces lab <> braces x else x)- let headerWith x y r = refLabel $ text x <> y <>- if null r+ let headerWith x y = refLabel $ text x <> y <>+ if null ref then empty- else text "\\label" <> braces (text $ toLabel r)+ else text "\\label" <> braces lab let sectionType = case level' of 0 | writerBeamer opts -> "part" | otherwise -> "chapter"@@ -591,9 +618,16 @@ 4 -> "paragraph" 5 -> "subparagraph" _ -> ""+ inQuote <- gets stInQuote+ let prefix = if inQuote && level' >= 4+ then text "\\mbox{}%"+ -- needed for \paragraph, \subparagraph in quote environment+ -- see http://tex.stackexchange.com/questions/169830/+ else empty return $ if level' > 5 then txt- else headerWith ('\\':sectionType) stuffing ref+ else prefix $$+ headerWith ('\\':sectionType) stuffing $$ if unnumbered then "\\addcontentsline{toc}" <> braces (text sectionType) <>@@ -624,16 +658,21 @@ -- | Convert inline element to LaTeX inlineToLaTeX :: Inline -- ^ Inline to convert -> State WriterState Doc-inlineToLaTeX (Span (_,classes,_) ils) = do+inlineToLaTeX (Span (id',classes,_) ils) = do let noEmph = "csl-no-emph" `elem` classes let noStrong = "csl-no-strong" `elem` classes let noSmallCaps = "csl-no-smallcaps" `elem` classes- ((if noEmph then inCmd "textup" else id) .- (if noStrong then inCmd "textnormal" else id) .- (if noSmallCaps then inCmd "textnormal" else id) .- (if not (noEmph || noStrong || noSmallCaps)- then braces- else id)) `fmap` inlineListToLaTeX ils+ label' <- if null id'+ then return empty+ else toLabel id' >>= \x ->+ return (text "\\label" <> braces (text x))+ fmap (label' <>)+ ((if noEmph then inCmd "textup" else id) .+ (if noStrong then inCmd "textnormal" else id) .+ (if noSmallCaps then inCmd "textnormal" else id) .+ (if not (noEmph || noStrong || noSmallCaps)+ then braces+ else id)) `fmap` inlineListToLaTeX ils inlineToLaTeX (Emph lst) = inlineListToLaTeX lst >>= return . inCmd "emph" inlineToLaTeX (Strong lst) =@@ -710,9 +749,8 @@ inlineToLaTeX Space = return space inlineToLaTeX (Link txt ('#':ident, _)) = do contents <- inlineListToLaTeX txt- ident' <- stringToLaTeX URLString ident- return $ text "\\hyperref" <> brackets (text $ toLabel ident') <>- braces contents+ lab <- toLabel ident+ return $ text "\\hyperref" <> brackets (text lab) <> braces contents inlineToLaTeX (Link txt (src, _)) = case txt of [Str x] | x == src -> -- autolink
src/Text/Pandoc/Writers/Man.hs view
@@ -283,7 +283,7 @@ mapM (\item -> blockToMan opts item) rest first' <- blockToMan opts first return $ first' $$ text ".RS" $$ rest' $$ text ".RE"- return $ text ".TP" $$ text ".B " <> labelText $$ contents+ return $ text ".TP" $$ nowrap (text ".B " <> labelText) $$ contents -- | Convert list of Pandoc block elements to man. blockListToMan :: WriterOptions -- ^ Options
src/Text/Pandoc/Writers/Markdown.hs view
@@ -316,20 +316,25 @@ contents <> blankline <> "</div>" <> blankline blockToMarkdown opts (Plain inlines) = do contents <- inlineListToMarkdown opts inlines- return $ contents <> cr+ -- escape if para starts with ordered list marker+ st <- get+ let colwidth = if writerWrapText opts+ then Just $ writerColumns opts+ else Nothing+ let rendered = render colwidth contents+ let escapeDelimiter (x:xs) | x `elem` ".()" = '\\':x:xs+ | otherwise = x : escapeDelimiter xs+ escapeDelimiter [] = []+ let contents' = if isEnabled Ext_all_symbols_escapable opts &&+ not (stPlain st) && beginsWithOrderedListMarker rendered+ then text $ escapeDelimiter rendered+ else contents+ return $ contents' <> cr -- title beginning with fig: indicates figure blockToMarkdown opts (Para [Image alt (src,'f':'i':'g':':':tit)]) = blockToMarkdown opts (Para [Image alt (src,tit)])-blockToMarkdown opts (Para inlines) = do- contents <- inlineListToMarkdown opts inlines- -- escape if para starts with ordered list marker- st <- get- let esc = if isEnabled Ext_all_symbols_escapable opts &&- not (stPlain st) &&- beginsWithOrderedListMarker (render Nothing contents)- then text "\x200B" -- zero-width space, a hack- else empty- return $ esc <> contents <> blankline+blockToMarkdown opts (Para inlines) =+ (<> blankline) `fmap` blockToMarkdown opts (Plain inlines) blockToMarkdown opts (RawBlock f str) | f == "html" = do st <- get@@ -392,7 +397,11 @@ xs -> case maximum $ map length xs of n | n < 3 -> "~~~~" | otherwise -> replicate (n+1) '~'- backticks = text "```"+ backticks = text $ case [ln | ln <- lines str, all (=='`') ln] of+ [] -> "```"+ xs -> case maximum $ map length xs of+ n | n < 3 -> "```"+ | otherwise -> replicate (n+1) '`' attrs = if isEnabled Ext_fenced_code_attributes opts then nowrap $ " " <> attrsToMarkdown attribs else case attribs of
src/Text/Pandoc/Writers/Org.hs view
@@ -271,7 +271,7 @@ else "$$" <> text str <> "$$" inlineToOrg (RawInline f str) | f == "tex" || f == "latex" = return $ text str inlineToOrg (RawInline _ _) = return empty-inlineToOrg (LineBreak) = return cr -- there's no line break in Org+inlineToOrg (LineBreak) = return (text "\\\\" <> cr) inlineToOrg Space = return space inlineToOrg (Link txt (src, _)) = do case txt of
src/Text/Pandoc/Writers/RST.hs view
@@ -219,11 +219,15 @@ else blankline <> text "Table: " <> caption' headers' <- mapM blockListToRST headers rawRows <- mapM (mapM blockListToRST) rows- let isSimple = all (==0) widths && all (all (\bs -> length bs <= 1)) rows+ -- let isSimpleCell [Plain _] = True+ -- isSimpleCell [Para _] = True+ -- isSimpleCell [] = True+ -- isSimpleCell _ = False+ -- let isSimple = all (==0) widths && all (all isSimpleCell) rows let numChars = maximum . map offset opts <- get >>= return . stOptions let widthsInChars =- if isSimple+ if all (== 0) widths then map ((+2) . numChars) $ transpose (headers' : rawRows) else map (floor . (fromIntegral (writerColumns opts) *)) widths let hpipeBlocks blocks = hcat [beg, middle, end]
src/Text/Pandoc/Writers/RTF.hs view
@@ -259,7 +259,7 @@ tableItemToRTF :: Int -> Alignment -> [Block] -> String tableItemToRTF indent alignment item = let contents = concatMap (blockToRTF indent alignment) item- in "{\\intbl " ++ contents ++ "\\cell}\n"+ in "{" ++ substitute "\\pard" "\\pard\\intbl" contents ++ "\\cell}\n" -- | Ensure that there's the same amount of space after compact -- lists as after regular lists.
tests/Tests/Arbitrary.hs view
@@ -49,7 +49,7 @@ , (10, liftM Strikeout $ arbInlines (n-1)) , (10, liftM Superscript $ arbInlines (n-1)) , (10, liftM Subscript $ arbInlines (n-1))--- , (10, liftM SmallCaps $ arbInlines (n-1))+ , (10, liftM SmallCaps $ arbInlines (n-1)) , (10, do x1 <- arbitrary x2 <- arbInlines (n-1) return $ Quoted x1 x2)@@ -64,6 +64,7 @@ x3 <- realString x2 <- liftM escapeURI realString return $ Image x1 (x2,x3))+ , (2, liftM2 Cite arbitrary (arbInlines 1)) , (2, liftM Note $ resize 3 $ listOf1 $ arbBlock (n-1)) ] @@ -111,7 +112,6 @@ arbitrary = resize 8 $ liftM normalize $ liftM2 Pandoc arbitrary arbitrary -{- instance Arbitrary CitationMode where arbitrary = do x <- choose (0 :: Int, 2)@@ -123,14 +123,13 @@ instance Arbitrary Citation where arbitrary- = do x1 <- liftM (filter (`notElem` ",;]@ \t\n")) arbitrary- x2 <- arbitrary- x3 <- arbitrary+ = do x1 <- listOf $ elements $ ['a'..'z'] ++ ['0'..'9'] ++ ['_']+ x2 <- arbInlines 1+ x3 <- arbInlines 1 x4 <- arbitrary x5 <- arbitrary x6 <- arbitrary return (Citation x1 x2 x3 x4 x5 x6)--} instance Arbitrary MathType where arbitrary
tests/Tests/Old.hs view
@@ -135,7 +135,7 @@ "haddock-reader.haddock" "haddock-reader.native" ] , testGroup "other writers" $ map (\f -> testGroup f $ writerTests f)- [ "opendocument" , "context" , "texinfo"+ [ "opendocument" , "context" , "texinfo", "icml" , "man" , "plain" , "rtf", "org", "asciidoc" ] ]
tests/Tests/Readers/Markdown.hs view
@@ -216,4 +216,13 @@ -- , testGroup "round trip" -- [ property "p_markdown_round_trip" p_markdown_round_trip -- ]+ , 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") <>+ rawBlock "html" "<button>" <>+ plain (text "if this button exists") <>+ rawBlock "html" "</button>\n" <>+ divWith nullAttr (plain $ text "with this div too.")]+ ] ]
+ tests/Tests/Readers/Org.hs view
@@ -0,0 +1,910 @@+{-# LANGUAGE OverloadedStrings #-}+module Tests.Readers.Org (tests) where++import Text.Pandoc.Definition+import Test.Framework+import Tests.Helpers+import Tests.Arbitrary()+import Text.Pandoc.Builder+import Text.Pandoc+import Data.List (intersperse)+import Data.Monoid (mempty, mappend, mconcat)++org :: String -> Pandoc+org = readOrg def++infix 4 =:+(=:) :: ToString c+ => String -> (String, c) -> Test+(=:) = test org++spcSep :: [Inlines] -> Inlines+spcSep = mconcat . intersperse space++simpleTable' :: Int+ -> [Blocks]+ -> [[Blocks]]+ -> Blocks+simpleTable' n = table "" (take n $ repeat (AlignDefault, 0.0))++tests :: [Test]+tests =+ [ testGroup "Inlines" $+ [ "Plain String" =:+ "Hello, World" =?>+ para (spcSep [ "Hello,", "World" ])++ , "Emphasis" =:+ "/Planet Punk/" =?>+ para (emph . spcSep $ ["Planet", "Punk"])++ , "Strong" =:+ "*Cider*" =?>+ para (strong "Cider")++ , "Strong Emphasis" =:+ "/*strength*/" =?>+ para (emph . strong $ "strength")++ , "Strikeout" =:+ "+Kill Bill+" =?>+ para (strikeout . spcSep $ [ "Kill", "Bill" ])++ , "Code" =:+ "=Robot.rock()=" =?>+ para (code "Robot.rock()")++ , "Verbatim" =:+ "~word for word~" =?>+ para (rawInline "" "word for word")++ , "Math $..$" =:+ "$E=mc^2$" =?>+ para (math "E=mc^2")++ , "Math $$..$$" =:+ "$$E=mc^2$$" =?>+ para (displayMath "E=mc^2")++ , "Math \\[..\\]" =:+ "\\[E=ℎν\\]" =?>+ para (displayMath "E=ℎν")++ , "Math \\(..\\)" =:+ "\\(σ_x σ_p ≥ \\frac{ℏ}{2}\\)" =?>+ para (math "σ_x σ_p ≥ \\frac{ℏ}{2}")++ , "Symbol" =:+ "A * symbol" =?>+ para (str "A" <> space <> str "*" <> space <> "symbol")++ , "Superscript simple expression" =:+ "2^-λ" =?>+ para (str "2" <> superscript "-λ")++ , "Superscript multi char" =:+ "2^{n-1}" =?>+ para (str "2" <> superscript "n-1")++ , "Subscript simple expression" =:+ "a_n" =?>+ para (str "a" <> subscript "n")++ , "Subscript multi char" =:+ "a_{n+1}" =?>+ para (str "a" <> subscript "n+1")++ , "Linebreak" =:+ "line \\\\ \nbreak" =?>+ para ("line" <> linebreak <> "break")++ , "Inline note" =:+ "[fn::Schreib mir eine E-Mail]" =?>+ para (note $ para "Schreib mir eine E-Mail")++ , "Markup-chars not occuring on word break are symbols" =:+ unlines [ "this+that+ +so+on"+ , "seven*eight* nine*"+ , "+not+funny+"+ ] =?>+ para (spcSep [ "this+that+", "+so+on"+ , "seven*eight*", "nine*"+ , strikeout "not+funny"+ ])++ , "No empty markup" =:+ "// ** __ ++ == ~~ $$" =?>+ para (spcSep [ "//", "**", "__", "++", "==", "~~", "$$" ])++ , "Adherence to Org's rules for markup borders" =:+ "/t/& a/ / ./r/ (*l*) /e/! /b/." =?>+ para (spcSep [ emph $ "t/&" <> space <> "a"+ , "/"+ , "./r/"+ , "(" <> (strong "l") <> ")"+ , (emph "e") <> "!"+ , (emph "b") <> "."+ ])++ , "Inline math must stay within three lines" =:+ unlines [ "$a", "b", "c$", "$d", "e", "f", "g$" ] =?>+ para ((math "a\nb\nc") <> space <>+ spcSep [ "$d", "e", "f", "g$" ])++ , "Single-character math" =:+ "$a$ $b$! $c$?" =?>+ para (spcSep [ math "a"+ , "$b$!"+ , (math "c") <> "?"+ ])++ , "Markup may not span more than two lines" =:+ unlines [ "/this *is +totally", "nice+ not*", "emph/" ] =?>+ para (spcSep [ "/this"+ , (strong (spcSep+ [ "is"+ , (strikeout ("totally" <> space <> "nice"))+ , "not"+ ]))+ , "emph/" ])++ , "Sub- and superscript expressions" =:+ unlines [ "a_(a(b)(c)d)"+ , "e^(f(g)h)"+ , "i_(jk)l)"+ , "m^()n"+ , "o_{p{q{}r}}"+ , "s^{t{u}v}"+ , "w_{xy}z}"+ , "1^{}2"+ , "3_{{}}"+ , "4^(a(*b(c*)d))"+ ] =?>+ para (spcSep [ "a" <> subscript "(a(b)(c)d)"+ , "e" <> superscript "(f(g)h)"+ , "i" <> (subscript "(jk)") <> "l)"+ , "m" <> (superscript "()") <> "n"+ , "o" <> subscript "p{q{}r}"+ , "s" <> superscript "t{u}v"+ , "w" <> (subscript "xy") <> "z}"+ , "1" <> (superscript "") <> "2"+ , "3" <> subscript "{}"+ , "4" <> superscript ("(a(" <> strong "b(c" <> ")d))")+ ])++ , "Image" =:+ "[[./sunset.jpg]]" =?>+ (para $ image "./sunset.jpg" "" "")++ , "Explicit link" =:+ "[[http://zeitlens.com/][pseudo-random /nonsense/]]" =?>+ (para $ link "http://zeitlens.com/" ""+ ("pseudo-random" <> space <> emph "nonsense"))++ , "Self-link" =:+ "[[http://zeitlens.com/]]" =?>+ (para $ link "http://zeitlens.com/" "" "http://zeitlens.com/")++ , "Image link" =:+ "[[sunset.png][dusk.svg]]" =?>+ (para $ link "sunset.png" "" (image "dusk.svg" "" ""))++ , "Plain link" =:+ "Posts on http://zeitlens.com/ can be funny at times." =?>+ (para $ spcSep [ "Posts", "on"+ , link "http://zeitlens.com/" "" "http://zeitlens.com/"+ , "can", "be", "funny", "at", "times."+ ])++ , "Angle link" =:+ "Look at <http://moltkeplatz.de> for fnords." =?>+ (para $ spcSep [ "Look", "at"+ , link "http://moltkeplatz.de" "" "http://moltkeplatz.de"+ , "for", "fnords."+ ])++ , "Anchor" =:+ "<<anchor>> Link here later." =?>+ (para $ spanWith ("anchor", [], []) mempty <>+ "Link" <> space <> "here" <> space <> "later.")++ , "Inline code block" =:+ "src_emacs-lisp{(message \"Hello\")}" =?>+ (para $ codeWith ( ""+ , [ "commonlisp", "rundoc-block" ]+ , [ ("rundoc-language", "emacs-lisp") ])+ "(message \"Hello\")")++ , "Inline code block with arguments" =:+ "src_sh[:export both :results output]{echo 'Hello, World'}" =?>+ (para $ codeWith ( ""+ , [ "bash", "rundoc-block" ]+ , [ ("rundoc-language", "sh")+ , ("rundoc-export", "both")+ , ("rundoc-results", "output")+ ]+ )+ "echo 'Hello, World'")+ ]++ , testGroup "Meta Information" $+ [ "Comment" =:+ "# Nothing to see here" =?>+ (mempty::Blocks)++ , "Not a comment" =:+ "#-tag" =?>+ para "#-tag"++ , "Comment surrounded by Text" =:+ unlines [ "Before"+ , "# Comment"+ , "After"+ ] =?>+ mconcat [ para "Before"+ , para "After"+ ]++ , "Title" =:+ "#+TITLE: Hello, World" =?>+ let titleInline = toList $ "Hello," <> space <> "World"+ meta = setMeta "title" (MetaInlines titleInline) $ nullMeta+ in Pandoc meta mempty++ , "Author" =:+ "#+author: Albert /Emacs-Fanboy/ Krewinkel" =?>+ let author = toList . spcSep $ [ "Albert", emph "Emacs-Fanboy", "Krewinkel" ]+ meta = setMeta "author" (MetaInlines author) $ nullMeta+ in Pandoc meta mempty++ , "Date" =:+ "#+Date: Feb. *28*, 2014" =?>+ let date = toList . spcSep $ [ "Feb.", (strong "28") <> ",", "2014" ]+ meta = setMeta "date" (MetaInlines date) $ nullMeta+ in Pandoc meta mempty++ , "Description" =:+ "#+DESCRIPTION: Explanatory text" =?>+ let description = toList . spcSep $ [ "Explanatory", "text" ]+ meta = setMeta "description" (MetaInlines description) $ nullMeta+ in Pandoc meta mempty++ , "Properties drawer" =:+ unlines [ " :PROPERTIES:"+ , " :setting: foo"+ , " :END:"+ ] =?>+ (mempty::Blocks)++ , "Logbook drawer" =:+ unlines [ " :LogBook:"+ , " - State \"DONE\" from \"TODO\" [2014-03-03 Mon 11:00]"+ , " :END:"+ ] =?>+ (mempty::Blocks)++ , "Drawer surrounded by text" =:+ unlines [ "Before"+ , ":PROPERTIES:"+ , ":END:"+ , "After"+ ] =?>+ para "Before" <> para "After"++ , "Drawer start is the only text in first line of a drawer" =:+ unlines [ " :LOGBOOK: foo"+ , " :END:"+ ] =?>+ para (spcSep [ ":LOGBOOK:", "foo", ":END:" ])++ , "Drawers with unknown names are just text" =:+ unlines [ ":FOO:"+ , ":END:"+ ] =?>+ para (":FOO:" <> space <> ":END:")++ , "Anchor reference" =:+ unlines [ "<<link-here>> Target."+ , ""+ , "[[link-here][See here!]]"+ ] =?>+ (para (spanWith ("link-here", [], []) mempty <> "Target.") <>+ para (link "#link-here" "" ("See" <> space <> "here!")))++ , "Search links are read as emph" =:+ "[[Wally][Where's Wally?]]" =?>+ (para (emph $ "Where's" <> space <> "Wally?"))++ , "Link to nonexistent anchor" =:+ unlines [ "<<link-here>> Target."+ , ""+ , "[[link$here][See here!]]"+ ] =?>+ (para (spanWith ("link-here", [], []) mempty <> "Target.") <>+ para (emph ("See" <> space <> "here!")))++ , "Link abbreviation" =:+ unlines [ "#+LINK: wp https://en.wikipedia.org/wiki/%s"+ , "[[wp:Org_mode][Wikipedia on Org-mode]]"+ ] =?>+ (para (link "https://en.wikipedia.org/wiki/Org_mode" ""+ ("Wikipedia" <> space <> "on" <> space <> "Org-mode")))++ , "Link abbreviation, defined after first use" =:+ unlines [ "[[zl:non-sense][Non-sense articles]]"+ , "#+LINK: zl http://zeitlens.com/tags/%s.html"+ ] =?>+ (para (link "http://zeitlens.com/tags/non-sense.html" ""+ ("Non-sense" <> space <> "articles")))++ , "Link abbreviation, URL encoded arguments" =:+ unlines [ "#+link: expl http://example.com/%h/foo"+ , "[[expl:Hello, World!][Moin!]]"+ ] =?>+ (para (link "http://example.com/Hello%2C%20World%21/foo" "" "Moin!"))++ , "Link abbreviation, append arguments" =:+ unlines [ "#+link: expl http://example.com/"+ , "[[expl:foo][bar]]"+ ] =?>+ (para (link "http://example.com/foo" "" "bar"))+ ]++ , testGroup "Basic Blocks" $+ [ "Paragraph" =:+ "Paragraph\n" =?>+ para "Paragraph"++ , "First Level Header" =:+ "* Headline\n" =?>+ header 1 "Headline"++ , "Third Level Header" =:+ "*** Third Level Headline\n" =?>+ header 3 ("Third" <> space <>+ "Level" <> space <>+ "Headline")++ , "Compact Headers with Paragraph" =:+ unlines [ "* First Level"+ , "** Second Level"+ , " Text"+ ] =?>+ mconcat [ header 1 ("First" <> space <> "Level")+ , header 2 ("Second" <> space <> "Level")+ , para "Text"+ ]++ , "Separated Headers with Paragraph" =:+ unlines [ "* First Level"+ , ""+ , "** Second Level"+ , ""+ , " Text"+ ] =?>+ mconcat [ header 1 ("First" <> space <> "Level")+ , header 2 ("Second" <> space <> "Level")+ , para "Text"+ ]++ , "Headers not preceded by a blank line" =:+ unlines [ "** eat dinner"+ , "Spaghetti and meatballs tonight."+ , "** walk dog"+ ] =?>+ mconcat [ header 2 ("eat" <> space <> "dinner")+ , para $ spcSep [ "Spaghetti", "and", "meatballs", "tonight." ]+ , header 2 ("walk" <> space <> "dog")+ ]++ , "Paragraph starting with an asterisk" =:+ "*five" =?>+ para "*five"++ , "Paragraph containing asterisk at beginning of line" =:+ unlines [ "lucky"+ , "*star"+ ] =?>+ para ("lucky" <> space <> "*star")++ , "Example block" =:+ unlines [ ": echo hello"+ , ": echo dear tester"+ ] =?>+ codeBlockWith ("", ["example"], []) "echo hello\necho dear tester\n"++ , "Example block surrounded by text" =:+ unlines [ "Greetings"+ , ": echo hello"+ , ": echo dear tester"+ , "Bye"+ ] =?>+ mconcat [ para "Greetings"+ , codeBlockWith ("", ["example"], [])+ "echo hello\necho dear tester\n"+ , para "Bye"+ ]++ , "Horizontal Rule" =:+ unlines [ "before"+ , "-----"+ , "after"+ ] =?>+ mconcat [ para "before"+ , horizontalRule+ , para "after"+ ]++ , "Not a Horizontal Rule" =:+ "----- five dashes" =?>+ (para $ spcSep [ "-----", "five", "dashes" ])++ , "Comment Block" =:+ unlines [ "#+BEGIN_COMMENT"+ , "stuff"+ , "bla"+ , "#+END_COMMENT"] =?>+ (mempty::Blocks)++ , "Figure" =:+ unlines [ "#+caption: A very courageous man."+ , "#+name: goodguy"+ , "[[edward.jpg]]"+ ] =?>+ para (image "edward.jpg" "fig:goodguy" "A very courageous man.")++ , "Unnamed figure" =:+ unlines [ "#+caption: A great whistleblower."+ , "[[snowden.png]]"+ ] =?>+ para (image "snowden.png" "" "A great whistleblower.")++ , "Figure with `fig:` prefix in name" =:+ unlines [ "#+caption: Used as a metapher in evolutionary biology."+ , "#+name: fig:redqueen"+ , "[[the-red-queen.jpg]]"+ ] =?>+ para (image "the-red-queen.jpg" "fig:redqueen"+ "Used as a metapher in evolutionary biology.")++ , "Footnote" =:+ unlines [ "A footnote[1]"+ , ""+ , "[1] First paragraph"+ , ""+ , "second paragraph"+ ] =?>+ para (mconcat+ [ "A", space, "footnote"+ , note $ mconcat [ para ("First" <> space <> "paragraph")+ , para ("second" <> space <> "paragraph")+ ]+ ])++ , "Two footnotes" =:+ unlines [ "Footnotes[fn:1][fn:2]"+ , ""+ , "[fn:1] First note."+ , ""+ , "[fn:2] Second note."+ ] =?>+ para (mconcat+ [ "Footnotes"+ , note $ para ("First" <> space <> "note.")+ , note $ para ("Second" <> space <> "note.")+ ])++ , "Footnote followed by header" =:+ unlines [ "Another note[fn:yay]"+ , ""+ , "[fn:yay] This is great!"+ , ""+ , "** Headline"+ ] =?>+ mconcat+ [ para (mconcat+ [ "Another", space, "note"+ , note $ para ("This" <> space <> "is" <> space <> "great!")+ ])+ , header 2 "Headline"+ ]+ ]++ , testGroup "Lists" $+ [ "Simple Bullet Lists" =:+ ("- Item1\n" +++ "- Item2\n") =?>+ bulletList [ plain "Item1"+ , plain "Item2"+ ]++ , "Indented Bullet Lists" =:+ (" - Item1\n" +++ " - Item2\n") =?>+ bulletList [ plain "Item1"+ , plain "Item2"+ ]++ , "Multi-line Bullet Lists" =:+ ("- *Fat\n" +++ " Tony*\n" +++ "- /Sideshow\n" +++ " Bob/") =?>+ bulletList [ plain $ strong ("Fat" <> space <> "Tony")+ , plain $ emph ("Sideshow" <> space <> "Bob")+ ]++ , "Nested Bullet Lists" =:+ ("- Discovery\n" +++ " + One More Time\n" +++ " + Harder, Better, Faster, Stronger\n" +++ "- Homework\n" +++ " + Around the World\n"+++ "- Human After All\n" +++ " + Technologic\n" +++ " + Robot Rock\n") =?>+ bulletList [ mconcat+ [ para "Discovery"+ , bulletList [ plain ("One" <> space <>+ "More" <> space <>+ "Time")+ , plain ("Harder," <> space <>+ "Better," <> space <>+ "Faster," <> space <>+ "Stronger")+ ]+ ]+ , mconcat+ [ para "Homework"+ , bulletList [ plain ("Around" <> space <>+ "the" <> space <>+ "World")+ ]+ ]+ , mconcat+ [ para ("Human" <> space <> "After" <> space <> "All")+ , bulletList [ plain "Technologic"+ , plain ("Robot" <> space <> "Rock")+ ]+ ]+ ]++ , "Simple Ordered List" =:+ ("1. Item1\n" +++ "2. Item2\n") =?>+ let listStyle = (1, DefaultStyle, DefaultDelim)+ listStructure = [ plain "Item1"+ , plain "Item2"+ ]+ in orderedListWith listStyle listStructure++ , "Simple Ordered List with Parens" =:+ ("1) Item1\n" +++ "2) Item2\n") =?>+ let listStyle = (1, DefaultStyle, DefaultDelim)+ listStructure = [ plain "Item1"+ , plain "Item2"+ ]+ in orderedListWith listStyle listStructure++ , "Indented Ordered List" =:+ (" 1. Item1\n" +++ " 2. Item2\n") =?>+ let listStyle = (1, DefaultStyle, DefaultDelim)+ listStructure = [ plain "Item1"+ , plain "Item2"+ ]+ in orderedListWith listStyle listStructure++ , "Nested Ordered Lists" =:+ ("1. One\n" +++ " 1. One-One\n" +++ " 2. One-Two\n" +++ "2. Two\n" +++ " 1. Two-One\n"+++ " 2. Two-Two\n") =?>+ let listStyle = (1, DefaultStyle, DefaultDelim)+ listStructure = [ mconcat+ [ para "One"+ , orderedList [ plain "One-One"+ , plain "One-Two"+ ]+ ]+ , mconcat+ [ para "Two"+ , orderedList [ plain "Two-One"+ , plain "Two-Two"+ ]+ ]+ ]+ in orderedListWith listStyle listStructure++ , "Ordered List in Bullet List" =:+ ("- Emacs\n" +++ " 1. Org\n") =?>+ bulletList [ (para "Emacs") <>+ (orderedList [ plain "Org"])+ ]++ , "Bullet List in Ordered List" =:+ ("1. GNU\n" +++ " - Freedom\n") =?>+ orderedList [ (para "GNU") <> bulletList [ (plain "Freedom") ] ]++ , "Definition List" =:+ unlines [ "- PLL :: phase-locked loop"+ , "- TTL ::"+ , " transistor-transistor logic"+ , "- PSK::phase-shift keying"+ , ""+ , " a digital modulation scheme"+ ] =?>+ definitionList [ ("PLL", [ plain $ "phase-locked" <> space <> "loop" ])+ , ("TTL", [ plain $ "transistor-transistor" <> space <>+ "logic" ])+ , ("PSK", [ mconcat+ [ para $ "phase-shift" <> space <> "keying"+ , para $ spcSep [ "a", "digital"+ , "modulation", "scheme" ]+ ]+ ])+ ]++ , "Compact definition list" =:+ unlines [ "- ATP :: adenosine 5' triphosphate"+ , "- DNA :: deoxyribonucleic acid"+ , "- PCR :: polymerase chain reaction"+ , ""+ ] =?>+ definitionList+ [ ("ATP", [ plain $ spcSep [ "adenosine", "5'", "triphosphate" ] ])+ , ("DNA", [ plain $ spcSep [ "deoxyribonucleic", "acid" ] ])+ , ("PCR", [ plain $ spcSep [ "polymerase", "chain", "reaction" ] ])+ ]++ , "Loose bullet list" =:+ unlines [ "- apple"+ , ""+ , "- orange"+ , ""+ , "- peach"+ ] =?>+ bulletList [ para "apple"+ , para "orange"+ , para "peach"+ ]+ ]++ , testGroup "Tables"+ [ "Single cell table" =:+ "|Test|" =?>+ simpleTable' 1 mempty [[plain "Test"]]++ , "Multi cell table" =:+ "| One | Two |" =?>+ simpleTable' 2 mempty [ [ plain "One", plain "Two" ] ]++ , "Multi line table" =:+ unlines [ "| One |"+ , "| Two |"+ , "| Three |"+ ] =?>+ simpleTable' 1 mempty+ [ [ plain "One" ]+ , [ plain "Two" ]+ , [ plain "Three" ]+ ]++ , "Empty table" =:+ "||" =?>+ simpleTable' 1 mempty mempty++ , "Glider Table" =:+ unlines [ "| 1 | 0 | 0 |"+ , "| 0 | 1 | 1 |"+ , "| 1 | 1 | 0 |"+ ] =?>+ simpleTable' 3 mempty+ [ [ plain "1", plain "0", plain "0" ]+ , [ plain "0", plain "1", plain "1" ]+ , [ plain "1", plain "1", plain "0" ]+ ]++ , "Table between Paragraphs" =:+ unlines [ "Before"+ , "| One | Two |"+ , "After"+ ] =?>+ mconcat [ para "Before"+ , simpleTable' 2 mempty [ [ plain "One", plain "Two" ] ]+ , para "After"+ ]++ , "Table with Header" =:+ unlines [ "| Species | Status |"+ , "|--------------+--------------|"+ , "| cervisiae | domesticated |"+ , "| paradoxus | wild |"+ ] =?>+ simpleTable [ plain "Species", plain "Status" ]+ [ [ plain "cervisiae", plain "domesticated" ]+ , [ plain "paradoxus", plain "wild" ]+ ]++ , "Table with final hline" =:+ unlines [ "| cervisiae | domesticated |"+ , "| paradoxus | wild |"+ , "|--------------+--------------|"+ ] =?>+ simpleTable' 2 mempty+ [ [ plain "cervisiae", plain "domesticated" ]+ , [ plain "paradoxus", plain "wild" ]+ ]++ , "Table in a box" =:+ unlines [ "|---------|---------|"+ , "| static | Haskell |"+ , "| dynamic | Lisp |"+ , "|---------+---------|"+ ] =?>+ simpleTable' 2 mempty+ [ [ plain "static", plain "Haskell" ]+ , [ plain "dynamic", plain "Lisp" ]+ ]++ , "Table with alignment row" =:+ unlines [ "| Numbers | Text | More |"+ , "| <c> | <r> | |"+ , "| 1 | One | foo |"+ , "| 2 | Two | bar |"+ ] =?>+ table "" (zip [AlignCenter, AlignRight, AlignDefault] [0, 0, 0])+ []+ [ [ plain "Numbers", plain "Text", plain "More" ]+ , [ plain "1" , plain "One" , plain "foo" ]+ , [ plain "2" , plain "Two" , plain "bar" ]+ ]++ , "Pipe within text doesn't start a table" =:+ "Ceci n'est pas une | pipe " =?>+ para (spcSep [ "Ceci", "n'est", "pas", "une", "|", "pipe" ])++ , "Missing pipe at end of row" =:+ "|incomplete-but-valid" =?>+ simpleTable' 1 mempty [ [ plain "incomplete-but-valid" ] ]++ , "Table with differing row lengths" =:+ unlines [ "| Numbers | Text "+ , "|-"+ , "| <c> | <r> |"+ , "| 1 | One | foo |"+ , "| 2"+ ] =?>+ table "" (zip [AlignCenter, AlignRight, AlignDefault] [0, 0, 0])+ [ plain "Numbers", plain "Text" , plain mempty ]+ [ [ plain "1" , plain "One" , plain "foo" ]+ , [ plain "2" , plain mempty , plain mempty ]+ ]++ , "Table with caption" =:+ unlines [ "#+CAPTION: Hitchhiker's Multiplication Table"+ , "| x | 6 |"+ , "| 9 | 42 |"+ ] =?>+ table "Hitchhiker's Multiplication Table"+ [(AlignDefault, 0), (AlignDefault, 0)]+ []+ [ [ plain "x", plain "6" ]+ , [ plain "9", plain "42" ]+ ]+ ]++ , testGroup "Blocks and fragments"+ [ "Source block" =:+ unlines [ " #+BEGIN_SRC haskell"+ , " main = putStrLn greeting"+ , " where greeting = \"moin\""+ , " #+END_SRC" ] =?>+ let attr' = ("", ["haskell"], [])+ code' = "main = putStrLn greeting\n" +++ " where greeting = \"moin\"\n"+ in codeBlockWith attr' code'++ , "Source block between paragraphs" =:+ unlines [ "Low German greeting"+ , " #+BEGIN_SRC haskell"+ , " main = putStrLn greeting"+ , " where greeting = \"Moin!\""+ , " #+END_SRC" ] =?>+ let attr' = ("", ["haskell"], [])+ code' = "main = putStrLn greeting\n" +++ " where greeting = \"Moin!\"\n"+ in mconcat [ para $ spcSep [ "Low", "German", "greeting" ]+ , codeBlockWith attr' code'+ ]++ , "Example block" =:+ unlines [ "#+begin_example"+ , "A chosen representation of"+ , "a rule."+ , "#+eND_exAMPle"+ ] =?>+ codeBlockWith ("", ["example"], [])+ "A chosen representation of\na rule.\n"++ , "HTML block" =:+ unlines [ "#+BEGIN_HTML"+ , "<aside>HTML5 is pretty nice.</aside>"+ , "#+END_HTML"+ ] =?>+ rawBlock "html" "<aside>HTML5 is pretty nice.</aside>\n"++ , "Quote block" =:+ unlines [ "#+BEGIN_QUOTE"+ , "/Niemand/ hat die Absicht, eine Mauer zu errichten!"+ , "#+END_QUOTE"+ ] =?>+ blockQuote (para (spcSep [ emph "Niemand", "hat", "die", "Absicht,"+ , "eine", "Mauer", "zu", "errichten!"+ ]))++ , "Verse block" =:+ unlines [ "The first lines of Goethe's /Faust/:"+ , "#+begin_verse"+ , "Habe nun, ach! Philosophie,"+ , "Juristerei und Medizin,"+ , "Und leider auch Theologie!"+ , "Durchaus studiert, mit heißem Bemühn."+ , "#+end_verse"+ ] =?>+ mconcat+ [ para $ spcSep [ "The", "first", "lines", "of"+ , "Goethe's", emph "Faust" <> ":"]+ , para $ mconcat+ [ spcSep [ "Habe", "nun,", "ach!", "Philosophie," ]+ , linebreak+ , spcSep [ "Juristerei", "und", "Medizin," ]+ , linebreak+ , spcSep [ "Und", "leider", "auch", "Theologie!" ]+ , linebreak+ , spcSep [ "Durchaus", "studiert,", "mit", "heißem", "Bemühn." ]+ ]+ ]++ , "LaTeX fragment" =:+ unlines [ "\\begin{equation}"+ , "X_i = \\begin{cases}"+ , " G_{\\alpha(i)} & \\text{if }\\alpha(i-1) = \\alpha(i)\\\\"+ , " C_{\\alpha(i)} & \\text{otherwise}"+ , " \\end{cases}"+ , "\\end{equation}"+ ] =?>+ rawBlock "latex"+ (unlines [ "\\begin{equation}"+ , "X_i = \\begin{cases}"+ , " G_{\\alpha(i)} & \\text{if }\\alpha(i-1) =" +++ " \\alpha(i)\\\\"+ , " C_{\\alpha(i)} & \\text{otherwise}"+ , " \\end{cases}"+ , "\\end{equation}"+ ])++ , "Code block with caption" =:+ unlines [ "#+CAPTION: Functor laws in Haskell"+ , "#+NAME: functor-laws"+ , "#+BEGIN_SRC haskell"+ , "fmap id = id"+ , "fmap (p . q) = (fmap p) . (fmap q)"+ , "#+END_SRC"+ ] =?>+ divWith+ nullAttr+ (mappend+ (plain $ spanWith ("", ["label"], [])+ (spcSep [ "Functor", "laws", "in", "Haskell" ]))+ (codeBlockWith ("functor-laws", ["haskell"], [])+ (unlines [ "fmap id = id"+ , "fmap (p . q) = (fmap p) . (fmap q)"+ ])))+ ]+ ]
+ tests/Tests/Writers/AsciiDoc.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE OverloadedStrings #-}+module Tests.Writers.AsciiDoc (tests) where++import Test.Framework+import Text.Pandoc.Builder+import Text.Pandoc+import Tests.Helpers+import Tests.Arbitrary()+import Data.Monoid++asciidoc :: (ToString a, ToPandoc a) => a -> String+asciidoc = writeAsciiDoc def{ writerWrapText = False } . toPandoc++tests :: [Test]+tests = [ testGroup "tables"+ [ test asciidoc "empty cells" $+ simpleTable [] [[mempty],[mempty]] =?> unlines+ [ "[cols=\"\",]"+ , "|===="+ , "|"+ , "|"+ , "|===="+ ]+ , test asciidoc "multiblock cells" $+ simpleTable [] [[para "Para 1" <> para "Para 2"]]+ =?> unlines+ [ "[cols=\"\",]"+ , "|====="+ , "a|"+ , "Para 1"+ , ""+ , "Para 2"+ , ""+ , "|====="+ ]+ ]+ ]
tests/docbook-reader.docbook view
@@ -4,14 +4,16 @@ <article> <articleinfo> <title>Pandoc Test Suite</title>- <author>- <firstname>John</firstname>- <surname>MacFarlane</surname>- </author>- <author>- <firstname></firstname>- <surname>Anonymous</surname>- </author>+ <authorgroup>+ <author>+ <firstname>John</firstname>+ <surname>MacFarlane</surname>+ </author>+ <author>+ <firstname></firstname>+ <surname>Anonymous</surname>+ </author>+ </authorgroup> <date>July 17, 2006</date> </articleinfo> <para>
tests/html-reader.html view
@@ -302,6 +302,7 @@ <h1>Inline Markup</h1> <p>This is <em>emphasized</em>, and so <em>is this</em>.</p> <p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p>+<p>Empty <strong></strong> and <em></em>. <p>An <em><a href="/url">emphasized link</a></em>.</p> <p><strong><em>This is strong and em.</em></strong></p> <p>So is <strong><em>this</em></strong> word.</p>@@ -426,5 +427,10 @@ <pre><code> { <code> } </code></pre> <p>If you want, you can use a caret at the beginning of every line, as with blockquotes, but all that you need is a caret at the beginning of the first line of the block and any preceding blank lines.</p>+<p>text<em> Leading space</em></p>+<p><em>Trailing space </em>text</p>+<p>text<em> Leading spaces</em></p>+<p><em>Trailing spaces </em>text</p>+ </body> </html>
tests/html-reader.native view
@@ -1,5 +1,5 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("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",Str ".",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber",Str "'",Str "s",Space,Str "markdown",Space,Str "test",Space,Str "suite",Str "."]+[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's",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,HorizontalRule ,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","")]@@ -14,15 +14,15 @@ ,Para [Str "with",Space,Str "no",Space,Str "blank",Space,Str "line"] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Paragraphs"]-,Para [Str "Here",Str "'",Str "s",Space,Str "a",Space,Str "regular",Space,Str "paragraph",Str "."]-,Para [Str "In",Space,Str "Markdown",Space,Str "1",Str ".",Str "0",Str ".",Str "0",Space,Str "and",Space,Str "earlier",Str ".",Space,Str "Version",Space,Str "8",Str ".",Space,Str "This",Space,Str "line",Space,Str "turns",Space,Str "into",Space,Str "a",Space,Str "list",Space,Str "item",Str ".",Space,Str "Because",Space,Str "a",Space,Str "hard",Str "-",Str "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",Str "."]-,Para [Str "Here",Str "'",Str "s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet",Str ".",Space,Str "*",Space,Str "criminey",Str "."]-,Para [Str "There",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "hard",Space,Str "line",Space,Str "break",LineBreak,Space,Str "here",Str "."]+,Para [Str "Here's",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's",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet.",Space,Str "*",Space,Str "criminey."]+,Para [Str "There",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "hard",Space,Str "line",Space,Str "break",LineBreak,Space,Str "here."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Block",Space,Str "Quotes"]-,Para [Str "E",Str "-",Str "mail",Space,Str "style:"]+,Para [Str "E-mail",Space,Str "style:"] ,BlockQuote- [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote",Str ".",Space,Str "It",Space,Str "is",Space,Str "pretty",Space,Str "short",Str "."]]+ [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."]] ,BlockQuote [Para [Str "Code",Space,Str "in",Space,Str "a",Space,Str "block",Space,Str "quote:"] ,CodeBlock ("",[],[]) "sub status {\n print \"working\";\n}"@@ -35,8 +35,8 @@ [Para [Str "nested"]] ,BlockQuote [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",Str "."]-,Para [Str "Box",Str "-",Str "style:"]+,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 "Box-style:"] ,BlockQuote [Para [Str "Example:"] ,CodeBlock ("",[],[]) "sub status {\n print \"working\";\n}"]@@ -44,12 +44,12 @@ [OrderedList (1,DefaultStyle,DefaultDelim) [[Plain [Str "do",Space,Str "laundry"]] ,[Plain [Str "take",Space,Str "out",Space,Str "the",Space,Str "trash"]]]]-,Para [Str "Here",Str "'",Str "s",Space,Str "a",Space,Str "nested",Space,Str "one:"]+,Para [Str "Here's",Space,Str "a",Space,Str "nested",Space,Str "one:"] ,BlockQuote [Para [Str "Joe",Space,Str "said:"] ,BlockQuote- [Para [Str "Don",Str "'",Str "t",Space,Str "quote",Space,Str "me",Str "."]]]-,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph",Str "."]+ [Para [Str "Don't",Space,Str "quote",Space,Str "me."]]]+,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Code",Space,Str "Blocks"] ,Para [Str "Code:"]@@ -112,10 +112,10 @@ ,[Para [Str "Three"]]] ,Para [Str "Multiple",Space,Str "paragraphs:"] ,OrderedList (1,DefaultStyle,DefaultDelim)- [[Para [Str "Item",Space,Str "1,",Space,Str "graf",Space,Str "one",Str "."]- ,Para [Str "Item",Space,Str "1",Str ".",Space,Str "graf",Space,Str "two",Str ".",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",Str "'",Str "s",Space,Str "back",Str "."]]- ,[Para [Str "Item",Space,Str "2",Str "."]]- ,[Para [Str "Item",Space,Str "3",Str "."]]]+ [[Para [Str "Item",Space,Str "1,",Space,Str "graf",Space,Str "one."]+ ,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's",Space,Str "back."]]+ ,[Para [Str "Item",Space,Str "2."]]+ ,[Para [Str "Item",Space,Str "3."]]] ,Header 2 ("",[],[]) [Str "Nested"] ,BulletList [[Plain [Str "Tab"]@@ -123,7 +123,7 @@ [[Plain [Str "Tab"] ,BulletList [[Plain [Str "Tab"]]]]]]]-,Para [Str "Here",Str "'",Str "s",Space,Str "another:"]+,Para [Str "Here's",Space,Str "another:"] ,OrderedList (1,DefaultStyle,DefaultDelim) [[Plain [Str "First"]] ,[Plain [Str "Second:"]@@ -163,63 +163,64 @@ ,OrderedList (1,UpperAlpha,DefaultDelim) [[Plain [Str "Upper",Space,Str "Alpha"] ,OrderedList (1,UpperRoman,DefaultDelim)- [[Plain [Str "Upper",Space,Str "Roman",Str "."]+ [[Plain [Str "Upper",Space,Str "Roman."] ,OrderedList (6,Decimal,DefaultDelim) [[Plain [Str "Decimal",Space,Str "start",Space,Str "with",Space,Str "6"] ,OrderedList (3,LowerAlpha,DefaultDelim) [[Plain [Str "Lower",Space,Str "alpha",Space,Str "with",Space,Str "paren"]]]]]]]]] ,Para [Str "Autonumbering:"] ,OrderedList (1,DefaultStyle,DefaultDelim)- [[Plain [Str "Autonumber",Str "."]]- ,[Plain [Str "More",Str "."]+ [[Plain [Str "Autonumber."]]+ ,[Plain [Str "More."] ,OrderedList (1,DefaultStyle,DefaultDelim)- [[Plain [Str "Nested",Str "."]]]]]+ [[Plain [Str "Nested."]]]]] ,HorizontalRule ,Header 2 ("",[],[]) [Str "Definition"] ,DefinitionList [([Str "Violin"],- [[Plain [Str "Stringed",Space,Str "musical",Space,Str "instrument",Str "."]]- ,[Plain [Str "Torture",Space,Str "device",Str "."]]])+ [[Plain [Str "Stringed",Space,Str "musical",Space,Str "instrument."]]+ ,[Plain [Str "Torture",Space,Str "device."]]]) ,([Str "Cello",LineBreak,Str "Violoncello"],- [[Plain [Str "Low",Str "-",Str "voiced",Space,Str "stringed",Space,Str "instrument",Str "."]]])]+ [[Plain [Str "Low-voiced",Space,Str "stringed",Space,Str "instrument."]]])] ,HorizontalRule ,Header 1 ("",[],[]) [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 "Empty",Space,Strong [],Space,Str "and",Space,Emph [],Str "."] ,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]-,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em",Str "."]]]-,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Str "."]-,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em",Str "."]]]-,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Str "."]+,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 [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 "."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"]-,Para [Str "\"",Str "Hello,",Str "\"",Space,Str "said",Space,Str "the",Space,Str "spider",Str ".",Space,Str "\"",Str "'",Str "Shelob",Str "'",Space,Str "is",Space,Str "my",Space,Str "name",Str ".",Str "\""]-,Para [Str "'",Str "A",Str "'",Str ",",Space,Str "'",Str "B",Str "'",Str ",",Space,Str "and",Space,Str "'",Str "C",Str "'",Space,Str "are",Space,Str "letters",Str "."]-,Para [Str "'",Str "Oak,",Str "'",Space,Str "'",Str "elm,",Str "'",Space,Str "and",Space,Str "'",Str "beech",Str "'",Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees",Str ".",Space,Str "So",Space,Str "is",Space,Str "'",Str "pine",Str ".",Str "'"]-,Para [Str "'",Str "He",Space,Str "said,",Space,Str "\"",Str "I",Space,Str "want",Space,Str "to",Space,Str "go",Str ".",Str "\"",Str "'",Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70",Str "'",Str "s?"]-,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Str "'",Code ("",[],[]) "code",Str "'",Space,Str "and",Space,Str "a",Space,Str "\"",Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2",""),Str "\"",Str "."]-,Para [Str "Some",Space,Str "dashes:",Space,Str "one",Str "-",Str "-",Str "-",Str "two",Space,Str "-",Str "-",Str "-",Space,Str "three",Str "-",Str "-",Str "four",Space,Str "-",Str "-",Space,Str "five",Str "."]-,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5",Str "-",Str "7,",Space,Str "255",Str "-",Str "66,",Space,Str "1987",Str "-",Str "1999",Str "."]-,Para [Str "Ellipses",Str ".",Str ".",Str ".",Str "and",Str ".",Space,Str ".",Space,Str ".",Str "and",Space,Str ".",Space,Str ".",Space,Str ".",Space,Str "."]+,Para [Str "\"Hello,\"",Space,Str "said",Space,Str "the",Space,Str "spider.",Space,Str "\"'Shelob'",Space,Str "is",Space,Str "my",Space,Str "name.\""]+,Para [Str "'A',",Space,Str "'B',",Space,Str "and",Space,Str "'C'",Space,Str "are",Space,Str "letters."]+,Para [Str "'Oak,'",Space,Str "'elm,'",Space,Str "and",Space,Str "'beech'",Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Str "'pine.'"]+,Para [Str "'He",Space,Str "said,",Space,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's?"]+,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Str "'",Code ("",[],[]) "code",Str "'",Space,Str "and",Space,Str "a",Space,Str "\"",Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2",""),Str "\"."]+,Para [Str "Some",Space,Str "dashes:",Space,Str "one---two",Space,Str "---",Space,Str "three--four",Space,Str "--",Space,Str "five."]+,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5-7,",Space,Str "255-66,",Space,Str "1987-1999."]+,Para [Str "Ellipses...and.",Space,Str ".",Space,Str ".and",Space,Str ".",Space,Str ".",Space,Str ".",Space,Str "."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "LaTeX"] ,BulletList- [[Plain [Str "\\cite[22",Str "-",Str "23]{smith",Str ".",Str "1899}"]]+ [[Plain [Str "\\cite[22-23]{smith.1899}"]] ,[Plain [Str "\\doublespacing"]]- ,[Plain [Str "$",Str "2+2=4",Str "$"]]- ,[Plain [Str "$",Str "x",Space,Str "\\in",Space,Str "y",Str "$"]]- ,[Plain [Str "$",Str "\\alpha",Space,Str "\\wedge",Space,Str "\\omega",Str "$"]]- ,[Plain [Str "$",Str "223",Str "$"]]- ,[Plain [Str "$",Str "p",Str "$",Str "-",Str "Tree"]]- ,[Plain [Str "$",Str "\\frac{d}{dx}f(x)=\\lim_{h\\to",Space,Str "0}\\frac{f(x+h)",Str "-",Str "f(x)}{h}",Str "$"]]- ,[Plain [Str "Here",Str "'",Str "s",Space,Str "one",Space,Str "that",Space,Str "has",Space,Str "a",Space,Str "line",Space,Str "break",Space,Str "in",Space,Str "it:",Space,Str "$",Str "\\alpha",Space,Str "+",Space,Str "\\omega",Space,Str "\\times",Space,Str "x^2",Str "$",Str "."]]]-,Para [Str "These",Space,Str "shouldn",Str "'",Str "t",Space,Str "be",Space,Str "math:"]+ ,[Plain [Str "$2+2=4$"]]+ ,[Plain [Str "$x",Space,Str "\\in",Space,Str "y$"]]+ ,[Plain [Str "$\\alpha",Space,Str "\\wedge",Space,Str "\\omega$"]]+ ,[Plain [Str "$223$"]]+ ,[Plain [Str "$p$-Tree"]]+ ,[Plain [Str "$\\frac{d}{dx}f(x)=\\lim_{h\\to",Space,Str "0}\\frac{f(x+h)-f(x)}{h}$"]]+ ,[Plain [Str "Here's",Space,Str "one",Space,Str "that",Space,Str "has",Space,Str "a",Space,Str "line",Space,Str "break",Space,Str "in",Space,Str "it:",Space,Str "$\\alpha",Space,Str "+",Space,Str "\\omega",Space,Str "\\times",Space,Str "x^2$."]]]+,Para [Str "These",Space,Str "shouldn't",Space,Str "be",Space,Str "math:"] ,BulletList [[Plain [Str "To",Space,Str "get",Space,Str "the",Space,Str "famous",Space,Str "equation,",Space,Str "write",Space,Code ("",[],[]) "$e = mc^2$",Str "."]]- ,[Plain [Str "$",Str "22,000",Space,Str "is",Space,Str "a",Space,Emph [Str "lot"],Space,Str "of",Space,Str "money",Str ".",Space,Str "So",Space,Str "is",Space,Str "$",Str "34,000",Str ".",Space,Str "(It",Space,Str "worked",Space,Str "if",Space,Str "\"",Str "lot",Str "\"",Space,Str "is",Space,Str "emphasized",Str ".",Str ")"]]- ,[Plain [Str "Escaped",Space,Code ("",[],[]) "$",Str ":",Space,Str "$",Str "73",Space,Emph [Str "this",Space,Str "should",Space,Str "be",Space,Str "emphasized"],Space,Str "23",Str "$",Str "."]]]-,Para [Str "Here",Str "'",Str "s",Space,Str "a",Space,Str "LaTeX",Space,Str "table:"]+ ,[Plain [Str "$22,000",Space,Str "is",Space,Str "a",Space,Emph [Str "lot"],Space,Str "of",Space,Str "money.",Space,Str "So",Space,Str "is",Space,Str "$34,000.",Space,Str "(It",Space,Str "worked",Space,Str "if",Space,Str "\"lot\"",Space,Str "is",Space,Str "emphasized.)"]]+ ,[Plain [Str "Escaped",Space,Code ("",[],[]) "$",Str ":",Space,Str "$73",Space,Emph [Str "this",Space,Str "should",Space,Str "be",Space,Str "emphasized"],Space,Str "23$."]]]+,Para [Str "Here's",Space,Str "a",Space,Str "LaTeX",Space,Str "table:"] ,Para [Str "\\begin{tabular}{|l|l|}\\hline",Space,Str "Animal",Space,Str "&",Space,Str "Number",Space,Str "\\\\",Space,Str "\\hline",Space,Str "Dog",Space,Str "&",Space,Str "2",Space,Str "\\\\",Space,Str "Cat",Space,Str "&",Space,Str "1",Space,Str "\\\\",Space,Str "\\hline",Space,Str "\\end{tabular}"] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Special",Space,Str "Characters"]@@ -230,11 +231,11 @@ ,[Plain [Str "section:",Space,Str "\167"]] ,[Plain [Str "set",Space,Str "membership:",Space,Str "\8712"]] ,[Plain [Str "copyright:",Space,Str "\169"]]]-,Para [Str "AT&T",Space,Str "has",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "their",Space,Str "name",Str "."]-,Para [Str "AT&T",Space,Str "is",Space,Str "another",Space,Str "way",Space,Str "to",Space,Str "write",Space,Str "it",Str "."]-,Para [Str "This",Space,Str "&",Space,Str "that",Str "."]-,Para [Str "4",Space,Str "<",Space,Str "5",Str "."]-,Para [Str "6",Space,Str ">",Space,Str "5",Str "."]+,Para [Str "AT&T",Space,Str "has",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "their",Space,Str "name."]+,Para [Str "AT&T",Space,Str "is",Space,Str "another",Space,Str "way",Space,Str "to",Space,Str "write",Space,Str "it."]+,Para [Str "This",Space,Str "&",Space,Str "that."]+,Para [Str "4",Space,Str "<",Space,Str "5."]+,Para [Str "6",Space,Str ">",Space,Str "5."] ,Para [Str "Backslash:",Space,Str "\\"] ,Para [Str "Backtick:",Space,Str "`"] ,Para [Str "Asterisk:",Space,Str "*"]@@ -245,7 +246,7 @@ ,Para [Str "Right",Space,Str "bracket:",Space,Str "]"] ,Para [Str "Left",Space,Str "paren:",Space,Str "("] ,Para [Str "Right",Space,Str "paren:",Space,Str ")"]-,Para [Str "Greater",Str "-",Str "than:",Space,Str ">"]+,Para [Str "Greater-than:",Space,Str ">"] ,Para [Str "Hash:",Space,Str "#"] ,Para [Str "Period:",Space,Str "."] ,Para [Str "Bang:",Space,Str "!"]@@ -260,47 +261,51 @@ ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]-,Para [Str "Email",Space,Str "link",Space,Str "(nobody",Space,Str "[at]",Space,Str "nowhere",Str ".",Str "net)"]+,Para [Str "Email",Space,Str "link",Space,Str "(nobody",Space,Str "[at]",Space,Str "nowhere.net)"] ,Para [Link [Str "Empty"] ("",""),Str "."] ,Header 2 ("",[],[]) [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 "."] ,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]-,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link",Str "."]+,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."] ,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."] ,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."] ,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]-,Para [Str "This",Space,Str "should",Space,Str "[not]",Space,Str "be",Space,Str "a",Space,Str "link",Str "."]+,Para [Str "This",Space,Str "should",Space,Str "[not]",Space,Str "be",Space,Str "a",Space,Str "link."] ,CodeBlock ("",[],[]) "[not]: /url" ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."] ,Para [Str "Foo",Space,Link [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."] ,Header 2 ("",[],[]) [Str "With",Space,Str "ampersands"]-,Para [Str "Here",Str "'",Str "s",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",Str "'",Str "s",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/","AT&T"),Str "."]-,Para [Str "Here",Str "'",Str "s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]-,Para [Str "Here",Str "'",Str "s",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 "."]+,Para [Str "Here's",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's",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/","AT&T"),Str "."]+,Para [Str "Here's",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]+,Para [Str "Here's",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"]-,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example",Str ".",Str "com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]+,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 [[Plain [Str "In",Space,Str "a",Space,Str "list?"]]- ,[Plain [Link [Str "http://example",Str ".",Str "com/"] ("http://example.com/","")]]- ,[Plain [Str "It",Space,Str "should",Str "."]]]-,Para [Str "An",Space,Str "e",Str "-",Str "mail",Space,Str "address:",Space,Str "nobody",Space,Str "[at]",Space,Str "nowhere",Str ".",Str "net"]+ ,[Plain [Link [Str "http://example.com/"] ("http://example.com/","")]]+ ,[Plain [Str "It",Space,Str "should."]]]+,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Str "nobody",Space,Str "[at]",Space,Str "nowhere.net"] ,BlockQuote- [Para [Str "Blockquoted:",Space,Link [Str "http://example",Str ".",Str "com/"] ("http://example.com/","")]]-,Para [Str "Auto",Str "-",Str "links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]+ [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/>" ,HorizontalRule ,Header 1 ("",[],[]) [Str "Images"]-,Para [Str "From",Space,Str "\"",Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune",Str "\"",Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]+,Para [Str "From",Space,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","Voyage dans la Lune")]-,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon",Str "."]+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Footnotes"]-,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference",Link [Str "(1)"] ("#note_1",""),Str ",",Space,Str "and",Space,Str "another",Link [Str "(longnote)"] ("#note_longnote",""),Str ".",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)",Str "."]-,Para [Link [Str "(1)"] ("#ref_1",""),Space,Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote",Str ".",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "in",Space,Str "the",Space,Str "document,",Space,Str "not",Space,Str "just",Space,Str "at",Space,Str "the",Space,Str "end",Str "."]-,Para [Link [Str "(longnote)"] ("#ref_longnote",""),Space,Str "Here",Str "'",Str "s",Space,Str "the",Space,Str "other",Space,Str "note",Str ".",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks",Str "."]-,Para [Str "Caret",Space,Str "characters",Space,Str "are",Space,Str "used",Space,Str "to",Space,Str "indicate",Space,Str "that",Space,Str "the",Space,Str "blocks",Space,Str "all",Space,Str "belong",Space,Str "to",Space,Str "a",Space,Str "single",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "block",Space,Str "quotes)",Str "."]+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference",Link [Str "(1)"] ("#note_1",""),Str ",",Space,Str "and",Space,Str "another",Link [Str "(longnote)"] ("#note_longnote",""),Str ".",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)."]+,Para [Link [Str "(1)"] ("#ref_1",""),Space,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 "in",Space,Str "the",Space,Str "document,",Space,Str "not",Space,Str "just",Space,Str "at",Space,Str "the",Space,Str "end."]+,Para [Link [Str "(longnote)"] ("#ref_longnote",""),Space,Str "Here's",Space,Str "the",Space,Str "other",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."]+,Para [Str "Caret",Space,Str "characters",Space,Str "are",Space,Str "used",Space,Str "to",Space,Str "indicate",Space,Str "that",Space,Str "the",Space,Str "blocks",Space,Str "all",Space,Str "belong",Space,Str "to",Space,Str "a",Space,Str "single",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "block",Space,Str "quotes)."] ,CodeBlock ("",[],[]) " { <code> }"-,Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "use",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "every",Space,Str "line,",Space,Str "as",Space,Str "with",Space,Str "blockquotes,",Space,Str "but",Space,Str "all",Space,Str "that",Space,Str "you",Space,Str "need",Space,Str "is",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "the",Space,Str "block",Space,Str "and",Space,Str "any",Space,Str "preceding",Space,Str "blank",Space,Str "lines",Str "."]]+,Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "use",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "every",Space,Str "line,",Space,Str "as",Space,Str "with",Space,Str "blockquotes,",Space,Str "but",Space,Str "all",Space,Str "that",Space,Str "you",Space,Str "need",Space,Str "is",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "the",Space,Str "block",Space,Str "and",Space,Str "any",Space,Str "preceding",Space,Str "blank",Space,Str "lines."]+,Para [Str "text",Space,Emph [Str "Leading",Space,Str "space"]]+,Para [Emph [Str "Trailing",Space,Str "space"],Space,Str "text"]+,Para [Str "text",Space,Emph [Str "Leading",Space,Str "spaces"]]+,Para [Emph [Str "Trailing",Space,Str "spaces"],Space,Str "text"]]
tests/latex-reader.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {unMeta = fromList [("authors",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"])]})+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"])]}) [RawBlock (Format "latex") "\\maketitle" ,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."] ,HorizontalRule
tests/lhs-test.latex view
@@ -1,12 +1,10 @@ \documentclass[]{article}-\usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript-% use upquote if available, for straight quotes in verbatim environments-\IfFileExists{upquote.sty}{\usepackage{upquote}}{} \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex+ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \else % if luatex or xelatex \ifxetex@@ -18,6 +16,8 @@ \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} \newcommand{\euro}{€} \fi+% use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{} % use microtype if available \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{color}@@ -63,8 +63,6 @@ \setlength{\emergencystretch}{3em} % prevent overfull lines \setcounter{secnumdepth}{0} -\author{}-\date{} \begin{document}
tests/lhs-test.latex+lhs view
@@ -1,12 +1,10 @@ \documentclass[]{article}-\usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript-% use upquote if available, for straight quotes in verbatim environments-\IfFileExists{upquote.sty}{\usepackage{upquote}}{} \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex+ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \else % if luatex or xelatex \ifxetex@@ -18,6 +16,8 @@ \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} \newcommand{\euro}{€} \fi+% use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{} % use microtype if available \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{listings}@@ -44,8 +44,6 @@ \setlength{\emergencystretch}{3em} % prevent overfull lines \setcounter{secnumdepth}{0} -\author{}-\date{} \begin{document}
tests/markdown-reader-more.native view
@@ -136,4 +136,7 @@ ,Para [Link [Str "link"] ("/hithere)","")] ,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"]]+,Para [Str "[",Emph [Str "not",Space,Str "a",Space,Str "link"],Str "]",Space,Str "[",Emph [Str "nope"],Str "]\8230"]+,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
@@ -235,3 +235,11 @@ ## Reference link fallbacks [*not a link*] [*nope*]...++## Empty reference links++[foo2]:++bar++[foo2]
tests/mediawiki-reader.native view
@@ -88,6 +88,7 @@ ,Para [Image [Str "the",Space,Emph [Str "caption"],Space,Str "with",Space,Link [Str "external",Space,Str "link"] ("http://google.com","")] ("example.jpg","fig:the caption with external link")] ,Para [Image [Str "caption"] ("example.jpg","fig:caption")] ,Para [Image [Str "example.jpg"] ("example.jpg","fig:example.jpg")]+,Para [Image [Str "example_es.jpg"] ("example_es.jpg","fig:example_es.jpg")] ,Header 2 ("lists",[],[]) [Str "lists"] ,BulletList [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]@@ -101,6 +102,10 @@ [[BulletList [[Plain [Str "But",Space,Str "jumping",Space,Str "levels",Space,Str "creates",Space,Str "empty",Space,Str "space."]]]]]]] ,Para [Str "Any",Space,Str "other",Space,Str "start",Space,Str "ends",Space,Str "the",Space,Str "list."]+,BulletList+ [[BulletList+ [[Plain [Str "two"]]]]+ ,[Plain [Str "one"]]] ,OrderedList (1,DefaultStyle,DefaultDelim) [[Plain [Str "Start",Space,Str "each",Space,Str "line"]] ,[Plain [Str "with",Space,Str "a",Space,Str "number",Space,Str "sign",Space,Str "(#)."]
tests/mediawiki-reader.wiki view
@@ -173,6 +173,8 @@ [[File:example.jpg]] +[[Archivo:example_es.jpg]]+ == lists == * Start each line@@ -182,6 +184,9 @@ * Line breaks<br/>don't break levels. *** But jumping levels creates empty space. Any other start ends the list.++** two+* one # Start each line # with a number sign (#).
tests/opml-reader.native view
@@ -19,7 +19,7 @@ ,Header 3 ("",[],[]) [Str "North",Space,Str "Dakota"] ,Header 3 ("",[],[]) [Str "Oklahoma"] ,Header 3 ("",[],[]) [Str "South",Space,Str "Dakota"]-,Header 2 ("",[],[]) [Str "Mid",Str "-",Str "Atlantic"]+,Header 2 ("",[],[]) [Str "Mid-Atlantic"] ,Header 3 ("",[],[]) [Str "Delaware"] ,Header 3 ("",[],[]) [Str "Maryland"] ,Header 3 ("",[],[]) [Str "New",Space,Str "Jersey"]
tests/pipe-tables.native view
@@ -67,4 +67,12 @@ ,[[Plain [Str "orange"]] ,[Plain [Str "17"]]] ,[[Plain [Str "pear"]]- ,[Plain [Str "302"]]]]]+ ,[Plain [Str "302"]]]]+,Para [Str "One-column:"]+,Table [] [AlignDefault] [0.0]+ [[Plain [Str "hi"]]]+ [[[Plain [Str "lo"]]]]+,Para [Str "Header-less",Space,Str "one-column:"]+,Table [] [AlignCenter] [0.0]+ [[]]+ [[[Plain [Str "hi"]]]]]
tests/pipe-tables.txt view
@@ -40,3 +40,13 @@ orange| 17 pear | 302 +One-column:++|hi|+|--|+|lo|++Header-less one-column:++|:-:|+|hi|
tests/rst-reader.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {unMeta = fromList [("authors",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("revision",MetaBlocks [Para [Str "3"]]),("subtitle",MetaInlines [Str "Subtitle"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]})+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"]),("revision",MetaBlocks [Para [Str "3"]]),("subtitle",MetaInlines [Str "Subtitle"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Header 1 ("level-one-header",[],[]) [Str "Level",Space,Str "one",Space,Str "header"] ,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 2 ("level-two-header",[],[]) [Str "Level",Space,Str "two",Space,Str "header"]@@ -319,5 +319,15 @@ ,Para [Str "Some",Space,Superscript [Str "of"],Space,Str "these",Space,Superscript [Str "words"],Space,Str "are",Space,Str "in",Space,Superscript [Str "superscript"],Str "."] ,Para [Str "Reset",Space,Str "default-role",Space,Str "to",Space,Str "the",Space,Str "default",Space,Str "default."] ,Para [Str "And",Space,Str "now",Space,Str "some-invalid-string-3231231",Space,Str "is",Space,Str "nonsense."]+,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 "."]+,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 "."]+,Null+,Null+,Para [Str "Different",Space,Str "indirect",Space,Str "C",Space,Code ("",["sourceCode","c"],[]) "int x = 15;",Str "."] ,Header 2 ("literal-symbols",[],[]) [Str "Literal",Space,Str "symbols"] ,Para [Str "2*2",Space,Str "=",Space,Str "4*1"]]
tests/rst-reader.rst view
@@ -599,6 +599,30 @@ And now `some-invalid-string-3231231` is nonsense. +.. role:: html(raw)+ :format: html++And now with :html:`<b>inline</b> <span id="test">HTML</span>`.++.. role:: haskell(code)+ :language: haskell++And some inline haskell :haskell:`fmap id [1,2..10]`.++.. role:: indirect(code)++.. role:: python(indirect)+ :language: python++Indirect python role :python:`[x*x for x in [1,2,3,4,5]]`.++.. role:: different-indirect(code)+ :language: c++.. role:: c(different-indirect)++Different indirect C :c:`int x = 15;`.+ Literal symbols ---------------
tests/tables.asciidoc view
@@ -52,20 +52,17 @@ Table without column headers: [cols=">,<,^,>",]-|=============================================================================+|================== |12 |12 |12 |12- |123 |123 |123 |123- |1 |1 |1 |1-|=============================================================================+|================== Multiline table without column headers: [width="78%",cols="^21%,<17%,>20%,42%",]-|=============================================================================+|======================================================================= |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.html view
@@ -96,10 +96,12 @@ <p>Multiline table with caption:</p> <table> <caption>Here's the caption. It may span multiple lines.</caption>+<colgroup> <col width="15%" /> <col width="13%" /> <col width="16%" /> <col width="33%" />+</colgroup> <thead> <tr class="header"> <th align="center">Centered Header</th>@@ -125,10 +127,12 @@ </table> <p>Multiline table without caption:</p> <table>+<colgroup> <col width="15%" /> <col width="13%" /> <col width="16%" /> <col width="33%" />+</colgroup> <thead> <tr class="header"> <th align="center">Centered Header</th>@@ -177,10 +181,12 @@ </table> <p>Multiline table without column headers:</p> <table>+<colgroup> <col width="15%" /> <col width="13%" /> <col width="16%" /> <col width="33%" />+</colgroup> <tbody> <tr class="odd"> <td align="center">First</td>
tests/tables.rtf view
@@ -4,13 +4,13 @@ \clbrdrb\brdrs\cellx2160\clbrdrb\brdrs\cellx4320\clbrdrb\brdrs\cellx6480\clbrdrb\brdrs\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 Right\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 Right\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Left\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Left\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Center\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Center\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Default\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Default\par} \cell} } \intbl\row}@@ -19,13 +19,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell} } \intbl\row}@@ -34,13 +34,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell} } \intbl\row}@@ -49,13 +49,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell} } \intbl\row}@@ -66,13 +66,13 @@ \clbrdrb\brdrs\cellx2160\clbrdrb\brdrs\cellx4320\clbrdrb\brdrs\cellx6480\clbrdrb\brdrs\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 Right\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 Right\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Left\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Left\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Center\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Center\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Default\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Default\par} \cell} } \intbl\row}@@ -81,13 +81,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell} } \intbl\row}@@ -96,13 +96,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell} } \intbl\row}@@ -111,13 +111,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell} } \intbl\row}@@ -128,13 +128,13 @@ \clbrdrb\brdrs\cellx2160\clbrdrb\brdrs\cellx4320\clbrdrb\brdrs\cellx6480\clbrdrb\brdrs\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 Right\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 Right\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Left\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Left\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Center\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Center\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Default\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Default\par} \cell} } \intbl\row}@@ -143,13 +143,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell} } \intbl\row}@@ -158,13 +158,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell} } \intbl\row}@@ -173,13 +173,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell} } \intbl\row}@@ -190,13 +190,13 @@ \clbrdrb\brdrs\cellx1296\clbrdrb\brdrs\cellx2484\clbrdrb\brdrs\cellx3888\clbrdrb\brdrs\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Centered Header\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Centered Header\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Left Aligned\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Left Aligned\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 Right Aligned\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 Right Aligned\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Default aligned\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Default aligned\par} \cell} } \intbl\row}@@ -205,13 +205,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 First\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 First\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par} \cell} } \intbl\row}@@ -220,13 +220,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Second\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Second\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 5.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 5.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par} \cell} } \intbl\row}@@ -237,13 +237,13 @@ \clbrdrb\brdrs\cellx1296\clbrdrb\brdrs\cellx2484\clbrdrb\brdrs\cellx3888\clbrdrb\brdrs\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Centered Header\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Centered Header\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Left Aligned\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Left Aligned\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 Right Aligned\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 Right Aligned\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Default aligned\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Default aligned\par} \cell} } \intbl\row}@@ -252,13 +252,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 First\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 First\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par} \cell} } \intbl\row}@@ -267,13 +267,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Second\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Second\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 5.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 5.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par} \cell} } \intbl\row}@@ -284,13 +284,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 12\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12\par} \cell} } \intbl\row}@@ -299,13 +299,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 123\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 123\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 123\par} \cell} } \intbl\row}@@ -314,13 +314,13 @@ \cellx2160\cellx4320\cellx6480\cellx8640 \trkeep\intbl {-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 1\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 1\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 1\par} \cell} } \intbl\row}@@ -331,13 +331,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 First\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 First\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 12.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 12.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Example of a row that spans multiple lines.\par} \cell} } \intbl\row}@@ -346,13 +346,13 @@ \cellx1296\cellx2484\cellx3888\cellx6804 \trkeep\intbl {-{\intbl {\pard \qc \f0 \sa0 \li0 \fi0 Second\par}+{{\pard\intbl \qc \f0 \sa0 \li0 \fi0 Second\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 row\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 row\par} \cell}-{\intbl {\pard \qr \f0 \sa0 \li0 \fi0 5.0\par}+{{\pard\intbl \qr \f0 \sa0 \li0 \fi0 5.0\par} \cell}-{\intbl {\pard \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par}+{{\pard\intbl \ql \f0 \sa0 \li0 \fi0 Here's another one. Note the blank line between rows.\par} \cell} } \intbl\row}
tests/test-pandoc.hs view
@@ -7,12 +7,15 @@ import qualified Tests.Old import qualified Tests.Readers.LaTeX import qualified Tests.Readers.Markdown+import qualified Tests.Readers.Org import qualified Tests.Readers.RST import qualified Tests.Writers.ConTeXt import qualified Tests.Writers.LaTeX import qualified Tests.Writers.HTML+import qualified Tests.Writers.Docbook import qualified Tests.Writers.Native import qualified Tests.Writers.Markdown+import qualified Tests.Writers.AsciiDoc import qualified Tests.Shared import qualified Tests.Walk import Text.Pandoc.Shared (inDirectory)@@ -26,11 +29,14 @@ , testGroup "ConTeXt" Tests.Writers.ConTeXt.tests , testGroup "LaTeX" Tests.Writers.LaTeX.tests , testGroup "HTML" Tests.Writers.HTML.tests+ , testGroup "Docbook" Tests.Writers.Docbook.tests , testGroup "Markdown" Tests.Writers.Markdown.tests+ , testGroup "AsciiDoc" Tests.Writers.AsciiDoc.tests ] , testGroup "Readers" [ testGroup "LaTeX" Tests.Readers.LaTeX.tests , testGroup "Markdown" Tests.Readers.Markdown.tests+ , testGroup "Org" Tests.Readers.Org.tests , testGroup "RST" Tests.Readers.RST.tests ] ]
tests/textile-reader.native view
@@ -1,5 +1,5 @@ Pandoc (Meta {unMeta = fromList []})-[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 "Textile",Space,Str "Reader",Str ".",Space,Str "Part",Space,Str "of",Space,Str "it",Space,Str "comes",LineBreak,Str "from",Space,Str "John",Space,Str "Gruber",Str "\8217",Str "s",Space,Str "markdown",Space,Str "test",Space,Str "suite",Str "."]+[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 "Textile",Space,Str "Reader.",Space,Str "Part",Space,Str "of",Space,Str "it",Space,Str "comes",LineBreak,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,HorizontalRule ,Header 1 ("headers",[],[]) [Str "Headers"] ,Header 2 ("level-2-with-an-embeded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embeded",Space,Str "link"] ("http://www.example.com","")]@@ -8,42 +8,42 @@ ,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"] ,Header 6 ("level-6",[],[]) [Str "Level",Space,Str "6"] ,Header 1 ("paragraphs",[],[]) [Str "Paragraphs"]-,Para [Str "Here",Str "\8217",Str "s",Space,Str "a",Space,Str "regular",Space,Str "paragraph",Str "."]-,Para [Str "Line",Space,Str "breaks",Space,Str "are",Space,Str "preserved",Space,Str "in",Space,Str "textile",Str ",",Space,Str "so",Space,Str "you",Space,Str "can",Space,Str "not",Space,Str "wrap",Space,Str "your",Space,Str "very",LineBreak,Str "long",Space,Str "paragraph",Space,Str "with",Space,Str "your",Space,Str "favourite",Space,Str "text",Space,Str "editor",Space,Str "and",Space,Str "have",Space,Str "it",Space,Str "rendered",LineBreak,Str "with",Space,Str "no",Space,Str "break",Str "."]-,Para [Str "Here",Str "\8217",Str "s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet",Str "."]+,Para [Str "Here\8217s",Space,Str "a",Space,Str "regular",Space,Str "paragraph."]+,Para [Str "Line",Space,Str "breaks",Space,Str "are",Space,Str "preserved",Space,Str "in",Space,Str "textile,",Space,Str "so",Space,Str "you",Space,Str "can",Space,Str "not",Space,Str "wrap",Space,Str "your",Space,Str "very",LineBreak,Str "long",Space,Str "paragraph",Space,Str "with",Space,Str "your",Space,Str "favourite",Space,Str "text",Space,Str "editor",Space,Str "and",Space,Str "have",Space,Str "it",Space,Str "rendered",LineBreak,Str "with",Space,Str "no",Space,Str "break."]+,Para [Str "Here\8217s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet."] ,BulletList- [[Plain [Str "criminey",Str "."]]]+ [[Plain [Str "criminey."]]] ,Para [Str "There",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "paragraph",Space,Str "break",Space,Str "between",Space,Str "here"]-,Para [Str "and",Space,Str "here",Str "."]-,Para [Str "pandoc",Space,Str "converts",Space,Str "textile",Str "."]+,Para [Str "and",Space,Str "here."]+,Para [Str "pandoc",Space,Str "converts",Space,Str "textile."] ,Header 1 ("block-quotes",[],[]) [Str "Block",Space,Str "Quotes"] ,BlockQuote- [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "famous",Space,Str "quote",Space,Str "from",Space,Str "somebody",Str ".",Space,Str "He",Space,Str "had",Space,Str "a",Space,Str "lot",Space,Str "of",Space,Str "things",Space,Str "to",LineBreak,Str "say",Str ",",Space,Str "so",Space,Str "the",Space,Str "text",Space,Str "is",Space,Str "really",Space,Str "really",Space,Str "long",Space,Str "and",Space,Str "spans",Space,Str "on",Space,Str "multiple",Space,Str "lines",Str "."]]-,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph",Str "."]+ [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "famous",Space,Str "quote",Space,Str "from",Space,Str "somebody.",Space,Str "He",Space,Str "had",Space,Str "a",Space,Str "lot",Space,Str "of",Space,Str "things",Space,Str "to",LineBreak,Str "say,",Space,Str "so",Space,Str "the",Space,Str "text",Space,Str "is",Space,Str "really",Space,Str "really",Space,Str "long",Space,Str "and",Space,Str "spans",Space,Str "on",Space,Str "multiple",Space,Str "lines."]]+,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph."] ,Header 1 ("code-blocks",[],[]) [Str "Code",Space,Str "Blocks"]-,Para [Str "Code",Str ":"]+,Para [Str "Code:"] ,CodeBlock ("",[],[]) " ---- (should be four hyphens)\n\n sub status {\n print \"working\";\n }\n\n this code block is indented by one tab"-,Para [Str "And",Str ":"]+,Para [Str "And:"] ,CodeBlock ("",[],[]) " this code block is indented by two tabs\n\n These should not be escaped: \\$ \\\\ \\> \\[ \\{" ,CodeBlock ("",[],[]) "Code block with .bc\n continued\n @</\\\n"-,Para [Str "Inline",Space,Str "code",Str ":",Space,Code ("",[],[]) "<tt>",Str ",",Space,Code ("",[],[]) "@",Str "."]+,Para [Str "Inline",Space,Str "code:",Space,Code ("",[],[]) "<tt>",Str ",",Space,Code ("",[],[]) "@",Str "."] ,Header 1 ("notextile",[],[]) [Str "Notextile"] ,Para [Str "A",Space,Str "block",Space,Str "of",Space,Str "text",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "notextile",Space,Str ":"] ,Para [Str "\nNo *bold* and\n* no bullet\n"]-,Para [Str "and",Space,Str "inlines",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "double *equals (=)* markup",Str "."]+,Para [Str "and",Space,Str "inlines",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "double *equals (=)* markup."] ,Header 1 ("lists",[],[]) [Str "Lists"] ,Header 2 ("unordered",[],[]) [Str "Unordered"]-,Para [Str "Asterisks",Space,Str "tight",Str ":"]+,Para [Str "Asterisks",Space,Str "tight:"] ,BulletList [[Plain [Str "asterisk",Space,Str "1"]] ,[Plain [Str "asterisk",Space,Str "2"]] ,[Plain [Str "asterisk",Space,Str "3"]]]-,Para [Str "With",Space,Str "line",Space,Str "breaks",Str ":"]+,Para [Str "With",Space,Str "line",Space,Str "breaks:"] ,BulletList [[Plain [Str "asterisk",Space,Str "1",LineBreak,Str "newline"]] ,[Plain [Str "asterisk",Space,Str "2"]]] ,Header 2 ("ordered",[],[]) [Str "Ordered"]-,Para [Str "Tight",Str ":"]+,Para [Str "Tight:"] ,OrderedList (1,DefaultStyle,DefaultDelim) [[Plain [Str "First"]] ,[Plain [Str "Second"]]@@ -52,42 +52,42 @@ ,BulletList [[Plain [Str "ui",Space,Str "1"] ,BulletList- [[Plain [Str "ui",Space,Str "1",Str ".",Str "1"]+ [[Plain [Str "ui",Space,Str "1.1"] ,OrderedList (1,DefaultStyle,DefaultDelim)- [[Plain [Str "oi",Space,Str "1",Str ".",Str "1",Str ".",Str "1"]]- ,[Plain [Str "oi",Space,Str "1",Str ".",Str "1",Str ".",Str "2"]]]]- ,[Plain [Str "ui",Space,Str "1",Str ".",Str "2"]]]]+ [[Plain [Str "oi",Space,Str "1.1.1"]]+ ,[Plain [Str "oi",Space,Str "1.1.2"]]]]+ ,[Plain [Str "ui",Space,Str "1.2"]]]] ,[Plain [Str "ui",Space,Str "2"] ,OrderedList (1,DefaultStyle,DefaultDelim)- [[Plain [Str "oi",Space,Str "2",Str ".",Str "1"]+ [[Plain [Str "oi",Space,Str "2.1"] ,BulletList- [[Plain [Str "ui",Space,Str "2",Str ".",Str "1",Str ".",Str "1"]]- ,[Plain [Str "ui",Space,Str "2",Str ".",Str "1",Str ".",Str "2"]]]]]]]+ [[Plain [Str "ui",Space,Str "2.1.1"]]+ ,[Plain [Str "ui",Space,Str "2.1.2"]]]]]]] ,Header 2 ("definition-list",[],[]) [Str "Definition",Space,Str "List"] ,DefinitionList [([Str "coffee"], [[Plain [Str "Hot",Space,Str "and",Space,Str "black"]]]) ,([Str "tea"],- [[Plain [Str "Also",Space,Str "hot",Str ",",Space,Str "but",Space,Str "a",Space,Str "little",Space,Str "less",Space,Str "black"]]])+ [[Plain [Str "Also",Space,Str "hot,",Space,Str "but",Space,Str "a",Space,Str "little",Space,Str "less",Space,Str "black"]]]) ,([Str "milk"],- [[Para [Str "Nourishing",Space,Str "beverage",Space,Str "for",Space,Str "baby",Space,Str "cows",Str "."]- ,Para [Str "Cold",Space,Str "drink",Space,Str "that",Space,Str "goes",Space,Str "great",Space,Str "with",Space,Str "cookies",Str "."]]])+ [[Para [Str "Nourishing",Space,Str "beverage",Space,Str "for",Space,Str "baby",Space,Str "cows."]+ ,Para [Str "Cold",Space,Str "drink",Space,Str "that",Space,Str "goes",Space,Str "great",Space,Str "with",Space,Str "cookies."]]]) ,([Str "beer"], [[Plain [Str "fresh",Space,Str "and",Space,Str "bitter"]]])] ,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 ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "Hyphenated-words-are-ok",Str ",",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation",Str ".",LineBreak,Str "A",Space,Link [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]-,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em",Str "."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]]-,Para [Str "Superscripts",Str ":",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts",Str ":",Space,Subscript [Str "here"],Space,Str "H",Subscript [Str "2"],Str "O",Str ",",Space,Str "H",Subscript [Str "23"],Str "O",Str ",",Space,Str "H",Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O",Str "."]-,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "\8212",Space,Str "automatic",Space,Str "dashes",Str "."]-,Para [Str "Elipses",Space,Str ":",Space,Str "He",Space,Str "thought",Space,Str "and",Space,Str "thought",Space,Str "\8230",Space,Str "and",Space,Str "then",Space,Str "thought",Space,Str "some",Space,Str "more",Str "."]-,Para [Str "Quotes",Space,Str "and",Space,Str "apostrophes",Space,Str ":",Space,Quoted DoubleQuote [Str "I",Str "\8217",Str "d",Space,Str "like",Space,Str "to",Space,Str "thank",Space,Str "you"],Space,Str "for",Space,Str "example",Str "."]+,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 ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "Hyphenated-words-are-ok,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation.",LineBreak,Str "A",Space,Link [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]+,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]]+,Para [Str "Superscripts:",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Space,Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts:",Space,Subscript [Str "here"],Space,Str "H",Space,Subscript [Str "2"],Str "O,",Space,Str "H",Space,Subscript [Str "23"],Str "O,",Space,Str "H",Space,Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O."]+,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "\8212",Space,Str "automatic",Space,Str "dashes."]+,Para [Str "Elipses",Space,Str ":",Space,Str "He",Space,Str "thought",Space,Str "and",Space,Str "thought",Space,Str "\8230",Space,Str "and",Space,Str "then",Space,Str "thought",Space,Str "some",Space,Str "more."]+,Para [Str "Quotes",Space,Str "and",Space,Str "apostrophes",Space,Str ":",Space,Quoted DoubleQuote [Str "I\8217d",Space,Str "like",Space,Str "to",Space,Str "thank",Space,Str "you"],Space,Str "for",Space,Str "example."] ,Header 1 ("links",[],[]) [Str "Links"] ,Header 2 ("explicit",[],[]) [Str "Explicit"] ,Para [Str "Just",Space,Str "a",Space,Link [Str "url"] ("http://www.url.com","")] ,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")] ,Para [Str "Automatic",Space,Str "linking",Space,Str "to",Space,Link [Str "http://www.example.com"] ("http://www.example.com",""),Str "."]-,Para [Link [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon",Str "."]-,Para [Str "A",Space,Str "link",Link [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces",Str "."]+,Para [Link [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon."]+,Para [Str "A",Space,Str "link",Link [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces."] ,Header 1 ("tables",[],[]) [Str "Tables"] ,Para [Str "Textile",Space,Str "allows",Space,Str "tables",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "headers",Space,Str ":"] ,Header 2 ("without-headers",[],[]) [Str "Without",Space,Str "headers"]@@ -121,11 +121,11 @@ ,[Plain [Str "45"]] ,[Plain [Str "f"]]]] ,Header 1 ("images",[],[]) [Str "Images"]-,Para [Str "Textile",Space,Str "inline",Space,Str "image",Space,Str "syntax",Str ",",Space,Str "like",Space,LineBreak,Str "here",Space,Image [Str "this is the alt text"] ("this_is_an_image.png","this is the alt text"),LineBreak,Str "and",Space,Str "here",Space,Image [Str ""] ("this_is_an_image.png",""),Str "."]+,Para [Str "Textile",Space,Str "inline",Space,Str "image",Space,Str "syntax,",Space,Str "like",LineBreak,Str "here",Space,Image [Str "this is the alt text"] ("this_is_an_image.png","this is the alt text"),LineBreak,Str "and",Space,Str "here",Space,Image [Str ""] ("this_is_an_image.png",""),Str "."] ,Header 1 ("attributes",[],[]) [Str "Attributes"]-,Header 2 ("ident",["bar","foo"],[("style","color:red"),("lang","en")]) [Str "HTML",Space,Str "and",Space,Str "CSS",Space,Str "attributes",Space,Str "are",Space,Str "parsed",Space,Str "in",Space,Str "headers",Str "."]-,Para [Str "as",Space,Str "well",Space,Str "as",Space,Strong [Str "inline",Space,Str "attributes"],Space,Str "of",Space,Str " all kind"]-,Para [Str "and",Space,Str "paragraph",Space,Str "attributes",Str ",",Space,Str "and",Space,Str "table",Space,Str "attributes",Str "."]+,Header 2 ("ident",["bar","foo"],[("style","color:red"),("lang","en")]) [Str "HTML",Space,Str "and",Space,Str "CSS",Space,Str "attributes",Space,Str "are",Space,Str "parsed",Space,Str "in",Space,Str "headers."]+,Para [Str "as",Space,Str "well",Space,Str "as",Space,Strong [Span ("",["foo"],[]) [Str "inline",Space,Str "attributes"]],Space,Str "of",Space,Span ("",[],[("style","color:red")]) [Str "all",Space,Str "kind"]]+,Para [Str "and",Space,Str "paragraph",Space,Str "attributes,",Space,Str "and",Space,Str "table",Space,Str "attributes."] ,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0] [] [[[Plain [Str "name"]]@@ -137,7 +137,7 @@ ,Header 1 ("entities",[],[]) [Str "Entities"] ,Para [Str "*",LineBreak,Str "&"] ,Header 1 ("raw-html",[],[]) [Str "Raw",Space,Str "HTML"]-,Para [Str "However",Str ",",Space,RawInline (Format "html") "<strong>",Space,Str "raw",Space,Str "HTML",Space,Str "inlines",Space,RawInline (Format "html") "</strong>",Space,Str "are",Space,Str "accepted",Str ",",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str ":"]+,Para [Str "However,",Space,RawInline (Format "html") "<strong>",Space,Str "raw",Space,Str "HTML",Space,Str "inlines",Space,RawInline (Format "html") "</strong>",Space,Str "are",Space,Str "accepted,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str ":"] ,RawBlock (Format "html") "<div class=\"foobar\">" ,Para [Str "any",Space,Strong [Str "Raw",Space,Str "HTML",Space,Str "Block"],Space,Str "with",Space,Str "bold"] ,RawBlock (Format "html") "</div>"@@ -145,9 +145,9 @@ ,RawBlock (Format "html") "<div>" ,Para [Str "inlined"] ,RawBlock (Format "html") "</div>"-,Para [Str "as",Space,Str "well",Str "."]+,Para [Str "as",Space,Str "well."] ,BulletList- [[Plain [Str "this",Space,Str "<",Str "div",Str ">",Space,Str "won",Str "\8217",Str "t",Space,Str "produce",Space,Str "raw",Space,Str "html",Space,Str "blocks",Space,Str "<",Str "/div",Str ">"]]+ [[Plain [Str "this",Space,Str "<div>",Space,Str "won\8217t",Space,Str "produce",Space,Str "raw",Space,Str "html",Space,Str "blocks",Space,Str "</div>"]] ,[Plain [Str "but",Space,Str "this",Space,RawInline (Format "html") "<strong>",Space,Str "will",Space,Str "produce",Space,Str "inline",Space,Str "html",Space,RawInline (Format "html") "</strong>"]]] ,Para [Str "Can",Space,Str "you",Space,Str "prove",Space,Str "that",Space,Str "2",Space,Str "<",Space,Str "3",Space,Str "?"] ,Header 1 ("raw-latex",[],[]) [Str "Raw",Space,Str "LaTeX"]@@ -156,12 +156,11 @@ ,Para [Str "and",Space,Str "for",Space,RawInline (Format "latex") "\\emph{inlines}",Str "."] ,Header 1 ("acronyms-and-marks",[],[]) [Str "Acronyms",Space,Str "and",Space,Str "marks"] ,Para [Str "PBS (Public Broadcasting System)"]-,Para [Str "Hi",Str "\8482"]+,Para [Str "Hi\8482"] ,Para [Str "Hi",Space,Str "\8482"]-,Para [Str "\174",Space,Str "Hi",Str "\174"]-,Para [Str "Hi",Str "\169",Str "2008",Space,Str "\169",Space,Str "2008"]+,Para [Str "\174",Space,Str "Hi\174"]+,Para [Str "Hi\169\&2008",Space,Str "\169",Space,Str "2008"] ,Header 1 ("footnotes",[],[]) [Str "Footnotes"]-,Para [Str "A",Space,Str "note",Str ".",Note [Para [Str "The",Space,Str "note",LineBreak,Str "is",Space,Str "here",Str "!"]],Space,Str "Another",Space,Str "note",Note [Para [Str "Other",Space,Str "note",Str "."]],Str "."]+,Para [Str "A",Space,Str "note.",Note [Para [Str "The",Space,Str "note",LineBreak,Str "is",Space,Str "here!"]],Space,Str "Another",Space,Str "note",Note [Para [Str "Other",Space,Str "note."]],Str "."] ,Header 1 ("comment-blocks",[],[]) [Str "Comment",Space,Str "blocks"]-,Null-,Para [Str "not",Space,Str "a",Space,Str "comment",Str "."]]+,Para [Str "not",Space,Str "a",Space,Str "comment."]]
tests/textile-reader.textile view
@@ -139,8 +139,8 @@ So is *_this_* word and __**that one**__. -This is strikeout and *strong*- -Superscripts: a[^bc^]d a^*hello*^ a[^hello there^].-Subscripts: ~here~ H[~2~]O, H[~23~]O, H[~many of them~]O.+Superscripts: a[^bc^]d a ^*hello*^ a[^hello there^].+Subscripts: ~here~ H[ ~2~]O, H[ ~23~]O, H[ ~many of them~]O. Dashes : How cool -- automatic dashes. @@ -187,7 +187,7 @@ h1. Images -Textile inline image syntax, like +Textile inline image syntax, like here !this_is_an_image.png(this is the alt text)! and here !this_is_an_image.png!.
tests/writer.context view
@@ -813,24 +813,22 @@ \subsection[autolinks]{Autolinks} -With an ampersand:-\useURL[url27][http://example.com/?foo=1&bar=2][][\hyphenatedurl{http://example.com/?foo=1&bar=2}]\from[url27]+With an ampersand: \useURL[url27][http://example.com/?foo=1&bar=2]\from[url27] \startitemize[packed] \item In a list? \item- \useURL[url28][http://example.com/][][\hyphenatedurl{http://example.com/}]\from[url28]+ \useURL[url28][http://example.com/]\from[url28] \item It should. \stopitemize An e-mail address:-\useURL[url29][mailto:nobody@nowhere.net][][\hyphenatedurl{nobody@nowhere.net}]\from[url29]+\useURL[url29][mailto:nobody@nowhere.net][][nobody@nowhere.net]\from[url29] \startblockquote-Blockquoted:-\useURL[url30][http://example.com/][][\hyphenatedurl{http://example.com/}]\from[url30]+Blockquoted: \useURL[url30][http://example.com/]\from[url30] \stopblockquote Auto-links should not occur here: \type{<http://example.com/>}
tests/writer.docbook view
@@ -4,14 +4,16 @@ <article> <articleinfo> <title>Pandoc Test Suite</title>- <author>- <firstname>John</firstname>- <surname>MacFarlane</surname>- </author>- <author>- <firstname></firstname>- <surname>Anonymous</surname>- </author>+ <authorgroup>+ <author>+ <firstname>John</firstname>+ <surname>MacFarlane</surname>+ </author>+ <author>+ <firstname></firstname>+ <surname>Anonymous</surname>+ </author>+ </authorgroup> <date>July 17, 2006</date> </articleinfo> <para>@@ -66,10 +68,8 @@ <para> Here’s one with a bullet. * criminey. </para>- <para>- There should be a hard line break<literallayout>-</literallayout>here.- </para>+<literallayout>There should be a hard line break+here.</literallayout> </sect1> <sect1 id="block-quotes"> <title>Block Quotes</title>@@ -93,7 +93,7 @@ <para> A list: </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> item one@@ -156,7 +156,7 @@ <para> Asterisks tight: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> asterisk 1@@ -196,7 +196,7 @@ <para> Pluses tight: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Plus 1@@ -236,7 +236,7 @@ <para> Minuses tight: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Minus 1@@ -279,7 +279,7 @@ <para> Tight: </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> First@@ -299,7 +299,7 @@ <para> and: </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> One@@ -383,17 +383,17 @@ </sect2> <sect2 id="nested"> <title>Nested</title>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Tab </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Tab </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Tab@@ -407,7 +407,7 @@ <para> Here’s another: </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> First@@ -417,7 +417,7 @@ <para> Second: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Fee@@ -454,7 +454,7 @@ <para> Second: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> Fee@@ -521,7 +521,7 @@ <para> with a continuation </para>- <orderedlist numeration="lowerroman">+ <orderedlist numeration="lowerroman" spacing="compact"> <listitem override="4"> <para> sublist with roman numerals, starting with 4@@ -531,7 +531,7 @@ <para> more items </para>- <orderedlist numeration="upperalpha">+ <orderedlist numeration="upperalpha" spacing="compact"> <listitem> <para> a subsublist@@ -550,22 +550,22 @@ <para> Nesting: </para>- <orderedlist numeration="upperalpha">+ <orderedlist numeration="upperalpha" spacing="compact"> <listitem> <para> Upper Alpha </para>- <orderedlist numeration="upperroman">+ <orderedlist numeration="upperroman" spacing="compact"> <listitem> <para> Upper Roman. </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem override="6"> <para> Decimal start with 6 </para>- <orderedlist numeration="loweralpha">+ <orderedlist numeration="loweralpha" spacing="compact"> <listitem override="3"> <para> Lower alpha with paren@@ -581,7 +581,7 @@ <para> Autonumbering: </para>- <orderedlist>+ <orderedlist spacing="compact"> <listitem> <para> Autonumber.@@ -591,7 +591,7 @@ <para> More. </para>- <orderedlist>+ <orderedlist spacing="compact"> <listitem> <para> Nested.@@ -616,7 +616,7 @@ <para> Tight using spaces: </para>- <variablelist>+ <variablelist spacing="compact"> <varlistentry> <term> apple@@ -651,7 +651,7 @@ <para> Tight using tabs: </para>- <variablelist>+ <variablelist spacing="compact"> <varlistentry> <term> apple@@ -757,7 +757,7 @@ <para> Multiple definitions, tight: </para>- <variablelist>+ <variablelist spacing="compact"> <varlistentry> <term> apple@@ -841,7 +841,7 @@ <para> orange fruit </para>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> sublist@@ -1051,7 +1051,7 @@ </sect1> <sect1 id="latex"> <title>LaTeX</title>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> </para>@@ -1097,7 +1097,7 @@ <para> These shouldn’t be math: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> To get the famous equation, write <literal>$e = mc^2$</literal>.@@ -1130,7 +1130,7 @@ <para> Here is some unicode: </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> I hat: Î@@ -1316,7 +1316,7 @@ With an ampersand: <ulink url="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</ulink> </para>- <itemizedlist>+ <itemizedlist spacing="compact"> <listitem> <para> In a list?@@ -1414,7 +1414,7 @@ </footnote> </para> </blockquote>- <orderedlist numeration="arabic">+ <orderedlist numeration="arabic" spacing="compact"> <listitem> <para> And in list items.<footnote>
tests/writer.latex view
@@ -1,12 +1,10 @@ \documentclass[]{article}-\usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript-% use upquote if available, for straight quotes in verbatim environments-\IfFileExists{upquote.sty}{\usepackage{upquote}}{} \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex+ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \else % if luatex or xelatex \ifxetex@@ -18,28 +16,20 @@ \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} \newcommand{\euro}{€} \fi+% use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{} % use microtype if available \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{fancyvrb} \usepackage{graphicx}-% Redefine \includegraphics so that, unless explicit options are-% given, the image width will not exceed the width of the page.-% Images get their normal width if they fit onto the page, but-% are scaled down if they would overflow the margins. \makeatletter-\def\ScaleIfNeeded{%- \ifdim\Gin@nat@width>\linewidth- \linewidth- \else- \Gin@nat@width- \fi-}+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}+\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} \makeatother-\let\Oldincludegraphics\includegraphics-{%- \catcode`\@=11\relax%- \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%-}%+% Scale images if necessary, so that they will not overflow the page+% margins by default, and it is still possible to overwrite the defaults+% using explicit options in \includegraphics[width, height, ...]{}+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} \ifxetex \usepackage[setpagesize=false, % page size defined by xetex unicode=false, % unicode breaks when used with xetex
tests/writer.opml view
@@ -18,7 +18,7 @@ </outline> <outline text="Level 1"> <outline text="Level 2 with <em>emphasis</em>">- <outline text="Level 3" _note="with no blank line">+ <outline text="Level 3" _note="with no blank line "> </outline> </outline> <outline text="Level 2" _note="with no blank line * * * * *">@@ -55,18 +55,18 @@ <outline text="Special Characters" _note="Here is some unicode: - I hat: Î - o umlaut: ö - section: § - set membership: ∈ - copyright: © AT&T has an ampersand in their name. AT&T is another way to write it. This & that. 4 \< 5. 6 \> 5. Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: { Right brace: } Left bracket: [ Right bracket: ] Left paren: ( Right paren: ) Greater-than: \> Hash: \# Period: . Bang: ! Plus: + Minus: - * * * * *"> </outline> <outline text="Links">- <outline text="Explicit" _note="Just a [URL](/url/). [URL and title](/url/ "title"). [URL and title](/url/ "title preceded by two spaces"). [URL and title](/url/ "title preceded by a tab"). [URL and title](/url/ "title with "quotes" in it") [URL and title](/url/ "title with single quotes") [with\_underscore](/url/with_underscore) [Email link](mailto:nobody@nowhere.net) [Empty]().">+ <outline text="Explicit" _note="Just a [URL](/url/). [URL and title](/url/ "title"). [URL and title](/url/ "title preceded by two spaces"). [URL and title](/url/ "title preceded by a tab"). [URL and title](/url/ "title with "quotes" in it") [URL and title](/url/ "title with single quotes") [with\_underscore](/url/with_underscore) [Email link](mailto:nobody@nowhere.net) [Empty](). "> </outline>- <outline text="Reference" _note="Foo [bar](/url/). Foo [bar](/url/). Foo [bar](/url/). With [embedded [brackets]](/url/). [b](/url/) by itself should be a link. Indented [once](/url). Indented [twice](/url). Indented [thrice](/url). This should [not][] be a link. [not]: /url Foo [bar](/url/ "Title with "quotes" inside"). Foo [biz](/url/ "Title with "quote" inside").">+ <outline text="Reference" _note="Foo [bar](/url/). Foo [bar](/url/). Foo [bar](/url/). With [embedded [brackets]](/url/). [b](/url/) by itself should be a link. Indented [once](/url). Indented [twice](/url). Indented [thrice](/url). This should [not][] be a link. [not]: /url Foo [bar](/url/ "Title with "quotes" inside"). Foo [biz](/url/ "Title with "quote" inside"). "> </outline>- <outline text="With ampersands" _note="Here’s a [link with an ampersand in the URL](http://example.com/?foo=1&bar=2). Here’s a link with an amersand in the link text: [AT&T](http://att.com/ "AT&T"). Here’s an [inline link](/script?foo=1&bar=2). Here’s an [inline link in pointy braces](/script?foo=1&bar=2).">+ <outline text="With ampersands" _note="Here’s a [link with an ampersand in the URL](http://example.com/?foo=1&bar=2). Here’s a link with an amersand in the link text: [AT&T](http://att.com/ "AT&T"). Here’s an [inline link](/script?foo=1&bar=2). Here’s an [inline link in pointy braces](/script?foo=1&bar=2). "> </outline> <outline text="Autolinks" _note="With an ampersand: <http://example.com/?foo=1&bar=2> - In a list? - <http://example.com/> - It should. An e-mail address: <nobody@nowhere.net> > Blockquoted: <http://example.com/> Auto-links should not occur here: `<http://example.com/>` or here: <http://example.com/> * * * * *"> </outline> </outline> <outline text="Images" _note="From “Voyage dans la Lune” by Georges Melies (1902):  Here is a movie  icon. * * * * *"> </outline>-<outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be a footnote reference, because it contains a space.[\^my note] Here is an inline note.[^3] > Notes can go in quotes.[^4] 1. And in list items.[^5] This paragraph should not be part of the note, as it is not indented. [^1]: Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. [^2]: Here’s the long note. This one contains multiple blocks. Subsequent blocks are indented to show that they belong to the footnote (as with list items). { <code> } If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. [^3]: This is *easier* to type. Inline notes may contain [links](http://google.com) and `]` verbatim characters, as well as [bracketed text]. [^4]: In quote. [^5]: In list.">+<outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be a footnote reference, because it contains a space.[\^my note] Here is an inline note.[^3] > Notes can go in quotes.[^4] 1. And in list items.[^5] This paragraph should not be part of the note, as it is not indented. [^1]: Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. [^2]: Here’s the long note. This one contains multiple blocks. Subsequent blocks are indented to show that they belong to the footnote (as with list items). { <code> } If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. [^3]: This is *easier* to type. Inline notes may contain [links](http://google.com) and `]` verbatim characters, as well as [bracketed text]. [^4]: In quote. [^5]: In list. "> </outline> </body> </opml>
tests/writer.org view
@@ -42,7 +42,7 @@ Here's one with a bullet. * criminey. -There should be a hard line break+There should be a hard line break\\ here. --------------