packages feed

pandoc 2.1.1 → 2.1.2

raw patch · 208 files changed

+3815/−1826 lines, 208 filesdep ~aeson-prettydep ~blaze-htmldep ~blaze-markupbinary-added

Dependency ranges changed: aeson-pretty, blaze-html, blaze-markup, exceptions, hslua, http-types, tagsoup

Files

CONTRIBUTING.md view
@@ -65,7 +65,7 @@ bug. There is not yet a way to indicate priority. An up to date summary of issues can be found on [GitHub labels]. -* [beginner-friendly] — The perfect starting point for new contributors. The+* [good first issue] — The perfect starting point for new contributors. The   issue is generic and can be resolved without deep knowledge of the code   base. * [enhancement] — A feature which would be desirable. We recommend@@ -314,7 +314,7 @@ [Haskell platform]: http://www.haskell.org/platform/ [hsb2hs]: http://hackage.haskell.org/package/hsb2hs [GitHub labels]: https://github.com/jgm/pandoc/labels-[beginner-friendly]: https://github.com/jgm/pandoc/labels/beginner-friendly+[good first issue]:https://github.com/jgm/pandoc/labels/good%20first%20issue [enhancement]: https://github.com/jgm/pandoc/labels/enhancement [bug]: https://github.com/jgm/pandoc/labels/bug [complexity:low]: https://github.com/jgm/pandoc/labels/complexity:low
INSTALL.md view
@@ -120,7 +120,7 @@  The easiest way to build pandoc from source is to use [stack]: -1.  Install [stack].+1.  Install [stack]. Note that Pandoc requires stack >= 1.6.0.  2.  Change to the pandoc source directory and issue the following commands: 
MANUAL.txt view
@@ -1,6 +1,6 @@ % Pandoc User's Guide % John MacFarlane-% January 18, 2018+% March 2, 2018  Synopsis ========@@ -200,8 +200,8 @@ LaTeX is used) and [variables for ConTeXt] (if ConTeXt is used). When using an HTML/CSS-to-PDF-engine, `--css` affects the output. If `wkhtmltopdf` is used, then the variables `margin-left`,-`margin-right`, `margin-top`, `margin-bottom`, and `papersize`-will affect the output.+`margin-right`, `margin-top`, `margin-bottom`, `footer-html`,+`header-html` and `papersize` will affect the output.  To debug the PDF creation, it can be useful to look at the intermediate representation: instead of `-o test.pdf`, use for example `-s -o test.tex`@@ -772,13 +772,13 @@  :   Produce a standalone HTML file with no external dependencies, using     `data:` URIs to incorporate the contents of linked scripts, stylesheets,-    images, and videos. The resulting file should be "self-contained,"-    in the sense that it needs no external files and no net access to be-    displayed properly by a browser. This option works only with HTML output-    formats, including `html4`, `html5`, `html+lhs`, `html5+lhs`, `s5`,-    `slidy`, `slideous`, `dzslides`, and `revealjs`. Scripts, images, and-    stylesheets at absolute URLs will be downloaded; those at relative URLs-    will be sought relative to the working directory (if the first source+    images, and videos. Implies `--standalone`. The resulting file should be+    "self-contained," in the sense that it needs no external files and no net+    access to be displayed properly by a browser. This option works only with+    HTML output formats, including `html4`, `html5`, `html+lhs`, `html5+lhs`,+    `s5`, `slidy`, `slideous`, `dzslides`, and `revealjs`. Scripts, images,+    and stylesheets at absolute URLs will be downloaded; those at relative+    URLs will be sought relative to the working directory (if the first source     file is local) or relative to the base URL (if the first source     file is remote).  Elements with the attribute     `data-external="1"` will be left alone; the documents they@@ -962,6 +962,30 @@         LibreOffice, modify the styles as you wish, and save the         file. +    PowerPoint++    :   Any template included with a recent install of Microsoft+        PowerPoint (either with `.pptx` or `.potx` extension) should+        work, as will most templates derived from these.++        The specific requirement is that the template should contain+        the following four layouts as its first four layouts:++        1. Title Slide+        2. Title and Content+        3. Section Header+        4. Two Content++        All templates included with a recent version of MS PowerPoint+        will fit these criteria. (You can click on `Layout` under the+        `Home` menu to check.)++        You can also modify the default `reference.pptx`: first run+        `pandoc --print-default-data-file reference.pptx >+        custom-reference.pptx`, and then modify+        `custom-reference.pptx` in MS PowerPoint (pandoc will use the+        first four layout slides, as mentioned above).+ `--epub-cover-image=`*FILE*  :   Use the specified image as the EPUB cover.  It is recommended@@ -1950,6 +1974,16 @@ output formats :  `markdown`, `docx`, `odt`, `opendocument`, `html` +#### Extension: `styles` #### {#ext-styles}++Read all docx styles as divs (for paragraph styles) and spans (for+character styles) regardless of whether pandoc understands the meaning+of these styles. This can be used with [docx custom+styles](#custom-styles-in-docx). Disabled by default.++input formats+:  `docx`+ #### Extension: `amuse` ####  In the `muse` input format, this enables Text::Amuse@@ -2265,11 +2299,11 @@ Here `mycode` is an identifier, `haskell` and `numberLines` are classes, and `startFrom` is an attribute with value `100`. Some output formats can use this information to do syntax highlighting. Currently, the only output formats-that uses this information are HTML, LaTeX, Docx, and Ms. If highlighting-is supported for your output format and language, then the code block above-will appear highlighted, with numbered lines. (To see which languages are-supported, type `pandoc --list-highlight-languages`.) Otherwise, the code-block above will appear as follows:+that uses this information are HTML, LaTeX, Docx, Ms, and PowerPoint. If+highlighting is supported for your output format and language, then the code+block above will appear highlighted, with numbered lines. (To see which+languages are supported, type `pandoc --list-highlight-languages`.) Otherwise,+the code block above will appear as follows:      <pre id="mycode" class="haskell numberLines" startFrom="100">       <code>@@ -4214,14 +4248,38 @@ By default, these writers produce lists that display "all at once." If you want your lists to display incrementally (one item at a time), use the `-i` option. If you want a particular list to depart from the-default (that is, to display incrementally without the `-i` option and-all at once with the `-i` option), put it in a block quote:+default, put it in a `div` block with class `incremental` or+`nonincremental`. So, for example, using the `fenced div` syntax, the+following would be incremental regardless of the document default: +    ::: incremental++    - Eat spaghetti+    - Drink wine++    :::++or++    ::: nonincremental++    - Eat spaghetti+    - Drink wine++    :::++While using `incremental` and `nonincremental` divs are the+recommended method of setting incremental lists on a per-case basis,+an older method is also supported: putting lists inside a blockquote+will depart from the document default (that is, it will display+incrementally without the `-i` option and all at once with the `-i`+option):+     > - Eat spaghetti     > - Drink wine -In this way incremental and nonincremental lists can be mixed in-a single document.+Both methods allow incremental and nonincremental lists to be mixed+in a single document.  Inserting pauses ----------------@@ -4276,8 +4334,8 @@ Speaker notes ------------- -reveal.js has good support for speaker notes.  You can add notes to your-Markdown document thus:+Speaker notes are supported in reveal.js and PowerPoint (pptx)+output. You can add notes to your Markdown document thus:      ::: notes @@ -4288,7 +4346,10 @@      ::: -To show the notes window, press `s` while viewing the presentation.+To show the notes window in reveal.js, press `s` while viewing the+presentation. Speaker notes in PowerPoint will be available, as usual,+in handouts and presenter view.+ Notes are not yet supported for other slide formats, but the notes will not appear on the slides themselves. @@ -4463,8 +4524,59 @@  [skylighting]: https://github.com/jgm/skylighting -Custom Styles in Docx Output-============================+Custom Styles in Docx+=====================++Input+-----++The docx reader, by default, only reads those styles that it can+convert into pandoc elements, either by direct conversion or+interpreting the derivation of the input document's styles.++By enabling the [`styles` extension](#ext-styles) in the docx reader+(`-f docx+styles`), you can produce output that maintains the styles+of the input document, using the `custom-style` class. Paragraph+styles are interpreted as divs, while character styles are interpreted+as spans.++For example, using the `custom-style-reference.docx` file in the test+directory, we have the following different outputs:++Without the `+styles` extension:++    $ pandoc test/docx/custom-style-reference.docx -f docx -t markdown+    This is some text.++    This is text with an *emphasized* text style. And this is text with a+    **strengthened** text style.++    > Here is a styled paragraph that inherits from Block Text.++And with the extension:++    $ pandoc test/docx/custom-style-reference.docx -f docx+styles -t markdown++    ::: {custom-style="FirstParagraph"}+    This is some text.+    :::++    ::: {custom-style="BodyText"}+    This is text with an [emphasized]{custom-style="Emphatic"} text style.+    And this is text with a [strengthened]{custom-style="Strengthened"}+    text style.+    :::++    ::: {custom-style="MyBlockStyle"}+    > Here is a styled paragraph that inherits from Block Text.+    :::++With these custom styles, you can use your input document as a+reference-doc while creating docx output (see below), and maintain the+same styles in your input and output files.++Output+------  By default, pandoc's docx output applies a predefined set of styles for blocks such as paragraphs and block quotes, and uses largely default
changelog view
@@ -1,3 +1,275 @@+pandoc (2.1.2)++  * Markdown reader:++    + Fix parsing bug with nested fenced divs (#4281).  Previously we allowed+      "nonindent spaces" before the opening and closing `:::`, but this+      interfered with list parsing, so now we require the fences to be flush with+      the margin of the containing block.++  * Commonmark reader:++    + `raw_html` is now on by default.  It can be disabled explicitly+      using `-f commonmark-raw_html`.++  * Org reader (Albert Krewinkel):++    + Move citation tests to separate module.+    + Allow changing emphasis syntax (#4378).  The characters allowed before+      and after emphasis can be configured via `#+pandoc-emphasis-pre` and+      `#+pandoc-emphasis-post`, respectively. This allows to change which+      strings are recognized as emphasized text on a per-document or even+      per-paragraph basis.  Example:++          #+pandoc-emphasis-pre: "-\t ('\"{"+          #+pandoc-emphasis-post: "-\t\n .,:!?;'\")}["++  * LaTeX reader:++    + Fixed comments inside citations (#4374).+    + Fix regression in package options including underscore (#4424).+    + Make `--trace` work.+    + Fixed parsing of `tabular*` environment (#4279).++  * RST reader:++    + Fix regression in parsing of headers with trailing space (#4280).++  * Muse reader (Alexander Krotov):++    + Enable `<literal>` tags even if amuse extension is enabled.+      Amusewiki disables <literal> tags for security reasons.+      If user wants similar behavior in pandoc, RawBlocks and RawInlines+      can be removed or replaced with filters.+    + Remove space prefix from `<literal>` tag contents.+    + Do not consume whitespace while looking for closing end tag.+    + Convert alphabetical list markers to decimal in round-trip test.+      Alphabetical lists are an addition of Text::Amuse.+      They are not present in Emacs Muse and can be ambiguous+      when list starts with "i.", "c." etc.+    + Allow `<quote>` and other tags to be indented.+    + Allow single colon in definition list term.+    + Fix parsing of verse in lists.+    + Improved parsing efficiency.  Avoid `parseFromString`.+      Lists are parsed in linear instead of exponential time now.+    + Replace ParserState with MuseState.+    + Prioritize lists with roman numerals over alphabetical lists.+      This is to make sure "i." starts a roman numbered list,+      instead of a list with letter "i" (followed by "j", "k", ...").+    + Fix directive parsing.+    + Parse definition lists with multiple descriptions.+    + Parse next list item before parsing more item contents.+    + Fixed a bug: headers did not terminate lists.+    + Move indentation parsing from `definitionListItem` to `definitionList`.+    + Paragraph indentation does not indicate nested quote.+      Muse allows indentation to indicate quotation or alignment,+      but only on the top level, not within a <quote> or list.+    + Require that block tags are on separate lines.+      Text::Amuse already explicitly requires it anyway.+    + Fix matching of closing inline tags.+    + Various internal changes.+    + Fix parsing of nested definition lists.+    + Require only one space for nested definition list indentation.+    + Do not remove trailing whitespace from `<code>`.+    + Fix parsing of trailing whitespace.  Newline after whitespace now+      results in softbreak instead of space.++  * Docx reader (Jesse Rosenthal, except where noted):++    + Handle nested sdt tags (#4415).+    + Don't look up dependant run styles if `+styles` is enabled.+    + Move pandoc inline styling inside custom-style span.+    + Read custom styles (#1843).  This will read all paragraph and+      character classes as divs and spans, respectively. Dependent styles+      will still be resolved, but will be wrapped with appropriate style+      tags. It is controlled by the `+styles` extension (`-f docx+styles`).+      This can be used in conjunction with the `custom-style` feature in the+      docx writer for a pandoc-docx editing workflow. Users can convert from+      an input docx, reading the custom-styles, and then use that same input+      docx file as a reference-doc for producing an output docx file. Styles+      will be maintained across the conversion, even if pandoc doesn't+      understand them.+    + Small change to Fields hyperlink parser.  Previously, unquoted string+      required a space at the end of the line (and consumed it). Now we+      either take a space (and don't consume it), or end of input.+    + Pick table width from the longest row or header (Francesco Occhipinti,+      #4360).++  * Muse writer (Alexander Krotov):++    + Change verse markup: `> ` instead of `<verse>` tag.+    + Remove empty strings during inline normalization.+    + Don't indent nested definition lists.+    + Use unicode quotes for quoted text.+    + Write image width specified in percent in Text::Amuse mode.+    + Don't wrap displayMath into `<verse>`.+    + Escape nonbreaking space (`~~`).+    + Join code with different attributes during normalization.+    + Indent lists inside Div.+    + Support definitions with multiple descriptions.++  * Powerpoint writer (Jesse Rosenthal):++    + Use table styles This will use the default table style in the+      reference-doc file. As a result they will be easier when using+      in a template, and match the color scheme.+    + Remove empty slides.  Because of the way that slides were split, these+      could be accidentally produced by comments after images.  When animations+      are added, there will be a way to add an empty slide with either+      incremental lists or pauses.+    + Implement syntax highlighting.  Note that background colors can't+      be implemented in PowerPoint, so highlighting styles that require+      these will be incomplete.+    + New test framework for pptx.  We now compare the output of the+      Powerpoint writer with files that we know to (a) not be corrupt,+      and (b) to show the desired output behavior (details below).+    + Add `notesMaster` to `presentation.xml` if necessary.+    + Ignore links and (end)notes in speaker notes.+    + Output speaker notes.+    + Read speaker note templates conditionally.  If there are speaker+      notes in the presentation, we read in the notesMasters templates+      from the reference pptx file.+    + Fix deletion track changes (#4303, Jesse Rosenthal).++  * Markdown writer: properly escape @ to avoid capture as citation+    (#4366).++  * LaTeX writer:++    + Put hypertarget inside figure environment (#4388).+      This works around a problem with the endfloat package and+      makes pandoc's output compatible with it.+    + Fix image height with percentage (#4389).  This previously caused+      the image to be resized to a percentage of textwidth, rather than+      textheight.++  * ConTeXt writer (Henri Menke):++    + New section syntax and support `--section-divs` (#2609).+      `\section[my-header]{My Header}` ->+      `\section[title={My Header},reference={my-header}]`.+      The ConTeXt writer now supports the `--section-divs` option to+      write sections in the fenced style, with `\startsection` and+      `\stopsection`.+    + xtables: correct wrong usage of caption (Henri Menke).++  * Docx writer:++    + Fix image resizing with multiple images (#3930, Andrew Pritchard).+    + Use new golden framework (Jesse Rosenthal).+    + Make more deterministic to facilitate testing (Jesse Rosenthal).+      - `getUniqueId` now calls to the state to get an incremented digit,+        instead of calling to P.uniqueHash.+      - we always start the PRNG in mkNumbering/mkAbstractNum with the same+        seed (1848), so our randoms should be the same each time.+    + Fix ids in comment writing (Jesse Rosenthal).  Comments from+      `--track-changes=all` were producing corrupt docx, because the+      writer was trying to get id from the `(ID,_,_)` field of+      the attributes, and ignoring the "id" entry in the key-value pairs. We+      now check both.++  * Ms writer: Added papersize variable.++  * TEI writer:++    + Use `height` instead of `depth` for images (#4331).+    + Ensure that id prefix is always used.+    + Don't emit `role` attribute; that was a leftover from the+      Docbook writer.+    + Use 'xml:id', not 'id' attribute (#4371).++  * AsciiDoc writer:++    + Do not output implicit heading IDs (#4363, Alexander+      Krotov).  Convert to `asciidoc-auto_identifiers` for old behaviour.++  * RST writer:++    + Remove `blockToRST'` moving its logic into `fixBlocks`+      (Francesco Occhipinti).+    + Insert comment between lists and quotes (#4248, Francesco Occchipinti).++  * RST template: remove definition of 'math' role as raw.+    This used to be needed prior to v 0.8 of docutils, but+    now math support is built-in.++  * Slides: Use divs to set incremental/non-incremental (#4381,+    Jesse Rosenthal).  The old method (list inside blockquote) still+    works, but we are encouraging the use of divs with class+    `incremental` or `nonincremental`.++  * Text.Pandoc.ImageSize:++    + Make image size detection for PDFs more robust (#4322).+    + Determine image size for PDFs (#4322).+    + EMF Image size support (#4375, Andrew Pritchard).++  * Text.Pandoc.Extensions:++    + Add `Ext_styles` (Jesse Rosenthal, API change).  This will be used in+      the docx reader (defaulting to off) to read pargraph and character+      styles not understood by pandoc (as divs and spans, respectively).+    + Made `Ext_raw_html` default for `commonmark` format.++  * Text.Pandoc.Parsing:++    + Export `manyUntil` (Alexander Krotov, API change).+    + Export improved `sepBy1` (Alexander Krotov).+    + Export list marker parsers: `upperRoman`, `lowerRoman`,+      `decimal`, `lowerAlpha`, `upperAlpha` (Alexander Krotov, API change).++  * Tests/Lua: fix tests on windows (Albert Krewinkel).++  * Lua: register script name in global variable (#4393).  The name of the Lua+    script which is executed is made available in the global Lua variable+    `PANDOC_SCRIPT_FILE`, both for Lua filters and custom writers.++  * Tests: Abstract powerpoint tests out to OOXML tests (Jesse Rosenthal).+    There is very little pptx-specific in these tests, so we abstract out+    the basic testing function so it can be used for docx as well. This+    should allow us to catch some errors in the docx writer that slipped+    by the roundtrip testing.++  * Lua filters: store constructors in registry (Albert Krewinkel).  Lua+    functions used to construct AST element values are stored in the Lua+    registry for quicker access. Getting a value from the registry is much+    faster than getting a global value (partly to idiosyncrasies of hslua);+    this change results in a considerable performance boost.++  * Documentation:++    + `doc/org.md` Add draft of Org-mode documentation (Albert Krewinkel).+    + `doc/lua-filters.md`: document global vars set for filters+      (Albert Krewinkel).+    + INSTALL.md: mention Stack version. (#4343, Adam Brandizzi).+    + MANUAL: add documentation on custom styles (Jesse Rosenthal).+    + MANUAL.txt: Document incremental and nonincremental divs (Jesse+      Rosenthal).  Blockquoted lists are still described, but fenced divs are+      presented in preference.+    + MANUAL.txt: document header and footer variables (newmana).+    + MANUAL.txt: self-contained implies standalone (#4304, Daniel Lublin).+    + CONTRIBUTING.md: label was renamed. (#4310, Alexander Brandizzi).++  * Require tagsoup 0.14.3 (#4282), fixing HTML tokenization bug.++  * Use latest texmath.++  * Use latest pandoc-citeproc.++  * Allow exceptions 0.9.++  * Require aeson-pretty 0.8.5 (#4394).++  * Bump blaze-markup, blaze-html lower bounds to 0.8, 0.9 (#4334).++  * Update tagsoup to 0.14.6 (Alexander Krotov, #4282).++  * Removed ghc-prof-options.  As of cabal 1.24, sensible defaults are used.++  * Update default.nix to current nixpkgs-unstable for hslua-0.9.5 (#4348,+    jarlg).++ pandoc (2.1.1)    * Markdown reader:@@ -1372,7 +1644,7 @@          [b]: url -    This was previously enabled by default; now it is now forbidden by default.+    This was previously enabled by default; it is now forbidden by default.    * Add `space_in_atx_header` extension (#3512).  This is enabled by default     in pandoc and GitHub markdown but not the other flavors.@@ -1704,7 +1976,7 @@   * HTML reader: parse a span with class `smallcaps` as `SmallCaps`.    * LaTeX reader:- +     + Implemented `\graphicspath` (#736).     + Properly handle column prefixes/suffixes.  For example, in       `\begin{tabular}{>{$}l<{$}>{$}l<{$} >{$}l<{$}}`
data/pptx/[Content_Types].xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml"/><Default Extension="jpeg" ContentType="image/jpeg"/><Default Extension="bin" ContentType="application/vnd.openxmlformats-officedocument.presentationml.printerSettings"/><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/><Override PartName="/ppt/slideMasters/slideMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"/><Override PartName="/ppt/slides/slide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/><Override PartName="/ppt/slides/slide2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/><Override PartName="/ppt/presProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presProps+xml"/><Override PartName="/ppt/viewProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml"/><Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/ppt/tableStyles.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml"/><Override PartName="/ppt/slideLayouts/slideLayout1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout4.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout5.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout6.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout7.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout8.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout9.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout10.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout11.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/><Override PartName="/ppt/slideMasters/slideMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"/><Override PartName="/ppt/slides/slide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/><Override PartName="/ppt/slides/slide2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/><Override PartName="/ppt/notesMasters/notesMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml"/><Override PartName="/ppt/presProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presProps+xml"/><Override PartName="/ppt/viewProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml"/><Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/ppt/tableStyles.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml"/><Override PartName="/ppt/slideLayouts/slideLayout1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout4.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout5.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout6.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout7.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout8.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout9.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout10.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout11.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/theme/theme2.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/ppt/notesSlides/notesSlide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"/><Override PartName="/ppt/notesSlides/notesSlide2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>
data/pptx/_rels/.rels view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="ppt/presentation.xml"/></Relationships>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="ppt/presentation.xml"/></Relationships>
data/pptx/docProps/app.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><TotalTime>1</TotalTime><Words>8</Words><Application>Microsoft Macintosh PowerPoint</Application><PresentationFormat>On-screen Show (4:3)</PresentationFormat><Paragraphs>4</Paragraphs><Slides>2</Slides><Notes>0</Notes><HiddenSlides>0</HiddenSlides><MMClips>0</MMClips><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="4" baseType="variant"><vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant><vt:variant><vt:i4>2</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="3" baseType="lpstr"><vt:lpstr>Office Theme</vt:lpstr><vt:lpstr>Title</vt:lpstr><vt:lpstr>Slide Title</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>14.0000</AppVersion></Properties>+<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><TotalTime>1</TotalTime><Words>26</Words><Application>Microsoft Office PowerPoint</Application><PresentationFormat>On-screen Show (4:3)</PresentationFormat><Paragraphs>10</Paragraphs><Slides>2</Slides><Notes>2</Notes><HiddenSlides>0</HiddenSlides><MMClips>0</MMClips><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="6" baseType="variant"><vt:variant><vt:lpstr>Fonts Used</vt:lpstr></vt:variant><vt:variant><vt:i4>2</vt:i4></vt:variant><vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant><vt:variant><vt:i4>2</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="5" baseType="lpstr"><vt:lpstr>Arial</vt:lpstr><vt:lpstr>Calibri</vt:lpstr><vt:lpstr>Office Theme</vt:lpstr><vt:lpstr>Title</vt:lpstr><vt:lpstr>Slide Title</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>15.0000</AppVersion></Properties>
data/pptx/docProps/core.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>Title</dc:title><dc:creator>Jesse Rosenthal</dc:creator><cp:lastModifiedBy>Jesse Rosenthal</cp:lastModifiedBy><cp:revision>1</cp:revision><dcterms:created xsi:type="dcterms:W3CDTF">2017-06-05T14:10:58Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2017-06-05T14:12:07Z</dcterms:modified></cp:coreProperties>+<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>Title</dc:title><dc:creator>Jesse Rosenthal</dc:creator><cp:lastModifiedBy>KSAS-IT</cp:lastModifiedBy><cp:revision>3</cp:revision><dcterms:created xsi:type="dcterms:W3CDTF">2017-06-05T14:10:58Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2018-02-17T16:21:08Z</dcterms:modified></cp:coreProperties>
data/pptx/ppt/_rels/presentation.xml.rels view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide2.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps" Target="presProps.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps" Target="viewProps.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles" Target="tableStyles.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="slideMasters/slideMaster1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide1.xml"/></Relationships>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles" Target="tableStyles.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide2.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="slideMasters/slideMaster1.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps" Target="viewProps.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps" Target="presProps.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" Target="notesMasters/notesMaster1.xml"/></Relationships>
+ data/pptx/ppt/notesMasters/_rels/notesMaster1.xml.rels view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme2.xml"/></Relationships>
+ data/pptx/ppt/notesMasters/notesMaster1.xml view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:notesMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Header Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="hdr" sz="quarter"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="2971800" cy="458788"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="1200"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Date Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3884613" y="0"/><a:ext cx="2971800" cy="458788"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0"/><a:lstStyle><a:lvl1pPr algn="r"><a:defRPr sz="1200"/></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{0F9C1CCF-B725-44A7-AA57-5E433BD85C9F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Image Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1" noRot="1" noChangeAspect="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldImg" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1371600" y="1143000"/><a:ext cx="4114800" cy="3086100"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln w="12700"><a:solidFill><a:prstClr val="black"/></a:solidFill></a:ln></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Notes Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="quarter" idx="3"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="685800" y="4400550"/><a:ext cx="5486400" cy="3600450"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="4"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="0" y="8685213"/><a:ext cx="2971800" cy="458787"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="1200"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="5"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3884613" y="8685213"/><a:ext cx="2971800" cy="458787"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="b"/><a:lstStyle><a:lvl1pPr algn="r"><a:defRPr sz="1200"/></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{18BDFEC3-8487-43E8-A154-7C12CBC1FFF2}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3782709779"/></p:ext></p:extLst></p:cSld><p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/><p:notesStyle><a:lvl1pPr marL="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:notesStyle></p:notesMaster>
+ data/pptx/ppt/notesSlides/_rels/notesSlide1.xml.rels view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="../slides/slide1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" Target="../notesMasters/notesMaster1.xml"/></Relationships>
+ data/pptx/ppt/notesSlides/_rels/notesSlide2.xml.rels view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="../slides/slide2.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" Target="../notesMasters/notesMaster1.xml"/></Relationships>
+ data/pptx/ppt/notesSlides/notesSlide1.xml view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:notes xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Slide Image Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1" noRot="1" noChangeAspect="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldImg"/></p:nvPr></p:nvSpPr><p:spPr/></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Notes Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>Here</a:t></a:r><a:r><a:rPr lang="en-US" baseline="0" dirty="0" smtClean="0"/><a:t> is a note</a:t></a:r></a:p><a:p><a:endParaRPr lang="en-US" baseline="0" dirty="0" smtClean="0"/></a:p><a:p><a:r><a:rPr lang="en-US" baseline="0" dirty="0" smtClean="0"/><a:t>With another paragraph.</a:t></a:r><a:endParaRPr lang="en-US" dirty="0"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Number Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{18BDFEC3-8487-43E8-A154-7C12CBC1FFF2}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>1</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3171319170"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:notes>
+ data/pptx/ppt/notesSlides/notesSlide2.xml view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:notes xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Slide Image Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1" noRot="1" noChangeAspect="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldImg"/></p:nvPr></p:nvSpPr><p:spPr/></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Notes Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>A</a:t></a:r><a:r><a:rPr lang="en-US" baseline="0" dirty="0" smtClean="0"/><a:t> speaker note on </a:t></a:r><a:r><a:rPr lang="en-US" baseline="0" smtClean="0"/><a:t>this slide too.</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Number Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{18BDFEC3-8487-43E8-A154-7C12CBC1FFF2}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>2</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3016900036"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:notes>
data/pptx/ppt/presProps.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:presentationPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:extLst><p:ext uri="{E76CE94A-603C-4142-B9EB-6D1370010A27}"><p14:discardImageEditData xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="0"/></p:ext><p:ext uri="{D31A062A-798A-4329-ABDD-BBA856620510}"><p14:defaultImageDpi xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="0"/></p:ext></p:extLst></p:presentationPr>+<p:presentationPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:extLst><p:ext uri="{E76CE94A-603C-4142-B9EB-6D1370010A27}"><p14:discardImageEditData xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="0"/></p:ext><p:ext uri="{D31A062A-798A-4329-ABDD-BBA856620510}"><p14:defaultImageDpi xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="0"/></p:ext><p:ext uri="{FD5EFAAD-0ECE-453E-9831-46B23BE46B34}"><p15:chartTrackingRefBased xmlns:p15="http://schemas.microsoft.com/office/powerpoint/2012/main" val="0"/></p:ext></p:extLst></p:presentationPr>
data/pptx/ppt/presentation.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" saveSubsetFonts="1" autoCompressPictures="0"><p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst><p:sldIdLst><p:sldId id="256" r:id="rId2"/><p:sldId id="257" r:id="rId3"/></p:sldIdLst><p:sldSz cx="9144000" cy="6858000" type="screen4x3"/><p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:defaultTextStyle></p:presentation>+<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" saveSubsetFonts="1" autoCompressPictures="0"><p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst><p:notesMasterIdLst><p:notesMasterId r:id="rId4"/></p:notesMasterIdLst><p:sldIdLst><p:sldId id="256" r:id="rId2"/><p:sldId id="257" r:id="rId3"/></p:sldIdLst><p:sldSz cx="9144000" cy="6858000" type="screen4x3"/><p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:defaultTextStyle><p:extLst><p:ext uri="{EFAFB233-063F-42B5-8137-9DF3F51BA10A}"><p15:sldGuideLst xmlns:p15="http://schemas.microsoft.com/office/powerpoint/2012/main"><p15:guide id="1" orient="horz" pos="2160"><p15:clr><a:srgbClr val="A4A3A4"/></p15:clr></p15:guide><p15:guide id="2" pos="2880"><p15:clr><a:srgbClr val="A4A3A4"/></p15:clr></p15:guide></p15:sldGuideLst></p:ext></p:extLst></p:presentation>
data/pptx/ppt/slideLayouts/slideLayout1.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="title" preserve="1"><p:cSld name="Title Slide"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ctrTitle"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="685800" y="2130425"/><a:ext cx="7772400" cy="1470025"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Subtitle 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="subTitle" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1371600" y="3886200"/><a:ext cx="6400800" cy="1752600"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master subtitle style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="1444357513"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="title" preserve="1"><p:cSld name="Title Slide"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ctrTitle"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="685800" y="2130425"/><a:ext cx="7772400" cy="1470025"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Subtitle 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="subTitle" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1371600" y="3886200"/><a:ext cx="6400800" cy="1752600"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master subtitle style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="1444357513"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout10.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTx" preserve="1"><p:cSld name="Title and Vertical Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="313914798"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTx" preserve="1"><p:cSld name="Title and Vertical Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="313914798"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout11.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTitleAndTx" preserve="1"><p:cSld name="Vertical Title and Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Vertical Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title" orient="vert"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="6629400" y="274638"/><a:ext cx="2057400" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="274638"/><a:ext cx="6019800" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2581529045"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTitleAndTx" preserve="1"><p:cSld name="Vertical Title and Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Vertical Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title" orient="vert"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="6629400" y="274638"/><a:ext cx="2057400" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="274638"/><a:ext cx="6019800" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2581529045"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout2.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="obj" preserve="1"><p:cSld name="Title and Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="338346009"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="obj" preserve="1"><p:cSld name="Title and Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="338346009"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout3.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="secHead" preserve="1"><p:cSld name="Section Header"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="4406900"/><a:ext cx="7772400" cy="1362075"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="t"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="4000" b="1" cap="all"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="2906713"/><a:ext cx="7772400" cy="1500187"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2000"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1800"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1600"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="1073069076"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="secHead" preserve="1"><p:cSld name="Section Header"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="4406900"/><a:ext cx="7772400" cy="1362075"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="t"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="4000" b="1" cap="all"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="2906713"/><a:ext cx="7772400" cy="1500187"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2000"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1800"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1600"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="1073069076"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout4.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoObj" preserve="1"><p:cSld name="Two Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Content Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4648200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2619886245"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoObj" preserve="1"><p:cSld name="Two Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Content Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4648200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2619886245"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout5.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoTxTwoObj" preserve="1"><p:cSld name="Comparison"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1535113"/><a:ext cx="4040188" cy="639762"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2400" b="1"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2000" b="1"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1800" b="1"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Content Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="2174875"/><a:ext cx="4040188" cy="3951288"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2400"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2000"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="1800"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1600"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1600"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1600"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1600"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1600"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1600"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Text Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="quarter" idx="3"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4645025" y="1535113"/><a:ext cx="4041775" cy="639762"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2400" b="1"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2000" b="1"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1800" b="1"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Content Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="quarter" idx="4"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4645025" y="2174875"/><a:ext cx="4041775" cy="3951288"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2400"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2000"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="1800"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1600"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1600"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1600"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1600"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1600"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1600"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Date Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="8" name="Footer Placeholder 7"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="9" name="Slide Number Placeholder 8"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2535793967"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoTxTwoObj" preserve="1"><p:cSld name="Comparison"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1535113"/><a:ext cx="4040188" cy="639762"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2400" b="1"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2000" b="1"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1800" b="1"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Content Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="2174875"/><a:ext cx="4040188" cy="3951288"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2400"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2000"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="1800"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1600"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1600"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1600"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1600"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1600"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1600"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Text Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="quarter" idx="3"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4645025" y="1535113"/><a:ext cx="4041775" cy="639762"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2400" b="1"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2000" b="1"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1800" b="1"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1600" b="1"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Content Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="quarter" idx="4"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4645025" y="2174875"/><a:ext cx="4041775" cy="3951288"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2400"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2000"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="1800"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1600"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1600"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1600"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1600"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1600"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1600"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Date Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="8" name="Footer Placeholder 7"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="9" name="Slide Number Placeholder 8"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2535793967"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout6.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="titleOnly" preserve="1"><p:cSld name="Title Only"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Date Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Footer Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Slide Number Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3472721253"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="titleOnly" preserve="1"><p:cSld name="Title Only"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Date Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Footer Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Slide Number Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3472721253"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout7.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="blank" preserve="1"><p:cSld name="Blank"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Date Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Footer Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Number Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2130901097"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="blank" preserve="1"><p:cSld name="Blank"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Date Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Footer Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Number Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2130901097"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout8.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="objTx" preserve="1"><p:cSld name="Content with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="273050"/><a:ext cx="3008313" cy="1162050"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3575050" y="273050"/><a:ext cx="5111750" cy="5853113"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1435100"/><a:ext cx="3008313" cy="4691063"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3540895647"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="objTx" preserve="1"><p:cSld name="Content with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="273050"/><a:ext cx="3008313" cy="1162050"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3575050" y="273050"/><a:ext cx="5111750" cy="5853113"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1435100"/><a:ext cx="3008313" cy="4691063"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3540895647"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideLayouts/slideLayout9.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="picTx" preserve="1"><p:cSld name="Picture with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="4800600"/><a:ext cx="5486400" cy="566738"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Picture Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="pic" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="612775"/><a:ext cx="5486400" cy="4114800"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="5367338"/><a:ext cx="5486400" cy="804862"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3566899855"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="picTx" preserve="1"><p:cSld name="Picture with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="4800600"/><a:ext cx="5486400" cy="566738"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Picture Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="pic" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="612775"/><a:ext cx="5486400" cy="4114800"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="5367338"/><a:ext cx="5486400" cy="804862"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3566899855"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
data/pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId11" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout11.xml"/><Relationship Id="rId12" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout4.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout5.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout6.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout7.xml"/><Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout8.xml"/><Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout9.xml"/><Relationship Id="rId10" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout10.xml"/></Relationships>+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout8.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout7.xml"/><Relationship Id="rId12" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout6.xml"/><Relationship Id="rId11" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout11.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout5.xml"/><Relationship Id="rId10" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout10.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout4.xml"/><Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout9.xml"/></Relationships>
data/pptx/ppt/slideMasters/slideMaster1.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:sldMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="274638"/><a:ext cx="8229600" cy="1143000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1600200"/><a:ext cx="8229600" cy="4525963"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="6356350"/><a:ext cx="2133600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>6/5/17</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="3"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3124200" y="6356350"/><a:ext cx="2895600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="ctr"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="4"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="6553200" y="6356350"/><a:ext cx="2133600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="r"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3676200875"/></p:ext></p:extLst></p:cSld><p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/><p:sldLayoutIdLst><p:sldLayoutId id="2147483649" r:id="rId1"/><p:sldLayoutId id="2147483650" r:id="rId2"/><p:sldLayoutId id="2147483651" r:id="rId3"/><p:sldLayoutId id="2147483652" r:id="rId4"/><p:sldLayoutId id="2147483653" r:id="rId5"/><p:sldLayoutId id="2147483654" r:id="rId6"/><p:sldLayoutId id="2147483655" r:id="rId7"/><p:sldLayoutId id="2147483656" r:id="rId8"/><p:sldLayoutId id="2147483657" r:id="rId9"/><p:sldLayoutId id="2147483658" r:id="rId10"/><p:sldLayoutId id="2147483659" r:id="rId11"/></p:sldLayoutIdLst><p:txStyles><p:titleStyle><a:lvl1pPr algn="ctr" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="0"/></a:spcBef><a:buNone/><a:defRPr sz="4400" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mj-lt"/><a:ea typeface="+mj-ea"/><a:cs typeface="+mj-cs"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL="342900" indent="-342900" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="3200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="742950" indent="-285750" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="–"/><a:defRPr sz="2800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="1143000" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2400" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1600200" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="–"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="2057400" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="»"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2514600" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2971800" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3429000" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3886200" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:otherStyle></p:txStyles></p:sldMaster>+<p:sldMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="274638"/><a:ext cx="8229600" cy="1143000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1600200"/><a:ext cx="8229600" cy="4525963"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="6356350"/><a:ext cx="2133600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{241EB5C9-1307-BA42-ABA2-0BC069CD8E7F}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:t>2/17/2018</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="3"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3124200" y="6356350"/><a:ext cx="2895600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="ctr"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="4"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="6553200" y="6356350"/><a:ext cx="2133600" cy="365125"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle><a:lvl1pPr algn="r"><a:defRPr sz="1200"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id="{C5EF2332-01BF-834F-8236-50238282D533}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}"><p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="3676200875"/></p:ext></p:extLst></p:cSld><p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/><p:sldLayoutIdLst><p:sldLayoutId id="2147483649" r:id="rId1"/><p:sldLayoutId id="2147483650" r:id="rId2"/><p:sldLayoutId id="2147483651" r:id="rId3"/><p:sldLayoutId id="2147483652" r:id="rId4"/><p:sldLayoutId id="2147483653" r:id="rId5"/><p:sldLayoutId id="2147483654" r:id="rId6"/><p:sldLayoutId id="2147483655" r:id="rId7"/><p:sldLayoutId id="2147483656" r:id="rId8"/><p:sldLayoutId id="2147483657" r:id="rId9"/><p:sldLayoutId id="2147483658" r:id="rId10"/><p:sldLayoutId id="2147483659" r:id="rId11"/></p:sldLayoutIdLst><p:txStyles><p:titleStyle><a:lvl1pPr algn="ctr" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="0"/></a:spcBef><a:buNone/><a:defRPr sz="4400" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mj-lt"/><a:ea typeface="+mj-ea"/><a:cs typeface="+mj-cs"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL="342900" indent="-342900" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="3200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="742950" indent="-285750" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="–"/><a:defRPr sz="2800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="1143000" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2400" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1600200" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="–"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="2057400" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="»"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2514600" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2971800" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3429000" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3886200" indent="-228600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="2000" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:otherStyle></p:txStyles></p:sldMaster>
data/pptx/ppt/slides/_rels/slide1.xml.rels view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/></Relationships>+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide" Target="../notesSlides/notesSlide1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/></Relationships>
data/pptx/ppt/slides/_rels/slide2.xml.rels view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/></Relationships>+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide" Target="../notesSlides/notesSlide2.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/></Relationships>
+ data/pptx/ppt/theme/theme2.xml view
@@ -0,0 +1,2 @@+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="44546A"/></a:dk2><a:lt2><a:srgbClr val="E7E6E6"/></a:lt2><a:accent1><a:srgbClr val="5B9BD5"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2><a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4><a:accent5><a:srgbClr val="4472C4"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6><a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Calibri Light" panose="020F0302020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Angsana New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri" panose="020F0502020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Cordia New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="110000"/><a:satMod val="105000"/><a:tint val="67000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="103000"/><a:tint val="73000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="109000"/><a:tint val="81000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:satMod val="103000"/><a:lumMod val="102000"/><a:tint val="94000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:satMod val="110000"/><a:lumMod val="100000"/><a:shade val="100000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="99000"/><a:satMod val="120000"/><a:shade val="78000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="63000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"><a:tint val="95000"/><a:satMod val="170000"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="93000"/><a:satMod val="150000"/><a:shade val="98000"/><a:lumMod val="102000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:tint val="98000"/><a:satMod val="130000"/><a:shade val="90000"/><a:lumMod val="103000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="63000"/><a:satMod val="120000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri="{05A4C25C-085E-4340-85A3-A5531E510DB2}"><thm15:themeFamily xmlns:thm15="http://schemas.microsoft.com/office/thememl/2012/main" name="Office Theme" id="{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}" vid="{4A3C46E8-61CC-4603-A589-7422A47A8E4A}"/></a:ext></a:extLst></a:theme>
data/pptx/ppt/viewProps.xml view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<p:viewPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:normalViewPr><p:restoredLeft sz="15633" autoAdjust="0"/><p:restoredTop sz="94711" autoAdjust="0"/></p:normalViewPr><p:slideViewPr><p:cSldViewPr snapToGrid="0" snapToObjects="1"><p:cViewPr varScale="1"><p:scale><a:sx n="101" d="100"/><a:sy n="101" d="100"/></p:scale><p:origin x="-1112" y="-112"/></p:cViewPr><p:guideLst><p:guide orient="horz" pos="2160"/><p:guide pos="2880"/></p:guideLst></p:cSldViewPr></p:slideViewPr><p:outlineViewPr><p:cViewPr><p:scale><a:sx n="33" d="100"/><a:sy n="33" d="100"/></p:scale><p:origin x="0" y="0"/></p:cViewPr></p:outlineViewPr><p:notesTextViewPr><p:cViewPr><p:scale><a:sx n="100" d="100"/><a:sy n="100" d="100"/></p:scale><p:origin x="0" y="0"/></p:cViewPr></p:notesTextViewPr><p:gridSpacing cx="76200" cy="76200"/></p:viewPr>+<p:viewPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:normalViewPr><p:restoredLeft sz="15633" autoAdjust="0"/><p:restoredTop sz="94711" autoAdjust="0"/></p:normalViewPr><p:slideViewPr><p:cSldViewPr snapToGrid="0" snapToObjects="1"><p:cViewPr varScale="1"><p:scale><a:sx n="93" d="100"/><a:sy n="93" d="100"/></p:scale><p:origin x="102" y="120"/></p:cViewPr><p:guideLst><p:guide orient="horz" pos="2160"/><p:guide pos="2880"/></p:guideLst></p:cSldViewPr></p:slideViewPr><p:outlineViewPr><p:cViewPr><p:scale><a:sx n="33" d="100"/><a:sy n="33" d="100"/></p:scale><p:origin x="0" y="0"/></p:cViewPr></p:outlineViewPr><p:notesTextViewPr><p:cViewPr><p:scale><a:sx n="100" d="100"/><a:sy n="100" d="100"/></p:scale><p:origin x="0" y="0"/></p:cViewPr></p:notesTextViewPr><p:gridSpacing cx="76200" cy="76200"/></p:viewPr>
data/templates/default.ms view
@@ -40,6 +40,10 @@ .nr FL \n[LL] .\" footnote point size .nr FPS (\n[PS] - 2000)+$if(papersize)$+.\" paper size+.ds paper $papersize$+$endif$ .\" color used for strikeout .defcolor strikecolor rgb 0.7 0.7 0.7 .\" color for links (rgb)
data/templates/default.rst view
@@ -15,12 +15,6 @@  $endif$ $endif$-$if(math)$-.. role:: math(raw)-   :format: html latex-..--$endif$ $if(rawtex)$ .. role:: raw-latex(raw)    :format: latex
man/pandoc.1 view
@@ -1,5 +1,5 @@ .\"t-.TH PANDOC 1 "January 18, 2018" "pandoc 2.1.1"+.TH PANDOC 1 "March 2, 2018" "pandoc 2.1.2" .SH NAME pandoc - general markup converter .SH SYNOPSIS@@ -175,7 +175,8 @@ output. If \f[C]wkhtmltopdf\f[] is used, then the variables \f[C]margin\-left\f[], \f[C]margin\-right\f[], \f[C]margin\-top\f[],-\f[C]margin\-bottom\f[], and \f[C]papersize\f[] will affect the output.+\f[C]margin\-bottom\f[], \f[C]footer\-html\f[], \f[C]header\-html\f[]+and \f[C]papersize\f[] will affect the output. .PP To debug the PDF creation, it can be useful to look at the intermediate representation: instead of \f[C]\-o\ test.pdf\f[], use for example@@ -821,6 +822,7 @@ Produce a standalone HTML file with no external dependencies, using \f[C]data:\f[] URIs to incorporate the contents of linked scripts, stylesheets, images, and videos.+Implies \f[C]\-\-standalone\f[]. The resulting file should be "self\-contained," in the sense that it needs no external files and no net access to be displayed properly by a browser.@@ -1044,7 +1046,35 @@ Then open \f[C]custom\-reference.odt\f[] in LibreOffice, modify the styles as you wish, and save the file. .RE+.TP+.B PowerPoint+Any template included with a recent install of Microsoft PowerPoint+(either with \f[C]\&.pptx\f[] or \f[C]\&.potx\f[] extension) should+work, as will most templates derived from these.+.RS+.PP+The specific requirement is that the template should contain the+following four layouts as its first four layouts:+.IP "1." 3+Title Slide+.IP "2." 3+Title and Content+.IP "3." 3+Section Header+.IP "4." 3+Two Content+.PP+All templates included with a recent version of MS PowerPoint will fit+these criteria.+(You can click on \f[C]Layout\f[] under the \f[C]Home\f[] menu to+check.)+.PP+You can also modify the default \f[C]reference.pptx\f[]: first run+\f[C]pandoc\ \-\-print\-default\-data\-file\ reference.pptx\ >\ custom\-reference.pptx\f[],+and then modify \f[C]custom\-reference.pptx\f[] in MS PowerPoint (pandoc+will use the first four layout slides, as mentioned above). .RE+.RE .TP .B \f[C]\-\-epub\-cover\-image=\f[]\f[I]FILE\f[] Use the specified image as the EPUB cover.@@ -2341,6 +2371,18 @@ \f[C]html\f[] .RS .RE+.SS Extension: \f[C]styles\f[]+.PP+Read all docx styles as divs (for paragraph styles) and spans (for+character styles) regardless of whether pandoc understands the meaning+of these styles.+This can be used with docx custom styles.+Disabled by default.+.TP+.B input formats+\f[C]docx\f[]+.RS+.RE .SS Extension: \f[C]amuse\f[] .PP In the \f[C]muse\f[] input format, this enables Text::Amuse extensions@@ -2741,7 +2783,7 @@ with value \f[C]100\f[]. Some output formats can use this information to do syntax highlighting. Currently, the only output formats that uses this information are HTML,-LaTeX, Docx, and Ms.+LaTeX, Docx, Ms, and PowerPoint. If highlighting is supported for your output format and language, then the code block above will appear highlighted, with numbered lines. (To see which languages are supported, type@@ -5204,9 +5246,42 @@ By default, these writers produce lists that display "all at once." If you want your lists to display incrementally (one item at a time), use the \f[C]\-i\f[] option.-If you want a particular list to depart from the default (that is, to+If you want a particular list to depart from the default, put it in a+\f[C]div\f[] block with class \f[C]incremental\f[] or+\f[C]nonincremental\f[].+So, for example, using the \f[C]fenced\ div\f[] syntax, the following+would be incremental regardless of the document default:+.IP+.nf+\f[C]+:::\ incremental++\-\ Eat\ spaghetti+\-\ Drink\ wine++:::+\f[]+.fi+.PP+or+.IP+.nf+\f[C]+:::\ nonincremental++\-\ Eat\ spaghetti+\-\ Drink\ wine++:::+\f[]+.fi+.PP+While using \f[C]incremental\f[] and \f[C]nonincremental\f[] divs are+the recommended method of setting incremental lists on a per\-case+basis, an older method is also supported: putting lists inside a+blockquote will depart from the document default (that is, it will display incrementally without the \f[C]\-i\f[] option and all at once-with the \f[C]\-i\f[] option), put it in a block quote:+with the \f[C]\-i\f[] option): .IP .nf \f[C]@@ -5215,7 +5290,7 @@ \f[] .fi .PP-In this way incremental and nonincremental lists can be mixed in a+Both methods allow incremental and nonincremental lists to be mixed in a single document. .SS Inserting pauses .PP@@ -5286,7 +5361,7 @@ .fi .SS Speaker notes .PP-reveal.js has good support for speaker notes.+Speaker notes are supported in reveal.js and PowerPoint (pptx) output. You can add notes to your Markdown document thus: .IP .nf@@ -5302,8 +5377,11 @@ \f[] .fi .PP-To show the notes window, press \f[C]s\f[] while viewing the-presentation.+To show the notes window in reveal.js, press \f[C]s\f[] while viewing+the presentation.+Speaker notes in PowerPoint will be available, as usual, in handouts and+presenter view.+.PP Notes are not yet supported for other slide formats, but the notes will not appear on the slides themselves. .SS Columns@@ -5532,7 +5610,62 @@ \f[C]pandoc\ \-\-list\-highlight\-styles\f[]. .PP To disable highlighting, use the \f[C]\-\-no\-highlight\f[] option.-.SH CUSTOM STYLES IN DOCX OUTPUT+.SH CUSTOM STYLES IN DOCX+.SS Input+.PP+The docx reader, by default, only reads those styles that it can convert+into pandoc elements, either by direct conversion or interpreting the+derivation of the input document\[aq]s styles.+.PP+By enabling the \f[C]styles\f[] extension in the docx reader+(\f[C]\-f\ docx+styles\f[]), you can produce output that maintains the+styles of the input document, using the \f[C]custom\-style\f[] class.+Paragraph styles are interpreted as divs, while character styles are+interpreted as spans.+.PP+For example, using the \f[C]custom\-style\-reference.docx\f[] file in+the test directory, we have the following different outputs:+.PP+Without the \f[C]+styles\f[] extension:+.IP+.nf+\f[C]+$\ pandoc\ test/docx/custom\-style\-reference.docx\ \-f\ docx\ \-t\ markdown+This\ is\ some\ text.++This\ is\ text\ with\ an\ *emphasized*\ text\ style.\ And\ this\ is\ text\ with\ a+**strengthened**\ text\ style.++>\ Here\ is\ a\ styled\ paragraph\ that\ inherits\ from\ Block\ Text.+\f[]+.fi+.PP+And with the extension:+.IP+.nf+\f[C]+$\ pandoc\ test/docx/custom\-style\-reference.docx\ \-f\ docx+styles\ \-t\ markdown++:::\ {custom\-style="FirstParagraph"}+This\ is\ some\ text.+:::++:::\ {custom\-style="BodyText"}+This\ is\ text\ with\ an\ [emphasized]{custom\-style="Emphatic"}\ text\ style.+And\ this\ is\ text\ with\ a\ [strengthened]{custom\-style="Strengthened"}+text\ style.+:::++:::\ {custom\-style="MyBlockStyle"}+>\ Here\ is\ a\ styled\ paragraph\ that\ inherits\ from\ Block\ Text.+:::+\f[]+.fi+.PP+With these custom styles, you can use your input document as a+reference\-doc while creating docx output (see below), and maintain the+same styles in your input and output files.+.SS Output .PP By default, pandoc\[aq]s docx output applies a predefined set of styles for blocks such as paragraphs and block quotes, and uses largely default
pandoc.cabal view
@@ -1,5 +1,5 @@ name:            pandoc-version:         2.1.1+version:         2.1.2 cabal-version:   >= 1.10 build-type:      Custom license:         GPL@@ -139,6 +139,13 @@                  data/pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels                  data/pptx/ppt/slideMasters/slideMaster1.xml                  data/pptx/ppt/presentation.xml+                 data/pptx/ppt/notesMasters/_rels/notesMaster1.xml.rels+                 data/pptx/ppt/notesMasters/notesMaster1.xml+                 data/pptx/ppt/notesSlides/_rels/notesSlide1.xml.rels+                 data/pptx/ppt/notesSlides/notesSlide1.xml+                 data/pptx/ppt/notesSlides/_rels/notesSlide2.xml.rels+                 data/pptx/ppt/notesSlides/notesSlide2.xml+                 data/pptx/ppt/theme/theme2.xml                  data/pptx/[Content_Types].xml                   -- stylesheet for EPUB writer                  data/epub.css@@ -299,9 +306,12 @@                  test/fb2/test-small.png                  test/fb2/test.jpg                  test/docx/*.docx+                 test/docx/golden/*.docx                  test/docx/*.native                  test/epub/*.epub                  test/epub/*.native+                 test/pptx/*.pptx+                 test/pptx/*.native                  test/txt2tags.t2t                  test/twiki-reader.twiki                  test/tikiwiki-reader.tikiwiki@@ -347,7 +357,7 @@                  unordered-containers >= 0.2 && < 0.3,                  parsec >= 3.1 && < 3.2,                  mtl >= 2.2 && < 2.3,-                 exceptions >= 0.8 && < 0.9,+                 exceptions >= 0.8 && < 0.10,                  filepath >= 1.1 && < 1.5,                  process >= 1.2.3 && < 1.7,                  directory >= 1 && < 1.4,@@ -362,19 +372,19 @@                  random >= 1 && < 1.2,                  pandoc-types >= 1.17.3 && < 1.18,                  aeson >= 0.7 && < 1.3,-                 aeson-pretty >= 0.8 && < 0.9,-                 tagsoup >= 0.14.2 && < 0.15,+                 aeson-pretty >= 0.8.5 && < 0.9,+                 tagsoup >= 0.14.6 && < 0.15,                  base64-bytestring >= 0.1 && < 1.1,                  zlib >= 0.5 && < 0.7,                  skylighting >= 0.5.1 && < 0.7,                  data-default >= 0.4 && < 0.8,                  temporary >= 1.1 && < 1.3,-                 blaze-html >= 0.5 && < 0.10,-                 blaze-markup >= 0.5.1 && < 0.9,+                 blaze-html >= 0.9 && < 0.10,+                 blaze-markup >= 0.8 && < 0.9,                  yaml >= 0.8.8.2 && < 0.9,                  scientific >= 0.2 && < 0.4,                  vector >= 0.10 && < 0.13,-                 hslua >= 0.9.5 && < 0.10,+                 hslua >= 0.9.5 && < 0.9.6,                  hslua-module-text >= 0.1.2 && < 0.2,                  binary >= 0.5 && < 0.10,                  SHA >= 1.6 && < 1.7,@@ -408,7 +418,6 @@   if os(windows)     cpp-options:      -D_WINDOWS   ghc-options:   -Wall -fno-warn-unused-do-bind-  ghc-prof-options: -fprof-auto-exported   default-language: Haskell98   other-extensions:   PatternGuards, OverloadedStrings,                       ScopedTypeVariables, GeneralizedNewtypeDeriving,@@ -552,7 +561,6 @@ executable pandoc   build-depends: pandoc, base >= 4.7 && < 5   ghc-options:   -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind -threaded-  ghc-prof-options: -fprof-auto-exported -rtsopts -with-rtsopts=-K16m   if flag(static)     ld-options:     -static   default-language: Haskell98@@ -604,7 +612,7 @@                   time >= 1.5 && < 1.9,                   directory >= 1 && < 1.4,                   filepath >= 1.1 && < 1.5,-                  hslua >= 0.9 && < 0.10,+                  hslua >= 0.9.5 && < 0.9.6,                   process >= 1.2.3 && < 1.7,                   temporary >= 1.1 && < 1.3,                   Diff >= 0.2 && < 0.4,@@ -616,7 +624,8 @@                   containers >= 0.4.2.1 && < 0.6,                   executable-path >= 0.0 && < 0.1,                   zip-archive >= 0.2.3.4 && < 0.4,-                  xml >= 1.3.12 && < 1.4+                  xml >= 1.3.12 && < 1.4,+                  Glob >= 0.7 && < 0.10   if flag(old-locale)      build-depends: old-locale >= 1 && < 1.1,                     time >= 1.2 && < 1.5@@ -640,6 +649,7 @@                   Tests.Readers.Org.Block.Table                   Tests.Readers.Org.Directive                   Tests.Readers.Org.Inline+                  Tests.Readers.Org.Inline.Citation                   Tests.Readers.Org.Inline.Note                   Tests.Readers.Org.Inline.Smart                   Tests.Readers.Org.Meta@@ -667,6 +677,7 @@                   Tests.Writers.Muse                   Tests.Writers.FB2                   Tests.Writers.Powerpoint+                  Tests.Writers.OOXML   ghc-options:  -rtsopts -Wall -fno-warn-unused-do-bind -threaded   default-language: Haskell98 
src/Text/Pandoc/Class.hs view
@@ -142,11 +142,11 @@ import System.FilePath.Glob (match, compile) import System.Directory (createDirectoryIfMissing, getDirectoryContents,                           doesDirectoryExist)-import System.FilePath ((</>), (<.>), takeDirectory,-         takeExtension, dropExtension, isRelative, normalise)+import System.FilePath+       ((</>), (<.>), takeDirectory, takeExtension, dropExtension,+        isRelative, normalise, splitDirectories) import qualified System.FilePath.Glob as IO (glob) import qualified System.FilePath.Posix as Posix-import System.FilePath (splitDirectories) import qualified System.Directory as IO (getModificationTime) import Control.Monad as M (fail) import Control.Monad.State.Strict@@ -718,6 +718,14 @@               , "ppt/tableStyles.xml"               , "ppt/theme/theme1.xml"               , "ppt/viewProps.xml"+              -- These relate to notes slides.+              , "ppt/notesMasters/notesMaster1.xml"+              , "ppt/notesMasters/_rels/notesMaster1.xml.rels"+              , "ppt/notesSlides/notesSlide1.xml"+              , "ppt/notesSlides/_rels/notesSlide1.xml.rels"+              , "ppt/notesSlides/notesSlide2.xml"+              , "ppt/notesSlides/_rels/notesSlide2.xml.rels"+              , "ppt/theme/theme2.xml"               ]   let toLazy = BL.fromChunks . (:[])   let pathToEntry path = do
src/Text/Pandoc/Extensions.hs view
@@ -149,6 +149,7 @@     | Ext_strikeout           -- ^ Strikeout using ~~this~~ syntax     | Ext_subscript           -- ^ Subscript using ~this~ syntax     | Ext_superscript         -- ^ Superscript using ^this^ syntax+    | Ext_styles              -- ^ Read styles that pandoc doesn't know     | Ext_table_captions      -- ^ Pandoc-style table captions     | Ext_tex_math_dollars    -- ^ TeX math between $..$ or $$..$$     | Ext_tex_math_double_backslash  -- ^ TeX math btw \\(..\\) \\[..\\]@@ -316,6 +317,8 @@                                             Ext_auto_identifiers] getDefaultExtensions "plain"           = plainExtensions getDefaultExtensions "gfm"             = githubMarkdownExtensions+getDefaultExtensions "commonmark"      = extensionsFromList+                                          [Ext_raw_html] getDefaultExtensions "org"             = extensionsFromList                                           [Ext_citations,                                            Ext_auto_identifiers]
src/Text/Pandoc/Filter.hs view
@@ -51,7 +51,7 @@              -> [String]              -> Pandoc              -> PandocIO Pandoc-applyFilters ropts filters args d = do+applyFilters ropts filters args d =   foldrM ($) d $ map applyFilter filters  where   applyFilter (JSONFilter f) = JSONFilter.apply ropts args f
src/Text/Pandoc/ImageSize.hs view
@@ -71,7 +71,7 @@ -- quick and dirty functions to get image sizes -- algorithms borrowed from wwwis.pl -data ImageType = Png | Gif | Jpeg | Svg | Pdf | Eps deriving Show+data ImageType = Png | Gif | Jpeg | Svg | Pdf | Eps | Emf deriving Show data Direction = Width | Height instance Show Direction where   show Width  = "width"@@ -125,6 +125,9 @@                      "%!PS"                        |  B.take 4 (B.drop 1 $ B.dropWhile (/=' ') img) == "EPSF"                                         -> return Eps+                     "\x01\x00\x00\x00"+                       | B.take 4 (B.drop 40 img) == " EMF" +                                        -> return Emf                      _                  -> mzero  findSvgTag :: ByteString -> Bool@@ -138,7 +141,8 @@        Just Jpeg -> jpegSize img        Just Svg  -> mbToEither "could not determine SVG size" $ svgSize opts img        Just Eps  -> mbToEither "could not determine EPS size" $ epsSize img-       Just Pdf  -> Left "could not determine PDF size" -- TODO+       Just Pdf  -> mbToEither "could not determine PDF size" $ pdfSize img+       Just Emf  -> mbToEither "could not determine EMF size" $ emfSize img        Nothing   -> Left "could not determine image type"   where mbToEither msg Nothing  = Left msg         mbToEither _   (Just x) = Right x@@ -277,6 +281,29 @@                           , dpiY = 72 }                      _ -> mzero +pdfSize :: ByteString -> Maybe ImageSize+pdfSize img =+  case dropWhile (\l -> not (l == "stream" ||+                             "/MediaBox" `B.isPrefixOf` l)) (B.lines img) of+       (x:_)+         | "/MediaBox" `B.isPrefixOf` x+         -> case B.words . B.takeWhile (/=']')+                         . B.drop 1+                         . B.dropWhile (/='[')+                         $ x of+                     [x1, y1, x2, y2] -> do+                        x1' <- safeRead $ B.unpack x1+                        x2' <- safeRead $ B.unpack x2+                        y1' <- safeRead $ B.unpack y1+                        y2' <- safeRead $ B.unpack y2+                        return ImageSize{+                            pxX  = x2' - x1'+                          , pxY  = y2' - y1'+                          , dpiX = 72+                          , dpiY = 72 }+                     _ -> mzero+       _    -> mzero+ pngSize :: ByteString -> Maybe ImageSize pngSize img = do   let (h, rest) = B.splitAt 8 img@@ -334,6 +361,38 @@   , dpiX = dpi   , dpiY = dpi   }+  +emfSize :: ByteString -> Maybe ImageSize+emfSize img = +  let+    parseheader = runGetOrFail $ do+      skip 0x18             -- 0x00+      frameL <- getWord32le -- 0x18  measured in 1/100 of a millimetre+      frameT <- getWord32le -- 0x1C+      frameR <- getWord32le -- 0x20+      frameB <- getWord32le -- 0x24+      skip 0x20             -- 0x28+      deviceX <- getWord32le  -- 0x48 pixels of reference device+      deviceY <- getWord32le  -- 0x4C+      mmX <- getWord32le      -- 0x50 real mm of reference device (always 320*240?)+      mmY <- getWord32le      -- 0x58+      -- end of header+      let+        w = (deviceX * (frameR - frameL)) `quot` (mmX * 100)+        h = (deviceY * (frameB - frameT)) `quot` (mmY * 100)+        dpiW = (deviceX * 254) `quot` (mmX * 10)+        dpiH = (deviceY * 254) `quot` (mmY * 10)+      return $ ImageSize+        { pxX = fromIntegral w+        , pxY = fromIntegral h+        , dpiX = fromIntegral dpiW+        , dpiY = fromIntegral dpiH+        }+  in +    case parseheader . BL.fromStrict $ img of+      Left _ -> Nothing+      Right (_, _, size) -> Just size+    jpegSize :: ByteString -> Either String ImageSize jpegSize img =
src/Text/Pandoc/Lua.hs view
@@ -37,7 +37,7 @@ import Text.Pandoc.Class (PandocIO) import Text.Pandoc.Definition (Pandoc) import Text.Pandoc.Lua.Filter (LuaFilter, walkMWithLuaFilter)-import Text.Pandoc.Lua.Init (runPandocLua)+import Text.Pandoc.Lua.Init (runPandocLua, registerScriptPath) import Text.Pandoc.Lua.Util (popValue) import Text.Pandoc.Options (ReaderOptions) import qualified Foreign.Lua as Lua@@ -55,17 +55,18 @@ runLuaFilter' ropts filterPath format pd = do   registerFormat   registerReaderOptions+  registerScriptPath filterPath   top <- Lua.gettop   stat <- Lua.dofile filterPath   if stat /= OK     then do-      luaErrMsg <- peek (-1) <* Lua.pop 1+      luaErrMsg <- popValue       Lua.throwLuaError luaErrMsg     else do       newtop <- Lua.gettop       -- Use the returned filters, or the implicitly defined global filter if       -- nothing was returned.-      luaFilters <- if (newtop - top >= 1)+      luaFilters <- if newtop - top >= 1                     then peek (-1)                     else Lua.getglobal "_G" *> fmap (:[]) popValue       runAll luaFilters pd
src/Text/Pandoc/Lua/Init.hs view
@@ -31,9 +31,11 @@   , runPandocLua   , initLuaState   , luaPackageParams+  , registerScriptPath   ) where  import Control.Monad.Trans (MonadIO (..))+import Data.Data (Data, dataTypeConstrs, dataTypeOf, showConstr) import Data.IORef (newIORef, readIORef) import Data.Version (Version (versionBranch)) import Foreign.Lua (Lua, LuaException (..))@@ -48,6 +50,7 @@  import qualified Foreign.Lua as Lua import qualified Foreign.Lua.Module.Text as Lua+import qualified Text.Pandoc.Definition as Pandoc  -- | Run the lua interpreter, using pandoc's default way of environment -- initalization.@@ -84,3 +87,31 @@   Lua.setglobal "PANDOC_API_VERSION"   installPandocPackageSearcher luaPkgParams   loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"+  putConstructorsInRegistry++registerScriptPath :: FilePath -> Lua ()+registerScriptPath fp = do+  Lua.push fp+  Lua.setglobal "PANDOC_SCRIPT_FILE"++putConstructorsInRegistry :: Lua ()+putConstructorsInRegistry = do+  Lua.getglobal "pandoc"+  constrsToReg $ Pandoc.Pandoc mempty mempty+  constrsToReg $ Pandoc.Str mempty+  constrsToReg $ Pandoc.Para mempty+  constrsToReg $ Pandoc.Meta mempty+  constrsToReg $ Pandoc.MetaList mempty+  constrsToReg $ Pandoc.Citation mempty mempty mempty Pandoc.AuthorInText 0 0+  putInReg "Attr"  -- used for Attr type alias+  Lua.pop 1+ where+  constrsToReg :: Data a => a -> Lua ()+  constrsToReg = mapM_ (putInReg . showConstr) . dataTypeConstrs . dataTypeOf++  putInReg :: String -> Lua ()+  putInReg name = do+    Lua.push ("pandoc." ++ name) -- name in registry+    Lua.push name -- in pandoc module+    Lua.rawget (Lua.nthFromTop 3)+    Lua.rawset Lua.registryindex
src/Text/Pandoc/Lua/Module/Pandoc.hs view
@@ -82,7 +82,7 @@           res <- liftIO $ runIO $ r def{ readerExtensions = es } (pack content)           case res of             Right pd -> (1 :: NumResults) <$ Lua.push pd -- success, push Pandoc-            Left s   -> Lua.raiseError (show s)              -- error while reading+            Left s   -> Lua.raiseError (show s)          -- error while reading         _  -> Lua.raiseError "Only string formats are supported at the moment."  -- | Pipes input through a command.
src/Text/Pandoc/Lua/Packages.hs view
@@ -113,4 +113,3 @@   return $ case res of     Left _ -> Nothing     Right s -> Just (unpack s)-
src/Text/Pandoc/Lua/StackInstances.hs view
@@ -42,8 +42,7 @@                     ToLuaStack (push), Type (..), throwLuaError, tryLua) import Text.Pandoc.Definition import Text.Pandoc.Extensions (Extensions)-import Text.Pandoc.Lua.Util (adjustIndexBy, getTable, pushViaConstructor,-                             typeCheck)+import Text.Pandoc.Lua.Util (getTable, getTag, pushViaConstructor, typeCheck) import Text.Pandoc.Options (ReaderOptions (..), TrackChanges) import Text.Pandoc.Shared (Element (Blk, Sec), safeRead) @@ -300,14 +299,6 @@    elementContent :: FromLuaStack a => Lua a    elementContent = getTable idx "c" -getTag :: StackIndex -> Lua String-getTag idx = do-  top <- Lua.gettop-  hasMT <- Lua.getmetatable idx-  push "tag"-  if hasMT then Lua.rawget (-2) else Lua.rawget (idx `adjustIndexBy` 1)-  peek Lua.stackTop `finally` Lua.settop top- withAttr :: (Attr -> a -> b) -> (LuaAttr, a) -> b withAttr f (attributes, x) = f (fromLuaAttr attributes) x @@ -383,4 +374,3 @@     LuaUtil.addValue "defaultImageExtension" defaultImageExtension     LuaUtil.addValue "trackChanges" trackChanges     LuaUtil.addValue "stripComments" stripComments-
src/Text/Pandoc/Lua/Util.hs view
@@ -29,7 +29,7 @@ Lua utility functions. -} module Text.Pandoc.Lua.Util-  ( adjustIndexBy+  ( getTag   , getTable   , addValue   , addFunction@@ -47,9 +47,10 @@   ) where  import Control.Monad (when)+import Control.Monad.Catch (finally) import Data.ByteString.Char8 (unpack) import Foreign.Lua (FromLuaStack (..), NumResults, Lua, NumArgs, StackIndex,-                    ToLuaStack (..), ToHaskellFunction, getglobal')+                    ToLuaStack (..), ToHaskellFunction) import Foreign.Lua.Api (Status, call, pop, rawget, rawgeti, rawset, rawseti) import Text.Pandoc.Class (readDataFile, runIOorExplode, setUserDataDir) @@ -130,7 +131,8 @@  instance PushViaCall (Lua ()) where   pushViaCall' fn pushArgs num = do-    getglobal' fn+    Lua.push fn+    Lua.rawget (Lua.registryindex)     pushArgs     call num 1 @@ -163,11 +165,23 @@ -- to @require@, the a new loader function was created which then become -- garbage. If that function is collected at an inopportune times, i.e. when the -- Lua API is called via a function that doesn't allow calling back into Haskell--- (getraw, setraw, …). The function's finalizer, and the full program, hangs--- when that happens.+-- (getraw, setraw, …), then the function's finalizer, and the full program,+-- will hang. dostring' :: String -> Lua Status dostring' script = do   loadRes <- Lua.loadstring script   if loadRes == Lua.OK     then Lua.pcall 0 1 Nothing <* Lua.gc Lua.GCCOLLECT 0     else return loadRes++-- | Get the tag of a value. This is an optimized and specialized version of+-- @Lua.getfield idx "tag"@. It only checks for the field on the table at index+-- @idx@ and on its metatable, also ignoring any @__index@ value on the+-- metatable.+getTag :: StackIndex -> Lua String+getTag idx = do+  top <- Lua.gettop+  hasMT <- Lua.getmetatable idx+  push "tag"+  if hasMT then Lua.rawget (-2) else Lua.rawget (idx `adjustIndexBy` 1)+  peek Lua.stackTop `finally` Lua.settop top
src/Text/Pandoc/PDF.hs view
@@ -104,6 +104,10 @@                             (getField "margin-right" meta'))                  ,("margin-left", fromMaybe (Just "1.25in")                             (getField "margin-left" meta'))+                 ,("footer-html", fromMaybe Nothing+                            (getField "footer-html" meta'))+                 ,("header-html", fromMaybe Nothing+                            (getField "header-html" meta'))                  ]   source <- writer opts doc   verbosity <- getVerbosity
src/Text/Pandoc/Parsing.hs view
@@ -40,6 +40,8 @@                              anyLineNewline,                              indentWith,                              many1Till,+                             manyUntil,+                             sepBy1',                              notFollowedBy',                              oneOfStrings,                              oneOfStringsCI,@@ -65,6 +67,11 @@                              withRaw,                              escaped,                              characterReference,+                             upperRoman,+                             lowerRoman,+                             decimal,+                             lowerAlpha,+                             upperAlpha,                              anyOrderedListMarker,                              orderedListMarker,                              charRef,@@ -189,12 +196,12 @@  import Control.Monad.Identity import Control.Monad.Reader-import Data.Char (chr, isAlphaNum, isAscii, isAsciiUpper, isHexDigit, isPunctuation, isSpace,-                  ord, toLower, toUpper)+import Data.Char (chr, isAlphaNum, isAscii, isAsciiUpper, isHexDigit,+                  isPunctuation, isSpace, ord, toLower, toUpper) import Data.Default import Data.List (intercalate, isSuffixOf, transpose) import qualified Data.Map as M-import Data.Maybe (mapMaybe)+import Data.Maybe (mapMaybe, fromMaybe) import Data.Monoid ((<>)) import qualified Data.Set as Set import Data.Text (Text)@@ -304,7 +311,7 @@            => Int -> ParserT s st m [Char] indentWith num = do   tabStop <- getOption readerTabStop-  if (num < tabStop)+  if num < tabStop      then count num (char ' ')      else choice [ try (count num (char ' '))                  , try (char '\t' >> indentWith (num - tabStop)) ]@@ -320,6 +327,28 @@          rest <- manyTill p end          return (first:rest) +-- | Like @manyTill@, but also returns the result of end parser.+manyUntil :: (Stream s m t)+          => ParserT s u m a+          -> ParserT s u m b+          -> ParserT s u m ([a], b)+manyUntil p end = scan+  where scan =+          (do e <- end+              return ([], e)+          ) <|>+          (do x <- p+              (xs, e) <- scan+              return (x:xs, e))++-- | Like @sepBy1@ from Parsec,+-- but does not fail if it @sep@ succeeds and @p@ fails.+sepBy1' :: (Stream s m t)+        => ParsecT s u m a+        -> ParsecT s u m sep+        -> ParsecT s u m [a]+sepBy1' p sep = (:) <$> p <*> many (try $ sep >> p)+ -- | A more general form of @notFollowedBy@.  This one allows any -- type of parser to be specified, and succeeds only if that parser fails. -- It does not consume any input.@@ -526,8 +555,8 @@ emailAddress = try $ toResult <$> mailbox <*> (char '@' *> domain)  where toResult mbox dom = let full = fromEntities $ mbox ++ '@':dom                            in  (full, escapeURI $ "mailto:" ++ full)-       mailbox           = intercalate "." <$> (emailWord `sepby1` dot)-       domain            = intercalate "." <$> (subdomain `sepby1` dot)+       mailbox           = intercalate "." <$> (emailWord `sepBy1'` dot)+       domain            = intercalate "." <$> (subdomain `sepBy1'` dot)        dot               = char '.'        subdomain         = many1 $ alphaNum <|> innerPunct        -- this excludes some valid email addresses, since an@@ -544,9 +573,6 @@                               return (x:xs)        isEmailChar c     = isAlphaNum c || isEmailPunct c        isEmailPunct c    = c `elem` "!\"#$%&'*+-/=?^_{|}~;"-       -- note: sepBy1 from parsec consumes input when sep-       -- succeeds and p fails, so we use this variant here.-       sepby1 p sep      = (:) <$> p <*> many (try $ sep >> p)   uriScheme :: Stream s m Char => ParserT s st m String@@ -573,7 +599,7 @@   let uriChunk =  skipMany1 wordChar               <|> percentEscaped               <|> entity-              <|> (try $ punct >>+              <|> try (punct >>                     lookAhead (void (satisfy isWordChar) <|> percentEscaped))   str <- snd <$> withRaw (skipMany1 ( () <$                                          (enclosed (char '(') (char ')') uriChunk@@ -755,7 +781,7 @@  -- | Parses an ordered list marker and returns list attributes. anyOrderedListMarker :: Stream s m Char => ParserT s ParserState m ListAttributes-anyOrderedListMarker = choice $+anyOrderedListMarker = choice   [delimParser numParser | delimParser <- [inPeriod, inOneParen, inTwoParens],                            numParser <- [decimal, exampleNum, defaultNum, romanOne,                            lowerAlpha, lowerRoman, upperAlpha, upperRoman]]@@ -896,7 +922,7 @@       quotient = if totLength > numColumns                    then fromIntegral totLength                    else fromIntegral numColumns-      fracs = map (\l -> (fromIntegral l) / quotient) lengths in+      fracs = map (\l -> fromIntegral l / quotient) lengths in   tail fracs  ---@@ -977,7 +1003,7 @@                     then replicate (length underDashes) ""                     else map (unlines . map trim) $ transpose                        $ map (gridTableSplitLine indices) rawContent-  heads <- fmap sequence $ mapM (parseFromString blocks . trim) rawHeads+  heads <- sequence <$> mapM (parseFromString blocks . trim) rawHeads   return (heads, aligns, indices)  gridTableRawLine :: Stream s m Char => [Int] -> ParserT s st m [String]@@ -1323,9 +1349,7 @@                      -> ParserT s st m () failIfInQuoteContext context = do   context' <- getQuoteContext-  if context' == context-     then fail "already inside quotes"-     else return ()+  when (context' == context) $ fail "already inside quotes"  charOrRef :: Stream s m Char => String -> ParserT s st m Char charOrRef cs =@@ -1418,9 +1442,7 @@ extractIdClass :: Attr -> Attr extractIdClass (ident, cls, kvs) = (ident', cls', kvs')   where-    ident' = case lookup "id" kvs of-               Just v  -> v-               Nothing -> ident+    ident' = fromMaybe ident (lookup "id" kvs)     cls'   = case lookup "class" kvs of                Just cl -> words cl                Nothing -> cls
src/Text/Pandoc/Readers/Docx.hs view
@@ -81,7 +81,7 @@ import Data.Default (Default) import Data.List (delete, intersect) import qualified Data.Map as M-import Data.Maybe (isJust)+import Data.Maybe (isJust, fromMaybe) import Data.Sequence (ViewL (..), viewl) import qualified Data.Sequence as Seq import qualified Data.Set as Set@@ -141,7 +141,8 @@                }  data DEnv = DEnv { docxOptions       :: ReaderOptions-                 , docxInHeaderBlock :: Bool }+                 , docxInHeaderBlock :: Bool+                 }  instance Default DEnv where   def = DEnv def False@@ -187,7 +188,7 @@ bodyPartsToMeta' [] = return M.empty bodyPartsToMeta' (bp : bps)   | (Paragraph pPr parParts) <- bp-  , (c : _)<- intersect (pStyle pPr) (M.keys metaStyles)+  , (c : _)<- (pStyle pPr) `intersect` (M.keys metaStyles)   , (Just metaField) <- M.lookup c metaStyles = do     inlines <- smushInlines <$> mapM parPartToInlines parParts     remaining <- bodyPartsToMeta' bps@@ -250,71 +251,88 @@ blacklistedCharStyles :: [String] blacklistedCharStyles = ["Hyperlink"] -resolveDependentRunStyle :: RunStyle -> RunStyle+resolveDependentRunStyle :: PandocMonad m => RunStyle -> DocxContext m RunStyle resolveDependentRunStyle rPr   | Just (s, _)  <- rStyle rPr, s `elem` blacklistedCharStyles =-    rPr-  | Just (_, cs) <- rStyle rPr =-      let rPr' = resolveDependentRunStyle cs-      in-       RunStyle { isBold = case isBold rPr of-                     Just bool -> Just bool-                     Nothing   -> isBold rPr'-                , isItalic = case isItalic rPr of-                     Just bool -> Just bool-                     Nothing   -> isItalic rPr'-                , isSmallCaps = case isSmallCaps rPr of-                     Just bool -> Just bool-                     Nothing   -> isSmallCaps rPr'-                , isStrike = case isStrike rPr of-                     Just bool -> Just bool-                     Nothing   -> isStrike rPr'-                , rVertAlign = case rVertAlign rPr of-                     Just valign -> Just valign-                     Nothing     -> rVertAlign rPr'-                , rUnderline = case rUnderline rPr of-                     Just ulstyle -> Just ulstyle-                     Nothing      -> rUnderline rPr'-                , rStyle = rStyle rPr }-  | otherwise = rPr+    return rPr+  | Just (_, cs) <- rStyle rPr = do+      opts <- asks docxOptions+      if isEnabled Ext_styles opts+        then return rPr+        else do rPr' <- resolveDependentRunStyle cs+                return $+                  RunStyle { isBold = case isBold rPr of+                               Just bool -> Just bool+                               Nothing   -> isBold rPr'+                           , isItalic = case isItalic rPr of+                               Just bool -> Just bool+                               Nothing   -> isItalic rPr'+                           , isSmallCaps = case isSmallCaps rPr of+                               Just bool -> Just bool+                               Nothing   -> isSmallCaps rPr'+                           , isStrike = case isStrike rPr of+                               Just bool -> Just bool+                               Nothing   -> isStrike rPr'+                           , rVertAlign = case rVertAlign rPr of+                               Just valign -> Just valign+                               Nothing     -> rVertAlign rPr'+                           , rUnderline = case rUnderline rPr of+                               Just ulstyle -> Just ulstyle+                               Nothing      -> rUnderline rPr'+                           , rStyle = rStyle rPr }+  | otherwise = return rPr -runStyleToTransform :: RunStyle -> (Inlines -> Inlines)+runStyleToTransform :: PandocMonad m => RunStyle -> DocxContext m (Inlines -> Inlines) runStyleToTransform rPr   | Just (s, _) <- rStyle rPr-  , s `elem` spansToKeep =-    let rPr' = rPr{rStyle = Nothing}-    in-     spanWith ("", [s], []) . runStyleToTransform rPr'-  | Just True <- isItalic rPr =-      emph . runStyleToTransform rPr {isItalic = Nothing}-  | Just True <- isBold rPr =-      strong . runStyleToTransform rPr {isBold = Nothing}-  | Just True <- isSmallCaps rPr =-      smallcaps . runStyleToTransform rPr {isSmallCaps = Nothing}-  | Just True <- isStrike rPr =-      strikeout . runStyleToTransform rPr {isStrike = Nothing}-  | Just SupScrpt <- rVertAlign rPr =-      superscript . runStyleToTransform rPr {rVertAlign = Nothing}-  | Just SubScrpt <- rVertAlign rPr =-      subscript . runStyleToTransform rPr {rVertAlign = Nothing}-  | Just "single" <- rUnderline rPr =-      underlineSpan . runStyleToTransform rPr {rUnderline = Nothing}-  | otherwise = id+  , s `elem` spansToKeep = do+      transform <- runStyleToTransform rPr{rStyle = Nothing}+      return $ spanWith ("", [s], []) . transform+  | Just (s, _) <- rStyle rPr = do+      opts <- asks docxOptions+      let extraInfo = if isEnabled Ext_styles opts+                      then spanWith ("", [], [("custom-style", s)])+                      else id+      transform <- runStyleToTransform rPr{rStyle = Nothing}+      return $ extraInfo . transform+  | Just True <- isItalic rPr = do+      transform <- runStyleToTransform rPr{isItalic = Nothing}+      return $ emph  . transform+  | Just True <- isBold rPr = do+      transform <- runStyleToTransform rPr{isBold = Nothing}+      return $ strong . transform+  | Just True <- isSmallCaps rPr = do+      transform <- runStyleToTransform rPr{isSmallCaps = Nothing}+      return $ smallcaps . transform+  | Just True <- isStrike rPr = do+      transform <- runStyleToTransform rPr{isStrike = Nothing}+      return $ strikeout . transform+  | Just SupScrpt <- rVertAlign rPr = do+      transform <- runStyleToTransform rPr{rVertAlign = Nothing}+      return $ superscript . transform+  | Just SubScrpt <- rVertAlign rPr = do+      transform <- runStyleToTransform rPr{rVertAlign = Nothing}+      return $ subscript . transform+  | Just "single" <- rUnderline rPr = do+      transform <- runStyleToTransform rPr{rUnderline = Nothing}+      return $ underlineSpan . transform+  | otherwise = return id  runToInlines :: PandocMonad m => Run -> DocxContext m Inlines runToInlines (Run rs runElems)   | Just (s, _) <- rStyle rs-  , s `elem` codeStyles =-    let rPr = resolveDependentRunStyle rs-        codeString = code $ concatMap runElemToString runElems-    in-     return $ case rVertAlign rPr of-     Just SupScrpt -> superscript codeString-     Just SubScrpt -> subscript codeString-     _             -> codeString+  , s `elem` codeStyles = do+      rPr <- resolveDependentRunStyle rs+      let codeString = code $ concatMap runElemToString runElems+      return $ case rVertAlign rPr of+        Just SupScrpt -> superscript codeString+        Just SubScrpt -> subscript codeString+        _             -> codeString   | otherwise = do-    let ils = smushInlines (map runElemToInlines runElems)-    return $ (runStyleToTransform $ resolveDependentRunStyle rs) ils+      rPr <- resolveDependentRunStyle rs+      let ils = smushInlines (map runElemToInlines runElems)+      transform <- runStyleToTransform rPr+      return $ transform ils runToInlines (Footnote bps) = do   blksList <- smushBlocks <$> mapM bodyPartToBlocks bps   return $ note blksList@@ -340,7 +358,7 @@       notParaOrPlain (Para _)  = False       notParaOrPlain (Plain _) = False       notParaOrPlain _         = True-  unless (null $ filter notParaOrPlain blkList) $+  unless ( not (any notParaOrPlain blkList)) $     lift $ P.report $ DocxParserWarning $       "Docx comment " ++ cmtId ++ " will not retain formatting"   return $ blocksToInlines' blkList@@ -351,7 +369,7 @@ parPartToInlines :: PandocMonad m => ParPart -> DocxContext m Inlines parPartToInlines parPart =   case parPart of-    (BookMark _ anchor) | not $ anchor `elem` dummyAnchors -> do+    (BookMark _ anchor) | notElem anchor dummyAnchors -> do       inHdrBool <- asks docxInHeaderBlock       ils <- parPartToInlines' parPart       immedPrevAnchor <- gets docxImmedPrevAnchor@@ -444,9 +462,9 @@   return $ link target "" ils parPartToInlines' (PlainOMath exps) =   return $ math $ writeTeX exps-parPartToInlines' (SmartTag runs) = do+parPartToInlines' (SmartTag runs) =   smushInlines <$> mapM runToInlines runs-parPartToInlines' (Field info runs) = do+parPartToInlines' (Field info runs) =   case info of     HyperlinkField url -> parPartToInlines' $ ExternalHyperLink url runs     UnknownField -> smushInlines <$> mapM runToInlines runs@@ -516,51 +534,60 @@         isSp LineBreak = True         isSp _         = False -parStyleToTransform :: ParagraphStyle -> (Blocks -> Blocks)+parStyleToTransform :: PandocMonad m => ParagraphStyle -> DocxContext m (Blocks -> Blocks) parStyleToTransform pPr   | (c:cs) <- pStyle pPr-  , c `elem` divsToKeep =-    let pPr' = pPr { pStyle = cs }-    in-     divWith ("", [c], []) . parStyleToTransform pPr'+  , c `elem` divsToKeep = do+      let pPr' = pPr { pStyle = cs }+      transform <- parStyleToTransform pPr'+      return $ divWith ("", [c], []) . transform   | (c:cs) <- pStyle pPr,-    c `elem` listParagraphDivs =+    c `elem` listParagraphDivs = do       let pPr' = pPr { pStyle = cs, indentation = Nothing}-      in-       divWith ("", [c], []) . parStyleToTransform pPr'-  | (_:cs) <- pStyle pPr-  , Just True <- pBlockQuote pPr =-    let pPr' = pPr { pStyle = cs }-    in-     blockQuote . parStyleToTransform pPr'-  | (_:cs) <- pStyle pPr =+      transform <- parStyleToTransform pPr'+      return $ divWith ("", [c], []) . transform+  | (c:cs) <- pStyle pPr+  , Just True <- pBlockQuote pPr = do+      opts <- asks docxOptions+      let pPr' = pPr { pStyle = cs }+      transform <- parStyleToTransform pPr'+      let extraInfo = if isEnabled Ext_styles opts+                      then divWith ("", [], [("custom-style", c)])+                      else id+      return $ extraInfo . blockQuote . transform+  | (c:cs) <- pStyle pPr = do+      opts <- asks docxOptions       let pPr' = pPr { pStyle = cs}-      in-       parStyleToTransform pPr'+      transform <- parStyleToTransform pPr'+      let extraInfo = if isEnabled Ext_styles opts+                      then divWith ("", [], [("custom-style", c)])+                      else id+      return $ extraInfo . transform   | null (pStyle pPr)   , Just left <- indentation pPr >>= leftParIndent-  , Just hang <- indentation pPr >>= hangingParIndent =+  , Just hang <- indentation pPr >>= hangingParIndent = do     let pPr' = pPr { indentation = Nothing }-    in-     case (left - hang) > 0 of-       True  -> blockQuote . (parStyleToTransform pPr')-       False -> parStyleToTransform pPr'+    transform <- parStyleToTransform pPr'+    return $ case (left - hang) > 0 of+               True  -> blockQuote . transform+               False -> transform   | null (pStyle pPr),-    Just left <- indentation pPr >>= leftParIndent =+    Just left <- indentation pPr >>= leftParIndent = do       let pPr' = pPr { indentation = Nothing }-      in-       case left > 0 of-         True  -> blockQuote . (parStyleToTransform pPr')-         False -> parStyleToTransform pPr'-parStyleToTransform _ = id+      transform <- parStyleToTransform pPr'+      return $ case left > 0 of+         True  -> blockQuote . transform+         False -> transform+parStyleToTransform _ = return id  bodyPartToBlocks :: PandocMonad m => BodyPart -> DocxContext m Blocks bodyPartToBlocks (Paragraph pPr parparts)-  | not $ null $ codeDivs `intersect` (pStyle pPr) =-    return-    $ parStyleToTransform pPr-    $ codeBlock-    $ concatMap parPartToString parparts+  | not $ null $ codeDivs `intersect` (pStyle pPr) = do+      transform <- parStyleToTransform pPr+      return $+        transform $+        codeBlock $+        concatMap parPartToString parparts   | Just (style, n) <- pHeading pPr = do     ils <-local (\s-> s{docxInHeaderBlock=True})            (smushInlines <$> mapM parPartToInlines parparts)@@ -586,7 +613,8 @@                 _ | Just (TrackedChange Insertion _) <- pChange pPr                   , AcceptChanges <- readerTrackChanges opts -> do                       modify $ \s -> s {docxPrevPara = mempty}-                      return $ parStyleToTransform pPr $ para ils''+                      transform <- parStyleToTransform pPr+                      return $ transform $ para ils''                 _ | Just (TrackedChange Insertion _) <- pChange pPr                   , RejectChanges <- readerTrackChanges opts -> do                       modify $ \s -> s {docxPrevPara = ils''}@@ -596,8 +624,8 @@                   , ChangeInfo _ cAuthor cDate <- cInfo -> do                       let attr = ("", ["paragraph-insertion"], [("author", cAuthor), ("date", cDate)])                           insertMark = spanWith attr mempty-                      return $-                        parStyleToTransform pPr $+                      transform <- parStyleToTransform pPr+                      return $ transform $                         para $ ils'' <> insertMark                 _ | Just (TrackedChange Deletion _) <- pChange pPr                   , AcceptChanges <- readerTrackChanges opts -> do@@ -606,18 +634,20 @@                 _ | Just (TrackedChange Deletion _) <- pChange pPr                   , RejectChanges <- readerTrackChanges opts -> do                       modify $ \s -> s {docxPrevPara = mempty}-                      return $ parStyleToTransform pPr $ para ils''+                      transform <- parStyleToTransform pPr+                      return $ transform $ para ils''                 _ | Just (TrackedChange Deletion cInfo) <- pChange pPr                   , AllChanges <- readerTrackChanges opts                   , ChangeInfo _ cAuthor cDate <- cInfo -> do                       let attr = ("", ["paragraph-deletion"], [("author", cAuthor), ("date", cDate)])                           insertMark = spanWith attr mempty-                      return $-                        parStyleToTransform pPr $+                      transform <- parStyleToTransform pPr+                      return $ transform $                         para $ ils'' <> insertMark                 _ | otherwise -> do                       modify $ \s -> s {docxPrevPara = mempty}-                      return $ parStyleToTransform pPr $ para ils''+                      transform <- parStyleToTransform pPr+                      return $ transform $ para ils'' bodyPartToBlocks (ListItem pPr numId lvl (Just levelInfo) parparts) = do   -- We check whether this current numId has previously been used,   -- since Docx expects us to pick up where we left off.@@ -626,9 +656,7 @@       (_, fmt,txt, startFromLevelInfo) = levelInfo       start = case startFromState of         Just n -> n + 1-        Nothing -> case startFromLevelInfo of-          Just n' -> n'-          Nothing -> 1+        Nothing -> fromMaybe 1 startFromLevelInfo       kvs = [ ("level", lvl)             , ("num-id", numId)             , ("format", fmt)@@ -644,7 +672,7 @@     bodyPartToBlocks $ Paragraph pPr' parparts bodyPartToBlocks (Tbl _ _ _ []) =   return $ para mempty-bodyPartToBlocks (Tbl cap _ look (r:rs)) = do+bodyPartToBlocks (Tbl cap _ look parts@(r:rs)) = do   let caption = text cap       (hdr, rows) = case firstRowFormatting look of         True | null rs -> (Nothing, [r])@@ -653,10 +681,14 @@    cells <- mapM rowToBlocksList rows -  let width = case cells of-        r':_ -> length r'-        -- shouldn't happen-        []   -> 0+  let width = maybe 0 maximum $ nonEmpty $ map rowLength parts+      -- Data.List.NonEmpty is not available with ghc 7.10 so we roll out+      -- our own, see+      -- https://github.com/jgm/pandoc/pull/4361#issuecomment-365416155+      nonEmpty [] = Nothing+      nonEmpty l  = Just l+      rowLength :: Row -> Int+      rowLength (Row c) = length c    hdrCells <- case hdr of     Just r' -> rowToBlocksList r'
src/Text/Pandoc/Readers/Docx/Fields.hs view
@@ -46,7 +46,7 @@  fieldInfo :: Parser FieldInfo fieldInfo =-  (try $ HyperlinkField <$> hyperlink)+  try (HyperlinkField <$> hyperlink)   <|>   return UnknownField @@ -54,7 +54,7 @@ escapedQuote = string "\\\""  inQuotes :: Parser String-inQuotes = do+inQuotes =   (try escapedQuote) <|> (anyChar >>= (\c -> return [c]))  quotedString :: Parser String@@ -63,7 +63,7 @@   concat <$> manyTill inQuotes (try (char '"'))  unquotedString :: Parser String-unquotedString = manyTill anyChar (try (space))+unquotedString = manyTill anyChar (try $ lookAhead space *> return () <|> eof)  fieldArgument :: Parser String fieldArgument = quotedString <|> unquotedString@@ -82,7 +82,7 @@   string "HYPERLINK"   spaces   farg <- fieldArgument-  switches <- (spaces *> many hyperlinkSwitch)+  switches <- spaces *> many hyperlinkSwitch   let url = case switches of               ("\\l", s) : _ -> farg ++ ('#': s)               _              -> farg
src/Text/Pandoc/Readers/Docx/Lists.hs view
@@ -44,14 +44,14 @@ isListItem _                       = False  getLevel :: Block -> Maybe Integer-getLevel (Div (_, _, kvs) _) =  fmap read $ lookup "level" kvs+getLevel (Div (_, _, kvs) _) =  read <$> lookup "level" kvs getLevel _                   = Nothing  getLevelN :: Block -> Integer getLevelN b = fromMaybe (-1) (getLevel b)  getNumId :: Block -> Maybe Integer-getNumId (Div (_, _, kvs) _) =  fmap read $ lookup "num-id" kvs+getNumId (Div (_, _, kvs) _) =  read <$> lookup "num-id" kvs getNumId _                   = Nothing  getNumIdN :: Block -> Integer@@ -140,8 +140,8 @@         (children, remaining) =           span           (\b' ->-            (getLevelN b') > bLevel ||-             ((getLevelN b') == bLevel && (getNumIdN b') == bNumId))+            getLevelN b' > bLevel ||+             (getLevelN b' == bLevel && getNumIdN b' == bNumId))           xs     in      case getListType b of
src/Text/Pandoc/Readers/Docx/Parse.hs view
@@ -136,7 +136,7 @@ unwrapSDT ns (Elem element)   | isElem ns "w" "sdt" element   , Just sdtContent <- findChildByName ns "w" "sdtContent" element-  = map Elem $ elChildren sdtContent+  = concatMap (unwrapSDT ns) $ map Elem $ elChildren sdtContent unwrapSDT _ content = [content]  unwrapSDTchild :: NameSpaces -> Content -> Content@@ -358,9 +358,7 @@   docElem <- maybeToD $ (parseXMLDoc . UTF8.toStringLazy . fromEntry) entry   let namespaces = elemToNameSpaces docElem   bodyElem <- maybeToD $ findChildByName namespaces "w" "body" docElem-  let bodyElem' = case walkDocument namespaces bodyElem of-        Just e -> e-        Nothing -> bodyElem+  let bodyElem' = fromMaybe bodyElem (walkDocument namespaces bodyElem)   body <- elemToBody namespaces bodyElem'   return $ Document namespaces body @@ -603,7 +601,7 @@             Just bitMask -> testBitMask bitMask 0x020             Nothing      -> False   in-   return $ TblLook{firstRowFormatting = firstRowFmt}+   return TblLook{firstRowFormatting = firstRowFmt} elemToTblLook _ _ = throwError WrongElem  elemToRow :: NameSpaces -> Element -> D Row@@ -623,7 +621,7 @@  elemToParIndentation :: NameSpaces -> Element -> Maybe ParIndentation elemToParIndentation ns element | isElem ns "w" "ind" element =-  Just $ ParIndentation {+ Just ParIndentation {     leftParIndent =        findAttrByName ns "w" "left" element >>=        stringToInteger@@ -1173,8 +1171,7 @@        let font = do                     fontElem <- findElement (qualName "rFonts") element                     stringToFont =<<-                      foldr (<|>) Nothing (-                        map (flip findAttr fontElem . qualName) ["ascii", "hAnsi"])+                       foldr ((<|>) . (flip findAttr fontElem . qualName)) Nothing ["ascii", "hAnsi"]        local (setFont font) (mapD (elemToRunElem ns) (elChildren element)) elemToRunElems _ _ = throwError WrongElem 
src/Text/Pandoc/Readers/HTML.hs view
@@ -43,14 +43,14 @@                                 ) where  import Control.Applicative ((<|>))-import Control.Arrow ((***))+import Control.Arrow (first) import Control.Monad (guard, mplus, msum, mzero, unless, void) import Control.Monad.Except (throwError) import Control.Monad.Reader (ReaderT, ask, asks, lift, local, runReaderT) import Data.Char (isAlphaNum, isDigit, isLetter) import Data.Default (Default (..), def) import Data.Foldable (for_)-import Data.List (intercalate, isPrefixOf)+import Data.List (isPrefixOf) import Data.List.Split (wordsBy, splitWhen) import qualified Data.Map as M import Data.Maybe (fromMaybe, isJust, isNothing)@@ -777,7 +777,7 @@   (TagOpen open attr') <- pSatisfy $ tagOpen (`elem` ["code","tt"]) (const True)   let attr = toStringAttr attr'   result <- manyTill pAnyTag (pCloses open)-  return $ B.codeWith (mkAttr attr) $ intercalate " " $ lines $ T.unpack $+  return $ B.codeWith (mkAttr attr) $ unwords $ lines $ T.unpack $            innerText result  pSpan :: PandocMonad m => TagParser m Inlines@@ -1227,7 +1227,7 @@  stripPrefix :: Tag Text -> Tag Text stripPrefix (TagOpen s as) =-    TagOpen (stripPrefix' s) (map (stripPrefix' *** id) as)+    TagOpen (stripPrefix' s) (map (first stripPrefix') as) stripPrefix (TagClose s) = TagClose (stripPrefix' s) stripPrefix x = x 
src/Text/Pandoc/Readers/JATS.hs view
@@ -494,4 +494,3 @@                                "" -> []                                l  -> [l]            return $ codeWith (attrValue "id" e,classes',[]) $ strContentRecursive e-
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -60,7 +60,7 @@ import Text.Pandoc.Builder import Text.Pandoc.Class (PandocMonad, PandocPure, getResourcePath, lookupEnv,                           readFileFromDirs, report, setResourcePath,-                          setTranslations, translateTerm)+                          setTranslations, translateTerm, trace) import Text.Pandoc.Error (PandocError (PandocMacroLoop, PandocParseError, PandocParsecError)) import Text.Pandoc.Highlighting (fromListingsLanguage, languagesByExtension) import Text.Pandoc.ImageSize (numUnit, showFl)@@ -74,6 +74,7 @@ import qualified Text.Pandoc.Translations as Translations import Text.Pandoc.Walk import Text.Parsec.Pos+import qualified Text.Pandoc.Builder as B  -- for debugging: -- import Text.Pandoc.Extensions (getDefaultExtensions)@@ -272,7 +273,7 @@   lookAhead (try (char '\\' >> letter))   -- we don't want to apply newly defined latex macros to their own   -- definitions:-  (snd <$> rawLaTeXParser macroDef)+  snd <$> rawLaTeXParser macroDef   <|> ((snd <$> rawLaTeXParser (environment <|> blockCommand)) >>= applyMacros)  rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)@@ -351,7 +352,7 @@                        Tok pos (Arg i) ("#" <> t1)                        : totoks (incSourceColumn pos (1 + T.length t1)) t2                     Nothing ->-                       Tok pos Symbol ("#")+                       Tok pos Symbol "#"                        : totoks (incSourceColumn pos 1) t2          | c == '^' ->            case T.uncons rest of@@ -369,10 +370,10 @@                          | d < '\128' ->                                   Tok pos Esc1 (T.pack ['^','^',d])                                   : totoks (incSourceColumn pos 3) rest''-                       _ -> Tok pos Symbol ("^") :-                            Tok (incSourceColumn pos 1) Symbol ("^") :+                       _ -> Tok pos Symbol "^" :+                            Tok (incSourceColumn pos 1) Symbol "^" :                             totoks (incSourceColumn pos 2) rest'-                _ -> Tok pos Symbol ("^")+                _ -> Tok pos Symbol "^"                      : totoks (incSourceColumn pos 1) rest          | otherwise ->            Tok pos Symbol (T.singleton c) : totoks (incSourceColumn pos 1) rest@@ -454,7 +455,7 @@                            addTok _ (Tok _ (CtrlSeq x) txt)                                   acc@(Tok _ Word _ : _)                              | not (T.null txt) &&-                               (isLetter (T.last txt)) =+                               isLetter (T.last txt) =                                Tok spos (CtrlSeq x) (txt <> " ") : acc                            addTok _ t acc = setpos spos t : acc                        ts' <- getInput@@ -1074,12 +1075,12 @@  citationLabel :: PandocMonad m => LP m String citationLabel  = do-  optional sp+  optional spaces   toksToString <$>     (many1 (satisfyTok isWordTok <|> symbolIn bibtexKeyChar)-          <* optional sp+          <* optional spaces           <* optional (symbol ',')-          <* optional sp)+          <* optional spaces)   where bibtexKeyChar = ".:;?!`'()/*@_+=-[]" :: [Char]  cites :: PandocMonad m => CitationMode -> Bool -> LP m [Citation]@@ -1161,7 +1162,7 @@      else return $ Tok pos toktype t  opt :: PandocMonad m => LP m Inlines-opt = bracketed inline+opt = bracketed inline <|> (str . T.unpack <$> rawopt)  rawopt :: PandocMonad m => LP m Text rawopt = do@@ -1244,7 +1245,7 @@   ]  inlineCommands :: PandocMonad m => M.Map Text (LP m Inlines)-inlineCommands = M.union inlineLanguageCommands $ M.fromList $+inlineCommands = M.union inlineLanguageCommands $ M.fromList   [ ("emph", extractSpaces emph <$> tok)   , ("textit", extractSpaces emph <$> tok)   , ("textsl", extractSpaces emph <$> tok)@@ -1501,7 +1502,7 @@ foreignlanguage = do   babelLang <- T.unpack . untokenize <$> braced   case babelLangToBCP47 babelLang of-       Just lang -> spanWith ("", [], [("lang", renderLang $ lang)]) <$> tok+       Just lang -> spanWith ("", [], [("lang",  renderLang lang)]) <$> tok        _ -> tok  inlineLanguageCommands :: PandocMonad m => M.Map Text (LP m Inlines)@@ -2021,7 +2022,7 @@   return $ para (trimInlines contents) <> sigs  blockCommands :: PandocMonad m => M.Map Text (LP m Blocks)-blockCommands = M.fromList $+blockCommands = M.fromList    [ ("par", mempty <$ skipopts)    , ("parbox",  skipopts >> braced >> grouped blocks)    , ("title", mempty <$ (skipopts *>@@ -2105,7 +2106,7 @@           resetCaption *> simpTable "longtable" False >>= addTableCaption)    , ("table",  env "table" $           resetCaption *> skipopts *> blocks >>= addTableCaption)-   , ("tabular*", env "tabular" $ simpTable "tabular*" True)+   , ("tabular*", env "tabular*" $ simpTable "tabular*" True)    , ("tabularx", env "tabularx" $ simpTable "tabularx" True)    , ("tabular", env "tabular"  $ simpTable "tabular" False)    , ("quote", blockQuote <$> env "quote" blocks)@@ -2444,7 +2445,7 @@         spaces         spec <- braced         case safeRead ds of-             Just n  -> do+             Just n  ->                getInput >>= setInput . (mconcat (replicate n spec) ++)              Nothing -> fail $ "Could not parse " ++ ds ++ " as number"   bgroup@@ -2532,13 +2533,16 @@   block :: PandocMonad m => LP m Blocks-block = (mempty <$ spaces1)+block = do+  res <- (mempty <$ spaces1)     <|> environment     <|> include     <|> macroDef     <|> blockCommand     <|> paragraph     <|> grouped block+  trace (take 60 $ show $ B.toList res)+  return res  blocks :: PandocMonad m => LP m Blocks blocks = mconcat <$> many block
src/Text/Pandoc/Readers/Markdown.hs view
@@ -36,7 +36,7 @@ import Control.Monad.Except (throwError) import Data.Char (isAlphaNum, isPunctuation, isSpace, toLower) import qualified Data.HashMap.Strict as H-import Data.List (findIndex, intercalate, sortBy, transpose)+import Data.List (intercalate, sortBy, transpose, elemIndex) import qualified Data.Map as M import Data.Maybe import Data.Monoid ((<>))@@ -162,16 +162,14 @@         stripBracket xs = if last xs == ']' then init xs else xs         go :: PandocMonad m => Int -> MarkdownParser m ()         go 0 = return ()-        go openBrackets = do+        go openBrackets =            (() <$ (escapedChar <|>-                  code <|>-                  rawHtmlInline <|>-                  rawLaTeXInline') >> go openBrackets)+                code <|>+                rawHtmlInline <|>+                rawLaTeXInline') >> go openBrackets)           <|>           (do char ']'-              if openBrackets > 1-                 then go (openBrackets - 1)-                 else return ())+              Control.Monad.when (openBrackets > 1) $ go (openBrackets - 1))           <|>           (char '[' >> go (openBrackets + 1))           <|>@@ -257,13 +255,13 @@                   v' <- yamlToMeta v                   let k' = T.unpack k                   updateState $ \st -> st{ stateMeta' =-                     (do m <- stateMeta' st-                         -- if there's already a value, leave it unchanged-                         case lookupMeta k' m of-                              Just _ -> return m-                              Nothing -> do-                                v'' <- v'-                                return $ B.setMeta (T.unpack k) v'' m)}+                     do m <- stateMeta' st+                        -- if there's already a value, leave it unchanged+                        case lookupMeta k' m of+                             Just _ -> return m+                             Nothing -> do+                               v'' <- v'+                               return $ B.setMeta (T.unpack k) v'' m}            ) alist        Right Yaml.Null -> return ()        Right _ -> do@@ -596,7 +594,7 @@   underlineChar <- oneOf setextHChars   many (char underlineChar)   blanklines-  let level = fromMaybe 0 (findIndex (== underlineChar) setextHChars) + 1+  let level = fromMaybe 0 (elemIndex underlineChar setextHChars) + 1   attr' <- registerHeader attr (runF text defaultParserState)   guardDisabled Ext_implicit_header_references     <|> registerImplicitHeader raw attr'@@ -851,7 +849,7 @@        return (num, style, delim))  listStart :: PandocMonad m => MarkdownParser m ()-listStart = bulletListStart <|> (Control.Monad.void (orderedListStart Nothing))+listStart = bulletListStart <|> Control.Monad.void (orderedListStart Nothing)  listLine :: PandocMonad m => Int -> MarkdownParser m String listLine continuationIndent = try $ do@@ -881,7 +879,7 @@   pos2 <- getPosition   let continuationIndent = if fourSpaceRule                               then 4-                              else (sourceColumn pos2 - sourceColumn pos1)+                              else sourceColumn pos2 - sourceColumn pos1   first <- listLineCommon   rest <- many (do notFollowedBy listStart                    notFollowedBy (() <$ codeBlockFenced)@@ -912,10 +910,10 @@   return $ concat (x:xs) ++ blanks  notFollowedByDivCloser :: PandocMonad m => MarkdownParser m ()-notFollowedByDivCloser = do+notFollowedByDivCloser =   guardDisabled Ext_fenced_divs <|>-    do divLevel <- stateFencedDivLevel <$> getState-       guard (divLevel < 1) <|> notFollowedBy divFenceEnd+  do divLevel <- stateFencedDivLevel <$> getState+     guard (divLevel < 1) <|> notFollowedBy divFenceEnd  notFollowedByHtmlCloser :: PandocMonad m => MarkdownParser m () notFollowedByHtmlCloser = do@@ -1222,7 +1220,7 @@               if headless                  then lookAhead anyLine                  else return rawContent-  let aligns   = zipWith alignType (map ((: [])) rawHeads) lengths+  let aligns   = zipWith alignType (map (: []) rawHeads) lengths   let rawHeads' = if headless                      then replicate (length dashes) ""                      else rawHeads@@ -1418,11 +1416,11 @@   skipMany spaceChar   let len = length pipe + maybe 0 (const 1) left + maybe 0 (const 1) right   return-    ((case (left,right) of-       (Nothing,Nothing) -> AlignDefault-       (Just _,Nothing)  -> AlignLeft-       (Nothing,Just _)  -> AlignRight-       (Just _,Just _)   -> AlignCenter), len)+    (case (left,right) of+      (Nothing,Nothing) -> AlignDefault+      (Just _,Nothing)  -> AlignLeft+      (Nothing,Just _)  -> AlignRight+      (Just _,Just _)   -> AlignCenter, len)  -- Succeed only if current line contains a pipe. scanForPipe :: PandocMonad m => ParserT [Char] st m ()@@ -1929,7 +1927,7 @@                        (try $ string "\\stop" >> string completion)   return $ "\\start" ++ completion ++ concat contents ++ "\\stop" ++ completion -inBrackets :: PandocMonad m => (ParserT [Char] st m Char) -> ParserT [Char] st m String+inBrackets :: PandocMonad m => ParserT [Char] st m Char -> ParserT [Char] st m String inBrackets parser = do   char '['   contents <- many parser@@ -1973,7 +1971,6 @@ divFenced :: PandocMonad m => MarkdownParser m (F Blocks) divFenced = try $ do   guardEnabled Ext_fenced_divs-  nonindentSpaces   string ":::"   skipMany (char ':')   skipMany spaceChar@@ -1988,7 +1985,6 @@  divFenceEnd :: PandocMonad m => MarkdownParser m () divFenceEnd = try $ do-  nonindentSpaces   string ":::"   skipMany (char ':')   blanklines@@ -2150,6 +2146,6 @@ doubleQuoted = try $ do   doubleQuoteStart   contents <- mconcat <$> many (try $ notFollowedBy doubleQuoteEnd >> inline)-  (withQuoteContext InDoubleQuote $ doubleQuoteEnd >> return+  withQuoteContext InDoubleQuote (doubleQuoteEnd >> return        (fmap B.doubleQuoted . trimInlinesF $ contents))-   <|> (return $ return (B.str "\8220") <> contents)+   <|> return (return (B.str "\8220") <> contents)
src/Text/Pandoc/Readers/Muse.hs view
@@ -42,10 +42,12 @@ import Control.Monad import Control.Monad.Except (throwError) import Data.Char (isLetter)+import Data.Default import Data.List (stripPrefix, intercalate) import Data.List.Split (splitOn) import qualified Data.Map as M-import Data.Maybe (fromMaybe)+import qualified Data.Set as Set+import Data.Maybe (fromMaybe, isNothing) import Data.Text (Text, unpack) import System.FilePath (takeExtension) import Text.HTML.TagSoup@@ -55,7 +57,7 @@ import Text.Pandoc.Definition import Text.Pandoc.Logging import Text.Pandoc.Options-import Text.Pandoc.Parsing+import Text.Pandoc.Parsing hiding (F) import Text.Pandoc.Readers.HTML (htmlTag) import Text.Pandoc.Shared (crFilter, underlineSpan) @@ -65,13 +67,60 @@          -> Text          -> m Pandoc readMuse opts s = do-  res <- readWithM parseMuse def{ stateOptions = opts } (unpack (crFilter s))+  res <- readWithM parseMuse def{ museOptions = opts } (unpack (crFilter s))   case res of        Left e  -> throwError e        Right d -> return d -type MuseParser = ParserT String ParserState+type F = Future MuseState +data MuseState = MuseState { museMeta :: F Meta -- ^ Document metadata+                           , museOptions :: ReaderOptions+                           , museHeaders :: M.Map Inlines String -- ^ List of headers and ids (used for implicit ref links)+                           , museIdentifierList :: Set.Set String+                           , museLastStrPos :: Maybe SourcePos -- ^ Position after last str parsed+                           , museLogMessages :: [LogMessage]+                           , museNotes :: M.Map String (SourcePos, F Blocks)+                           , museInLink :: Bool+                           , museInPara :: Bool+                           }++instance Default MuseState where+  def = defaultMuseState++defaultMuseState :: MuseState+defaultMuseState = MuseState { museMeta = return nullMeta+                             , museOptions = def+                             , museHeaders = M.empty+                             , museIdentifierList = Set.empty+                             , museLastStrPos = Nothing+                             , museLogMessages = []+                             , museNotes = M.empty+                             , museInLink = False+                             , museInPara = False+                             }++type MuseParser = ParserT String MuseState++instance HasReaderOptions MuseState where+  extractReaderOptions = museOptions++instance HasHeaderMap MuseState where+  extractHeaderMap     = museHeaders+  updateHeaderMap f st = st{ museHeaders = f $ museHeaders st }++instance HasIdentifierList MuseState where+  extractIdentifierList     = museIdentifierList+  updateIdentifierList f st = st{ museIdentifierList = f $ museIdentifierList st }++instance HasLastStrPosition MuseState where+  setLastStrPos pos st = st{ museLastStrPos = Just pos }+  getLastStrPos st     = museLastStrPos st++instance HasLogMessages MuseState where+  addLogMessage m s = s{ museLogMessages = m : museLogMessages s }+  getLogMessages = reverse . museLogMessages+ -- -- main parser --@@ -82,18 +131,11 @@   blocks <- parseBlocks   st <- getState   let doc = runF (do Pandoc _ bs <- B.doc <$> blocks-                     meta <- stateMeta' st+                     meta <- museMeta st                      return $ Pandoc meta bs) st   reportLogMessages   return doc -parseBlocks :: PandocMonad m => MuseParser m (F Blocks)-parseBlocks = do-  res <- mconcat <$> many block-  spaces-  eof-  return res- -- -- utility functions --@@ -109,6 +151,13 @@   where     endtag = void $ htmlTag (~== TagClose tag) +htmlBlock :: PandocMonad m => String -> MuseParser m (Attr, String)+htmlBlock tag = try $ do+  many spaceChar+  res <- htmlElement tag+  manyTill spaceChar eol+  return res+ htmlAttrToPandoc :: [Attribute String] -> Attr htmlAttrToPandoc attrs = (ident, classes, keyvals)   where@@ -116,18 +165,17 @@     classes = maybe [] words $ lookup "class" attrs     keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"] -parseHtmlContentWithAttrs :: PandocMonad m-                          => String -> MuseParser m a -> MuseParser m (Attr, [a])-parseHtmlContentWithAttrs tag parser = do-  (attr, content) <- htmlElement tag-  parsedContent <- parseContent (content ++ "\n")-  return (attr, parsedContent)+parseHtmlContent :: PandocMonad m+                 => String -> MuseParser m (Attr, F Blocks)+parseHtmlContent tag = try $ do+  many spaceChar+  (TagOpen _ attr, _) <- htmlTag (~== TagOpen tag [])+  manyTill spaceChar eol+  content <- parseBlocksTill (try $ manyTill spaceChar endtag)+  manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline+  return (htmlAttrToPandoc attr, content)   where-    parseContent = parseFromString $ manyTill parser endOfContent-    endOfContent = try $ skipMany blankline >> skipSpaces >> eof--parseHtmlContent :: PandocMonad m => String -> MuseParser m a -> MuseParser m [a]-parseHtmlContent tag p = fmap snd (parseHtmlContentWithAttrs tag p)+    endtag = void $ htmlTag (~== TagClose tag)  commonPrefix :: String -> String -> String commonPrefix _ [] = []@@ -140,9 +188,18 @@ atStart p = do   pos <- getPosition   st <- getState-  guard $ stateLastStrPos st /= Just pos+  guard $ museLastStrPos st /= Just pos   p +someUntil :: (Stream s m t)+          => ParserT s u m a+          -> ParserT s u m b+          -> ParserT s u m ([a], b)+someUntil p end = do+  first <- p+  (rest, e) <- manyUntil p end+  return (first:rest, e)+ -- -- directive parsers --@@ -156,31 +213,25 @@ parseEmacsDirective :: PandocMonad m => MuseParser m (String, F Inlines) parseEmacsDirective = do   key <- parseDirectiveKey-  space-  spaces-  raw <- manyTill anyChar eol-  value <- parseFromString (trimInlinesF . mconcat <$> many inline) raw+  spaceChar+  value <- trimInlinesF . mconcat <$> manyTill (choice inlineList) eol   return (key, value)  parseAmuseDirective :: PandocMonad m => MuseParser m (String, F Inlines) parseAmuseDirective = do   key <- parseDirectiveKey-  space-  spaces-  first <- manyTill anyChar eol-  rest <- manyTill anyLine endOfDirective+  many1 spaceChar+  value <- trimInlinesF . mconcat <$> many1Till inline endOfDirective   many blankline-  value <- parseFromString (trimInlinesF . mconcat <$> many inline) $ unlines (first : rest)   return (key, value)   where-    endOfDirective = lookAhead $ endOfInput <|> try (void blankline) <|> try (void parseDirectiveKey)-    endOfInput     = try $ skipMany blankline >> skipSpaces >> eof+    endOfDirective = lookAhead $ eof <|> try (newline >> (void blankline <|> void parseDirectiveKey))  directive :: PandocMonad m => MuseParser m () directive = do   ext <- getOption readerExtensions   (key, value) <- if extensionEnabled Ext_amuse ext then parseAmuseDirective else parseEmacsDirective-  updateState $ \st -> st { stateMeta' = B.setMeta (translateKey key) <$> value <*> stateMeta' st }+  updateState $ \st -> st { museMeta = B.setMeta (translateKey key) <$> value <*> museMeta st }   where translateKey "cover" = "cover-image"         translateKey x = x @@ -188,43 +239,117 @@ -- block parsers -- +parseBlocks :: PandocMonad m+            => MuseParser m (F Blocks)+parseBlocks =+  try parseEnd <|>+  try blockStart <|>+  try listStart <|>+  try paraStart+  where+    parseEnd = mempty <$ eof+    blockStart = do first <- header <|> blockElements <|> emacsNoteBlock+                    rest <- parseBlocks+                    return $ first B.<> rest+    listStart = do+      updateState (\st -> st { museInPara = False })+      (first, rest) <- anyListUntil parseBlocks <|> amuseNoteBlockUntil parseBlocks+      return $ first B.<> rest+    paraStart = do+      indent <- length <$> many spaceChar+      (first, rest) <- paraUntil parseBlocks+      let first' = if indent >= 2 && indent < 6 then B.blockQuote <$> first else first+      return $ first' B.<> rest++parseBlocksTill :: PandocMonad m+                => MuseParser m a+                -> MuseParser m (F Blocks)+parseBlocksTill end =+  try parseEnd <|>+  try blockStart <|>+  try listStart <|>+  try paraStart+  where+    parseEnd = mempty <$ end+    blockStart = do first <- blockElements+                    rest <- continuation+                    return $ first B.<> rest+    listStart = do+      updateState (\st -> st { museInPara = False })+      (first, e) <- anyListUntil ((Left <$> end) <|> (Right <$> continuation))+      case e of+        Left _ -> return first+        Right rest -> return $ first B.<> rest+    paraStart = do (first, e) <- paraUntil ((Left <$> end) <|> (Right <$> continuation))+                   case e of+                     Left _ -> return first+                     Right rest -> return $ first B.<> rest+    continuation = parseBlocksTill end++listItemContentsUntil :: PandocMonad m+                      => Int+                      -> MuseParser m a+                      -> MuseParser m a+                      -> MuseParser m (F Blocks, a)+listItemContentsUntil col pre end =+  try blockStart <|>+  try listStart <|>+  try paraStart+  where+    parsePre = do e <- pre+                  return (mempty, e)+    parseEnd = do e <- end+                  return (mempty, e)+    paraStart = do+      (first, e) <- paraUntil ((Left <$> pre) <|> (Right <$> continuation) <|> (Left <$> end))+      case e of+        Left ee -> return (first, ee)+        Right (rest, ee) -> return (first B.<> rest, ee)+    blockStart = do first <- blockElements+                    (rest, e) <- parsePre <|> continuation <|> parseEnd+                    return (first B.<> rest, e)+    listStart = do+      updateState (\st -> st { museInPara = False })+      (first, e) <- anyListUntil ((Left <$> pre) <|> (Right <$> continuation) <|> (Left <$> end))+      case e of+        Left ee -> return (first, ee)+        Right (rest, ee) -> return (first B.<> rest, ee)+    continuation = try $ do blank <- optionMaybe blankline+                            skipMany blankline+                            indentWith col+                            updateState (\st -> st { museInPara = museInPara st && isNothing blank })+                            listItemContentsUntil col pre end+ parseBlock :: PandocMonad m => MuseParser m (F Blocks) parseBlock = do   res <- blockElements <|> para-  optionMaybe blankline-  trace (take 60 $ show $ B.toList $ runF res defaultParserState)+  trace (take 60 $ show $ B.toList $ runF res def)   return res--block :: PandocMonad m => MuseParser m (F Blocks)-block = parseBlock <* skipMany blankline+  where para = fst <$> paraUntil (try (eof <|> void (lookAhead blockElements)))  blockElements :: PandocMonad m => MuseParser m (F Blocks)-blockElements = choice [ mempty <$ blankline-                       , comment-                       , separator-                       , header-                       , example-                       , exampleTag-                       , literal-                       , centerTag-                       , rightTag-                       , quoteTag-                       , divTag-                       , verseTag-                       , lineBlock-                       , bulletList-                       , orderedList-                       , definitionList-                       , table-                       , commentTag-                       , amuseNoteBlock-                       , emacsNoteBlock-                       ]+blockElements = do+  updateState (\st -> st { museInPara = False })+  choice [ mempty <$ blankline+         , comment+         , separator+         , example+         , exampleTag+         , literalTag+         , centerTag+         , rightTag+         , quoteTag+         , divTag+         , verseTag+         , lineBlock+         , table+         , commentTag+         ]  comment :: PandocMonad m => MuseParser m (F Blocks) comment = try $ do   char ';'-  optionMaybe (spaceChar >> many (noneOf "\n"))+  optional (spaceChar >> many (noneOf "\n"))   eol   return mempty @@ -238,34 +363,29 @@  header :: PandocMonad m => MuseParser m (F Blocks) header = try $ do-  st <- stateParserContext <$> getState-  q <- stateQuoteContext <$> getState-  getPosition >>= \pos -> guard (st == NullState && q == NoQuote && sourceColumn pos == 1)+  getPosition >>= \pos -> guard (sourceColumn pos == 1)   level <- fmap length $ many1 $ char '*'   guard $ level <= 5   spaceChar   content <- trimInlinesF . mconcat <$> manyTill inline eol   anchorId <- option "" parseAnchor-  attr <- registerHeader (anchorId, [], []) (runF content defaultParserState)+  attr <- registerHeader (anchorId, [], []) (runF content def)   return $ B.headerWith attr level <$> content  example :: PandocMonad m => MuseParser m (F Blocks) example = try $ do   string "{{{"-  optionMaybe blankline-  contents <- manyTill anyChar $ try (optionMaybe blankline >> string "}}}")+  optional blankline+  contents <- manyTill anyChar $ try (optional blankline >> string "}}}")   return $ return $ B.codeBlock contents --- Trim up to one newline from the beginning and the end,--- in case opening and/or closing tags are on separate lines.-chop :: String -> String-chop = lchop . rchop-+-- Trim up to one newline from the beginning of the string. lchop :: String -> String lchop s = case s of                     '\n':ss -> ss                     _       -> s +-- Trim up to one newline from the end of the string. rchop :: String -> String rchop = reverse . lchop . reverse @@ -277,77 +397,64 @@  exampleTag :: PandocMonad m => MuseParser m (F Blocks) exampleTag = try $ do-  many spaceChar-  (attr, contents) <- htmlElement "example"+  (attr, contents) <- htmlBlock "example"   return $ return $ B.codeBlockWith attr $ rchop $ intercalate "\n" $ dropSpacePrefix $ splitOn "\n" $ lchop contents -literal :: PandocMonad m => MuseParser m (F Blocks)-literal = do-  guardDisabled Ext_amuse -- Text::Amuse does not support <literal>-  (return . rawBlock) <$> htmlElement "literal"+literalTag :: PandocMonad m => MuseParser m (F Blocks)+literalTag =+  (return . rawBlock) <$> htmlBlock "literal"   where     -- FIXME: Emacs Muse inserts <literal> without style into all output formats, but we assume HTML     format (_, _, kvs)        = fromMaybe "html" $ lookup "style" kvs-    rawBlock (attrs, content) = B.rawBlock (format attrs) $ chop content--blockTag :: PandocMonad m-          => (Blocks -> Blocks)-          -> String-          -> MuseParser m (F Blocks)-blockTag f s = do-  res <- parseHtmlContent s block-  return $ f <$> mconcat res+    rawBlock (attrs, content) = B.rawBlock (format attrs) $ rchop $ intercalate "\n" $ dropSpacePrefix $ splitOn "\n" $ lchop content  -- <center> tag is ignored centerTag :: PandocMonad m => MuseParser m (F Blocks)-centerTag = blockTag id "center"+centerTag = snd <$> parseHtmlContent "center"  -- <right> tag is ignored rightTag :: PandocMonad m => MuseParser m (F Blocks)-rightTag = blockTag id "right"+rightTag = snd <$> parseHtmlContent "right"  quoteTag :: PandocMonad m => MuseParser m (F Blocks)-quoteTag = withQuoteContext InDoubleQuote $ blockTag B.blockQuote "quote"+quoteTag = fmap B.blockQuote . snd <$> parseHtmlContent "quote"  -- <div> tag is supported by Emacs Muse, but not Amusewiki 2.025 divTag :: PandocMonad m => MuseParser m (F Blocks) divTag = do-  (attrs, content) <- parseHtmlContentWithAttrs "div" block-  return $ B.divWith attrs <$> mconcat content+  (attrs, content) <- parseHtmlContent "div"+  return $ B.divWith attrs <$> content -verseLine :: PandocMonad m => MuseParser m String+verseLine :: PandocMonad m => MuseParser m (F Inlines) verseLine = do-  line <- anyLine <|> many1Till anyChar eof-  let (white, rest) = span (== ' ') line-  return $ replicate (length white) '\160' ++ rest+  indent <- (B.str <$> many1 (char ' ' >> pure '\160')) <|> pure mempty+  rest <- manyTill (choice inlineList) newline+  return $ trimInlinesF $ mconcat (pure indent : rest)  verseLines :: PandocMonad m => MuseParser m (F Blocks) verseLines = do-  --optionMaybe blankline -- Skip blankline after opening tag on separate line   lns <- many verseLine-  lns' <- mapM (parseFromString' (trimInlinesF . mconcat <$> many inline)) lns-  return $ B.lineBlock <$> sequence lns'+  return $ B.lineBlock <$> sequence lns  verseTag :: PandocMonad m => MuseParser m (F Blocks) verseTag = do-  (_, content) <- htmlElement "verse"+  (_, content) <- htmlBlock "verse"   parseFromString verseLines (intercalate "\n" $ dropSpacePrefix $ splitOn "\n" $ lchop content)  commentTag :: PandocMonad m => MuseParser m (F Blocks)-commentTag = parseHtmlContent "comment" anyChar >> return mempty+commentTag = htmlBlock "comment" >> return mempty  -- Indented paragraph is either center, right or quote-para :: PandocMonad m => MuseParser m (F Blocks)-para = do- indent <- length <$> many spaceChar- st <- stateParserContext <$> getState- let f = if st /= ListItemState && indent >= 2 && indent < 6 then B.blockQuote else id- fmap (f . B.para) . trimInlinesF . mconcat <$> many1Till inline endOfParaElement- where-   endOfParaElement = lookAhead $ endOfInput <|> endOfPara <|> newBlockElement-   endOfInput       = try $ skipMany blankline >> skipSpaces >> eof-   endOfPara        = try $ blankline >> skipMany1 blankline-   newBlockElement  = try $ blankline >> void blockElements+paraUntil :: PandocMonad m+          => MuseParser m a+          -> MuseParser m (F Blocks, a)+paraUntil end = do+  state <- getState+  guard $ not $ museInPara state+  setState $ state{ museInPara = True }+  (l, e) <- someUntil inline $ try (manyTill spaceChar eol >> end)+  updateState (\st -> st { museInPara = False })+  return (fmap B.para $ trimInlinesF $ mconcat l, e)  noteMarker :: PandocMonad m => MuseParser m String noteMarker = try $ do@@ -358,18 +465,21 @@  -- Amusewiki version of note -- Parsing is similar to list item, except that note marker is used instead of list marker-amuseNoteBlock :: PandocMonad m => MuseParser m (F Blocks)-amuseNoteBlock = try $ do+amuseNoteBlockUntil :: PandocMonad m+                    => MuseParser m a+                    -> MuseParser m (F Blocks, a)+amuseNoteBlockUntil end = try $ do   guardEnabled Ext_amuse-  pos <- getPosition   ref <- noteMarker <* spaceChar-  content <- listItemContents-  oldnotes <- stateNotes' <$> getState+  pos <- getPosition+  updateState (\st -> st { museInPara = False })+  (content, e) <- listItemContentsUntil (sourceColumn pos - 1) (fail "x") end+  oldnotes <- museNotes <$> getState   case M.lookup ref oldnotes of     Just _  -> logMessage $ DuplicateNoteReference ref pos     Nothing -> return ()-  updateState $ \s -> s{ stateNotes' = M.insert ref (pos, content) oldnotes }-  return mempty+  updateState $ \s -> s{ museNotes = M.insert ref (pos, content) oldnotes }+  return (mempty, e)  -- Emacs version of note -- Notes are allowed only at the end of text, no indentation is required.@@ -379,118 +489,165 @@   pos <- getPosition   ref <- noteMarker <* skipSpaces   content <- mconcat <$> blocksTillNote-  oldnotes <- stateNotes' <$> getState+  oldnotes <- museNotes <$> getState   case M.lookup ref oldnotes of     Just _  -> logMessage $ DuplicateNoteReference ref pos     Nothing -> return ()-  updateState $ \s -> s{ stateNotes' = M.insert ref (pos, content) oldnotes }+  updateState $ \s -> s{ museNotes = M.insert ref (pos, content) oldnotes }   return mempty   where     blocksTillNote =-      many1Till block (eof <|> () <$ lookAhead noteMarker)+      many1Till parseBlock (eof <|> () <$ lookAhead noteMarker)  -- -- Verse markup -- -lineVerseLine :: PandocMonad m => MuseParser m String+lineVerseLine :: PandocMonad m => MuseParser m (F Inlines) lineVerseLine = try $ do-  char '>'-  white <- many1 (char ' ' >> pure '\160')-  rest <- anyLine-  return $ tail white ++ rest+  string "> "+  indent <- B.str <$> many (char ' ' >> pure '\160')+  rest <- manyTill (choice inlineList) eol+  return $ trimInlinesF $ mconcat (pure indent : rest) -blanklineVerseLine :: PandocMonad m => MuseParser m Char-blanklineVerseLine = try $ char '>' >> blankline+blanklineVerseLine :: PandocMonad m => MuseParser m (F Inlines)+blanklineVerseLine = try $ do+  char '>'+  blankline+  pure mempty  lineBlock :: PandocMonad m => MuseParser m (F Blocks) lineBlock = try $ do-  lns <- many1 (pure <$> blanklineVerseLine <|> lineVerseLine)-  lns' <- mapM (parseFromString' (trimInlinesF . mconcat <$> many inline)) lns-  return $ B.lineBlock <$> sequence lns'+  col <- sourceColumn <$> getPosition+  lns <- (blanklineVerseLine <|> lineVerseLine) `sepBy1'` try (indentWith (col - 1))+  return $ B.lineBlock <$> sequence lns  -- -- lists -- -withListContext :: PandocMonad m => MuseParser m a -> MuseParser m a-withListContext p = do-  state <- getState-  let oldContext = stateParserContext state-  setState $ state { stateParserContext = ListItemState }-  parsed <- p-  updateState (\st -> st {stateParserContext = oldContext})-  return parsed--listItemContents' :: PandocMonad m => Int -> MuseParser m (F Blocks)-listItemContents' col = do-  first <- try $ withListContext parseBlock-  rest <- many $ try (skipMany blankline >> indentWith col >> withListContext parseBlock)-  return $ mconcat (first : rest)--listItemContents :: PandocMonad m => MuseParser m (F Blocks)-listItemContents = do-  pos <- getPosition-  let col = sourceColumn pos - 1-  listItemContents' col--listItem :: PandocMonad m => Int -> MuseParser m () -> MuseParser m (F Blocks)-listItem n p = try $ do-  optionMaybe blankline-  count n spaceChar-  p+bulletListItemsUntil :: PandocMonad m+                     => Int+                     -> MuseParser m a+                     -> MuseParser m ([F Blocks], a)+bulletListItemsUntil indent end = try $ do+  char '-'   void spaceChar <|> lookAhead eol-  listItemContents+  updateState (\st -> st { museInPara = False })+  (x, e) <- listItemContentsUntil (indent + 2) (Right <$> try (optional blankline >> indentWith indent >> bulletListItemsUntil indent end)) (Left <$> end)+  case e of+    Left ee -> return ([x], ee)+    Right (xs, ee) -> return (x:xs, ee) -bulletList :: PandocMonad m => MuseParser m (F Blocks)-bulletList = try $ do+bulletListUntil :: PandocMonad m+                => MuseParser m a+                -> MuseParser m (F Blocks, a)+bulletListUntil end = try $ do   many spaceChar   pos <- getPosition-  let col = sourceColumn pos-  guard $ col /= 1-  char '-'-  void spaceChar <|> lookAhead eol-  first <- listItemContents-  rest <- many $ listItem (col - 1) (void (char '-'))-  return $ B.bulletList <$> sequence (first : rest)+  let indent = sourceColumn pos - 1+  guard $ indent /= 0+  (items, e) <- bulletListItemsUntil indent end+  return (B.bulletList <$> sequence items, e) -orderedList :: PandocMonad m => MuseParser m (F Blocks)-orderedList = try $ do+-- | Parses an ordered list marker and returns list attributes.+anyMuseOrderedListMarker :: PandocMonad m => MuseParser m ListAttributes+anyMuseOrderedListMarker = do+  (style, start) <- decimal <|> lowerRoman <|> upperRoman <|> lowerAlpha <|> upperAlpha+  char '.'+  return (start, style, Period)++museOrderedListMarker :: PandocMonad m+                      => ListNumberStyle+                      -> MuseParser m Int+museOrderedListMarker style = do+  (_, start) <- case style of+                  Decimal    -> decimal+                  UpperRoman -> upperRoman+                  LowerRoman -> lowerRoman+                  UpperAlpha -> upperAlpha+                  LowerAlpha -> lowerAlpha+                  _          -> fail "Unhandled case"+  char '.'+  return start++orderedListItemsUntil :: PandocMonad m+                      => Int+                      -> ListNumberStyle+                      -> MuseParser m a+                      -> MuseParser m ([F Blocks], a)+orderedListItemsUntil indent style end =+  continuation+  where+    continuation = try $ do+      pos <- getPosition+      void spaceChar <|> lookAhead eol+      updateState (\st -> st { museInPara = False })+      (x, e) <- listItemContentsUntil (sourceColumn pos) (Right <$> try (optionMaybe blankline >> indentWith indent >> museOrderedListMarker style >> continuation)) (Left <$> end)+      case e of+        Left ee -> return ([x], ee)+        Right (xs, ee) -> return (x:xs, ee)++orderedListUntil :: PandocMonad m+                 => MuseParser m a+                 -> MuseParser m (F Blocks, a)+orderedListUntil end = try $ do   many spaceChar   pos <- getPosition-  let col = sourceColumn pos-  guard $ col /= 1-  p@(_, style, delim) <- anyOrderedListMarker+  let indent = sourceColumn pos - 1+  guard $ indent /= 0+  p@(_, style, _) <- anyMuseOrderedListMarker   guard $ style `elem` [Decimal, LowerAlpha, UpperAlpha, LowerRoman, UpperRoman]-  guard $ delim == Period-  void spaceChar <|> lookAhead eol-  first <- listItemContents-  rest <- many $ listItem (col - 1) (void (orderedListMarker style delim))-  return $ B.orderedListWith p <$> sequence (first : rest)+  (items, e) <- orderedListItemsUntil indent style end+  return (B.orderedListWith p <$> sequence items, e) -definitionListItem :: PandocMonad m => MuseParser m (F (Inlines, [Blocks]))-definitionListItem = try $ do-  guardDisabled Ext_amuse <|> void spaceChar -- Initial space is required by Amusewiki, but not Emacs Muse-  many spaceChar-  pos <- getPosition-  rawTerm <- many1Till (noneOf "\n") (lookAhead (void (try (spaceChar >> string "::"))))-  term <- parseFromString (trimInlinesF . mconcat <$> many inline) rawTerm-  many1 spaceChar-  string "::"+descriptionsUntil :: PandocMonad m+                  => Int+                  -> MuseParser m a+                  -> MuseParser m ([F Blocks], a)+descriptionsUntil indent end = do   void spaceChar <|> lookAhead eol-  contents <- listItemContents' $ sourceColumn pos-  optionMaybe blankline-  pure $ do lineContent' <- contents+  updateState (\st -> st { museInPara = False })+  (x, e) <- listItemContentsUntil indent (Right <$> try (optional blankline >> indentWith indent >> manyTill spaceChar (string "::") >> descriptionsUntil indent end)) (Left <$> end)+  case e of+    Right (xs, ee) -> return (x:xs, ee)+    Left ee -> return ([x], ee)++definitionListItemsUntil :: PandocMonad m+                         => Int+                         -> MuseParser m a+                         -> MuseParser m ([F (Inlines, [Blocks])], a)+definitionListItemsUntil indent end =+  continuation+  where+    continuation = try $ do+      pos <- getPosition+      term <- trimInlinesF . mconcat <$> manyTill (choice inlineList) (try $ string "::")+      (x, e) <- descriptionsUntil (sourceColumn pos) ((Right <$> try (optional blankline >> indentWith indent >> continuation)) <|> (Left <$> end))+      let xx = do             term' <- term-            pure (term', [lineContent'])+            x' <- sequence x+            return (term', x')+      case e of+        Left ee -> return ([xx], ee)+        Right (xs, ee) -> return (xx:xs, ee) -definitionListItems :: PandocMonad m => MuseParser m (F [(Inlines, [Blocks])])-definitionListItems = sequence <$> many1 definitionListItem+definitionListUntil :: PandocMonad m+                    => MuseParser m a+                    -> MuseParser m (F Blocks, a)+definitionListUntil end = try $ do+  many spaceChar+  pos <- getPosition+  let indent = sourceColumn pos - 1+  guardDisabled Ext_amuse <|> guard (indent /= 0) -- Initial space is required by Amusewiki, but not Emacs Muse+  (items, e) <- definitionListItemsUntil indent end+  return (B.definitionList <$> sequence items, e) -definitionList :: PandocMonad m => MuseParser m (F Blocks)-definitionList = do-  items <- definitionListItems-  return $ B.definitionList <$> items+anyListUntil :: PandocMonad m+             => MuseParser m a+             -> MuseParser m (F Blocks, a)+anyListUntil end =+  bulletListUntil end <|> orderedListUntil end <|> definitionListUntil end  -- -- tables@@ -578,16 +735,14 @@ tableParseCaption = try $ do   many spaceChar   string "|+"-  contents <- trimInlinesF . mconcat <$> many1Till inline (lookAhead $ string "+|")-  string "+|"-  return $ MuseCaption contents+  MuseCaption <$> (trimInlinesF . mconcat <$> many1Till inline (string "+|"))  -- -- inline parsers --  inlineList :: PandocMonad m => [MuseParser m (F Inlines)]-inlineList = [ endline+inlineList = [ whitespace              , br              , anchor              , footnote@@ -605,13 +760,12 @@              , code              , codeTag              , inlineLiteralTag-             , whitespace              , str              , symbol              ]  inline :: PandocMonad m => MuseParser m (F Inlines)-inline = choice inlineList <?> "inline"+inline = endline <|> choice inlineList <?> "inline"  endline :: PandocMonad m => MuseParser m (F Inlines) endline = try $ do@@ -637,31 +791,24 @@ footnote = try $ do   ref <- noteMarker   return $ do-    notes <- asksF stateNotes'+    notes <- asksF museNotes     case M.lookup ref notes of       Nothing -> return $ B.str $ "[" ++ ref ++ "]"       Just (_pos, contents) -> do         st <- askF-        let contents' = runF contents st { stateNotes' = M.empty }+        let contents' = runF contents st { museNotes = M.empty }         return $ B.note contents'  whitespace :: PandocMonad m => MuseParser m (F Inlines)-whitespace = return <$> (lb <|> regsp)-  where lb = try $ skipMany spaceChar >> linebreak >> return B.space-        regsp = try $ skipMany1 spaceChar >> return B.space+whitespace = try $ do+  skipMany1 spaceChar+  return $ return B.space  br :: PandocMonad m => MuseParser m (F Inlines) br = try $ do   string "<br>"   return $ return B.linebreak -linebreak :: PandocMonad m => MuseParser m (F Inlines)-linebreak = newline >> notFollowedBy newline >> (lastNewline <|> innerNewline)-  where lastNewline  = do-                         eof-                         return $ return mempty-        innerNewline = return $ return B.space- emphasisBetween :: (PandocMonad m, Show a) => MuseParser m a -> MuseParser m (F Inlines) emphasisBetween c = try $ enclosedInlines c c @@ -676,8 +823,9 @@           => (Inlines -> Inlines)           -> String           -> MuseParser m (F Inlines)-inlineTag f s = try $ do-  res <- parseHtmlContent s inline+inlineTag f tag = try $ do+  htmlTag (~== TagOpen tag [])+  res <- manyTill inline (void $ htmlTag (~== TagClose tag))   return $ f <$> mconcat res  strongTag :: PandocMonad m => MuseParser m (F Inlines)@@ -707,9 +855,7 @@ strikeoutTag = inlineTag B.strikeout "del"  verbatimTag :: PandocMonad m => MuseParser m (F Inlines)-verbatimTag = do-  content <- parseHtmlContent "verbatim" anyChar-  return $ return $ B.text content+verbatimTag = return . B.text . snd <$> htmlElement "verbatim"  nbsp :: PandocMonad m => MuseParser m (F Inlines) nbsp = try $ do@@ -728,14 +874,12 @@  codeTag :: PandocMonad m => MuseParser m (F Inlines) codeTag = do-  (attrs, content) <- parseHtmlContentWithAttrs "code" anyChar+  (attrs, content) <- htmlElement "code"   return $ return $ B.codeWith attrs content  inlineLiteralTag :: PandocMonad m => MuseParser m (F Inlines)-inlineLiteralTag = do-  guardDisabled Ext_amuse -- Text::Amuse does not support <literal>-  (attrs, content) <- parseHtmlContentWithAttrs "literal" anyChar-  return $ return $ rawInline (attrs, content)+inlineLiteralTag =+  (return . rawInline) <$> htmlElement "literal"   where     -- FIXME: Emacs Muse inserts <literal> without style into all output formats, but we assume HTML     format (_, _, kvs)        = fromMaybe "html" $ lookup "style" kvs@@ -753,10 +897,10 @@ link :: PandocMonad m => MuseParser m (F Inlines) link = try $ do   st <- getState-  guard $ stateAllowLinks st-  setState $ st{ stateAllowLinks = False }+  guard $ not $ museInLink st+  setState $ st{ museInLink = True }   (url, title, content) <- linkText-  setState $ st{ stateAllowLinks = True }+  updateState (\state -> state { museInLink = False })   return $ case stripPrefix "URL:" url of              Nothing -> if isImageUrl url                           then B.image url title <$> fromMaybe (return mempty) content@@ -769,8 +913,7 @@ linkContent :: PandocMonad m => MuseParser m (F Inlines) linkContent = do   char '['-  res <- many1Till anyChar $ char ']'-  parseFromString (mconcat <$> many1 inline) res+  trimInlinesF . mconcat <$> many1Till inline (string "]")  linkText :: PandocMonad m => MuseParser m (String, String, Maybe (F Inlines)) linkText = do
src/Text/Pandoc/Readers/Odt/Arrows/Utils.hs view
@@ -211,9 +211,9 @@ --- (>>?%?) :: (ArrowChoice a)            => FallibleArrow a x f (b,b')-           -> (b -> b' -> (Either f c))+           -> (b -> b' -> Either f c)            -> FallibleArrow a x f c-a >>?%? f = a >>?^? (uncurry f)+a >>?%? f = a >>?^? uncurry f  infixr 1  >>?,  >>?^,  >>?^? infixr 1 ^>>?, >>?!
src/Text/Pandoc/Readers/Odt/ContentReader.hs view
@@ -322,7 +322,7 @@ modifierFromStyleDiff :: PropertyTriple -> InlineModifier modifierFromStyleDiff propertyTriple  =   composition $-  (getVPosModifier propertyTriple)+  getVPosModifier propertyTriple   : map (first ($ propertyTriple) >>> ifThen_else ignore)         [ (hasEmphChanged           , emph      )         , (hasChanged isStrong      , strong    )@@ -352,7 +352,7 @@                                ]      hasChanged property triple@(_, property -> newProperty, _) =-        maybe True (/=newProperty) (lookupPreviousValue property triple)+        (/= Just newProperty) (lookupPreviousValue property triple)      hasChangedM property triple@(_, textProps,_) =       fromMaybe False $ (/=) <$> property textProps <*> lookupPreviousValueM property triple@@ -362,7 +362,7 @@     lookupPreviousValueM f = lookupPreviousStyleValue ((f =<<).textProperties)      lookupPreviousStyleValue f (ReaderState{..},_,mFamily)-      =     ( findBy f $ extendedStylePropertyChain styleTrace styleSet )+      =     findBy f (extendedStylePropertyChain styleTrace styleSet)         <|> ( f =<< fmap (lookupDefaultStyle' styleSet) mFamily         )  @@ -793,8 +793,7 @@                       Left _    -> returnV ""  -< ()  read_frame_title :: InlineMatcher-read_frame_title = matchingElement NsSVG "title"-                   $ (matchChildContent [] read_plain_text)+read_frame_title = matchingElement NsSVG "title" (matchChildContent [] read_plain_text)  read_frame_text_box :: InlineMatcher read_frame_text_box = matchingElement NsDraw "text-box"@@ -803,12 +802,12 @@                          arr read_img_with_caption                             -< toList paragraphs  read_img_with_caption :: [Block] -> Inlines-read_img_with_caption ((Para [Image attr alt (src,title)]) : _) =+read_img_with_caption (Para [Image attr alt (src,title)] : _) =   singleton (Image attr alt (src, 'f':'i':'g':':':title))   -- no text, default caption read_img_with_caption (Para (Image attr _ (src,title) : txt) : _) =   singleton (Image attr txt (src, 'f':'i':'g':':':title) )  -- override caption with the text that follows-read_img_with_caption  ( (Para (_ : xs)) : ys) =-  read_img_with_caption ((Para xs) : ys)+read_img_with_caption  ( Para (_ : xs) : ys) =+  read_img_with_caption (Para xs : ys) read_img_with_caption _ =   mempty @@ -909,8 +908,8 @@   Pandoc m (post_process' blocks)  post_process' :: [Block] -> [Block]-post_process' ((Table _ a w h r) : (Div ("", ["caption"], _) [Para inlines] ) : xs) =-  (Table inlines a w h r) : ( post_process' xs )+post_process' (Table _ a w h r : Div ("", ["caption"], _) [Para inlines] : xs) =+  Table inlines a w h r : post_process' xs post_process' bs = bs  read_body :: OdtReader _x (Pandoc, MediaBag)
src/Text/Pandoc/Readers/Odt/Namespaces.hs view
@@ -48,7 +48,7 @@   findID :: NameSpaceIRI -> Maybe Namespace-findID iri = listToMaybe [nsID | (iri',~nsID) <- nsIDs, iri' `isPrefixOf` iri]+findID iri = listToMaybe [nsID | (iri',nsID) <- nsIDs, iri' `isPrefixOf` iri]  nsIDmap :: NameSpaceIRIs Namespace nsIDmap = foldr (uncurry $ flip M.insert) M.empty nsIDs
src/Text/Pandoc/Readers/Odt/StyleReader.hs view
@@ -131,13 +131,12 @@ -- | A reader for font pitches fontPitchReader :: XMLReader _s _x FontPitches fontPitchReader = executeIn NsOffice "font-face-decls" (-                         (  withEveryL NsStyle "font-face" $ liftAsSuccess (+                          withEveryL NsStyle "font-face" (liftAsSuccess (                               findAttr' NsStyle "name"                               &&&                               lookupDefaultingAttr NsStyle "font-pitch"-                            )-                         )-                    >>?^ ( M.fromList . (foldl accumLegalPitches []) )+                            ))+                    >>?^ ( M.fromList . foldl accumLegalPitches [] )                   )   where accumLegalPitches ls (Nothing,_) = ls         accumLegalPitches ls (Just n,p)  = (n,p):ls@@ -383,11 +382,11 @@  instance Show ListLevelStyle where   show ListLevelStyle{..} =    "<LLS|"-                            ++ (show listLevelType)+                            ++ show listLevelType                             ++ "|"-                            ++ (maybeToString listItemPrefix)-                            ++ (show listItemFormat)-                            ++ (maybeToString listItemSuffix)+                            ++ maybeToString listItemPrefix+                            ++ show listItemFormat+                            ++ maybeToString listItemSuffix                             ++ ">"     where maybeToString = fromMaybe "" @@ -483,14 +482,14 @@     ( liftA6 PropT        ( searchAttr   NsXSL_FO "font-style"  False isFontEmphasised )        ( searchAttr   NsXSL_FO "font-weight" False isFontBold       )-       ( findPitch                                                  )+       findPitch        ( getAttr      NsStyle  "text-position"                      )-       ( readUnderlineMode                                          )-       ( readStrikeThroughMode                                      )+       readUnderlineMode+       readStrikeThroughMode      )   where isFontEmphasised = [("normal",False),("italic",True),("oblique",True)]         isFontBold = ("normal",False):("bold",True)-                    :(map ((,True).show) ([100,200..900]::[Int]))+                    :map ((,True).show) ([100,200..900]::[Int])  readUnderlineMode     :: StyleReaderSafe _x (Maybe UnderlineMode) readUnderlineMode     = readLineMode "text-underline-mode"@@ -510,7 +509,7 @@            Nothing -> returnA -< Just UnderlineModeNormal     else              returnA -< Nothing   where-    isLinePresent = [("none",False)] ++ map (,True)+    isLinePresent = ("none",False) : map (,True)                     [ "dash"      , "dot-dash" , "dot-dot-dash" , "dotted"                     , "long-dash" , "solid"    , "wave"                     ]@@ -547,20 +546,18 @@        findAttr NsStyle "name"   >>?! keepingTheValue        ( liftA ListStyle-         $ ( liftA3 SM.union3+         $ liftA3 SM.union3              ( readListLevelStyles NsText "list-level-style-number" LltNumbered )              ( readListLevelStyles NsText "list-level-style-bullet" LltBullet   )-             ( readListLevelStyles NsText "list-level-style-image"  LltImage    )-           ) >>^ M.mapMaybe chooseMostSpecificListLevelStyle+             ( readListLevelStyles NsText "list-level-style-image"  LltImage    ) >>^ M.mapMaybe chooseMostSpecificListLevelStyle        ) -- readListLevelStyles :: Namespace -> ElementName                     -> ListLevelType                     -> StyleReaderSafe _x (SM.SetMap Int ListLevelStyle) readListLevelStyles namespace elementName levelType =-  (     tryAll namespace elementName (readListLevelStyle levelType)+  tryAll namespace elementName (readListLevelStyle levelType)     >>^ SM.fromList-  )  -- readListLevelStyle :: ListLevelType -> StyleReader _x (Int, ListLevelStyle)@@ -632,7 +629,7 @@ getStyleFamily        :: Style       -> Styles -> Maybe StyleFamily getStyleFamily style@Style{..} styles   =     styleFamily-    <|> (F.asum $ map (`getStyleFamily` styles) $ parents style styles)+    <|> F.asum (map (`getStyleFamily` styles) $ parents style styles)  -- | Each 'Style' has certain 'StyleProperties'. But sometimes not all property -- values are specified. Instead, a value might be inherited from a@@ -654,7 +651,7 @@ -- extendedStylePropertyChain :: [Style] -> Styles -> [StyleProperties] extendedStylePropertyChain [] _ = []-extendedStylePropertyChain [style]       styles =    (stylePropertyChain style styles)-                                                  ++ (maybeToList (fmap (lookupDefaultStyle' styles) (getStyleFamily style styles)))-extendedStylePropertyChain (style:trace) styles =    (stylePropertyChain style styles)-                                                  ++ (extendedStylePropertyChain trace styles)+extendedStylePropertyChain [style]       styles =    stylePropertyChain style styles+                                                  ++ maybeToList (fmap (lookupDefaultStyle' styles) (getStyleFamily style styles))+extendedStylePropertyChain (style:trace) styles =    stylePropertyChain style styles+                                                  ++ extendedStylePropertyChain trace styles
src/Text/Pandoc/Readers/Org/Blocks.hs view
@@ -516,7 +516,7 @@   blocksParser <- case includeArgs of       ("example" : _) -> return $ pure . B.codeBlock <$> parseRaw       ["export"] -> return . returnF $ B.fromList []-      ("export" : format : []) -> return $ pure . B.rawBlock format <$> parseRaw+      ["export", format] -> return $ pure . B.rawBlock format <$> parseRaw       ("src" : rest) -> do         let attr = case rest of                      [lang] -> (mempty, [lang], mempty)
src/Text/Pandoc/Readers/Org/Inlines.hs view
@@ -603,6 +603,8 @@                 => Char                 -> OrgParser m Char updatePositions c = do+  st <- getState+  let emphasisPreChars = orgStateEmphasisPreChars st   when (c `elem` emphasisPreChars) updateLastPreCharPos   when (c `elem` emphasisForbiddenBorderChars) updateLastForbiddenCharPos   return c@@ -681,8 +683,10 @@   updateLastStrPos   popInlineCharStack   return c- where acceptablePostChars =-           surroundingEmphasisChar >>= \x -> oneOf (x ++ emphasisPostChars)+ where+  acceptablePostChars = do+    emphasisPostChars <- orgStateEmphasisPostChars <$> getState+    surroundingEmphasisChar >>= \x -> oneOf (x ++ emphasisPostChars)  mathStart :: PandocMonad m => Char -> OrgParser m Char mathStart c = try $@@ -733,14 +737,6 @@ -- 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]
src/Text/Pandoc/Readers/Org/Meta.hs view
@@ -43,6 +43,7 @@ import qualified Text.Pandoc.Builder as B import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition+import Text.Pandoc.Shared (safeRead)  import Control.Monad (mzero, void, when) import Data.Char (toLower)@@ -154,6 +155,8 @@     "seq_todo" -> todoSequence >>= updateState . registerTodoSequence     "typ_todo" -> todoSequence >>= updateState . registerTodoSequence     "macro"    -> macroDefinition >>= updateState . registerMacro+    "pandoc-emphasis-pre" -> emphChars >>= updateState . setEmphasisPreChar+    "pandoc-emphasis-post" -> emphChars >>= updateState . setEmphasisPostChar     _          -> mzero  addLinkFormat :: Monad m => String@@ -183,6 +186,25 @@     rest            = manyTill anyChar         (eof <|> () <$ oneOf "\n\r")    tillSpecifier c = manyTill (noneOf "\n\r") (try $ string ('%':c:""))++setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState+setEmphasisPreChar csMb st =+  let preChars = case csMb of+                   Nothing -> orgStateEmphasisPreChars defaultOrgParserState+                   Just cs -> cs+  in st { orgStateEmphasisPreChars = preChars }++setEmphasisPostChar :: Maybe [Char] -> OrgParserState -> OrgParserState+setEmphasisPostChar csMb st =+  let postChars = case csMb of+                   Nothing -> orgStateEmphasisPostChars defaultOrgParserState+                   Just cs -> cs+  in st { orgStateEmphasisPostChars = postChars }++emphChars :: Monad m => OrgParser m (Maybe [Char])+emphChars = do+  skipSpaces+  safeRead <$> anyLine  inlinesTillNewline :: PandocMonad m => OrgParser m (F Inlines) inlinesTillNewline = do
src/Text/Pandoc/Readers/Org/ParserState.hs view
@@ -29,6 +29,7 @@ -} module Text.Pandoc.Readers.Org.ParserState   ( OrgParserState (..)+  , defaultOrgParserState   , OrgParserLocal (..)   , OrgNoteRecord   , HasReaderOptions (..)@@ -104,6 +105,11 @@ data OrgParserState = OrgParserState   { orgStateAnchorIds            :: [String]   , orgStateEmphasisCharStack    :: [Char]+  , orgStateEmphasisPreChars     :: [Char] -- ^ Chars allowed to occur before+                                           -- emphasis; spaces and newlines are+                                           -- always ok in addition to what is+                                           -- specified here.+  , orgStateEmphasisPostChars    :: [Char] -- ^ Chars allowed at after emphasis   , orgStateEmphasisNewlines     :: Maybe Int   , orgStateExportSettings       :: ExportSettings   , orgStateHeaderMap            :: M.Map Inlines String@@ -124,7 +130,9 @@   , orgMacros                    :: M.Map Text Macro   } -data OrgParserLocal = OrgParserLocal { orgLocalQuoteContext :: QuoteContext }+data OrgParserLocal = OrgParserLocal+  { orgLocalQuoteContext :: QuoteContext+  }  instance Default OrgParserLocal where   def = OrgParserLocal NoQuote@@ -168,6 +176,8 @@ defaultOrgParserState :: OrgParserState defaultOrgParserState = OrgParserState   { orgStateAnchorIds = []+  , orgStateEmphasisPreChars = "-\t ('\"{"+  , orgStateEmphasisPostChars  = "-\t\n .,:!?;'\")}["   , orgStateEmphasisCharStack = []   , orgStateEmphasisNewlines = Nothing   , orgStateExportSettings = def
src/Text/Pandoc/Readers/RST.hs view
@@ -352,7 +352,7 @@ singleHeader' = try $ do   notFollowedBy' whitespace   lookAhead $ anyLine >> oneOf underlineChars-  txt <- trimInlines . mconcat <$> many1 (do {notFollowedBy newline; inline})+  txt <- trimInlines . mconcat <$> many1 (notFollowedBy blankline >> inline)   pos <- getPosition   let len = sourceColumn pos - 1   blankline@@ -1263,7 +1263,7 @@   let rawHeads = if headless                     then replicate (length dashes) ""                     else simpleTableSplitLine indices rawContent-  heads <- mapM ( (parseFromString' (mconcat <$> many plain)) . trim) rawHeads+  heads <- mapM ( parseFromString' (mconcat <$> many plain) . trim) rawHeads   return (heads, aligns, indices)  -- Parse a simple table.@@ -1414,7 +1414,7 @@            pepUrl = "http://www.python.org/dev/peps/pep-" ++ padNo ++ "/"  addClass :: String -> Attr -> Attr-addClass c (ident, classes, keyValues) = (ident, union classes [c], keyValues)+addClass c (ident, classes, keyValues) = (ident, classes `union` [c], keyValues)  roleName :: PandocMonad m => RSTParser m String roleName = many1 (letter <|> char '-')@@ -1454,7 +1454,7 @@   notFollowedBy blankline   -- parse potential list-starts at beginning of line differently in a list:   st <- getState-  when ((stateParserContext st) == ListItemState) $ notFollowedBy (anyOrderedListMarker >> spaceChar) >>+  when (stateParserContext st == ListItemState) $ notFollowedBy (anyOrderedListMarker >> spaceChar) >>           notFollowedBy' bulletListStart   return B.softbreak @@ -1577,7 +1577,7 @@       -- not yet in this implementation.       updateState $ \st -> st{ stateNotes = [] }       contents <- parseFromString' parseBlocks raw-      let newnotes = if (ref == "*" || ref == "#") -- auto-numbered+      let newnotes = if ref == "*" || ref == "#" -- auto-numbered                         -- delete the note so the next auto-numbered note                         -- doesn't get the same contents:                         then deleteFirstsBy (==) notes [(ref,raw)]
src/Text/Pandoc/Readers/Textile.hs view
@@ -110,7 +110,7 @@   startPos <- getPosition   ref <- noteMarker   optional blankline-  contents <- fmap unlines $ many1Till anyLine (blanklines <|> noteBlock)+  contents <- unlines <$> many1Till anyLine (blanklines <|> noteBlock)   endPos <- getPosition   let newnote = (ref, contents ++ "\n")   st <- getState@@ -360,7 +360,7 @@ tableCell :: PandocMonad m => ParserT [Char] ParserState m ((Bool, Alignment), Blocks) tableCell = try $ do   char '|'-  (isHeader, alignment) <- option (False, AlignDefault) $ cellAttributes+  (isHeader, alignment) <- option (False, AlignDefault) cellAttributes   notFollowedBy blankline   raw <- trim <$>          many (noneOf "|\n" <|> try (char '\n' <* notFollowedBy blankline))@@ -499,7 +499,7 @@  note :: PandocMonad m => ParserT [Char] ParserState m Inlines note = try $ do-  ref <- (char '[' *> many1 digit <* char ']')+  ref <- char '[' *> many1 digit <* char ']'   notes <- stateNotes <$> getState   case lookup ref notes of     Nothing  -> fail "note not found"@@ -530,7 +530,7 @@ wordChunk :: PandocMonad m => ParserT [Char] ParserState m String wordChunk = try $ do   hd <- noneOf wordBoundaries-  tl <- many ( (noneOf wordBoundaries) <|>+  tl <- many ( noneOf wordBoundaries <|>                try (notFollowedBy' note *> oneOf markupChars                      <* lookAhead (noneOf wordBoundaries) ) )   return $ hd:tl@@ -614,7 +614,7 @@ -- | literal text escaped btw <notextile> tags escapedTag :: PandocMonad m => ParserT [Char] ParserState m Inlines escapedTag = B.str <$>-  (try $ string "<notextile>" *>+  try (string "<notextile>" *>          manyTill anyChar' (try $ string "</notextile>"))  -- | Any special symbol defined in wordBoundaries@@ -630,7 +630,8 @@ -- any character except a newline before a blank line anyChar' :: PandocMonad m => ParserT [Char] ParserState m Char anyChar' =-  satisfy (/='\n') <|> (try $ char '\n' <* notFollowedBy blankline)+  satisfy (/='\n') <|>+  try (char '\n' <* notFollowedBy blankline)  code1 :: PandocMonad m => ParserT [Char] ParserState m Inlines code1 = B.code <$> surrounded (char '@') anyChar'
src/Text/Pandoc/Readers/TikiWiki.hs view
@@ -168,7 +168,7 @@   where     -- The headers are as many empty srings as the number of columns     -- in the first row-    headers rows = map (B.plain . B.str) $replicate (length $ rows !! 0) ""+    headers rows = map (B.plain . B.str) $replicate (length $ head rows) ""  para :: PandocMonad m => TikiWikiParser m B.Blocks para =  fmap (result . mconcat) ( many1Till inline endOfParaElement)@@ -238,8 +238,8 @@ fixListNesting (first:second:rest) =   let secondBlock = head $ B.toList second in     case secondBlock of-      BulletList _ -> fixListNesting $ (mappend (recurseOnList first) (recurseOnList second)) : rest-      OrderedList _ _ -> fixListNesting $ (mappend (recurseOnList first) (recurseOnList second)) : rest+      BulletList _ -> fixListNesting $ mappend (recurseOnList first) (recurseOnList second) : rest+      OrderedList _ _ -> fixListNesting $ mappend (recurseOnList first) (recurseOnList second) : rest       _ -> recurseOnList first : fixListNesting (second:rest)  -- This function walks the Block structure for fixListNesting,@@ -285,7 +285,7 @@ -- level and of the same type. splitListNesting :: ListNesting -> (ListNesting, B.Blocks) -> Bool splitListNesting ln1 (ln2, _)-  | (lnnest ln1) < (lnnest ln2) =+  | lnnest ln1 < lnnest ln2 =   True   | ln1 == ln2 =   True@@ -341,7 +341,7 @@     lineContent = do       content <- anyLine       continuation <- optionMaybe listContinuation-      return $ filterSpaces content ++ "\n" ++ maybe "" id continuation+      return $ filterSpaces content ++ "\n" ++ Data.Maybe.fromMaybe "" continuation     filterSpaces = reverse . dropWhile (== ' ') . reverse     listContinuation = string (replicate nest '+') >> lineContent     parseContent x = do@@ -410,7 +410,7 @@                 ] <?> "inline"  whitespace :: PandocMonad m => TikiWikiParser m B.Inlines-whitespace = (lb <|> regsp)+whitespace = lb <|> regsp   where lb = try $ skipMany spaceChar >> linebreak >> return B.space         regsp = try $ skipMany1 spaceChar >> return B.space @@ -501,7 +501,7 @@   string "~"   inner <- many1 $ oneOf "0123456789"   string "~"-  return $B.str [(toEnum (read inner :: Int)) :: Char]+  return $B.str [toEnum (read inner :: Int) :: Char]  -- UNSUPPORTED, as there doesn't seem to be any facility in calibre -- for this
src/Text/Pandoc/Readers/Txt2Tags.hs view
@@ -36,7 +36,7 @@ import Control.Monad.Reader (Reader, asks, runReader) import Data.Char (toLower) import Data.Default-import Data.List (intercalate, intersperse, transpose)+import Data.List (intercalate, transpose) import Data.Maybe (fromMaybe) import Data.Monoid ((<>)) import Data.Text (Text)@@ -463,7 +463,7 @@   char ']'   let link' = last tokens   guard $ not $ null link'-  let tit = concat (intersperse " " (init tokens))+  let tit = unwords (init tokens)   return $ B.link link' "" (B.text tit)  -- Link with image@@ -529,8 +529,7 @@   -- List taken from txt2tags source   let extensions = [".jpg", ".jpeg", ".gif", ".png", ".eps", ".bmp"]   char '['-  path <- manyTill (noneOf "\n\t\r ") (try $ lookAhead (oneOfStrings extensions))-  ext <- oneOfStrings extensions+  (path, ext) <- manyUntil (noneOf "\n\t\r ") (oneOfStrings extensions)   char ']'   return $ B.image (path ++ ext) "" mempty 
src/Text/Pandoc/Readers/Vimwiki.hs view
@@ -388,9 +388,7 @@  orderedListMarkers :: PandocMonad m => VwParser m String orderedListMarkers =-  ("ol" <$choice (orderedListMarker Decimal Period:(($OneParen)-    <$> orderedListMarker-    <$> [Decimal, LowerRoman, UpperRoman, LowerAlpha, UpperAlpha])))+  ("ol" <$choice (orderedListMarker Decimal Period:(($OneParen) . orderedListMarker <$> [Decimal, LowerRoman, UpperRoman, LowerAlpha, UpperAlpha])))     <|> ("ol" <$ char '#')  --many need trimInlines
src/Text/Pandoc/Shared.hs view
@@ -494,7 +494,7 @@   return $ Sec level newnum attr title' sectionContents' : rest' hierarchicalizeWithIds (Div ("",["references"],[])                          (Header level (ident,classes,kvs) title' : xs):ys) =-  hierarchicalizeWithIds (Header level (ident,("references":classes),kvs)+  hierarchicalizeWithIds (Header level (ident,"references":classes,kvs)                            title' : (xs ++ ys)) hierarchicalizeWithIds (x:rest) = do   rest' <- hierarchicalizeWithIds rest
src/Text/Pandoc/Writers/AsciiDoc.hs view
@@ -43,6 +43,7 @@ import Data.List (intercalate, intersperse, stripPrefix) import qualified Data.Map as M import Data.Maybe (fromMaybe, isJust)+import qualified Data.Set as Set import Data.Text (Text) import qualified Data.Text as T import Text.Pandoc.Class (PandocMonad, report)@@ -60,6 +61,7 @@                                , orderedListLevel :: Int                                , bulletListLevel  :: Int                                , intraword        :: Bool+                               , autoIds          :: Set.Set String                                }  -- | Convert Pandoc to AsciiDoc.@@ -70,6 +72,7 @@     , orderedListLevel = 1     , bulletListLevel = 1     , intraword = False+    , autoIds = Set.empty     }  type ADW = StateT WriterState@@ -164,7 +167,11 @@   let len = offset contents   -- ident seem to be empty most of the time and asciidoc will generate them automatically   -- so lets make them not show up when null-  let identifier = if null ident then empty else "[[" <> text ident <> "]]"+  ids <- gets autoIds+  let autoId = uniqueIdent inlines ids+  modify $ \st -> st{ autoIds = Set.insert autoId ids }+  let identifier = if null ident || (isEnabled Ext_auto_identifiers opts && ident == autoId)+                     then empty else "[[" <> text ident <> "]]"   let setext = writerSetextHeaders opts   return          (if setext@@ -265,8 +272,7 @@   let markers' = map (\m -> if length m < 3                                then m ++ replicate (3 - length m) ' '                                else m) markers-  contents <- mapM (uncurry (orderedListItemToAsciiDoc opts)) $-              zip markers' items+  contents <- zipWithM (orderedListItemToAsciiDoc opts) markers' items   return $ cat contents <> blankline blockToAsciiDoc opts (DefinitionList items) = do   contents <- mapM (definitionListItemToAsciiDoc opts) items@@ -452,7 +458,7 @@               else prefix <> text src <> "[" <> linktext <> "]" inlineToAsciiDoc opts (Image attr alternate (src, tit)) = do -- image:images/logo.png[Company logo, title="blah"]-  let txt = if (null alternate) || (alternate == [Str ""])+  let txt = if null alternate || (alternate == [Str ""])                then [Str "image"]                else alternate   linktext <- inlineListToAsciiDoc opts txt
src/Text/Pandoc/Writers/ConTeXt.hs view
@@ -159,8 +159,9 @@ elementToConTeXt _ (Blk block) = blockToConTeXt block elementToConTeXt opts (Sec level _ attr title' elements) = do   header' <- sectionHeader attr level title'+  footer' <- sectionFooter attr level   innerContents <- mapM (elementToConTeXt opts) elements-  return $ vcat (header' : innerContents)+  return $ header' $$ vcat innerContents $$ footer'  -- | Convert Pandoc block element to ConTeXt. blockToConTeXt :: PandocMonad m => Block -> WM m Doc@@ -267,7 +268,7 @@     return $ "\\startplacetable" <> brackets (       if null caption         then "location=none"-        else "caption=" <> braces captionText+        else "title=" <> braces captionText       ) $$ body $$ "\\stopplacetable" <> blankline  tableToConTeXt :: PandocMonad m => Tabl -> Doc -> [Doc] -> WM m Doc@@ -485,32 +486,51 @@               -> Int               -> [Inline]               -> WM m Doc-sectionHeader (ident,classes,_) hdrLevel lst = do+sectionHeader (ident,classes,kvs) hdrLevel lst = do+  opts <- gets stOptions   contents <- inlineListToConTeXt lst-  st <- get-  let opts = stOptions st+  levelText <- sectionLevelToText opts (ident,classes,kvs) hdrLevel+  let ident' = if null ident+               then empty+               else "reference=" <> braces (text (toLabel ident))+  let contents' = if contents == empty+                  then empty+                  else "title=" <> braces contents+  let options = if keys == empty || levelText == empty+                then empty+                else brackets keys+        where keys = hcat $ intersperse "," $ filter (empty /=) [contents', ident']+  let starter = if writerSectionDivs opts+                then "\\start"+                else "\\"+  return $ starter <> levelText <> options <> blankline++-- | Craft the section footer+sectionFooter :: PandocMonad m => Attr -> Int -> WM m Doc+sectionFooter attr hdrLevel = do+  opts <- gets stOptions+  levelText <- sectionLevelToText opts attr hdrLevel+  return $ if writerSectionDivs opts+           then "\\stop" <> levelText <> blankline+           else empty++-- | Generate a textual representation of the section level+sectionLevelToText :: PandocMonad m => WriterOptions -> Attr -> Int -> WM m Doc+sectionLevelToText opts (_,classes,_) hdrLevel = do   let level' = case writerTopLevelDivision opts of                  TopLevelPart    -> hdrLevel - 2                  TopLevelChapter -> hdrLevel - 1                  TopLevelSection -> hdrLevel                  TopLevelDefault -> hdrLevel-  let ident' = if null ident-                  then empty-                  else brackets (text (toLabel ident))   let (section, chapter) = if "unnumbered" `elem` classes                               then (text "subject", text "title")                               else (text "section", text "chapter")   return $ case level' of-             -1                   -> text "\\part" <> ident' <> braces contents-             0                    -> char '\\' <> chapter <> ident' <>-                                           braces contents-             n | n >= 1 && n <= 5 -> char '\\'-                                     <> text (concat (replicate (n - 1) "sub"))-                                     <> section-                                     <> ident'-                                     <> braces contents-                                     <> blankline-             _                    -> contents <> blankline+             -1         -> text "part"+             0          -> chapter+             n | n >= 1 -> text (concat (replicate (n - 1) "sub"))+                           <> section+             _          -> empty -- cannot happen  fromBCP47 :: PandocMonad m => Maybe String -> WM m (Maybe String) fromBCP47 mbs = fromBCP47' <$> toLang mbs
src/Text/Pandoc/Writers/Custom.hs view
@@ -44,7 +44,7 @@ import Text.Pandoc.Class (PandocIO) import Text.Pandoc.Definition import Text.Pandoc.Error-import Text.Pandoc.Lua.Init (runPandocLua)+import Text.Pandoc.Lua.Init (runPandocLua, registerScriptPath) import Text.Pandoc.Lua.StackInstances () import Text.Pandoc.Lua.Util (addValue, dostring') import Text.Pandoc.Options@@ -106,6 +106,7 @@ writeCustom luaFile opts doc@(Pandoc meta _) = do   luaScript <- liftIO $ UTF8.readFile luaFile   res <- runPandocLua $ do+    registerScriptPath luaFile     stat <- dostring' luaScript     -- check for error in lua script (later we'll change the return type     -- to handle this more gracefully):
src/Text/Pandoc/Writers/Docx.hs view
@@ -47,7 +47,7 @@ import qualified Data.Text as T import Data.Time.Clock.POSIX import Skylighting-import System.Random (randomR)+import System.Random (randomR, StdGen, mkStdGen) import Text.Pandoc.BCP47 (getLang, renderLang) import Text.Pandoc.Class (PandocMonad, report, toLang) import qualified Text.Pandoc.Class as P@@ -123,7 +123,7 @@        , stComments       :: [([(String,String)], [Inline])]        , stSectionIds     :: Set.Set String        , stExternalLinks  :: M.Map String String-       , stImages         :: M.Map FilePath (String, String, Maybe MimeType, Element, B.ByteString)+       , stImages         :: M.Map FilePath (String, String, Maybe MimeType, B.ByteString)        , stLists          :: [ListMarker]        , stInsId          :: Int        , stDelId          :: Int@@ -132,6 +132,7 @@        , stTocTitle       :: [Inline]        , stDynamicParaProps :: Set.Set String        , stDynamicTextProps :: Set.Set String+       , stCurId          :: Int        }  defaultWriterState :: WriterState@@ -149,6 +150,7 @@       , stTocTitle       = [Str "Table of Contents"]       , stDynamicParaProps = Set.empty       , stDynamicTextProps = Set.empty+      , stCurId          = 20       }  type WS m = ReaderT WriterEnv (StateT WriterState m)@@ -292,7 +294,7 @@   let imgs = M.elems $ stImages st    -- create entries for images in word/media/...-  let toImageEntry (_,path,_,_,img) = toEntry ("word/" ++ path) epochtime $ toLazy img+  let toImageEntry (_,path,_,img) = toEntry ("word/" ++ path) epochtime $ toLazy img   let imageEntries = map toImageEntry imgs    let stdAttributes =@@ -324,7 +326,7 @@   -- [Content_Types].xml   let mkOverrideNode (part', contentType') = mknode "Override"                [("PartName",part'),("ContentType",contentType')] ()-  let mkImageOverride (_, imgpath, mbMimeType, _, _) =+  let mkImageOverride (_, imgpath, mbMimeType, _) =           mkOverrideNode ("/word/" ++ imgpath,                           fromMaybe "application/octet-stream" mbMimeType)   let mkMediaOverride imgpath =@@ -405,7 +407,7 @@   let renumHeaders = renumIds (\q -> qName q == "Id") idMap headers   let renumFooters = renumIds (\q -> qName q == "Id") idMap footers   let baserels = baserels' ++ renumHeaders ++ renumFooters-  let toImgRel (ident,path,_,_,_) =  mknode "Relationship" [("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"),("Id",ident),("Target",path)] ()+  let toImgRel (ident,path,_,_) =  mknode "Relationship" [("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"),("Id",ident),("Target",path)] ()   let imgrels = map toImgRel imgs   let toLinkRel (src,ident) =  mknode "Relationship" [("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"),("Id",ident),("Target",src),("TargetMode","External") ] ()   let linkrels = map toLinkRel $ M.toList $ stExternalLinks st@@ -642,7 +644,7 @@  mkNumbering :: (PandocMonad m) => [ListMarker] -> m [Element] mkNumbering lists = do-  elts <- mapM mkAbstractNum (ordNub lists)+  elts <- evalStateT (mapM mkAbstractNum (ordNub lists)) (mkStdGen 1848)   return $ elts ++ zipWith mkNum lists [baseListId..(baseListId + length lists - 1)]  maxListLevel :: Int@@ -660,10 +662,11 @@               $ mknode "w:startOverride" [("w:val",show start)] ())                 [0..maxListLevel] -mkAbstractNum :: (PandocMonad m) => ListMarker -> m Element+mkAbstractNum :: (PandocMonad m) => ListMarker -> StateT StdGen m Element mkAbstractNum marker = do-  gen <- P.newStdGen-  let (nsid, _) = randomR (0x10000000 :: Integer, 0xFFFFFFFF :: Integer) gen+  gen <- get+  let (nsid, gen') = randomR (0x10000000 :: Integer, 0xFFFFFFFF :: Integer) gen+  put gen'   return $ mknode "w:abstractNum" [("w:abstractNumId",listMarkerToId marker)]     $ mknode "w:nsid" [("w:val", printf "%8x" nsid)] ()     : mknode "w:multiLevelType" [("w:val","multilevel")] ()@@ -822,10 +825,13 @@   let sty' = getStyleId styleName $ sCharStyleMap styleMaps   return $ mknode "w:rStyle" [("w:val",sty')] () -getUniqueId :: (PandocMonad m) => m String+getUniqueId :: (PandocMonad m) => WS m String -- the + 20 is to ensure that there are no clashes with the rIds -- already in word/document.xml.rel-getUniqueId = (show . (+ 20)) <$> P.newUniqueHash+getUniqueId = do+  n <- gets stCurId+  modify $ \st -> st{stCurId = n + 1}+  return $ show n  -- | Key for specifying user-defined docx styles. dynamicStyleKey :: String@@ -1057,12 +1063,9 @@   props <- asks envParaProperties   listLevel <- asks envListLevel   numid <- asks envListNumId-  let listPr = if listLevel >= 0 && not displayMathPara-                  then [ mknode "w:numPr" []-                         [ mknode "w:numId" [("w:val",show numid)] ()-                         , mknode "w:ilvl" [("w:val",show listLevel)] () ]-                       ]-                  else []+  let listPr = [mknode "w:numPr" []+                [ mknode "w:numId" [("w:val",show numid)] ()+                , mknode "w:ilvl" [("w:val",show listLevel)] () ] | listLevel >= 0 && not displayMathPara]   return $ case props ++ listPr of                 [] -> []                 ps -> [mknode "w:pPr" [] ps]@@ -1107,15 +1110,23 @@ inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ") inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ") inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do-  modify $ \st -> st{ stComments = (("id",ident):kvs, ils) : stComments st }-  return [ mknode "w:commentRangeStart" [("w:id", ident)] () ]-inlineToOpenXML' _ (Span (ident,["comment-end"],_) _) =-  return [ mknode "w:commentRangeEnd" [("w:id", ident)] ()-       , mknode "w:r" []-         [ mknode "w:rPr" []-           [ mknode "w:rStyle" [("w:val", "CommentReference")] () ]-         , mknode "w:commentReference" [("w:id", ident)] () ]-       ]+  -- prefer the "id" in kvs, since that is the one produced by the docx+  -- reader.+  let ident' = fromMaybe ident (lookup "id" kvs)+      kvs' = filter (("id" /=) . fst) kvs+  modify $ \st -> st{ stComments = (("id",ident'):kvs', ils) : stComments st }+  return [ mknode "w:commentRangeStart" [("w:id", ident')] () ]+inlineToOpenXML' _ (Span (ident,["comment-end"],kvs) _) =+  -- prefer the "id" in kvs, since that is the one produced by the docx+  -- reader.+  let ident' = fromMaybe ident (lookup "id" kvs)+  in+    return [ mknode "w:commentRangeEnd" [("w:id", ident')] ()+           , mknode "w:r" []+             [ mknode "w:rPr" []+               [ mknode "w:rStyle" [("w:val", "CommentReference")] () ]+             , mknode "w:commentReference" [("w:id", ident')] () ]+           ] inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do   stylemod <- case lookup dynamicStyleKey kvs of                    Just sty -> do@@ -1145,22 +1156,22 @@                  return $ \f -> do                    x <- f                    return [ mknode "w:ins"-                              [("w:id", (show insId)),+                              [("w:id", show insId),                               ("w:author", author),                               ("w:date", date)] x ]                else return id-  delmod <- if "insertion" `elem` classes+  delmod <- if "deletion" `elem` classes                then do                  defaultAuthor <- asks envChangesAuthor                  defaultDate <- asks envChangesDate                  let author = fromMaybe defaultAuthor (lookup "author" kvs)                      date   = fromMaybe defaultDate (lookup "date" kvs)-                 insId <- gets stInsId-                 modify $ \s -> s{stInsId = insId + 1}-                 return $ \f -> do+                 delId <- gets stDelId+                 modify $ \s -> s{stDelId = delId + 1}+                 return $ \f -> local (\env->env{envInDel=True}) $ do                    x <- f-                   return [mknode "w:ins"-                           [("w:id", show insId),+                   return [mknode "w:del"+                           [("w:id", show delId),                            ("w:author", author),                            ("w:date", date)] x]                else return id@@ -1227,7 +1238,7 @@                       unhighlighted inlineToOpenXML' opts (Note bs) = do   notes <- gets stFootnotes-  notenum <- (lift . lift) getUniqueId+  notenum <- getUniqueId   footnoteStyle <- rStyleM "Footnote Reference"   let notemarker = mknode "w:r" []                    [ mknode "w:rPr" [] footnoteStyle@@ -1258,92 +1269,109 @@   id' <- case M.lookup src extlinks of             Just i   -> return i             Nothing  -> do-              i <- ("rId"++) `fmap` (lift . lift) getUniqueId+              i <- ("rId"++) `fmap` getUniqueId               modify $ \st -> st{ stExternalLinks =                         M.insert src i extlinks }               return i   return [ mknode "w:hyperlink" [("r:id",id')] contents ] inlineToOpenXML' opts (Image attr alt (src, title)) = do-  -- first, check to see if we've already done this image   pageWidth <- asks envPrintWidth   imgs <- gets stImages-  case M.lookup src imgs of-    Just (_,_,_,elt,_) -> return [elt]-    Nothing ->-      catchError-      (do (img, mt) <- P.fetchItem src-          ident <- ("rId"++) `fmap` ((lift . lift) getUniqueId)-          let (xpt,ypt) = desiredSizeInPoints opts attr-                 (either (const def) id (imageSize opts img))-          -- 12700 emu = 1 pt-          let (xemu,yemu) = fitToPage (xpt * 12700, ypt * 12700)-                                  (pageWidth * 12700)-          let cNvPicPr = mknode "pic:cNvPicPr" [] $-                           mknode "a:picLocks" [("noChangeArrowheads","1")-                                               ,("noChangeAspect","1")] ()-          let nvPicPr  = mknode "pic:nvPicPr" []-                          [ mknode "pic:cNvPr"-                              [("descr",src),("id","0"),("name","Picture")] ()-                          , cNvPicPr ]-          let blipFill = mknode "pic:blipFill" []-                           [ mknode "a:blip" [("r:embed",ident)] ()-                           , mknode "a:stretch" [] $-                             mknode "a:fillRect" [] () ]-          let xfrm =    mknode "a:xfrm" []-                          [ mknode "a:off" [("x","0"),("y","0")] ()-                          , mknode "a:ext" [("cx",show xemu)-                                           ,("cy",show yemu)] () ]-          let prstGeom = mknode "a:prstGeom" [("prst","rect")] $-                           mknode "a:avLst" [] ()-          let ln =      mknode "a:ln" [("w","9525")]-                          [ mknode "a:noFill" [] ()-                          , mknode "a:headEnd" [] ()-                          , mknode "a:tailEnd" [] () ]-          let spPr =    mknode "pic:spPr" [("bwMode","auto")]-                          [xfrm, prstGeom, mknode "a:noFill" [] (), ln]-          let graphic = mknode "a:graphic" [] $-                          mknode "a:graphicData"-                            [("uri","http://schemas.openxmlformats.org/drawingml/2006/picture")]-                            [ mknode "pic:pic" []-                              [ nvPicPr-                              , blipFill-                              , spPr ] ]-          let imgElt = mknode "w:r" [] $-               mknode "w:drawing" [] $-                 mknode "wp:inline" []-                  [ mknode "wp:extent" [("cx",show xemu),("cy",show yemu)] ()-                  , mknode "wp:effectExtent"-                       [("b","0"),("l","0"),("r","0"),("t","0")] ()-                  , mknode "wp:docPr" [("descr",stringify alt)-                                      ,("title", title)-                                      ,("id","1")-                                      ,("name","Picture")] ()-                  , graphic ]-          let imgext = case mt >>= extensionFromMimeType of-                            Just x    -> '.':x-                            Nothing   -> case imageType img of-                                              Just Png  -> ".png"-                                              Just Jpeg -> ".jpeg"-                                              Just Gif  -> ".gif"-                                              Just Pdf  -> ".pdf"-                                              Just Eps  -> ".eps"-                                              Just Svg  -> ".svg"-                                              Nothing   -> ""-          if null imgext-             then -- without an extension there is no rule for content type-               inlinesToOpenXML opts alt -- return alt to avoid corrupted docx-             else do-               let imgpath = "media/" ++ ident ++ imgext-               let mbMimeType = mt <|> getMimeType imgpath-               -- insert mime type to use in constructing [Content_Types].xml-               modify $ \st -> st{ stImages =-                   M.insert src (ident, imgpath, mbMimeType, imgElt, img)-                           $ stImages st }-               return [imgElt])-      (\e -> do-         report $ CouldNotFetchResource src (show e)-         -- emit alt text-         inlinesToOpenXML opts alt)+  let+    stImage = M.lookup src imgs+    generateImgElt (ident, _, _, img) =+      let+        (xpt,ypt) = desiredSizeInPoints opts attr+               (either (const def) id (imageSize opts img))+        -- 12700 emu = 1 pt+        (xemu,yemu) = fitToPage (xpt * 12700, ypt * 12700)+                                (pageWidth * 12700)+        cNvPicPr = mknode "pic:cNvPicPr" [] $+                         mknode "a:picLocks" [("noChangeArrowheads","1")+                                             ,("noChangeAspect","1")] ()+        nvPicPr  = mknode "pic:nvPicPr" []+                        [ mknode "pic:cNvPr"+                            [("descr",src),("id","0"),("name","Picture")] ()+                        , cNvPicPr ]+        blipFill = mknode "pic:blipFill" []+          [ mknode "a:blip" [("r:embed",ident)] ()+          , mknode "a:stretch" [] $+              mknode "a:fillRect" [] ()+          ]+        xfrm =    mknode "a:xfrm" []+                        [ mknode "a:off" [("x","0"),("y","0")] ()+                        , mknode "a:ext" [("cx",show xemu)+                                         ,("cy",show yemu)] () ]+        prstGeom = mknode "a:prstGeom" [("prst","rect")] $+                         mknode "a:avLst" [] ()+        ln =      mknode "a:ln" [("w","9525")]+                        [ mknode "a:noFill" [] ()+                        , mknode "a:headEnd" [] ()+                        , mknode "a:tailEnd" [] () ]+        spPr =    mknode "pic:spPr" [("bwMode","auto")]+                        [xfrm, prstGeom, mknode "a:noFill" [] (), ln]+        graphic = mknode "a:graphic" [] $+          mknode "a:graphicData"+            [("uri","http://schemas.openxmlformats.org/drawingml/2006/picture")]+            [ mknode "pic:pic" []+              [ nvPicPr+              , blipFill+              , spPr+              ]+            ]+        imgElt = mknode "w:r" [] $+          mknode "w:drawing" [] $+            mknode "wp:inline" []+              [ mknode "wp:extent" [("cx",show xemu),("cy",show yemu)] ()+              , mknode "wp:effectExtent"+                [("b","0"),("l","0"),("r","0"),("t","0")] ()+              , mknode "wp:docPr"+                [ ("descr", stringify alt)+                , ("title", title)+                , ("id","1")+                , ("name","Picture")+                ] ()+              , graphic+              ]+      in+        imgElt++  case stImage of+    Just imgData -> return $ [generateImgElt imgData]+    Nothing -> ( do --try+      (img, mt) <- P.fetchItem src+      ident <- ("rId"++) `fmap` getUniqueId++      let+        imgext = case mt >>= extensionFromMimeType of+          Just x    -> '.':x+          Nothing   -> case imageType img of+            Just Png  -> ".png"+            Just Jpeg -> ".jpeg"+            Just Gif  -> ".gif"+            Just Pdf  -> ".pdf"+            Just Eps  -> ".eps"+            Just Svg  -> ".svg"+            Just Emf  -> ".emf"+            Nothing   -> ""+        imgpath = "media/" ++ ident ++ imgext+        mbMimeType = mt <|> getMimeType imgpath++        imgData = (ident, imgpath, mbMimeType, img)++      if null imgext+         then -- without an extension there is no rule for content type+           inlinesToOpenXML opts alt -- return alt to avoid corrupted docx+         else do+           -- insert mime type to use in constructing [Content_Types].xml+           modify $ \st -> st { stImages = M.insert src imgData $ stImages st }+           return [generateImgElt imgData]+      )+      `catchError` ( \e -> do+        report $ CouldNotFetchResource src (show e)+        -- emit alt text+        inlinesToOpenXML opts alt+      )  br :: Element br = breakElement "textWrapping"
src/Text/Pandoc/Writers/FB2.hs view
@@ -131,8 +131,7 @@                     _       -> return []   return $ el "description"     [ el "title-info" (genre : (bt ++ as ++ dd ++ lang))-    , el "document-info" ([ el "program-used" "pandoc" ] -- FIXME: +version-                          ++ coverpage)+    , el "document-info" (el "program-used" "pandoc" : coverpage)     ]  booktitle :: PandocMonad m => Meta -> FBM m [Content]
src/Text/Pandoc/Writers/HTML.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE OverloadedStrings   #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ViewPatterns        #-}+{-# LANGUAGE MultiWayIf          #-} {- Copyright (C) 2006-2018 John MacFarlane <jgm@berkeley.edu> @@ -57,6 +58,10 @@ import Network.URI (URI (..), parseURIReference, unEscapeString) import Numeric (showHex) import Text.Blaze.Internal (customLeaf, MarkupM(Empty))+#if MIN_VERSION_blaze_markup(0,6,3)+#else+import Text.Blaze.Internal (preEscapedString, preEscapedText)+#endif import Text.Blaze.Html hiding (contents) import Text.Pandoc.Definition import Text.Pandoc.Highlighting (formatHtmlBlock, formatHtmlInline, highlight,@@ -424,7 +429,7 @@                   modify (\st -> st{ stElement = False})                   return res -  let isSec (Sec{}) = True+  let isSec Sec{} = True       isSec (Blk _) = False   let isPause (Blk x) = x == Para [Str ".",Space,Str ".",Space,Str "."]       isPause _       = False@@ -618,7 +623,7 @@  treatAsImage :: FilePath -> Bool treatAsImage fp =-  let path = fromMaybe fp (uriPath `fmap` parseURIReference fp)+  let path = maybe fp uriPath (parseURIReference fp)       ext  = map toLower $ drop 1 $ takeExtension path   in  null ext || ext `elem` imageExts @@ -674,23 +679,31 @@     return $ H.div ! A.class_ "line-block" $ htmlLines blockToHtml opts (Div attr@(ident, classes, kvs') bs) = do   html5 <- gets stHtml5+  slideVariant <- gets stSlideVariant   let kvs = [(k,v) | (k,v) <- kvs', k /= "width"] ++             [("style", "width:" ++ w ++ ";")              | ("width",w) <- kvs', "column" `elem` classes]   let speakerNotes = "notes" `elem` classes   -- we don't want incremental output inside speaker notes, see #1394-  let opts' = if speakerNotes then opts{ writerIncremental = False } else opts-  contents <- if "columns" `elem` classes+  let opts' = if | speakerNotes -> opts{ writerIncremental = False }+                 | "incremental" `elem` classes -> opts{ writerIncremental = True }+                 | "nonincremental" `elem` classes -> opts{ writerIncremental = False }+                 | otherwise -> opts+      -- we remove "incremental" and "nonincremental" if we're in a+      -- slide presentaiton format.+      classes' = case slideVariant of+        NoSlides -> classes+        _ -> filter (\k -> k /= "incremental" && k /= "nonincremental") classes+  contents <- if "columns" `elem` classes'                  then -- we don't use blockListToHtml because it inserts                       -- a newline between the column divs, which throws                       -- off widths! see #4028                       mconcat <$> mapM (blockToHtml opts) bs                  else blockListToHtml opts' bs   let contents' = nl opts >> contents >> nl opts-  let (divtag, classes') = if html5 && "section" `elem` classes-                              then (H5.section, filter (/= "section") classes)-                              else (H.div, classes)-  slideVariant <- gets stSlideVariant+  let (divtag, classes'') = if html5 && "section" `elem` classes'+                            then (H5.section, filter (/= "section") classes')+                            else (H.div, classes')   if speakerNotes      then case slideVariant of                RevealJsSlides -> addAttrs opts' attr $@@ -702,7 +715,7 @@                NoSlides       -> addAttrs opts' attr $                            H.div contents'                _              -> return mempty-     else addAttrs opts (ident, classes', kvs) $+     else addAttrs opts (ident, classes'', kvs) $               divtag contents' blockToHtml opts (RawBlock f str) = do   ishtml <- isRawHtml f@@ -797,8 +810,8 @@   let numstyle' = case numstyle of                        Example -> "decimal"                        _       -> camelCaseToHyphenated $ show numstyle-  let attribs = ([A.start $ toValue startnum | startnum /= 1]) ++-                ([A.class_ "example" | numstyle == Example]) +++  let attribs = [A.start $ toValue startnum | startnum /= 1] +++                [A.class_ "example" | numstyle == Example] ++                 (if numstyle /= DefaultStyle                    then if html5                            then [A.type_ $@@ -819,7 +832,7 @@                   do term' <- if null term                                  then return mempty                                  else liftM H.dt $ inlineListToHtml opts term-                     defs' <- mapM (liftM (\x -> H.dd $ (x >> nl opts)) .+                     defs' <- mapM (liftM (\x -> H.dd (x >> nl opts)) .                                     blockListToHtml opts) defs                      return $ mconcat $ nl opts : term' : nl opts :                                         intersperse (nl opts) defs') lst
src/Text/Pandoc/Writers/Haddock.hs view
@@ -168,8 +168,7 @@   let markers' = map (\m -> if length m < 3                                then m ++ replicate (3 - length m) ' '                                else m) markers-  contents <- mapM (uncurry (orderedListItemToHaddock opts)) $-              zip markers' items+  contents <- zipWithM (orderedListItemToHaddock opts) markers' items   return $ cat contents <> blankline blockToHaddock opts (DefinitionList items) = do   contents <- mapM (definitionListItemToHaddock opts) items
src/Text/Pandoc/Writers/ICML.hs view
@@ -154,7 +154,7 @@ -- | Auxilary functions for parStylesToDoc and charStylesToDoc. contains :: String -> (String, (String, String)) -> [(String, String)] contains s rule =-  [snd rule | isInfixOf (fst rule) s]+  [snd rule | (fst rule) `isInfixOf` s]  -- | The monospaced font to use as default. monospacedFont :: Doc@@ -282,7 +282,7 @@                     ("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/"++(escapeColons (escapeStringForXML url))) -- HyperlinkURLDestination with more than one colon crashes CS6+                  $$ inTags False "Destination" [("type","object")] (text $ "HyperlinkURLDestination/"++escapeColons (escapeStringForXML url)) -- HyperlinkURLDestination with more than one colon crashes CS6   -- | Convert a list of Pandoc blocks to ICML.
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -41,7 +41,7 @@                   toLower) import Data.List (foldl', intercalate, intersperse, isInfixOf, nubBy,                   stripPrefix, (\\))-import Data.Maybe (catMaybes, fromMaybe, isJust, mapMaybe)+import Data.Maybe (catMaybes, fromMaybe, isJust, mapMaybe, isNothing) import Data.Text (Text) import qualified Data.Text as T import Network.URI (unEscapeString)@@ -401,7 +401,7 @@       let frameoptions = ["allowdisplaybreaks", "allowframebreaks", "fragile",                           "b", "c", "t", "environment",                           "label", "plain", "shrink", "standout"]-      let optionslist = ["fragile" | fragile && lookup "fragile" kvs == Nothing] +++      let optionslist = ["fragile" | fragile && isNothing (lookup "fragile" kvs)] ++                         [k | k <- classes, k `elem` frameoptions] ++                         [k ++ "=" ++ v | (k,v) <- kvs, k `elem` frameoptions]       let options = if null optionslist@@ -442,54 +442,75 @@              => Block     -- ^ Block to convert              -> LW m Doc blockToLaTeX Null = return empty-blockToLaTeX (Div (identifier,classes,kvs) bs) = do-  beamer <- gets stBeamer-  linkAnchor' <- hypertarget True identifier empty-  -- see #2704 for the motivation for adding \leavevmode:-  let linkAnchor =-       case bs of-            Para _ : _-              | not (isEmpty linkAnchor')-              -> "\\leavevmode" <> linkAnchor' <> "%"-            _ -> linkAnchor'-  let align dir txt = inCmd "begin" dir $$ txt $$ inCmd "end" dir-  lang <- toLang $ lookup "lang" kvs-  let wrapColumns = if "columns" `elem` classes-                       then \contents ->-                          inCmd "begin" "columns" <> brackets "T"-                              $$ contents-                              $$ inCmd "end" "columns"-                       else id-      wrapColumn  = if "column" `elem` classes-                       then \contents ->-                          let fromPct xs =-                                case reverse xs of-                                     '%':ds -> '0':'.': reverse ds-                                     _      -> xs-                              w = maybe "0.48" fromPct (lookup "width" kvs)-                          in  inCmd "begin" "column" <>-                              braces (text w <> "\\textwidth")-                              $$ contents-                              $$ inCmd "end" "column"-                       else id-      wrapDir = case lookup "dir" kvs of-                  Just "rtl" -> align "RTL"-                  Just "ltr" -> align "LTR"-                  _          -> id-      wrapLang txt = case lang of-                       Just lng -> let (l, o) = toPolyglossiaEnv lng-                                       ops = if null o-                                                then ""-                                                else brackets $ text o-                                   in  inCmd "begin" (text l) <> ops-                                       $$ blankline <> txt <> blankline-                                       $$ inCmd "end" (text l)-                       Nothing  -> txt-      wrapNotes txt = if beamer && "notes" `elem` classes+blockToLaTeX (Div (identifier,classes,kvs) bs)+  | "incremental" `elem` classes = do+      let classes' = filter ("incremental"/=) classes+      beamer <- gets stBeamer+      if beamer+        then do oldIncremental <- gets stIncremental+                modify $ \s -> s{ stIncremental = True }+                result <- blockToLaTeX $ Div (identifier,classes',kvs) bs+                modify $ \s -> s{ stIncremental = oldIncremental }+                return result+        else blockToLaTeX $ Div (identifier,classes',kvs) bs+  | "nonincremental" `elem` classes = do+      let classes' = filter ("nonincremental"/=) classes+      beamer <- gets stBeamer+      if beamer+        then do oldIncremental <- gets stIncremental+                modify $ \s -> s{ stIncremental = False }+                result <- blockToLaTeX $ Div (identifier,classes',kvs) bs+                modify $ \s -> s{ stIncremental = oldIncremental }+                return result+        else blockToLaTeX $ Div (identifier,classes',kvs) bs+  | otherwise = do+      beamer <- gets stBeamer+      linkAnchor' <- hypertarget True identifier empty+    -- see #2704 for the motivation for adding \leavevmode:+      let linkAnchor =+            case bs of+              Para _ : _+                | not (isEmpty linkAnchor')+                  -> "\\leavevmode" <> linkAnchor' <> "%"+              _ -> linkAnchor'+      let align dir txt = inCmd "begin" dir $$ txt $$ inCmd "end" dir+      lang <- toLang $ lookup "lang" kvs+      let wrapColumns = if "columns" `elem` classes+                        then \contents ->+                               inCmd "begin" "columns" <> brackets "T"+                               $$ contents+                               $$ inCmd "end" "columns"+                        else id+          wrapColumn  = if "column" `elem` classes+                        then \contents ->+                               let fromPct xs =+                                     case reverse xs of+                                       '%':ds -> '0':'.': reverse ds+                                       _      -> xs+                                   w = maybe "0.48" fromPct (lookup "width" kvs)+                               in  inCmd "begin" "column" <>+                                   braces (text w <> "\\textwidth")+                                   $$ contents+                                   $$ inCmd "end" "column"+                        else id+          wrapDir = case lookup "dir" kvs of+                      Just "rtl" -> align "RTL"+                      Just "ltr" -> align "LTR"+                      _          -> id+          wrapLang txt = case lang of+                           Just lng -> let (l, o) = toPolyglossiaEnv lng+                                           ops = if null o+                                                 then ""+                                                 else brackets $ text o+                                       in  inCmd "begin" (text l) <> ops+                                           $$ blankline <> txt <> blankline+                                           $$ inCmd "end" (text l)+                           Nothing  -> txt+          wrapNotes txt = if beamer && "notes" `elem` classes                           then "\\note" <> braces txt -- speaker notes                           else linkAnchor $$ txt-  (wrapColumns . wrapColumn . wrapDir . wrapLang . wrapNotes)-    <$> blockListToLaTeX bs+      (wrapColumns . wrapColumn . wrapDir . wrapLang . wrapNotes)+        <$> blockListToLaTeX bs blockToLaTeX (Plain lst) =   inlineListToLaTeX $ dropWhile isLineBreakOrSpace lst -- title beginning with fig: indicates that the image is a figure@@ -509,14 +530,14 @@   let footnotes = notesToLaTeX notes   lab <- labelFor ident   let caption = "\\caption" <> captForLof <> braces capt <> lab-  let figure = cr <> "\\begin{figure}" $$ "\\centering" $$ img $$-              caption $$ "\\end{figure}" <> cr-  figure' <- hypertarget True ident figure+  innards <- hypertarget True ident $+                 "\\centering" $$ img $$ caption <> cr+  let figure = cr <> "\\begin{figure}" $$ innards $$ "\\end{figure}"   return $ if inNote || inMinipage               -- can't have figures in notes or minipage (here, table cell)               -- http://www.tex.ac.uk/FAQ-ouparmd.html               then "\\begin{center}" $$ img $+$ capt $$ "\\end{center}"-              else figure' $$ footnotes+              else figure $$ footnotes -- . . . indicates pause in beamer slides blockToLaTeX (Para [Str ".",Space,Str ".",Space,Str "."]) = do   beamer <- gets stBeamer@@ -819,7 +840,7 @@   -- we need to put some text before a header if it's the first   -- element in an item. This will look ugly in LaTeX regardless, but   -- this will keep the typesetter from throwing an error.-  | (Header _ _ _ :_) <- lst =+  | (Header{} :_) <- lst =     blockListToLaTeX lst >>= return . (text "\\item ~" $$) . nest 2   | otherwise = blockListToLaTeX lst >>= return .  (text "\\item" $$) .                       nest 2@@ -856,7 +877,7 @@   plain <- stringToLaTeX TextString $ concatMap stringify lst   let removeInvalidInline (Note _)             = []       removeInvalidInline (Span (id', _, _) _) | not (null id') = []-      removeInvalidInline (Image{})            = []+      removeInvalidInline Image{}            = []       removeInvalidInline x                    = [x]   let lstNoNotes = foldr (mappend . (\x -> walkM removeInvalidInline x)) mempty lst   txtNoNotes <- inlineListToLaTeX lstNoNotes@@ -1122,7 +1143,11 @@                          Just (Pixel a)   ->                            [d <> text (showInInch opts (Pixel a)) <> "in"]                          Just (Percent a) ->-                           [d <> text (showFl (a / 100)) <> "\\textwidth"]+                           [d <> text (showFl (a / 100)) <>+                             case dir of+                                Width  -> "\\textwidth"+                                Height -> "\\textheight"+                           ]                          Just dim         ->                            [d <> text (show dim)]                          Nothing          ->
src/Text/Pandoc/Writers/Man.hs view
@@ -114,7 +114,7 @@ notesToMan opts notes =   if null notes      then return empty-     else mapM (uncurry (noteToMan opts)) (zip [1..] notes) >>=+     else zipWithM (noteToMan opts) [1..] notes >>=           return . (text ".SH NOTES" $$) . vcat  -- | Return man representation of a note.
src/Text/Pandoc/Writers/Markdown.hs view
@@ -36,7 +36,7 @@ module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where import Control.Monad.Reader import Control.Monad.State.Strict-import Data.Char (chr, isPunctuation, isSpace, ord)+import Data.Char (chr, isPunctuation, isSpace, ord, isAlphaNum) import Data.Default import qualified Data.HashMap.Strict as H import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)@@ -286,6 +286,12 @@        '>' | isEnabled Ext_all_symbols_escapable opts ->               '\\' : '>' : escapeString opts cs            | otherwise -> "&gt;" ++ escapeString opts cs+       '@' | isEnabled Ext_citations opts ->+               case cs of+                    (d:_)+                      | isAlphaNum d || d == '_'+                         -> '\\':'@':escapeString opts cs+                    _ -> '@':escapeString opts cs        _ | c `elem` ['\\','`','*','_','[',']','#'] ->               '\\':c:escapeString opts cs        '|' | isEnabled Ext_pipe_tables opts -> '\\':'|':escapeString opts cs
src/Text/Pandoc/Writers/Muse.hs view
@@ -48,6 +48,7 @@ import System.FilePath (takeExtension) import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition+import Text.Pandoc.ImageSize import Text.Pandoc.Options import Text.Pandoc.Pretty import Text.Pandoc.Shared@@ -155,15 +156,8 @@   contents <- inlineListToMuse inlines   return $ contents <> blankline blockToMuse (LineBlock lns) = do-  let splitStanza [] = []-      splitStanza xs = case break (== mempty) xs of-        (l, [])  -> [l]-        (l, _:r) -> l : splitStanza r-  let joinWithLinefeeds  = nowrap . mconcat . intersperse cr-  let joinWithBlankLines = mconcat . intersperse blankline-  let prettyfyStanza ls  = joinWithLinefeeds <$> mapM inlineListToMuse ls-  contents <- joinWithBlankLines <$> mapM prettyfyStanza (splitStanza lns)-  return $ blankline $$ "<verse>" $$ contents $$ "</verse>" <> blankline+  lns' <- mapM inlineListToMuse lns+  return $ nowrap $ vcat (map (text "> " <>) lns') <> blankline blockToMuse (CodeBlock (_,_,_) str) =   return $ "<example>" $$ text str $$ "</example>" $$ blankline blockToMuse (RawBlock (Format format) str) =@@ -206,16 +200,21 @@           return $ hang 2 "- " contents blockToMuse (DefinitionList items) = do   contents <- mapM definitionListItemToMuse items-  return $ cr $$ nest 1 (vcat contents) $$ blankline+  -- ensure that sublists have preceding blank line+  topLevel <- gets stTopLevel+  return $ cr $$ (if topLevel then nest 1 else id) (vcat contents) $$ blankline   where definitionListItemToMuse :: PandocMonad m                                  => ([Inline], [[Block]])                                  -> StateT WriterState m Doc         definitionListItemToMuse (label, defs) = do           label' <- inlineListToMuse label-          contents <- liftM vcat $ mapM blockListToMuse defs-          let label'' = label' <> " :: "-          let ind = offset label''-          return $ hang ind label'' contents+          contents <- liftM vcat $ mapM descriptionToMuse defs+          let ind = offset label'+          return $ hang ind label' contents+        descriptionToMuse :: PandocMonad m+                          => [Block]+                          -> StateT WriterState m Doc+        descriptionToMuse desc = hang 4 " :: " <$> blockListToMuse desc blockToMuse (Header level (ident,_,_) inlines) = do   opts <- gets stOptions   contents <- inlineListToMuse inlines@@ -256,7 +255,7 @@          $$ body          $$ (if null caption then empty else " |+ " <> caption' <> " +|")          $$ blankline-blockToMuse (Div _ bs) = blockListToMuse bs+blockToMuse (Div _ bs) = flatBlockListToMuse bs blockToMuse Null = return empty  -- | Return Muse representation of notes.@@ -287,11 +286,16 @@ conditionalEscapeString s =   if any (`elem` ("#*<=>[]|" :: String)) s ||      "::" `isInfixOf` s ||-     "----" `isInfixOf` s+     "----" `isInfixOf` s ||+     "~~" `isInfixOf` s     then escapeString s     else s  normalizeInlineList :: [Inline] -> [Inline]+normalizeInlineList (x : Str "" : xs)+  = normalizeInlineList (x:xs)+normalizeInlineList (Str x1 : Str x2 : xs)+  = normalizeInlineList $ Str (x1 ++ x2) : xs normalizeInlineList (Emph x1 : Emph x2 : ils)   = normalizeInlineList $ Emph (x1 ++ x2) : ils normalizeInlineList (Strong x1 : Strong x2 : ils)@@ -304,8 +308,8 @@   = normalizeInlineList $ Subscript (x1 ++ x2) : ils normalizeInlineList (SmallCaps x1 : SmallCaps x2 : ils)   = normalizeInlineList $ SmallCaps (x1 ++ x2) : ils-normalizeInlineList (Code a1 x1 : Code a2 x2 : ils) | a1 == a2-  = normalizeInlineList $ Code a1 (x1 ++ x2) : ils+normalizeInlineList (Code _ x1 : Code _ x2 : ils)+  = normalizeInlineList $ Code nullAttr (x1 ++ x2) : ils normalizeInlineList (RawInline f1 x1 : RawInline f2 x2 : ils) | f1 == f2   = normalizeInlineList $ RawInline f1 (x1 ++ x2) : ils normalizeInlineList (Span a1 x1 : Span a2 x2 : ils) | a1 == a2@@ -348,10 +352,10 @@ inlineToMuse (SmallCaps lst) = inlineListToMuse lst inlineToMuse (Quoted SingleQuote lst) = do   contents <- inlineListToMuse lst-  return $ "'" <> contents <> "'"+  return $ "‘" <> contents <> "’" inlineToMuse (Quoted DoubleQuote lst) = do   contents <- inlineListToMuse lst-  return $ "\"" <> contents <> "\""+  return $ "“" <> contents <> "”" -- Amusewiki does not support <cite> tag, -- and Emacs Muse citation support is limited -- (https://www.gnu.org/software/emacs-muse/manual/html_node/Citations.html#Citation)@@ -359,11 +363,8 @@ inlineToMuse (Cite _  lst) = inlineListToMuse lst inlineToMuse (Code _ str) = return $   "<code>" <> text (substitute "</code>" "<</code><code>/code>" str) <> "</code>"-inlineToMuse (Math InlineMath str) =-  lift (texMathToInlines InlineMath str) >>= inlineListToMuse-inlineToMuse (Math DisplayMath str) = do-  contents <- lift (texMathToInlines DisplayMath str) >>= inlineListToMuse-  return $ "<verse>" <> contents <> "</verse>" <> blankline+inlineToMuse (Math t str) =+  lift (texMathToInlines t str) >>= inlineListToMuse inlineToMuse (RawInline (Format f) str) =   return $ "<literal style=\"" <> text f <> "\">" <> text str <> "</literal>" inlineToMuse LineBreak = return $ "<br>" <> cr@@ -383,14 +384,18 @@         isImageUrl = (`elem` imageExtensions) . takeExtension inlineToMuse (Image attr alt (source,'f':'i':'g':':':title)) =   inlineToMuse (Image attr alt (source,title))-inlineToMuse (Image _ inlines (source, title)) = do+inlineToMuse (Image attr inlines (source, title)) = do+  opts <- gets stOptions   alt <- inlineListToMuse inlines   let title' = if null title                   then if null inlines                           then ""                           else "[" <> alt <> "]"                   else "[" <> text title <> "]"-  return $ "[[" <> text source <> "]" <> title' <> "]"+  let width = case dimension Width attr of+                Just (Percent x) | isEnabled Ext_amuse opts -> " " ++ show (round x :: Integer)+                _ -> ""+  return $ "[[" <> text (source ++ width) <> "]" <> title' <> "]" inlineToMuse (Note contents) = do   -- add to notes in state   notes <- gets stNotes
src/Text/Pandoc/Writers/OOXML.hs view
@@ -104,5 +104,5 @@ fitToPage (x, y) pageWidth   -- Fixes width to the page width and scales the height   | x > fromIntegral pageWidth =-    (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)+    (pageWidth, floor $ (fromIntegral pageWidth / x) * y)   | otherwise = (floor x, floor y)
src/Text/Pandoc/Writers/OpenDocument.hs view
@@ -594,7 +594,7 @@       tight     = if t then [ ("fo:margin-top"          , "0in"    )                             , ("fo:margin-bottom"       , "0in"    )]                        else []-      indent    = if (i /= 0 || b)+      indent    = if i /= 0 || b                       then [ ("fo:margin-left"         , indentVal)                            , ("fo:margin-right"        , "0in"    )                            , ("fo:text-indent"         , "0in"    )
src/Text/Pandoc/Writers/Org.hs view
@@ -166,8 +166,8 @@         (l, _:r) -> l : splitStanza r   let joinWithLinefeeds  = nowrap . mconcat . intersperse cr   let joinWithBlankLines = mconcat . intersperse blankline-  let prettyfyStanza ls  = joinWithLinefeeds <$> mapM inlineListToOrg ls-  contents <- joinWithBlankLines <$> mapM prettyfyStanza (splitStanza lns)+  let prettifyStanza ls  = joinWithLinefeeds <$> mapM inlineListToOrg ls+  contents <- joinWithBlankLines <$> mapM prettifyStanza (splitStanza lns)   return $ blankline $$ "#+BEGIN_VERSE" $$            nest 2 contents $$ "#+END_VERSE" <> blankline blockToOrg (RawBlock "html" str) =
src/Text/Pandoc/Writers/Powerpoint.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE PatternGuards #-}+  {- Copyright (C) 2017-2018 Jesse Rosenthal <jrosenthal@jhu.edu>
src/Text/Pandoc/Writers/Powerpoint/Output.hs view
@@ -38,7 +38,8 @@ import Control.Monad.Reader import Control.Monad.State import Codec.Archive.Zip-import Data.List (intercalate, stripPrefix, nub, union, isPrefixOf)+import Data.Char (toUpper)+import Data.List (intercalate, stripPrefix, nub, union, isPrefixOf, intersperse) import Data.Default import Text.Pandoc.Compat.Time (formatTime, defaultTimeLocale) import Data.Time.Clock (UTCTime)@@ -55,13 +56,14 @@ import qualified Data.ByteString.Lazy as BL import Text.Pandoc.Writers.OOXML import qualified Data.Map as M-import Data.Maybe (mapMaybe, listToMaybe, fromMaybe)+import Data.Maybe (mapMaybe, listToMaybe, fromMaybe, isJust, maybeToList, catMaybes) import Text.Pandoc.ImageSize import Control.Applicative ((<|>)) import System.FilePath.Glob import Text.TeXMath import Text.Pandoc.Writers.Math (convertMath) import Text.Pandoc.Writers.Powerpoint.Presentation+import Skylighting (fromColor)  -- This populates the global ids map with images already in the -- template, so the ids won't be used by images introduced by the@@ -107,6 +109,11 @@                            , envSlideIdOffset :: Int                            , envContentType :: ContentType                            , envSlideIdMap :: M.Map SlideId Int+                           -- maps the slide number to the+                           -- corresponding notes id number. If there+                           -- are no notes for a slide, there will be+                           -- no entry in the map for it.+                           , envSpeakerNotesIdMap :: M.Map Int Int                            }                  deriving (Show) @@ -123,6 +130,7 @@                   , envSlideIdOffset = 1                   , envContentType = NormalContent                   , envSlideIdMap = mempty+                  , envSpeakerNotesIdMap = mempty                   }  data ContentType = NormalContent@@ -165,20 +173,36 @@     Nothing -> fail $ fp ++ " missing in reference file"     Just e -> return $ addEntryToArchive e arch -inheritedPatterns :: [Pattern]-inheritedPatterns = map compile [ "docProps/app.xml"-                                , "ppt/slideLayouts/slideLayout*.xml"-                                , "ppt/slideLayouts/_rels/slideLayout*.xml.rels"-                                , "ppt/slideMasters/slideMaster1.xml"-                                , "ppt/slideMasters/_rels/slideMaster1.xml.rels"-                                , "ppt/theme/theme1.xml"-                                , "ppt/theme/_rels/theme1.xml.rels"-                                , "ppt/presProps.xml"-                                , "ppt/viewProps.xml"-                                , "ppt/tableStyles.xml"-                                , "ppt/media/image*"-                                ]+alwaysInheritedPatterns :: [Pattern]+alwaysInheritedPatterns =+  map compile [ "docProps/app.xml"+              , "ppt/slideLayouts/slideLayout*.xml"+              , "ppt/slideLayouts/_rels/slideLayout*.xml.rels"+              , "ppt/slideMasters/slideMaster1.xml"+              , "ppt/slideMasters/_rels/slideMaster1.xml.rels"+              , "ppt/theme/theme1.xml"+              , "ppt/theme/_rels/theme1.xml.rels"+              , "ppt/presProps.xml"+              , "ppt/viewProps.xml"+              , "ppt/tableStyles.xml"+              , "ppt/media/image*"+              ] +-- We only look for these under special conditions+contingentInheritedPatterns :: Presentation -> [Pattern]+contingentInheritedPatterns pres = [] +++  if presHasSpeakerNotes pres+  then map compile [ "ppt/notesMasters/notesMaster*.xml"+                   , "ppt/notesMasters/_rels/notesMaster*.xml.rels"+                   , "ppt/theme/theme2.xml"+                   , "ppt/theme/_rels/theme2.xml.rels"+                   ]+  else []++inheritedPatterns :: Presentation -> [Pattern]+inheritedPatterns pres =+  alwaysInheritedPatterns ++ contingentInheritedPatterns pres+ patternToFilePaths :: PandocMonad m => Pattern -> P m [FilePath] patternToFilePaths pat = do   refArchive <- asks envRefArchive@@ -210,10 +234,9 @@                 , "ppt/tableStyles.xml"                 ] - presentationToArchiveP :: PandocMonad m => Presentation -> P m Archive presentationToArchiveP p@(Presentation docProps slides) = do-  filePaths <- patternsToFilePaths inheritedPatterns+  filePaths <- patternsToFilePaths $ inheritedPatterns p    -- make sure all required files are available:   let missingFiles = filter (\fp -> not (fp `elem` filePaths)) requiredFiles@@ -236,6 +259,8 @@   presRelsEntry <- presentationToRelsEntry p   slideEntries <- mapM slideToEntry slides   slideRelEntries <- mapM slideToSlideRelEntry slides+  spkNotesEntries <- catMaybes <$> mapM slideToSpeakerNotesEntry slides+  spkNotesRelEntries <- catMaybes <$> mapM slideToSpeakerNotesRelEntry slides   -- These have to come after everything, because they need the info   -- built up in the state.   mediaEntries <- makeMediaEntries@@ -244,6 +269,8 @@   return $ foldr addEntryToArchive newArch' $     slideEntries ++     slideRelEntries +++    spkNotesEntries +++    spkNotesRelEntries ++     mediaEntries ++     [contentTypesEntry, docPropsEntry, relsEntry, presEntry, presRelsEntry] @@ -251,6 +278,12 @@ makeSlideIdMap (Presentation _ slides) =   M.fromList $ (map slideId slides) `zip` [1..] +makeSpeakerNotesMap :: Presentation -> M.Map Int Int+makeSpeakerNotesMap (Presentation _ slides) =+  M.fromList $ (mapMaybe f $ slides `zip` [1..]) `zip` [1..]+  where f (Slide _ _ Nothing, _) = Nothing+        f (Slide _ _ (Just _), n)  = Just n+ presentationToArchive :: PandocMonad m => WriterOptions -> Presentation -> m Archive presentationToArchive opts pres = do   distArchive <- (toArchive . BL.fromStrict) <$>@@ -274,6 +307,7 @@                 , envOpts = opts                 , envPresentationSize = presSize                 , envSlideIdMap = makeSlideIdMap pres+                , envSpeakerNotesIdMap = makeSpeakerNotesMap pres                 }    let st = def { stMediaGlobalIds = initialGlobalIds refArchive distArchive@@ -285,6 +319,17 @@  -------------------------------------------------- +-- Check to see if the presentation has speaker notes. This will+-- influence whether we import the notesMaster template.+presHasSpeakerNotes :: Presentation -> Bool+presHasSpeakerNotes (Presentation _ slides) = any isJust $ map slideSpeakerNotes slides++curSlideHasSpeakerNotes :: PandocMonad m => P m Bool+curSlideHasSpeakerNotes = do+  sldId <- asks envCurSlideId+  notesIdMap <- asks envSpeakerNotesIdMap+  return $ isJust $ M.lookup sldId notesIdMap+ --------------------------------------------------  getLayout :: PandocMonad m => Layout -> P m Element@@ -306,14 +351,6 @@                    layoutpath ++ " missing in reference file"   return root -shapeHasName :: NameSpaces -> String -> Element -> Bool-shapeHasName ns name element-  | Just nvSpPr <- findChild (elemName ns "p" "nvSpPr") element-  , Just cNvPr <- findChild (elemName ns "p" "cNvPr") nvSpPr-  , Just nm <- findAttr (QName "name" Nothing Nothing) cNvPr =-      nm == name-  | otherwise = False- shapeHasId :: NameSpaces -> String -> Element -> Bool shapeHasId ns ident element   | Just nvSpPr <- findChild (elemName ns "p" "nvSpPr") element@@ -329,14 +366,11 @@ getContentShape ns spTreeElem   | isElem ns "p" "spTree" spTreeElem = do       contentType <- asks envContentType-      let ident = case contentType of-            NormalContent -> "3"-            TwoColumnLeftContent -> "3"-            TwoColumnRightContent -> "4"-      case filterChild-           (\e -> (isElem ns "p" "sp" e) && (shapeHasId ns ident e))-           spTreeElem-        of+      let idx = case contentType of+            NormalContent -> "1"+            TwoColumnLeftContent -> "1"+            TwoColumnRightContent -> "2"+      case getShapeByPlaceHolderIndex ns spTreeElem idx of         Just e -> return e         Nothing -> throwError $                    PandocSomeError $@@ -426,15 +460,16 @@   curSlideId <- asks envCurSlideId   linkReg <- gets stLinkIds   mediaReg <- gets stMediaIds+  hasSpeakerNotes <- curSlideHasSpeakerNotes   let maxLinkId = case M.lookup curSlideId linkReg of         Just mp -> case M.keys mp of-          [] -> 1+          [] -> if hasSpeakerNotes then 2 else 1           ks -> maximum ks-        Nothing -> 1+        Nothing -> if hasSpeakerNotes then 2 else 1       maxMediaId = case M.lookup curSlideId mediaReg of-        Just [] -> 1+        Just [] -> if hasSpeakerNotes then 2 else 1         Just mInfos -> maximum $ map mInfoLocalId mInfos-        Nothing -> 1+        Nothing -> if hasSpeakerNotes then 2 else 1       maxId = max maxLinkId maxMediaId       slideLinks = case M.lookup curSlideId linkReg of         Just mp -> M.insert (maxId + 1) link mp@@ -448,15 +483,16 @@   linkReg <- gets stLinkIds   mediaReg <- gets stMediaIds   globalIds <- gets stMediaGlobalIds+  hasSpeakerNotes <- curSlideHasSpeakerNotes   let maxLinkId = case M.lookup curSlideId linkReg of         Just mp -> case M.keys mp of-          [] -> 1+          [] -> if hasSpeakerNotes then 2 else 1           ks -> maximum ks-        Nothing -> 1+        Nothing -> if hasSpeakerNotes then 2 else 1       maxMediaId = case M.lookup curSlideId mediaReg of-        Just [] -> 1+        Just [] -> if hasSpeakerNotes then 2 else 1         Just mInfos -> maximum $ map mInfoLocalId mInfos-        Nothing -> 1+        Nothing -> if hasSpeakerNotes then 2 else 1       maxLocalId = max maxLinkId maxMediaId        maxGlobalId = case M.elems globalIds of@@ -473,6 +509,7 @@                  Just Pdf  -> Just ".pdf"                  Just Eps  -> Just ".eps"                  Just Svg  -> Just ".svg"+                 Just Emf  -> Just ".emf"                  Nothing   -> Nothing    let newGlobalId = case M.lookup fp globalIds of@@ -703,26 +740,28 @@ paraElemToElement (Run rpr s) = do   let sizeAttrs = case rPropForceSize rpr of                     Just n -> [("sz", (show $ n * 100))]-                    Nothing -> []+                    Nothing -> if rPropCode rpr+                               -- hardcoded size for code for now+                               then [("sz", "1800")]+                               else []       attrs = sizeAttrs ++-        if rPropCode rpr-        then []-        else (if rPropBold rpr then [("b", "1")] else []) ++-             (if rPropItalics rpr then [("i", "1")] else []) ++-             (case rStrikethrough rpr of-                Just NoStrike     -> [("strike", "noStrike")]-                Just SingleStrike -> [("strike", "sngStrike")]-                Just DoubleStrike -> [("strike", "dblStrike")]-                Nothing -> []) ++-             (case rBaseline rpr of-                Just n -> [("baseline", show n)]-                Nothing -> []) ++-             (case rCap rpr of-                Just NoCapitals -> [("cap", "none")]-                Just SmallCapitals -> [("cap", "small")]-                Just AllCapitals -> [("cap", "all")]-                Nothing -> []) ++-             []+        (if rPropBold rpr then [("b", "1")] else []) +++        (if rPropItalics rpr then [("i", "1")] else []) +++        (if rPropUnderline rpr then [("u", "sng")] else []) +++        (case rStrikethrough rpr of+            Just NoStrike     -> [("strike", "noStrike")]+            Just SingleStrike -> [("strike", "sngStrike")]+            Just DoubleStrike -> [("strike", "dblStrike")]+            Nothing -> []) +++        (case rBaseline rpr of+            Just n -> [("baseline", show n)]+            Nothing -> []) +++        (case rCap rpr of+            Just NoCapitals -> [("cap", "none")]+            Just SmallCapitals -> [("cap", "small")]+            Just AllCapitals -> [("cap", "all")]+            Nothing -> []) +++        []   linkProps <- case rLink rpr of                  Just link -> do                    idNum <- registerLink link@@ -743,10 +782,19 @@                              ]                        in [mknode "a:hlinkClick" linkAttrs ()]                  Nothing -> return []-  let propContents = if rPropCode rpr+  let colorContents = case rSolidFill rpr of+                        Just color ->+                          case fromColor color of+                            '#':hx ->  [mknode "a:solidFill" []+                                        [mknode "a:srgbClr" [("val", map toUpper hx)] ()]+                                       ]+                            _ -> []+                        Nothing -> []+  let codeContents = if rPropCode rpr                      then [mknode "a:latin" [("typeface", "Courier")] ()]-                     else linkProps-  return $ mknode "a:r" [] [ mknode "a:rPr" attrs propContents+                     else []+  let propContents = linkProps ++ colorContents ++ codeContents+  return $ mknode "a:r" [] [ mknode "a:rPr" attrs $ propContents                            , mknode "a:t" [] s                            ] paraElemToElement (MathElem mathType texStr) = do@@ -882,6 +930,13 @@             return [graphicFrameElts, capElt]     else return [graphicFrameElts] +getDefaultTableStyle :: PandocMonad m => P m (Maybe String)+getDefaultTableStyle = do+  refArchive <- asks envRefArchive+  distArchive <- asks envDistArchive+  tblStyleLst <- parseXml refArchive distArchive "ppt/tableStyles.xml"+  return $ findAttr (QName "def" Nothing Nothing) tblStyleLst+ graphicToElement :: PandocMonad m => Integer -> Graphic -> P m Element graphicToElement tableWidth (Tbl tblPr hdrCells rows) = do   let colWidths = if null hdrCells@@ -919,12 +974,19 @@   let mkgridcol w = mknode "a:gridCol"                        [("w", show ((12700 * w) :: Integer))] ()   let hasHeader = not (all null hdrCells)++  mbDefTblStyle <- getDefaultTableStyle+  let tblPrElt = mknode "a:tblPr"+                 [ ("firstRow", if tblPrFirstRow tblPr then "1" else "0")+                 , ("bandRow", if tblPrBandRow tblPr then "1" else "0")+                 ] (case mbDefTblStyle of+                      Nothing -> []+                      Just sty -> [mknode "a:tableStyleId" [] sty])+   return $ mknode "a:graphic" [] $     [mknode "a:graphicData" [("uri", "http://schemas.openxmlformats.org/drawingml/2006/table")] $      [mknode "a:tbl" [] $-      [ mknode "a:tblPr" [ ("firstRow", if tblPrFirstRow tblPr then "1" else "0")-                         , ("bandRow", if tblPrBandRow tblPr then "1" else "0")-                         ] ()+      [ tblPrElt       , mknode "a:tblGrid" [] (if all (==0) colWidths                                then []                                else map mkgridcol colWidths)@@ -933,24 +995,39 @@      ]     ] -getShapeByName :: NameSpaces -> Element -> String -> Maybe Element-getShapeByName ns spTreeElem name+getShapeByPlaceHolderType :: NameSpaces -> Element -> String -> Maybe Element+getShapeByPlaceHolderType ns spTreeElem phType   | isElem ns "p" "spTree" spTreeElem =-  filterChild (\e -> (isElem ns "p" "sp" e) && (shapeHasName ns name e)) spTreeElem+    let findPhType element = isElem ns "p" "sp" element &&+                             Just phType == (Just element >>=+                                             findChild (elemName ns "p" "nvSpPr") >>=+                                             findChild (elemName ns "p" "nvPr") >>=+                                             findChild (elemName ns "p" "ph") >>=+                                             findAttr (QName "type" Nothing Nothing))+    in+      filterChild findPhType spTreeElem   | otherwise = Nothing --- getShapeById :: NameSpaces -> Element -> String -> Maybe Element--- getShapeById ns spTreeElem ident---   | isElem ns "p" "spTree" spTreeElem =---   filterChild (\e -> (isElem ns "p" "sp" e) && (shapeHasId ns ident e)) spTreeElem---   | otherwise = Nothing+getShapeByPlaceHolderIndex :: NameSpaces -> Element -> String -> Maybe Element+getShapeByPlaceHolderIndex ns spTreeElem phIdx+  | isElem ns "p" "spTree" spTreeElem =+    let findPhType element = isElem ns "p" "sp" element &&+                             Just phIdx == (Just element >>=+                                            findChild (elemName ns "p" "nvSpPr") >>=+                                            findChild (elemName ns "p" "nvPr") >>=+                                            findChild (elemName ns "p" "ph") >>=+                                            findAttr (QName "idx" Nothing Nothing))+    in+      filterChild findPhType spTreeElem+  | otherwise = Nothing + nonBodyTextToElement :: PandocMonad m => Element -> String -> [ParaElem] -> P m Element-nonBodyTextToElement layout shapeName paraElements+nonBodyTextToElement layout phType paraElements   | ns <- elemToNameSpaces layout   , Just cSld <- findChild (elemName ns "p" "cSld") layout   , Just spTree <- findChild (elemName ns "p" "spTree") cSld-  , Just sp <- getShapeByName ns spTree shapeName = do+  , Just sp <- getShapeByPlaceHolderType ns spTree phType = do       let hdrPara = Paragraph def paraElements       element <- paragraphToElement hdrPara       let txBody = mknode "p:txBody" [] $@@ -965,7 +1042,7 @@   | ns <- elemToNameSpaces layout   , Just cSld <- findChild (elemName ns "p" "cSld") layout   , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do-      element <- nonBodyTextToElement layout "Title 1" hdrShape+      element <- nonBodyTextToElement layout "title" hdrShape       let hdrShapeElements = if null hdrShape                              then []                              else [element]@@ -983,7 +1060,7 @@   | ns <- elemToNameSpaces layout   , Just cSld <- findChild (elemName ns "p" "cSld") layout   , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do-      element <- nonBodyTextToElement layout "Title 1" hdrShape+      element <- nonBodyTextToElement layout "title" hdrShape       let hdrShapeElements = if null hdrShape                              then []                              else [element]@@ -1007,7 +1084,7 @@   | ns <- elemToNameSpaces layout   , Just cSld <- findChild (elemName ns "p" "cSld") layout   , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do-      element <- nonBodyTextToElement layout "Title 1" titleElems+      element <- nonBodyTextToElement layout "title" titleElems       let titleShapeElements = if null titleElems                                then []                                else [element]@@ -1021,15 +1098,15 @@   , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do       titleShapeElements <- if null titleElems                             then return []-                            else sequence [nonBodyTextToElement layout "Title 1" titleElems]+                            else sequence [nonBodyTextToElement layout "ctrTitle" titleElems]       let combinedAuthorElems = intercalate [Break] authorsElems           subtitleAndAuthorElems = intercalate [Break, Break] [subtitleElems, combinedAuthorElems]       subtitleShapeElements <- if null subtitleAndAuthorElems                                then return []-                               else sequence [nonBodyTextToElement layout "Subtitle 2" subtitleAndAuthorElems]+                               else sequence [nonBodyTextToElement layout "subTitle" subtitleAndAuthorElems]       dateShapeElements <- if null dateElems                            then return []-                           else sequence [nonBodyTextToElement layout "Date Placeholder 3" dateElems]+                           else sequence [nonBodyTextToElement layout "dt" dateElems]       return $ replaceNamedChildren ns "p" "sp"         (titleShapeElements ++ subtitleShapeElements ++ dateShapeElements)         spTree@@ -1075,6 +1152,161 @@       ("xmlns:p", "http://schemas.openxmlformats.org/presentationml/2006/main")     ] [mknode "p:cSld" [] [spTree]] ++--------------------------------------------------------------------+-- Notes:++getNotesMaster :: PandocMonad m => P m Element+getNotesMaster = do+  let notesMasterPath = "ppt/notesMasters/notesMaster1.xml"+  distArchive <- asks envDistArchive+  root <- case findEntryByPath notesMasterPath distArchive of+        Just e -> case parseXMLDoc $ UTF8.toStringLazy $ fromEntry e of+                    Just element -> return $ element+                    Nothing      -> throwError $+                                    PandocSomeError $+                                    notesMasterPath ++ " corrupt in reference file"+        Nothing -> throwError $+                   PandocSomeError $+                   notesMasterPath ++ " missing in reference file"+  return root++getSlideNumberFieldId :: PandocMonad m => Element -> P m String+getSlideNumberFieldId notesMaster+  | ns <- elemToNameSpaces notesMaster+  , Just cSld <- findChild (elemName ns "p" "cSld") notesMaster+  , Just spTree <- findChild (elemName ns "p" "spTree") cSld+  , Just sp <- getShapeByPlaceHolderType ns spTree "sldNum"+  , Just txBody <- findChild (elemName ns "p" "txBody") sp+  , Just p <- findChild (elemName ns "a" "p") txBody+  , Just fld <- findChild (elemName ns "a" "fld") p+  , Just fldId <- findAttr (QName "id" Nothing Nothing) fld =+      return fldId+  | otherwise = throwError $+                PandocSomeError $+                "No field id for slide numbers in notesMaster.xml"++speakerNotesSlideImage :: Element+speakerNotesSlideImage =+  mknode "p:sp" [] $+  [ mknode "p:nvSpPr" [] $+    [ mknode "p:cNvPr" [ ("id", "2")+                       , ("name", "Slide Image Placeholder 1")+                       ] ()+    , mknode "p:cNvSpPr" [] $+      [ mknode "a:spLocks" [ ("noGrp", "1")+                           , ("noRot", "1")+                           , ("noChangeAspect", "1")+                           ] ()+      ]+    , mknode "p:nvPr" [] $+      [ mknode "p:ph" [("type", "sldImg")] ()]+    ]+  , mknode "p:spPr" [] ()+  ]++-- we want to wipe links from the speaker notes in the+-- paragraphs. Powerpoint doesn't allow you to input them, and it+-- would provide extra complications.+removeParaLinks :: Paragraph -> Paragraph+removeParaLinks paragraph = paragraph{paraElems = map f (paraElems paragraph)}+  where f (Run rProps s) = Run rProps{rLink=Nothing} s+        f pe             = pe++-- put an empty paragraph between paragraphs for more expected spacing.+spaceParas :: [Paragraph] -> [Paragraph]+spaceParas = intersperse (Paragraph def [])++speakerNotesBody :: PandocMonad m => [Paragraph] -> P m Element+speakerNotesBody paras = do+  elements <- mapM paragraphToElement $ spaceParas $ map removeParaLinks paras+  let txBody = mknode "p:txBody" [] $+               [mknode "a:bodyPr" [] (), mknode "a:lstStyle" [] ()] ++ elements+  return $+    mknode "p:sp" [] $+    [ mknode "p:nvSpPr" [] $+      [ mknode "p:cNvPr" [ ("id", "3")+                         , ("name", "Notes Placeholder 2")+                         ] ()+      , mknode "p:cNvSpPr" [] $+        [ mknode "a:spLocks" [("noGrp", "1")] ()]+      , mknode "p:nvPr" [] $+        [ mknode "p:ph" [("type", "body"), ("idx", "1")] ()]+      ]+    , mknode "p:spPr" [] ()+    , txBody+    ]++speakerNotesSlideNumber :: Int -> String -> Element+speakerNotesSlideNumber pgNum fieldId =+  mknode "p:sp" [] $+  [ mknode "p:nvSpPr" [] $+    [ mknode "p:cNvPr" [ ("id", "4")+                       , ("name", "Slide Number Placeholder 3")+                       ] ()+    , mknode "p:cNvSpPr" [] $+      [ mknode "a:spLocks" [("noGrp", "1")] ()]+    , mknode "p:nvPr" [] $+      [ mknode "p:ph" [ ("type", "sldNum")+                      , ("sz", "quarter")+                      , ("idx", "10")+                      ] ()+      ]+    ]+  , mknode "p:spPr" [] ()+  , mknode "p:txBody" [] $+    [ mknode "a:bodyPr" [] ()+    , mknode "a:lstStyle" [] ()+    , mknode "a:p" [] $+      [ mknode "a:fld" [ ("id", fieldId)+                       , ("type", "slidenum")+                       ]+        [ mknode "a:rPr" [("lang", "en-US")] ()+        , mknode "a:t" [] (show pgNum)+        ]+      , mknode "a:endParaRPr" [("lang", "en-US")] ()+      ]+    ]+  ]++slideToSpeakerNotesElement :: PandocMonad m => Slide -> P m (Maybe Element)+slideToSpeakerNotesElement slide+  | Slide _ _ mbNotes <- slide+  , Just (SpeakerNotes paras) <- mbNotes = do+      master <- getNotesMaster+      fieldId  <- getSlideNumberFieldId master+      num <- slideNum slide+      let imgShape = speakerNotesSlideImage+          sldNumShape = speakerNotesSlideNumber num fieldId+      bodyShape <- speakerNotesBody paras+      return $ Just $+        mknode "p:notes"+        [ ("xmlns:a", "http://schemas.openxmlformats.org/drawingml/2006/main")+        , ("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships")+        , ("xmlns:p", "http://schemas.openxmlformats.org/presentationml/2006/main")+        ] [ mknode "p:cSld" []+            [ mknode "p:spTree" []+              [ mknode "p:nvGrpSpPr" []+                [ mknode "p:cNvPr" [("id", "1"), ("name", "")] ()+                , mknode "p:cNvGrpSpPr" [] ()+                , mknode "p:nvPr" [] ()+                ]+            , mknode "p:grpSpPr" []+              [ mknode "a:xfrm" []+                [ mknode "a:off" [("x", "0"), ("y", "0")] ()+                , mknode "a:ext" [("cx", "0"), ("cy", "0")] ()+                , mknode "a:chOff" [("x", "0"), ("y", "0")] ()+                , mknode "a:chExt" [("cx", "0"), ("cy", "0")] ()+                ]+              ]+            , imgShape+            , bodyShape+            , sldNumShape+            ]+            ]+          ]+slideToSpeakerNotesElement _ = return Nothing+ -----------------------------------------------------------------------  getSlideIdNum :: PandocMonad m => SlideId -> P m Int@@ -1143,10 +1375,23 @@   return $ mapMaybe elementToRel relElems  presentationToRels :: PandocMonad m => Presentation -> P m [Relationship]-presentationToRels (Presentation _ slides) = do+presentationToRels pres@(Presentation _ slides) = do   mySlideRels <- mapM slideToPresRel slides+  let notesMasterRels =+        if presHasSpeakerNotes pres+        then [Relationship { relId = length mySlideRels + 2+                           , relType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"+                           , relTarget = "notesMasters/notesMaster1.xml"+                           }]+        else []+      insertedRels = mySlideRels ++ notesMasterRels   rels <- getRels-  let relsWithoutSlides = filter (\r -> relType r /= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide") rels+  -- we remove the slide rels and the notesmaster (if it's+  -- there). We'll put these back in ourselves, if necessary.+  let relsWeKeep = filter+                   (\r -> relType r /= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" &&+                          relType r /= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster")+                   rels   -- We want to make room for the slides in the id space. The slides   -- will start at Id2 (since Id1 is for the slide master). There are   -- two slides in the data file, but that might change in the future,@@ -1155,8 +1400,9 @@   -- 1. We look to see what the minimum relWithoutSlide id (greater than 1) is.   -- 2. We add the difference between this and the number of slides to   -- all relWithoutSlide rels (unless they're 1)+  -- 3. If we have a notesmaster slide, we make space for that as well. -  let minRelNotOne = case filter (1<) $ map relId relsWithoutSlides of+  let minRelNotOne = case filter (1<) $ map relId relsWeKeep of         [] -> 0                 -- doesn't matter in this case, since                                 -- there will be nothing to map the                                 -- function over@@ -1164,11 +1410,11 @@        modifyRelNum :: Int -> Int       modifyRelNum 1 = 1-      modifyRelNum n = n - minRelNotOne + 2 + length slides+      modifyRelNum n = n - minRelNotOne + 2 + length insertedRels -      relsWithoutSlides' = map (\r -> r{relId = modifyRelNum $ relId r}) relsWithoutSlides+      relsWeKeep' = map (\r -> r{relId = modifyRelNum $ relId r}) relsWeKeep -  return $ mySlideRels ++ relsWithoutSlides'+  return $ insertedRels ++ relsWeKeep'  -- We make this ourselves, in case there's a thumbnail in the one from -- the template.@@ -1218,6 +1464,54 @@     element <- slideToElement slide     elemToEntry ("ppt/slides/" ++ idNumToFilePath idNum) element +slideToSpeakerNotesEntry :: PandocMonad m => Slide -> P m (Maybe Entry)+slideToSpeakerNotesEntry slide = do+  idNum <- slideNum slide+  local (\env -> env{envCurSlideId = idNum}) $ do+    mbElement <- slideToSpeakerNotesElement slide+    mbNotesIdNum <- do mp <- asks envSpeakerNotesIdMap+                       return $ M.lookup idNum mp+    case mbElement of+      Just element | Just notesIdNum <- mbNotesIdNum ->+                       Just <$>+                       elemToEntry+                       ("ppt/notesSlides/notesSlide" ++ show notesIdNum ++ ".xml")+                       element+      _ -> return Nothing++slideToSpeakerNotesRelElement :: PandocMonad m => Slide -> P m (Maybe Element)+slideToSpeakerNotesRelElement slide+  | Slide _ _ mbNotes <- slide+  , Just _ <- mbNotes = do+      idNum <- slideNum slide+      return $ Just $+        mknode "Relationships"+        [("xmlns", "http://schemas.openxmlformats.org/package/2006/relationships")]+        [ mknode "Relationship" [ ("Id", "rId2")+                                , ("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide")+                                , ("Target", "../slides/slide" ++ show idNum ++ ".xml")+                                ] ()+        , mknode "Relationship" [ ("Id", "rId1")+                                , ("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster")+                                , ("Target", "../notesMasters/notesMaster1.xml")+                                ] ()+        ]+slideToSpeakerNotesRelElement _ = return Nothing++slideToSpeakerNotesRelEntry :: PandocMonad m => Slide -> P m (Maybe Entry)+slideToSpeakerNotesRelEntry slide = do+  idNum <- slideNum slide+  mbElement <- slideToSpeakerNotesRelElement slide+  mp <- asks envSpeakerNotesIdMap+  let mbNotesIdNum = M.lookup idNum mp+  case mbElement of+    Just element | Just notesIdNum <- mbNotesIdNum ->+      Just <$>+      elemToEntry+      ("ppt/notesSlides/_rels/notesSlide" ++ show notesIdNum ++ ".xml.rels")+      element+    _ -> return Nothing+ slideToSlideRelEntry :: PandocMonad m => Slide -> P m Entry slideToSlideRelEntry slide = do   idNum <- slideNum slide@@ -1254,6 +1548,20 @@                           , ("Target", "../media/image" ++ (show $ mInfoGlobalId mInfo) ++ ext)                           ] () +speakerNotesSlideRelElement :: PandocMonad m => Slide -> P m (Maybe Element)+speakerNotesSlideRelElement slide = do+  idNum <- slideNum slide+  mp <- asks envSpeakerNotesIdMap+  return $ case M.lookup idNum mp of+    Nothing -> Nothing+    Just n ->+      let target = "../notesSlides/notesSlide" ++ show n ++ ".xml"+      in Just $+         mknode "Relationship" [ ("Id", "rId2")+                               , ("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide")+                               , ("Target", target)+                               ] ()+ slideToSlideRelElement :: PandocMonad m => Slide -> P m Element slideToSlideRelElement slide = do   idNum <- slideNum slide@@ -1263,6 +1571,8 @@         (Slide _ (ContentSlide _ _) _)      -> "../slideLayouts/slideLayout2.xml"         (Slide _ (TwoColumnSlide _ _ _) _)  -> "../slideLayouts/slideLayout4.xml" +  speakerNotesRels <- maybeToList <$> speakerNotesSlideRelElement slide+   linkIds <- gets stLinkIds   mediaIds <- gets stMediaIds @@ -1279,7 +1589,7 @@     ([mknode "Relationship" [ ("Id", "rId1")                            , ("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout")                            , ("Target", target)] ()-    ] ++ linkRels ++ mediaRels)+    ] ++ speakerNotesRels ++ linkRels ++ mediaRels)  slideToSldIdElement :: PandocMonad m => Slide -> P m Element slideToSldIdElement slide = do@@ -1294,7 +1604,7 @@   return $ mknode "p:sldIdLst" [] ids  presentationToPresentationElement :: PandocMonad m => Presentation -> P m Element-presentationToPresentationElement pres = do+presentationToPresentationElement pres@(Presentation _ slds) = do   refArchive <- asks envRefArchive   distArchive <- asks envDistArchive   element <- parseXml refArchive distArchive "ppt/presentation.xml"@@ -1306,8 +1616,44 @@         _                      -> Elem e       modifySldIdLst ct = ct -      newContent = map modifySldIdLst $ elContent element+      notesMasterRId = length slds + 2 +      notesMasterElem =  mknode "p:notesMasterIdLst" []+                         [ mknode+                           "p:NotesMasterId"+                           [("r:id", "rId" ++ show notesMasterRId)]+                           ()+                         ]++      -- if there's a notesMasterIdLst in the presentation.xml file,+      -- we want to remove it. We then want to put our own, if+      -- necessary, after the slideMasterIdLst element.++      removeNotesMaster' :: Content -> [Content]+      removeNotesMaster' (Elem e) = case elName e of+        (QName "notesMasterIdLst" _ _) -> []+        _                              -> [Elem e]+      removeNotesMaster' ct = [ct]++      removeNotesMaster :: [Content] -> [Content]+      removeNotesMaster = concatMap removeNotesMaster'++      insertNotesMaster' :: Content -> [Content]+      insertNotesMaster' (Elem e) = case elName e of+        (QName "sldMasterIdLst" _ _) -> [Elem e, Elem notesMasterElem]+        _                            -> [Elem e]+      insertNotesMaster' ct = [ct]++      insertNotesMaster :: [Content] -> [Content]+      insertNotesMaster = if presHasSpeakerNotes pres+                          then concatMap insertNotesMaster'+                          else id++      newContent = insertNotesMaster $+                   removeNotesMaster $+                   map modifySldIdLst $+                   elContent element+   return $ element{elContent = newContent}  presentationToPresEntry :: PandocMonad m => Presentation -> P m Entry@@ -1407,10 +1753,16 @@                                 }   | otherwise = Nothing +getSpeakerNotesFilePaths :: PandocMonad m => P m [FilePath]+getSpeakerNotesFilePaths = do+  mp <- asks envSpeakerNotesIdMap+  let notesIdNums = M.elems mp+  return $ map (\n -> "ppt/notesSlides/notesSlide" ++ show n ++ ".xml") notesIdNums+ presentationToContentTypes :: PandocMonad m => Presentation -> P m ContentTypes-presentationToContentTypes (Presentation _ slides) = do+presentationToContentTypes p@(Presentation _ slides) = do   mediaInfos <- (mconcat . M.elems) <$> gets stMediaIds-  filePaths <- patternsToFilePaths inheritedPatterns+  filePaths <- patternsToFilePaths $ inheritedPatterns p   let mediaFps = filter (match (compile "ppt/media/image*")) filePaths   let defaults = [ DefaultContentType "xml" "application/xml"                  , DefaultContentType "rels" "application/vnd.openxmlformats-package.relationships+xml"@@ -1426,9 +1778,10 @@   let slideOverrides = mapMaybe                        (\fp -> pathToOverride $ "ppt/slides/" ++ fp)                        relativePaths+  speakerNotesOverrides <- (mapMaybe pathToOverride) <$> getSpeakerNotesFilePaths   return $ ContentTypes     (defaults ++ mediaDefaults)-    (inheritedOverrides ++ docPropsOverride ++ presOverride ++ slideOverrides)+    (inheritedOverrides ++ docPropsOverride ++ presOverride ++ slideOverrides ++ speakerNotesOverrides)  presML :: String presML = "application/vnd.openxmlformats-officedocument.presentationml"
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs view
@@ -37,7 +37,7 @@                                                    , DocProps(..)                                                    , Slide(..)                                                    , Layout(..)-                                                   , Notes(..)+                                                   , SpeakerNotes(..)                                                    , SlideId(..)                                                    , Shape(..)                                                    , Graphic(..)@@ -72,7 +72,11 @@ import Text.Pandoc.Writers.Shared (metaValueToInlines) import qualified Data.Map as M import qualified Data.Set as S-import Data.Maybe (maybeToList)+import Data.Maybe (maybeToList, fromMaybe)+import Text.Pandoc.Highlighting+import qualified Data.Text as T+import Control.Applicative ((<|>))+import Skylighting  data WriterEnv = WriterEnv { envMetadata :: Meta                            , envRunProps :: RunProps@@ -83,6 +87,7 @@                            , envInList :: Bool                            , envInNoteSlide :: Bool                            , envCurSlideId :: SlideId+                           , envInSpeakerNotes :: Bool                            }                  deriving (Show) @@ -96,6 +101,7 @@                   , envInList = False                   , envInNoteSlide = False                   , envCurSlideId = SlideId "Default"+                  , envInSpeakerNotes = False                   }  @@ -104,7 +110,7 @@                                , stAnchorMap :: M.Map String SlideId                                , stSlideIdSet :: S.Set SlideId                                , stLog :: [LogMessage]-+                               , stSpeakerNotesMap :: M.Map SlideId [[Paragraph]]                                } deriving (Show, Eq)  instance Default WriterState where@@ -113,6 +119,7 @@                     -- we reserve this s                     , stSlideIdSet = reservedSlideIds                     , stLog = []+                    , stSpeakerNotesMap = mempty                     }  metadataSlideId :: SlideId@@ -132,7 +139,7 @@  uniqueSlideId' :: Integer -> S.Set SlideId -> String -> SlideId uniqueSlideId' n idSet s =-  let s' = if n == 0 then s else (s ++ "-" ++ show n)+  let s' = if n == 0 then s else s ++ "-" ++ show n   in if SlideId s' `S.member` idSet      then uniqueSlideId' (n+1) idSet s      else SlideId s'@@ -148,7 +155,7 @@   return sldId  addLogMessage :: LogMessage -> Pres ()-addLogMessage msg = modify $ \st -> st{stLog = msg : (stLog st)}+addLogMessage msg = modify $ \st -> st{stLog = msg : stLog st}  type Pres = ReaderT WriterEnv (State WriterState) @@ -176,7 +183,7 @@  data Slide = Slide { slideId :: SlideId                    , slideLayout :: Layout-                   , slideNotes :: (Maybe Notes)+                   , slideSpeakerNotes :: Maybe SpeakerNotes                    } deriving (Show, Eq)  newtype SlideId = SlideId String@@ -185,7 +192,7 @@ -- In theory you could have anything on a notes slide but it seems -- designed mainly for one textbox, so we'll just put in the contents -- of that textbox, to avoid other shapes that won't work as well.-newtype Notes = Notes [Paragraph]+newtype SpeakerNotes = SpeakerNotes {fromSpeakerNotes :: [Paragraph]}   deriving (Show, Eq)  data Layout = MetadataSlide { metadataSlideTitle :: [ParaElem]@@ -222,7 +229,6 @@                            , paraElems  :: [ParaElem]                            } deriving (Show, Eq) - data BulletType = Bullet                 | AutoNumbering ListAttributes   deriving (Show, Eq)@@ -280,6 +286,10 @@                          , rPropCode :: Bool                          , rPropBlockQuote :: Bool                          , rPropForceSize :: Maybe Pixels+                         , rSolidFill :: Maybe Color+                         -- TODO: Make a full underline data type with+                         -- the different options.+                         , rPropUnderline :: Bool                          } deriving (Show, Eq)  instance Default RunProps where@@ -292,6 +302,8 @@                  , rPropCode = False                  , rPropBlockQuote = False                  , rPropForceSize = Nothing+                 , rSolidFill = Nothing+                 , rPropUnderline = False                  }  data PicProps = PicProps { picPropLink :: Maybe LinkTarget@@ -335,23 +347,32 @@ inlineToParElems Space = inlineToParElems (Str " ") inlineToParElems SoftBreak = inlineToParElems (Str " ") inlineToParElems LineBreak = return [Break]-inlineToParElems (Link _ ils (url, title)) = do+inlineToParElems (Link _ ils (url, title)) =   local (\r ->r{envRunProps = (envRunProps r){rLink = Just $ ExternalTarget (url, title)}}) $-    inlinesToParElems ils-inlineToParElems (Code _ str) = do+  inlinesToParElems ils+inlineToParElems (Code _ str) =   local (\r ->r{envRunProps = (envRunProps r){rPropCode = True}}) $-    inlineToParElems $ Str str+  inlineToParElems $ Str str inlineToParElems (Math mathtype str) =   return [MathElem mathtype (TeXString str)]+-- We ignore notes if we're in a speaker notes div. Otherwise this+-- would add an entry to the endnotes slide, which would put speaker+-- notes in the public presentation. In the future, we can entertain a+-- way of adding a speakernotes-specific note that would just add+-- paragraphs to the bottom of the notes page. inlineToParElems (Note blks) = do-  notes <- gets stNoteIds-  let maxNoteId = case M.keys notes of-        [] -> 0-        lst -> maximum lst-      curNoteId = maxNoteId + 1-  modify $ \st -> st { stNoteIds = M.insert curNoteId blks notes }-  local (\env -> env{envRunProps = (envRunProps env){rLink = Just $ InternalTarget endNotesSlideId}}) $-    inlineToParElems $ Superscript [Str $ show curNoteId]+  inSpNotes <- asks envInSpeakerNotes+  if inSpNotes+    then return []+    else do+    notes <- gets stNoteIds+    let maxNoteId = case M.keys notes of+          [] -> 0+          lst -> maximum lst+        curNoteId = maxNoteId + 1+    modify $ \st -> st { stNoteIds = M.insert curNoteId blks notes }+    local (\env -> env{envRunProps = (envRunProps env){rLink = Just $ InternalTarget endNotesSlideId}}) $+      inlineToParElems $ Superscript [Str $ show curNoteId] inlineToParElems (Span _ ils) = concatMapM inlineToParElems ils inlineToParElems (RawInline _ _) = return [] inlineToParElems _ = return []@@ -391,8 +412,17 @@   return [Paragraph pProps parElems] -- TODO: work out the attributes blockToParagraphs (CodeBlock attr str) =-  local (\r -> r{envParaProps = def{pPropMarginLeft = Just 100}}) $-  blockToParagraphs $ Para [Code attr str]+  local (\r -> r{ envParaProps = def{pPropMarginLeft = Just 100}+                , envRunProps = (envRunProps r){rPropCode = True}}) $ do+  mbSty <- writerHighlightStyle <$> asks envOpts+  synMap <- writerSyntaxMap <$> asks envOpts+  case mbSty of+    Just sty ->+      case highlight synMap (formatSourceLines sty) attr str of+        Right pElems -> do pProps <- asks envParaProps+                           return [Paragraph pProps pElems]+        Left _ -> blockToParagraphs $ Para [Str str]+    Nothing -> blockToParagraphs $ Para [Str str] -- We can't yet do incremental lists, but we should render a -- (BlockQuote List) as a list to maintain compatibility with other -- formats.@@ -444,7 +474,16 @@         definition <- concatMapM (blockToParagraphs . BlockQuote) blksLst         return $ term ++ definition   concatMapM go entries-blockToParagraphs (Div (_, ("notes" : []), _) _) = return []+blockToParagraphs (Div (_, "notes" : [], _) blks) =+  local (\env -> env{envInSpeakerNotes=True}) $ do+  sldId <- asks envCurSlideId+  spkNotesMap <- gets stSpeakerNotesMap+  paras <- concatMapM blockToParagraphs blks+  let spkNotesMap' = case M.lookup sldId spkNotesMap of+        Just lst -> M.insert sldId (paras : lst) spkNotesMap+        Nothing  -> M.insert sldId [paras] spkNotesMap+  modify $ \st -> st{stSpeakerNotesMap = spkNotesMap'}+  return [] blockToParagraphs (Div _ blks)  = concatMapM blockToParagraphs blks blockToParagraphs blk = do   addLogMessage $ BlockNotRendered blk@@ -462,7 +501,7 @@  cellToParagraphs :: Alignment -> TableCell -> Pres [Paragraph] cellToParagraphs algn tblCell = do-  paras <- mapM (blockToParagraphs) tblCell+  paras <- mapM blockToParagraphs tblCell   let alignment = case algn of         AlignLeft -> Just AlgnLeft         AlignRight -> Just AlgnRight@@ -475,7 +514,7 @@ rowToParagraphs algns tblCells = do   -- We have to make sure we have the right number of alignments   let pairs = zip (algns ++ repeat AlignDefault) tblCells-  mapM (\(a, tc) -> cellToParagraphs a tc) pairs+  mapM (uncurry cellToParagraphs) pairs  withAttr :: Attr -> Shape -> Shape withAttr attr (Pic picPr url caption) =@@ -488,17 +527,17 @@  blockToShape :: Block -> Pres Shape blockToShape (Plain (il:_)) | Image attr ils (url, _) <- il =-      (withAttr attr . Pic def url) <$> (inlinesToParElems ils)+      (withAttr attr . Pic def url) <$> inlinesToParElems ils blockToShape (Para (il:_))  | Image attr ils (url, _) <- il =-      (withAttr attr . Pic def url) <$> (inlinesToParElems ils)+      (withAttr attr . Pic def url) <$> inlinesToParElems ils blockToShape (Plain (il:_)) | Link _ (il':_) target <- il                             , Image attr ils (url, _) <- il' =       (withAttr attr . Pic def {picPropLink = Just $ ExternalTarget target} url) <$>-      (inlinesToParElems ils)+      inlinesToParElems ils blockToShape (Para (il:_))  | Link _ (il':_) target <- il                             , Image attr ils (url, _) <- il' =       (withAttr attr . Pic def{picPropLink = Just $ ExternalTarget target} url) <$>-      (inlinesToParElems ils)+      inlinesToParElems ils blockToShape (Table caption algn _ hdrCells rows) = do   caption' <- inlinesToParElems caption   hdrCells' <- rowToParagraphs algn hdrCells@@ -518,11 +557,11 @@  combineShapes :: [Shape] -> [Shape] combineShapes [] = []-combineShapes (s : []) = [s]-combineShapes (pic@(Pic _ _ _) : ss) = pic : combineShapes ss-combineShapes ((TextBox []) : ss) = combineShapes ss+combineShapes[s] = [s]+combineShapes (pic@(Pic{}) : ss) = pic : combineShapes ss+combineShapes (TextBox [] : ss) = combineShapes ss combineShapes (s : TextBox [] : ss) = combineShapes (s : ss)-combineShapes ((TextBox (p:ps)) : (TextBox (p':ps')) : ss) =+combineShapes (TextBox (p:ps) : TextBox (p':ps') : ss) =   combineShapes $ TextBox ((p:ps) ++ (p':ps')) : ss combineShapes (s:ss) = s : combineShapes ss @@ -530,8 +569,8 @@ blocksToShapes blks = combineShapes <$> mapM blockToShape blks  isImage :: Inline -> Bool-isImage (Image _ _ _) = True-isImage (Link _ ((Image _ _ _) : _) _) = True+isImage (Image{}) = True+isImage (Link _ (Image _ _ _ : _) _) = True isImage _ = False  splitBlocks' :: [Block] -> [[Block]] -> [Block] -> Pres [[Block]]@@ -546,27 +585,27 @@     GT -> splitBlocks' (cur ++ [h]) acc blks -- `blockToParagraphs` treats Plain and Para the same, so we can save -- some code duplication by treating them the same here.-splitBlocks' cur acc ((Plain ils) : blks) = splitBlocks' cur acc ((Para ils) : blks)-splitBlocks' cur acc ((Para (il:ils)) : blks) | isImage il = do+splitBlocks' cur acc (Plain ils : blks) = splitBlocks' cur acc (Para ils : blks)+splitBlocks' cur acc (Para (il:ils) : blks) | isImage il = do   slideLevel <- asks envSlideLevel   case cur of-    (Header n _ _) : [] | n == slideLevel ->+    [(Header n _ _)] | n == slideLevel ->                             splitBlocks' []                             (acc ++ [cur ++ [Para [il]]])-                            (if null ils then blks else (Para ils) : blks)+                            (if null ils then blks else Para ils : blks)     _ -> splitBlocks' []          (acc ++ (if null cur then [] else [cur]) ++ [[Para [il]]])-         (if null ils then blks else (Para ils) : blks)-splitBlocks' cur acc (tbl@(Table _ _ _ _ _) : blks) = do+         (if null ils then blks else Para ils : blks)+splitBlocks' cur acc (tbl@(Table{}) : blks) = do   slideLevel <- asks envSlideLevel   case cur of-    (Header n _ _) : [] | n == slideLevel ->+    [(Header n _ _)] | n == slideLevel ->                             splitBlocks' [] (acc ++ [cur ++ [tbl]]) blks     _ ->  splitBlocks' [] (acc ++ (if null cur then [] else [cur]) ++ [[tbl]]) blks splitBlocks' cur acc (d@(Div (_, classes, _) _): blks) | "columns" `elem` classes =  do   slideLevel <- asks envSlideLevel   case cur of-    (Header n _ _) : [] | n == slideLevel ->+    [(Header n _ _)] | n == slideLevel ->                             splitBlocks' [] (acc ++ [cur ++ [d]]) blks     _ ->  splitBlocks' [] (acc ++ (if null cur then [] else [cur]) ++ [[d]]) blks splitBlocks' cur acc (blk : blks) = splitBlocks' (cur ++ [blk]) acc blks@@ -574,13 +613,19 @@ splitBlocks :: [Block] -> Pres [[Block]] splitBlocks = splitBlocks' [] [] +getSpeakerNotes :: Pres (Maybe SpeakerNotes)+getSpeakerNotes = do+  sldId <- asks envCurSlideId+  spkNtsMap <- gets stSpeakerNotesMap+  return $ (SpeakerNotes . concat . reverse) <$> (M.lookup sldId spkNtsMap)+ blocksToSlide' :: Int -> [Block] -> Pres Slide-blocksToSlide' lvl ((Header n (ident, _, _) ils) : blks)+blocksToSlide' lvl (Header n (ident, _, _) ils : blks)   | n < lvl = do       registerAnchorId ident       sldId <- asks envCurSlideId       hdr <- inlinesToParElems ils-      return $ Slide sldId (TitleSlide {titleSlideHeader = hdr}) Nothing+      return $ Slide sldId TitleSlide {titleSlideHeader = hdr} Nothing   | n == lvl = do       registerAnchorId ident       hdr <- inlinesToParElems ils@@ -595,7 +640,7 @@ blocksToSlide' _ (blk : blks)   | Div (_, classes, _) divBlks <- blk   , "columns" `elem` classes-  , (Div (_, clsL, _) blksL) : (Div (_, clsR, _) blksR) : remaining <- divBlks+  , Div (_, clsL, _) blksL : Div (_, clsR, _) blksR : remaining <- divBlks   , "column" `elem` clsL, "column" `elem` clsR = do       unless (null blks)         (mapM (addLogMessage . BlockNotRendered) blks >> return ())@@ -645,7 +690,9 @@ blocksToSlide :: [Block] -> Pres Slide blocksToSlide blks = do   slideLevel <- asks envSlideLevel-  blocksToSlide' slideLevel blks+  sld <- blocksToSlide' slideLevel blks+  spkNotes <- getSpeakerNotes+  return $ sld{slideSpeakerNotes = spkNotes}  makeNoteEntry :: Int -> [Block] -> [Block] makeNoteEntry n blks =@@ -653,7 +700,7 @@   in     case blks of       (Para ils : blks') -> (Para $ enum : Space : ils) : blks'-      _ -> (Para [enum]) : blks+      _ -> Para [enum] : blks  forceFontSize :: Pixels -> Pres a -> Pres a forceFontSize px x = do@@ -787,11 +834,11 @@ applyToSlide :: Monad m => (ParaElem -> m ParaElem) -> Slide -> m Slide applyToSlide f slide = do   layout' <- applyToLayout f $ slideLayout slide-  mbNotes' <- case slideNotes slide of-                Just (Notes notes) -> (Just . Notes) <$>-                                      mapM (applyToParagraph f) notes+  mbNotes' <- case slideSpeakerNotes slide of+                Just (SpeakerNotes notes) -> (Just . SpeakerNotes) <$>+                                             mapM (applyToParagraph f) notes                 Nothing -> return Nothing-  return slide{slideLayout = layout', slideNotes = mbNotes'}+  return slide{slideLayout = layout', slideSpeakerNotes = mbNotes'}  replaceAnchor :: ParaElem -> Pres ParaElem replaceAnchor (Run rProps s)@@ -805,6 +852,41 @@       return $ Run rProps' s replaceAnchor pe = return pe +emptyParaElem :: ParaElem -> Bool+emptyParaElem (Run _ s) =+  null $ Shared.trim s+emptyParaElem (MathElem _ ts) =+  null $ Shared.trim $ unTeXString ts+emptyParaElem _ = False++emptyParagraph :: Paragraph -> Bool+emptyParagraph para = all emptyParaElem $ paraElems para+++emptyShape :: Shape -> Bool+emptyShape (TextBox paras) = all emptyParagraph $ paras+emptyShape _ = False++emptyLayout :: Layout -> Bool+emptyLayout layout = case layout of+  MetadataSlide title subtitle authors date ->+    all emptyParaElem title &&+    all emptyParaElem subtitle &&+    all (all emptyParaElem) authors &&+    all emptyParaElem date+  TitleSlide hdr -> all emptyParaElem hdr+  ContentSlide hdr shapes ->+    all emptyParaElem hdr &&+    all emptyShape shapes+  TwoColumnSlide hdr shapes1 shapes2 ->+    all emptyParaElem hdr &&+    all emptyShape shapes1 &&+    all emptyShape shapes2++emptySlide :: Slide -> Bool+emptySlide (Slide _ layout Nothing) = emptyLayout layout+emptySlide _ = False+ blocksToPresentationSlides :: [Block] -> Pres [Slide] blocksToPresentationSlides blks = do   opts <- asks envOpts@@ -841,11 +923,12 @@                               (\env -> env { envCurSlideId = endNotesSlideId                                            , envInNoteSlide = True                                            })-                              (blocksToSlide $ endNotesSlideBlocks)+                              (blocksToSlide endNotesSlideBlocks)                             return [endNotesSlide]    let slides = metadataslides ++ tocSlides ++ bodyslides ++ endNotesSlides-  mapM (applyToSlide replaceAnchor) slides+      slides' = filter (not . emptySlide) slides+  mapM (applyToSlide replaceAnchor) slides'  metaToDocProps :: Meta -> DocProps metaToDocProps meta =@@ -870,11 +953,35 @@ documentToPresentation opts (Pandoc meta blks) =   let env = def { envOpts = opts                 , envMetadata = meta-                , envSlideLevel = case writerSlideLevel opts of-                                    Just lvl -> lvl-                                    Nothing  -> getSlideLevel blks+                , envSlideLevel = fromMaybe (getSlideLevel blks) (writerSlideLevel opts)                 }       (presSlides, msgs) = runPres env def $ blocksToPresentationSlides blks       docProps = metaToDocProps meta   in     (Presentation docProps presSlides, msgs)++-- --------------------------------------------------------------++applyTokStyToRunProps :: TokenStyle -> RunProps -> RunProps+applyTokStyToRunProps tokSty rProps =+  rProps{ rSolidFill     = tokenColor tokSty <|> rSolidFill rProps+        , rPropBold      = tokenBold tokSty || rPropBold rProps+        , rPropItalics   = tokenItalic tokSty || rPropItalics rProps+        , rPropUnderline = tokenUnderline tokSty || rPropUnderline rProps+        }++formatToken :: Style -> Token -> ParaElem+formatToken sty (tokType, txt) =+  let rProps = def{rPropCode = True, rSolidFill = defaultColor sty}+      rProps' = case M.lookup tokType (tokenStyles sty) of+        Just tokSty -> applyTokStyToRunProps tokSty rProps+        Nothing     -> rProps+  in+    Run rProps' $ T.unpack txt++formatSourceLine :: Style -> FormatOptions -> SourceLine -> [ParaElem]+formatSourceLine sty _ srcLn = map (formatToken sty) srcLn++formatSourceLines :: Style -> FormatOptions -> [SourceLine] -> [ParaElem]+formatSourceLines sty opts srcLns = intercalate [Break] $+                                    map (formatSourceLine sty opts) srcLns
src/Text/Pandoc/Writers/RST.hs view
@@ -57,7 +57,6 @@               , stHasRawTeX   :: Bool               , stOptions     :: WriterOptions               , stTopLevel    :: Bool-              , stLastNested  :: Bool               }  type RST = StateT WriterState@@ -68,7 +67,7 @@   let st = WriterState { stNotes = [], stLinks = [],                          stImages = [], stHasMath = False,                          stHasRawTeX = False, stOptions = opts,-                         stTopLevel = True, stLastNested = False}+                         stTopLevel = True }   evalStateT (pandocToRST document) st  -- | Return RST representation of document.@@ -133,7 +132,7 @@ -- | Return RST representation of notes. notesToRST :: PandocMonad m => [[Block]] -> RST m Doc notesToRST notes =-  mapM (uncurry noteToRST) (zip [1..] notes) >>=+   zipWithM noteToRST [1..] notes >>=   return . vsep  -- | Return RST representation of a note.@@ -307,8 +306,7 @@   let maxMarkerLength = maximum $ map length markers   let markers' = map (\m -> let s = maxMarkerLength - length m                             in  m ++ replicate s ' ') markers-  contents <- mapM (uncurry orderedListItemToRST) $-              zip markers' items+  contents <- zipWithM orderedListItemToRST markers' items   -- ensure that sublists have preceding blank line   return $ blankline $$ chomp (vcat contents) $$ blankline blockToRST (DefinitionList items) = do@@ -353,32 +351,25 @@                 -> [Block]       -- ^ List of block elements                 -> RST m Doc blockListToRST' topLevel blocks = do+  -- insert comment between list and quoted blocks, see #4248 and #3675+  let fixBlocks (b1:b2@(BlockQuote _):bs)+        | toClose b1 = b1 : commentSep : b2 : fixBlocks bs+        where+          toClose Plain{}                                = False+          toClose Header{}                               = False+          toClose LineBlock{}                            = False+          toClose HorizontalRule                         = False+          toClose (Para [Image _ _ (_,'f':'i':'g':':':_)]) = True+          toClose Para{}                                 = False+          toClose _                                        = True+          commentSep  = RawBlock "rst" "..\n\n"+      fixBlocks (b:bs) = b : fixBlocks bs+      fixBlocks [] = []   tl <- gets stTopLevel-  modify (\s->s{stTopLevel=topLevel, stLastNested=False})-  res <- vcat `fmap` mapM blockToRST' blocks+  modify (\s->s{stTopLevel=topLevel})+  res <- vcat `fmap` mapM blockToRST (fixBlocks blocks)   modify (\s->s{stTopLevel=tl})   return res--blockToRST' :: PandocMonad m => Block -> RST m Doc-blockToRST' (x@BlockQuote{}) = do-  lastNested <- gets stLastNested-  res <- blockToRST x-  modify (\s -> s{stLastNested = True})-  return $ if lastNested-              then ".." $+$ res-              else res-blockToRST' x = do-  modify (\s -> s{stLastNested =-    case x of-         Para [Image _ _ (_,'f':'i':'g':':':_)] -> True-         Para{}                                 -> False-         Plain{}                                -> False-         Header{}                               -> False-         LineBlock{}                            -> False-         HorizontalRule                         -> False-         _                                      -> True-    })-  blockToRST x  blockListToRST :: PandocMonad m                => [Block]       -- ^ List of block elements
src/Text/Pandoc/Writers/RTF.hs view
@@ -31,6 +31,7 @@ module Text.Pandoc.Writers.RTF ( writeRTF                                ) where import Control.Monad.Except (catchError, throwError)+import Control.Monad import qualified Data.ByteString as B import Data.Char (chr, isDigit, ord) import Data.List (intercalate, isSuffixOf)@@ -278,8 +279,7 @@   mapM (listItemToRTF alignment indent (bulletMarker indent)) lst blockToRTF indent alignment (OrderedList attribs lst) =   (spaceAtEnd . concat) <$>-   mapM (uncurry (listItemToRTF alignment indent))-   (zip (orderedMarkers indent attribs) lst)+   zipWithM (listItemToRTF alignment indent) (orderedMarkers indent attribs) lst blockToRTF indent alignment (DefinitionList lst) = (spaceAtEnd . concat) <$>   mapM (definitionListItemToRTF alignment indent) lst blockToRTF indent _ HorizontalRule = return $@@ -303,8 +303,8 @@   let sizes = if all (== 0) sizes'                  then replicate (length cols) (1.0 / fromIntegral (length cols))                  else sizes'-  columns <- concat <$> mapM (uncurry (tableItemToRTF indent))-                         (zip aligns cols)+  columns <- concat <$>+     zipWithM (tableItemToRTF indent) aligns cols   let rightEdges = tail $ scanl (\sofar new -> sofar + floor (new * totalTwips))                                 (0 :: Integer) sizes   let cellDefs = map (\edge -> (if header
src/Text/Pandoc/Writers/TEI.hs view
@@ -90,7 +90,7 @@ -- | Convert an Element to TEI. elementToTEI :: PandocMonad m => WriterOptions -> Int -> Element -> m Doc elementToTEI opts _   (Blk block) = blockToTEI opts block-elementToTEI opts lvl (Sec _ _num (id',_,_) title elements) = do+elementToTEI opts lvl (Sec _ _num attr title elements) = do   -- TEI doesn't allow sections with no content, so insert some if needed   let elements' = if null elements                     then [Blk (Para [])]@@ -103,8 +103,7 @@                    | otherwise        -> "section"   contents <- vcat <$> mapM (elementToTEI opts (lvl + 1)) elements'   titleContents <- inlinesToTEI opts title-  return $ inTags True "div" (("type", divType) :-    [("id", writerIdentifierPrefix opts ++ id') | not (null id')]) $+  return $ inTags True "div" (("type", divType) : idFromAttr opts attr) $       inTagsSimple "head" titleContents $$ contents  -- | Convert a list of Pandoc blocks to TEI.@@ -142,10 +141,10 @@   inTagsIndented "item" <$> blocksToTEI opts (map plainToPara item)  imageToTEI :: PandocMonad m => WriterOptions -> Attr -> String -> m Doc-imageToTEI _ attr src = return $ selfClosingTag "graphic" $-  ("url", src) : idAndRole attr ++ dims+imageToTEI opts attr src = return $ selfClosingTag "graphic" $+  ("url", src) : idFromAttr opts attr ++ dims   where-    dims = go Width "width" ++ go Height "depth"+    dims = go Width "width" ++ go Height "height"     go dir dstr = case dimension dir attr of                     Just a  -> [(dstr, show a)]                     Nothing -> []@@ -155,8 +154,8 @@ blockToTEI _ Null = return empty -- Add ids to paragraphs in divs with ids - this is needed for -- pandoc-citeproc to get link anchors in bibliographies:-blockToTEI opts (Div (ident,_,_) [Para lst]) = do-  let attribs = [("id", ident) | not (null ident)]+blockToTEI opts (Div attr [Para lst]) = do+  let attribs = idFromAttr opts attr   inTags False "p" attribs <$> inlinesToTEI opts lst blockToTEI opts (Div _ bs) = blocksToTEI opts $ map plainToPara bs blockToTEI _ h@Header{} = do@@ -320,8 +319,10 @@               return $ linktext <+> char '(' <> emailLink <> char ')'   | otherwise =       (if "#" `isPrefixOf` src-            then inTags False "ref" $ ("target", drop 1 src) : idAndRole attr-            else inTags False "ref" $ ("target", src) : idAndRole attr ) <$>+            then inTags False "ref" $ ("target", drop 1 src)+                 : idFromAttr opts attr+            else inTags False "ref" $ ("target", src)+                 : idFromAttr opts attr ) <$>         inlinesToTEI opts txt inlineToTEI opts (Image attr description (src, tit)) = do   let titleDoc = if null tit@@ -337,12 +338,8 @@ inlineToTEI opts (Note contents) =   inTagsIndented "note" <$> blocksToTEI opts contents -idAndRole :: Attr -> [(String, String)]-idAndRole (id',cls,_) = ident ++ role-  where-    ident = if null id'-               then []-               else [("id", id')]-    role  = if null cls-               then []-               else [("role", unwords cls)]+idFromAttr :: WriterOptions -> Attr -> [(String, String)]+idFromAttr opts (id',_,_) =+  if null id'+     then []+     else [("xml:id", writerIdentifierPrefix opts ++ id')]
src/Text/Pandoc/Writers/Texinfo.hs view
@@ -475,7 +475,7 @@ inlineToTexinfo (Link _ txt (src, _)) =   case txt of         [Str x] | escapeURI x == src ->  -- autolink-             do return $ text $ "@url{" ++ x ++ "}"+             return $ text $ "@url{" ++ x ++ "}"         _ -> do contents <- escapeCommas $ inlineListToTexinfo txt                 let src1 = stringToTexinfo src                 return $ text ("@uref{" ++ src1 ++ ",") <> contents <>
stack.yaml view
@@ -13,11 +13,13 @@ packages: - '.' extra-deps:-- pandoc-citeproc-0.13.0.1+- pandoc-citeproc-0.14.1.5 - hslua-0.9.5 - skylighting-0.6 - ansi-terminal-0.7.1.1 - tasty-1.0.0.1+- texmath-0.10.1.1+- tagsoup-0.14.6 ghc-options:    "$locals": -fhide-source-paths resolver: lts-10.3
test/Tests/Command.hs view
@@ -40,7 +40,7 @@   -- filter \r so the tests will work on Windows machines   let out = filter (/= '\r') $ err' ++ out'   result  <- if ec == ExitSuccess-                then do+                then                   if out == norm                      then return TestPassed                      else return@@ -52,6 +52,7 @@   assertBool (show result) (result == TestPassed)  tests :: TestTree+{-# NOINLINE tests #-} tests = unsafePerformIO $ do   pandocpath <- findPandoc   files <- filter (".md" `isSuffixOf`) <$>@@ -89,7 +90,6 @@   contents <- UTF8.toText <$> BS.readFile ("command" </> fp)   Pandoc _ blocks <- runIOorExplode (readMarkdown                         def{ readerExtensions = pandocExtensions } contents)-  let codeblocks = map extractCode $ filter isCodeBlock $ blocks+  let codeblocks = map extractCode $ filter isCodeBlock blocks   let cases = map (runCommandTest pandocpath) $ zip [1..] codeblocks   return $ testGroup fp cases-
test/Tests/Lua.hs view
@@ -111,6 +111,12 @@                      , plain (str "to_roman_numeral: OK")                      ]) +  , testCase "Script filename is set" $+    assertFilterConversion "unexpected script name"+      "script-name.lua"+      (doc $ para "ignored")+      (doc $ para (str $ "lua" </> "script-name.lua"))+   , testCase "Pandoc version is set" . runPandocLua' $ do       Lua.getglobal' "table.concat"       Lua.getglobal "PANDOC_VERSION"
test/Tests/Readers/Creole.hs view
@@ -224,7 +224,7 @@                     <> " bar")         , "escaped auto link" =:           "foo ~http://foo.example.com/bar/baz.html bar"-          =?> para ("foo http://foo.example.com/bar/baz.html bar")+          =?> para "foo http://foo.example.com/bar/baz.html bar"         , "wiki link simple" =:           "foo [[http://foo.example.com/foo.png]] bar"           =?> para ("foo "
test/Tests/Readers/Docx.hs view
@@ -5,6 +5,7 @@ import qualified Data.ByteString.Lazy as B import qualified Data.Map as M import qualified Data.Text as T+import Data.Maybe import System.IO.Unsafe import Test.Tasty import Test.Tasty.HUnit@@ -46,7 +47,7 @@   nf <- UTF8.toText <$> BS.readFile nativeFile   p <- runIOorExplode $ readDocx opts df   df' <- runIOorExplode $ readNative def nf-  return $ (noNorm p, noNorm df')+  return (noNorm p, noNorm df')  testCompareWithOptsIO :: ReaderOptions -> String -> FilePath -> FilePath -> IO TestTree testCompareWithOptsIO opts name docxFile nativeFile = do@@ -87,11 +88,9 @@                  Nothing      -> error ("couldn't find " ++                                         mediaPath ++                                         " in media bag")-      docxBS = case docxMedia of-                 Just bs -> bs-                 Nothing -> error ("couldn't find " ++-                                   mediaPath ++-                                   " in media bag")+      docxBS = fromMaybe (error ("couldn't find " +++                        mediaPath +++                        " in media bag")) docxMedia   return $ mbBS == docxBS  compareMediaBagIO :: FilePath -> IO Bool@@ -180,6 +179,10 @@             "docx/sdt_elements.docx"             "docx/sdt_elements.native"           , testCompare+            "nested Structured Document Tags"+            "docx/nested_sdt.docx"+            "docx/nested_sdt.native"+          , testCompare             "remove anchor spans with nothing pointing to them"             "docx/unused_anchors.docx"             "docx/unused_anchors.native"@@ -274,6 +277,10 @@             "docx/table_one_row.docx"             "docx/table_one_row.native"           , testCompare+            "tables with variable width"+            "docx/table_variable_width.docx"+            "docx/table_variable_width.native"+          , testCompare             "code block"             "docx/codeblock.docx"             "docx/codeblock.native"@@ -368,6 +375,17 @@           [ testMediaBag             "image extraction"             "docx/image.docx"+          ]+        , testGroup "custom styles"+          [ testCompare+            "custom styles (`+styles`) not enabled (default)"+            "docx/custom-style-reference.docx"+            "docx/custom-style-no-styles.native"+          , testCompareWithOpts+            def{readerExtensions=extensionsFromList [Ext_styles]}+            "custom styles (`+styles`) enabled"+            "docx/custom-style-reference.docx"+            "docx/custom-style-with-styles.native"           ]         , testGroup "metadata"           [ testCompareWithOpts def{readerStandalone=True}
test/Tests/Readers/EPUB.hs view
@@ -17,7 +17,7 @@  testMediaBag :: FilePath -> [(String, String, Int)] -> IO () testMediaBag fp bag = do-  actBag <- (mediaDirectory <$> getMediaBag fp)+  actBag <- mediaDirectory <$> getMediaBag fp   assertBool (show "MediaBag did not match:\nExpected: "              ++ show bag              ++ "\nActual: "
test/Tests/Readers/Muse.hs view
@@ -27,15 +27,16 @@ spcSep :: [Inlines] -> Inlines spcSep = mconcat . intersperse space --- Tables and definition lists don't round-trip yet-+-- Tables don't round-trip yet+-- makeRoundTrip :: Block -> Block-makeRoundTrip (Table{}) = Para [Str "table was here"]-makeRoundTrip (DefinitionList{}) = Para [Str "deflist was here"]+makeRoundTrip Table{} = Para [Str "table was here"]+makeRoundTrip (OrderedList (start, LowerAlpha, _) items) = OrderedList (start, Decimal, Period) items+makeRoundTrip (OrderedList (start, UpperAlpha, _) items) = OrderedList (start, Decimal, Period) items makeRoundTrip x = x  -- Demand that any AST produced by Muse reader and written by Muse writer can be read back exactly the same way.--- Currently we remove code blocks and tables and compare third rewrite to the second.+-- Currently we remove tables and compare third rewrite to the second. -- First and second rewrites are not equal yet. roundTrip :: Block -> Bool roundTrip b = d'' == d'''@@ -44,7 +45,7 @@         d'' = rewrite d'         d''' = rewrite d''         rewrite = amuse . T.pack . (++ "\n") . T.unpack .-                  (purely $ writeMuse def { writerExtensions = extensionsFromList [Ext_amuse]+                  purely (writeMuse def { writerExtensions = extensionsFromList [Ext_amuse]                                           , writerWrapText = WrapPreserve                                           }) @@ -114,6 +115,12 @@        , "Linebreak" =: "Line <br>  break" =?> para ("Line" <> linebreak <> "break") +      , "Trailing whitespace inside paragraph" =:+        T.unlines [ "First line " -- trailing whitespace here+                  , "second line"+                  ]+        =?> para "First line\nsecond line"+       , "Non-breaking space" =: "Foo~~bar" =?> para "Foo\160bar"       , "Single ~" =: "Foo~bar" =?> para "Foo~bar" @@ -166,6 +173,9 @@        , "Verbatim tag after text" =: "Foo <verbatim>bar</verbatim>" =?> para "Foo bar" +      -- <em> tag should match with the last </em> tag, not verbatim one+      , "Nested \"</em>\" inside em tag" =: "<em>foo<verbatim></em></verbatim>bar</em>" =?> para (emph ("foo</em>bar"))+       , testGroup "Links"         [ "Link without description" =:           "[[https://amusewiki.org/]]" =?>@@ -197,9 +207,6 @@         [ test emacsMuse "Inline literal"           ("Foo<literal style=\"html\">lit</literal>bar" =?>           para (text "Foo" <> rawInline "html" "lit" <> text "bar"))-        , "No literal in Text::Amuse" =:-          "Foo<literal style=\"html\">lit</literal>bar" =?>-          para "Foo<literal style=\"html\">lit</literal>bar"         ]       ] @@ -238,6 +245,12 @@         , "Quote" =:           "  This is a quotation\n" =?>           blockQuote (para "This is a quotation")+        , "Indentation does not indicate quote inside quote tag" =:+          T.unlines [ "<quote>"+                    , "  Not a nested quote"+                    , "</quote>"+                    ] =?>+          blockQuote (para "Not a nested quote")         , "Multiline quote" =:           T.unlines [ "  This is a quotation"                     , "  with a continuation"@@ -245,10 +258,16 @@           blockQuote (para "This is a quotation\nwith a continuation")         , testGroup "Div"           [ "Div without id" =:-            "<div>Foo bar</div>" =?>+            T.unlines [ "<div>"+                      , "Foo bar"+                      , "</div>"+                      ] =?>             divWith nullAttr (para "Foo bar")           , "Div with id" =:-            "<div id=\"foo\">Foo bar</div>" =?>+            T.unlines [ "<div id=\"foo\">"+                      , "Foo bar"+                      , "</div>"+                      ] =?>             divWith ("foo", [], []) (para "Foo bar")           ]         , "Verse" =:@@ -276,7 +295,44 @@                     , "\160\160\160is here"                     ]         ]-      , "Quote tag" =: "<quote>Hello, world</quote>" =?> blockQuote (para $ text "Hello, world")+      , "Verse in list" =: " - > foo" =?> bulletList [ lineBlock [ "foo" ] ]+      , "Multiline verse in list" =:+        T.unlines [ " - > foo"+                  , "   > bar"+                  ] =?>+        bulletList [ lineBlock [ "foo", "bar" ] ]+      , "Paragraph after verse in list" =:+        T.unlines [ " - > foo"+                  , "   bar"+                  ] =?>+        bulletList [ lineBlock [ "foo" ] <> para "bar" ]+      , "Empty quote tag" =:+        T.unlines [ "<quote>"+                  , "</quote>"+                  ]+        =?> blockQuote mempty+      , "Quote tag" =:+        T.unlines [ "<quote>"+                  , "Hello, world"+                  , "</quote>"+                  ]+        =?> blockQuote (para $ text "Hello, world")+      , "Nested quote tag" =:+        T.unlines [ "<quote>"+                  , "foo"+                  , "<quote>"+                  , "bar"+                  , "</quote>"+                  , "baz"+                  , "</quote>"+                  ] =?>+        blockQuote (para "foo" <> blockQuote (para "bar") <> para "baz")+      , "Indented quote inside list" =:+        T.unlines [ " -  <quote>"+                  , "    foo"+                  , "    </quote>"+                  ] =?>+        bulletList [ blockQuote (para "foo") ]       , "Verse tag" =:         T.unlines [ "<verse>"                   , ""@@ -290,6 +346,12 @@                   , text "\160\160One two three"                   , ""                   ]+      , "Verse tag with empty line inside" =:+        T.unlines [ "<verse>"+                  , ""+                  , "</verse>"+                  ] =?>+        lineBlock [ "" ]       , testGroup "Example"         [ "Braces on separate lines" =:           T.unlines [ "{{{"@@ -410,15 +472,19 @@                     , "</literal>"                     ] =?>           rawBlock "latex" "\\newpage")-        , "No literal blocks in Text::Amuse" =:-          T.unlines [ "<literal style=\"latex\">"-                    , "\\newpage"-                    , "</literal>"-                    ] =?>-          para "<literal style=\"latex\">\n\\newpage\n</literal>"         ]-      , "Center" =: "<center>Hello, world</center>" =?> para (text "Hello, world")-      , "Right" =: "<right>Hello, world</right>" =?> para (text "Hello, world")+      , "Center" =:+        T.unlines [ "<center>"+                  , "Hello, world"+                  , "</center>"+                  ] =?>+        para (text "Hello, world")+      , "Right" =:+        T.unlines [ "<right>"+                  , "Hello, world"+                  , "</right>"+                  ] =?>+        para (text "Hello, world")       , testGroup "Comments"         [ "Comment tag" =: "<comment>\nThis is a comment\n</comment>" =?> (mempty::Blocks)         , "Line comment" =: "; Comment" =?> (mempty::Blocks)@@ -468,6 +534,12 @@                     ] =?>           header 2 "Foo" <>           para (spanWith ("bar", [], []) mempty)+        , "Headers terminate lists" =:+          T.unlines [ " - foo"+                    , "* bar"+                    ] =?>+          bulletList [ para "foo" ] <>+          header 1 "bar"         ]       , testGroup "Directives"         [ "Title" =:@@ -481,6 +553,21 @@         , test emacsMuse "Disable tables"           ("#disable-tables t" =?>           Pandoc (setMeta "disable-tables" (MetaInlines $ toList "t") nullMeta) mempty)+        , "Multiple directives" =:+          T.unlines [ "#title Document title"+                    , "#subtitle Document subtitle"+                    ] =?>+          Pandoc (setMeta "title" (MetaInlines $ toList "Document title") $+                  setMeta "subtitle" (MetaInlines $ toList "Document subtitle") nullMeta) mempty+        , "Multiline directive" =:+          T.unlines [ "#title Document title"+                    , "#notes First line"+                    , "and second line"+                    , "#author Name"+                    ] =?>+          Pandoc (setMeta "title" (MetaInlines $ toList "Document title") $+                  setMeta "notes" (MetaInlines $ toList "First line\nand second line") $+                  setMeta "author" (MetaInlines $ toList "Name") nullMeta) mempty         ]       , testGroup "Anchors"         [ "Anchor" =:@@ -550,6 +637,16 @@                   text " footnotes" <>                   note (para "Second footnote")) <>             para (text "Not a note")++          -- Verse requires precise indentation, so it is good to test indentation requirements+          , "Note continuation with verse" =:+            T.unlines [ "Foo[1]"+                      , ""+                      , "[1] Bar"+                      , ""+                      , "    > Baz"+                      ] =?>+            para ("Foo" <> note (para "Bar" <> lineBlock ["Baz"]))           , test emacsMuse "Emacs multiparagraph footnotes"             (T.unlines               [ "First footnote reference[1] and second footnote reference[2]."@@ -696,6 +793,18 @@                                              , para "Item2"                                              , para "Item3"                                              ]+      , "Ordered list with roman numerals" =:+        T.unlines+          [ " i. First"+          , " ii. Second"+          , " iii. Third"+          , " iv. Fourth"+          ] =?>+        orderedListWith (1, LowerRoman, Period) [ para "First"+                                                , para "Second"+                                                , para "Third"+                                                , para "Fourth"+                                                ]       , "Bullet list with empty items" =:         T.unlines           [ " -"@@ -800,6 +909,15 @@                               , para "c"                               ]                     ]+      , "List continuation afeter nested list" =:+         T.unlines+           [ " - - foo"+           , ""+           , "   bar"+           ] =?>+         bulletList [ bulletList [ para "foo" ] <>+                      para "bar"+                    ]       -- Emacs Muse allows to separate lists with two or more blank lines.       -- Text::Amuse (Amusewiki engine) always creates a single list as of version 0.82.       -- pandoc follows Emacs Muse behavior@@ -888,6 +1006,54 @@             , " - Baz"             ] =?>           bulletList [ para "Foo" <> para "bar" ] <> bulletList [ para "Baz" ]+        , "No blank line after blockquote" =:+          T.unlines+            [ " - <quote>"+            , "   foo"+            , "   </quote>"+            , " - bar"+            ] =?>+          bulletList [ blockQuote $ para "foo", para "bar" ]+        , "One blank line after blockquote" =:+          T.unlines+            [ " - <quote>"+            , "   foo"+            , "   </quote>"+            , ""+            , " - bar"+            ] =?>+          bulletList [ blockQuote $ para "foo", para "bar" ]+        , "Two blank lines after blockquote" =:+          T.unlines+            [ " - <quote>"+            , "   foo"+            , "   </quote>"+            , ""+            , ""+            , " - bar"+            ] =?>+          bulletList [ blockQuote $ para "foo" ] <> bulletList [ para "bar" ]+        , "No blank line after verse" =:+          T.unlines+            [ " - > foo"+            , " - bar"+            ] =?>+          bulletList [ lineBlock [ "foo" ], para "bar" ]+        , "One blank line after verse" =:+          T.unlines+            [ " - > foo"+            , ""+            , " - bar"+            ] =?>+          bulletList [ lineBlock [ "foo" ], para "bar" ]+        , "Two blank lines after verse" =:+          T.unlines+            [ " - > foo"+            , ""+            , ""+            , " - bar"+            ] =?>+          bulletList [ lineBlock [ "foo" ] ] <> bulletList [ para "bar" ]         ]       -- Test that definition list requires a leading space.       -- Emacs Muse does not require a space, we follow Amusewiki here.@@ -922,8 +1088,13 @@         definitionList [ ("Bar", [ para "baz" ]) ]       , "One-line definition list" =: " foo :: bar" =?>         definitionList [ ("foo", [ para "bar" ]) ]+      , "Definition list term may include single colon" =:+        " foo:bar :: baz" =?>+        definitionList [ ("foo:bar", [ para "baz" ]) ]       , "Definition list term with emphasis" =: " *Foo* :: bar\n" =?>         definitionList [ (emph "Foo", [ para "bar" ]) ]+      , "Definition list term with :: inside code" =: " foo <code> :: </code> :: bar <code> :: </code> baz\n" =?>+        definitionList [ ("foo " <> code " :: ", [ para $ "bar " <> code " :: " <> " baz" ]) ]       , "Multi-line definition lists" =:         T.unlines           [ " First term :: Definition of first term"@@ -958,6 +1129,38 @@          definitionList [ ("Term1", [ para "This is a first definition\nAnd it has two lines;\nno, make that three."])                         , ("Term2", [ para "This is a second definition"])                         ])+      , "One-line nested definition list" =:+        " Foo :: bar :: baz" =?>+        definitionList [ ("Foo", [ definitionList [ ("bar", [ para "baz" ])]])]+      , "Nested definition list" =:+        T.unlines+        [ " First :: Second :: Third"+        , "          Fourth :: Fifth :: Sixth"+        , " Seventh :: Eighth"+        ] =?>+        definitionList [ ("First", [ definitionList [ ("Second", [ para "Third" ]),+                                                      ("Fourth", [ definitionList [ ("Fifth", [ para "Sixth"] ) ] ] ) ] ] )+                       , ("Seventh", [ para "Eighth" ])+                       ]+      , testGroup "Definition lists with multiple descriptions"+        [ "Correctly indented second description" =:+          T.unlines+          [ " First term :: first description"+          , "  :: second description"+          ] =?>+          definitionList [ ("First term", [ para "first description"+                                          , para "second description"+                                          ])+                         ]+        , "Incorrectly indented second description" =:+          T.unlines+          [ " First term :: first description"+          , " :: second description"+          ] =?>+          definitionList [ ("First term", [ para "first description" ])+                         , ("", [ para "second description" ])+                         ]+        ]       , "Two blank lines separate definition lists" =:         T.unlines           [ " First :: list"@@ -978,33 +1181,44 @@                              , para "* Bar"                              ]                    ]-      , "List inside a tag" =:+      , "Bullet list inside a tag" =:         T.unlines           [ "<quote>"-          , " 1. First"+          , " - First"           , ""-          , " 2. Second"+          , " - Second"           , ""-          , " 3. Third"+          , " - Third"           , "</quote>"           ] =?>-        blockQuote (orderedListWith (1, Decimal, Period) [ para "First"-                                                         , para "Second"-                                                         , para "Third"-                                                         ])-      -- Amusewiki requires block tags to be on separate lines,-      -- but Emacs Muse allows them to be on the same line as contents.-      , "List inside an inline tag" =:+        blockQuote (bulletList [ para "First"+                               , para "Second"+                               , para "Third"+                               ])+      , "Ordered list inside a tag" =:         T.unlines-          [ "<quote> 1. First"+          [ "<quote>"+          , " 1. First"           , ""           , " 2. Second"           , ""-          , " 3. Third</quote>"+          , " 3. Third"+          , "</quote>"           ] =?>         blockQuote (orderedListWith (1, Decimal, Period) [ para "First"                                                          , para "Second"                                                          , para "Third"                                                          ])+      -- Regression test for a bug caught by round-trip test+      , "Do not consume whitespace while looking for end tag" =:+        T.unlines+          [ "<quote>"+          , " - <quote>"+          , "   foo"+          , "   </quote>"+          , " bar" -- Do not consume whitespace while looking for arbitraritly indented </quote>+          , "</quote>"+          ] =?>+        blockQuote (bulletList [ blockQuote $ para "foo" ] <> para "bar")       ]   ]
test/Tests/Readers/Org/Block/Header.hs view
@@ -130,7 +130,7 @@       mconcat [ para "foo"               , headerWith ("thing-other-thing", [], [])                            1-                           ((strikeout "thing") <> " other thing")+                           (strikeout "thing" <> " other thing")               ]    , "Comment Trees" =:
test/Tests/Readers/Org/Block/List.hs view
@@ -75,16 +75,16 @@                  ]    , "Bullet List with Decreasing Indent" =:-       ("  - Discovery\n\-        \ - Human After All\n") =?>+       "  - Discovery\n\+        \ - Human After All\n" =?>        mconcat [ bulletList [ plain "Discovery" ]                , bulletList [ plain ("Human" <> space <> "After" <> space <> "All")]                ]    , "Header follows Bullet List" =:-      ("  - Discovery\n\+      "  - Discovery\n\        \  - Human After All\n\-       \* Homework") =?>+       \* Homework" =?>       mconcat [ bulletList [ plain "Discovery"                            , plain ("Human" <> space <> "After" <> space <> "All")                            ]@@ -92,9 +92,9 @@               ]    , "Bullet List Unindented with trailing Header" =:-      ("- Discovery\n\+      "- Discovery\n\        \- Homework\n\-       \* NotValidListItem") =?>+       \* NotValidListItem" =?>       mconcat [ bulletList [ plain "Discovery"                            , plain "Homework"                            ]@@ -166,14 +166,14 @@   , "Ordered List in Bullet List" =:       ("- Emacs\n" <>        "  1. Org\n") =?>-      bulletList [ (plain "Emacs") <>-                   (orderedList [ plain "Org"])+      bulletList [ plain "Emacs" <>+                   orderedList [ plain "Org"]                  ]    , "Bullet List in Ordered List" =:       ("1. GNU\n" <>        "   - Freedom\n") =?>-      orderedList [ (plain "GNU") <> bulletList [ (plain "Freedom") ] ]+      orderedList [ plain "GNU" <> bulletList [ plain "Freedom" ] ]    , "Definition List" =:       T.unlines [ "- PLL :: phase-locked loop"
test/Tests/Readers/Org/Directive.hs view
@@ -107,8 +107,8 @@                   ] =?>         mconcat [ para "first block"                 , orderedList-                  [ (para "top-level section 1" <>-                     orderedList [ para "subsection" ])+                  [ para "top-level section 1" <>+                     orderedList [ para "subsection" ]                   , para "top-level section 2" ]                 ] 
test/Tests/Readers/Org/Inline.hs view
@@ -5,10 +5,10 @@ import Test.Tasty (TestTree, testGroup) import Tests.Helpers ((=?>)) import Tests.Readers.Org.Shared ((=:), spcSep)-import Text.Pandoc import Text.Pandoc.Builder import Text.Pandoc.Shared (underlineSpan) import qualified Data.Text as T+import qualified Tests.Readers.Org.Inline.Citation as Citation import qualified Tests.Readers.Org.Inline.Note as Note import qualified Tests.Readers.Org.Inline.Smart as Smart @@ -36,7 +36,7 @@    , "Underline" =:       "_underline_" =?>-      para (underlineSpan $ "underline")+      para (underlineSpan "underline")    , "Strikeout" =:       "+Kill Bill+" =?>@@ -127,11 +127,12 @@    , "Markup should work properly after a blank line" =:     T.unlines ["foo", "", "/bar/"] =?>-    (para $ text "foo") <> (para $ emph $ text "bar")+    para (text "foo") <>+    para (emph $ text "bar")    , "Inline math must stay within three lines" =:       T.unlines [ "$a", "b", "c$", "$d", "e", "f", "g$" ] =?>-      para ((math "a\nb\nc") <> softbreak <>+      para (math "a\nb\nc" <> softbreak <>             "$d" <> softbreak <> "e" <> softbreak <>             "f" <> softbreak <> "g$") @@ -139,7 +140,7 @@       "$a$ $b$! $c$?" =?>       para (spcSep [ math "a"                    , "$b$!"-                   , (math "c") <> "?"+                   , math "c" <> "?"                    ])    , "Markup may not span more than two lines" =:@@ -166,12 +167,12 @@      para (mconcat $ intersperse softbreak                   [ "a" <> subscript "(a(b)(c)d)"                   , "e" <> superscript "(f(g)h)"-                  , "i" <> (subscript "(jk)") <> "l)"-                  , "m" <> (superscript "()") <> "n"+                  , "i" <> subscript "(jk)" <> "l)"+                  , "m" <> superscript "()" <> "n"                   , "o" <> subscript "p{q{}r}"                   , "s" <> superscript "t{u}v"-                  , "w" <> (subscript "xy") <> "z}"-                  , "1" <> (superscript "") <> "2"+                  , "w" <> subscript "xy" <> "z}"+                  , "1" <> superscript "" <> "2"                   , "3" <> subscript "{}"                   , "4" <> superscript ("(a(" <> strong "b(c" <> ")d))")                   ])@@ -182,17 +183,17 @@   , testGroup "Images"     [ "Image" =:         "[[./sunset.jpg]]" =?>-        (para $ image "./sunset.jpg" "" "")+    para (image "./sunset.jpg" "" "")      , "Image with explicit file: prefix" =:         "[[file:sunrise.jpg]]" =?>-        (para $ image "sunrise.jpg" "" "")+    para (image "sunrise.jpg" "" "")      , "Multiple images within a paragraph" =:         T.unlines [ "[[file:sunrise.jpg]]"                   , "[[file:sunset.jpg]]"                   ] =?>-        (para $ (image "sunrise.jpg" "" "")+    para ((image "sunrise.jpg" "" "")              <> softbreak              <> (image "sunset.jpg" "" "")) @@ -200,75 +201,75 @@         T.unlines [ "#+ATTR_HTML: :width 50%"                   , "[[file:guinea-pig.gif]]"                   ] =?>-        (para $ imageWith ("", [], [("width", "50%")]) "guinea-pig.gif" "" "")+    para (imageWith ("", [], [("width", "50%")]) "guinea-pig.gif" "" "")     ]    , "Explicit link" =:       "[[http://zeitlens.com/][pseudo-random /nonsense/]]" =?>-      (para $ link "http://zeitlens.com/" ""+    para (link "http://zeitlens.com/" ""                    ("pseudo-random" <> space <> emph "nonsense"))    , "Self-link" =:       "[[http://zeitlens.com/]]" =?>-      (para $ link "http://zeitlens.com/" "" "http://zeitlens.com/")+    para (link "http://zeitlens.com/" "" "http://zeitlens.com/")    , "Absolute file link" =:       "[[/url][hi]]" =?>-      (para $ link "file:///url" "" "hi")+    para (link "file:///url" "" "hi")    , "Link to file in parent directory" =:       "[[../file.txt][moin]]" =?>-      (para $ link "../file.txt" "" "moin")+    para (link "../file.txt" "" "moin")    , "Empty link (for gitit interop)" =:       "[[][New Link]]" =?>-      (para $ link "" "" "New Link")+    para (link "" "" "New Link")    , "Image link" =:       "[[sunset.png][file:dusk.svg]]" =?>-      (para $ link "sunset.png" "" (image "dusk.svg" "" ""))+    para (link "sunset.png" "" (image "dusk.svg" "" ""))    , "Image link with non-image target" =:       "[[http://example.com][./logo.png]]" =?>-      (para $ link "http://example.com" "" (image "./logo.png" "" ""))+    para (link "http://example.com" "" (image "./logo.png" "" ""))    , "Plain link" =:       "Posts on http://zeitlens.com/ can be funny at times." =?>-      (para $ spcSep [ "Posts", "on"+    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"+    para (spcSep [ "Look", "at"                      , link "http://moltkeplatz.de" "" "http://moltkeplatz.de"                      , "for", "fnords."                      ])    , "Absolute file link" =:       "[[file:///etc/passwd][passwd]]" =?>-      (para $ link "file:///etc/passwd" "" "passwd")+    para (link "file:///etc/passwd" "" "passwd")    , "File link" =:       "[[file:target][title]]" =?>-      (para $ link "target" "" "title")+    para (link "target" "" "title")    , "Anchor" =:       "<<anchor>> Link here later." =?>-      (para $ spanWith ("anchor", [], []) mempty <>+    para (spanWith ("anchor", [], []) mempty <>               "Link" <> space <> "here" <> space <> "later.")    , "Inline code block" =:       "src_emacs-lisp{(message \"Hello\")}" =?>-      (para $ codeWith ( ""+    para (codeWith ( ""                        , [ "commonlisp" ]                        , [ ("org-language", "emacs-lisp") ])                        "(message \"Hello\")")    , "Inline code block with arguments" =:       "src_sh[:export both :results output]{echo 'Hello, World'}" =?>-      (para $ codeWith ( ""+    para (codeWith ( ""                        , [ "bash" ]                        , [ ("org-language", "sh")                          , ("export", "both")@@ -279,7 +280,7 @@    , "Inline code block with toggle" =:       "src_sh[:toggle]{echo $HOME}" =?>-      (para $ codeWith ( ""+    para (codeWith ( ""                        , [ "bash" ]                        , [ ("org-language", "sh")                          , ("toggle", "yes")@@ -287,161 +288,6 @@                        )                        "echo $HOME") -  , "Citation" =:-      "[@nonexistent]" =?>-      let citation = Citation-                     { citationId = "nonexistent"-                     , citationPrefix = []-                     , citationSuffix = []-                     , citationMode = NormalCitation-                     , citationNoteNum = 0-                     , citationHash = 0}-      in (para $ cite [citation] "[@nonexistent]")--  , "Citation containing text" =:-      "[see @item1 p. 34-35]" =?>-      let citation = Citation-                     { citationId = "item1"-                     , citationPrefix = [Str "see"]-                     , citationSuffix = [Space ,Str "p.",Space,Str "34-35"]-                     , citationMode = NormalCitation-                     , citationNoteNum = 0-                     , citationHash = 0}-      in (para $ cite [citation] "[see @item1 p. 34-35]")--  , "Org-ref simple citation" =:-    "cite:pandoc" =?>-    let citation = Citation-                   { citationId = "pandoc"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = AuthorInText-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "cite:pandoc")--  , "Org-ref simple citation with underscores" =:-    "cite:pandoc_org_ref" =?>-    let citation = Citation-                   { citationId = "pandoc_org_ref"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = AuthorInText-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "cite:pandoc_org_ref")--  , "Org-ref simple citation succeeded by comma" =:-    "cite:pandoc," =?>-    let citation = Citation-                   { citationId = "pandoc"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = AuthorInText-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "cite:pandoc" <> str ",")--  , "Org-ref simple citation succeeded by dot" =:-    "cite:pandoc." =?>-    let citation = Citation-                   { citationId = "pandoc"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = AuthorInText-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "cite:pandoc" <> str ".")--  , "Org-ref simple citation succeeded by colon" =:-    "cite:pandoc:" =?>-    let citation = Citation-                   { citationId = "pandoc"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = AuthorInText-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "cite:pandoc" <> str ":")--  , "Org-ref simple citep citation" =:-    "citep:pandoc" =?>-    let citation = Citation-                   { citationId = "pandoc"-                   , citationPrefix = mempty-                   , citationSuffix = mempty-                   , citationMode = NormalCitation-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "citep:pandoc")--  , "Org-ref extended citation" =:-    "[[citep:Dominik201408][See page 20::, for example]]" =?>-    let citation = Citation-                   { citationId = "Dominik201408"-                   , citationPrefix = toList "See page 20"-                   , citationSuffix = toList ", for example"-                   , citationMode = NormalCitation-                   , citationNoteNum = 0-                   , citationHash = 0-                   }-    in (para $ cite [citation] "[[citep:Dominik201408][See page 20::, for example]]")--  , testGroup "Berkeley-style citations" $-    let pandocCite = Citation-          { citationId = "Pandoc"-          , citationPrefix = mempty-          , citationSuffix = mempty-          , citationMode = NormalCitation-          , citationNoteNum = 0-          , citationHash = 0-          }-        pandocInText = pandocCite { citationMode = AuthorInText }-        dominikCite = Citation-          { citationId = "Dominik201408"-          , citationPrefix = mempty-          , citationSuffix = mempty-          , citationMode = NormalCitation-          , citationNoteNum = 0-          , citationHash = 0-          }-        dominikInText = dominikCite { citationMode = AuthorInText }-    in [-        "Berkeley-style in-text citation" =:-          "See @Dominik201408." =?>-            (para $ "See "-                  <> cite [dominikInText] "@Dominik201408"-                  <> ".")--      , "Berkeley-style parenthetical citation list" =:-          "[(cite): see; @Dominik201408;also @Pandoc; and others]" =?>-          let pandocCite'  = pandocCite {-                               citationPrefix = toList "also"-                             , citationSuffix = toList "and others"-                             }-              dominikCite' = dominikCite {-                               citationPrefix = toList "see"-                             }-          in (para $ cite [dominikCite', pandocCite'] "")--      , "Berkeley-style plain citation list" =:-          "[cite: See; @Dominik201408; and @Pandoc; and others]" =?>-          let pandocCite' = pandocInText {-                              citationPrefix = toList "and"-                            }-          in (para $ "See "-                  <> cite [dominikInText] ""-                  <> "," <> space-                  <> cite [pandocCite'] ""-                  <> "," <> space <> "and others")-    ]-   , "Inline LaTeX symbol" =:       "\\dots" =?>       para "…"@@ -468,7 +314,7 @@    , "MathML symbol in LaTeX-style" =:       "There is a hackerspace in Lübeck, Germany, called nbsp (unicode symbol: '\\nbsp')." =?>-      para ("There is a hackerspace in Lübeck, Germany, called nbsp (unicode symbol: ' ').")+      para "There is a hackerspace in Lübeck, Germany, called nbsp (unicode symbol: ' ')."    , "MathML symbol in LaTeX-style, including braces" =:       "\\Aacute{}stor" =?>@@ -482,17 +328,6 @@       "\\ForAll \\Auml" =?>       para "∀ Ä" -  , "LaTeX citation" =:-      "\\cite{Coffee}" =?>-      let citation = Citation-                     { citationId = "Coffee"-                     , citationPrefix = []-                     , citationSuffix = []-                     , citationMode = NormalCitation-                     , citationNoteNum = 0-                     , citationHash = 0}-      in (para . cite [citation] $ rawInline "latex" "\\cite{Coffee}")-   , "Macro" =:       T.unlines [ "#+MACRO: HELLO /Hello, $1/"                 , "{{{HELLO(World)}}}"@@ -511,6 +346,7 @@                 ] =?>       para "Foo Bar" +  , testGroup "Citations" Citation.tests   , testGroup "Footnotes" Note.tests   , testGroup "Smart punctuation" Smart.tests   ]
+ test/Tests/Readers/Org/Inline/Citation.hs view
@@ -0,0 +1,179 @@+{-# LANGUAGE OverloadedStrings #-}+module Tests.Readers.Org.Inline.Citation (tests) where++import Test.Tasty (TestTree, testGroup)+import Tests.Helpers ((=?>))+import Tests.Readers.Org.Shared ((=:))+import Text.Pandoc.Builder++tests :: [TestTree]+tests =+  [ testGroup "Markdown-style citations"+    [ "Citation" =:+      "[@nonexistent]" =?>+      let citation = Citation+                     { citationId = "nonexistent"+                     , citationPrefix = []+                     , citationSuffix = []+                     , citationMode = NormalCitation+                     , citationNoteNum = 0+                     , citationHash = 0}+      in (para $ cite [citation] "[@nonexistent]")++    , "Citation containing text" =:+      "[see @item1 p. 34-35]" =?>+      let citation = Citation+                     { citationId = "item1"+                     , citationPrefix = [Str "see"]+                     , citationSuffix = [Space ,Str "p.",Space,Str "34-35"]+                     , citationMode = NormalCitation+                     , citationNoteNum = 0+                     , citationHash = 0}+      in (para $ cite [citation] "[see @item1 p. 34-35]")+    ]++  , testGroup "org-ref citations"+    [ "simple citation" =:+      "cite:pandoc" =?>+      let citation = Citation+                     { citationId = "pandoc"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = AuthorInText+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "cite:pandoc")++    , "simple citation with underscores" =:+      "cite:pandoc_org_ref" =?>+      let citation = Citation+                     { citationId = "pandoc_org_ref"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = AuthorInText+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "cite:pandoc_org_ref")++    , "simple citation succeeded by comma" =:+      "cite:pandoc," =?>+      let citation = Citation+                     { citationId = "pandoc"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = AuthorInText+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "cite:pandoc" <> str ",")++    , "simple citation succeeded by dot" =:+      "cite:pandoc." =?>+      let citation = Citation+                     { citationId = "pandoc"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = AuthorInText+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "cite:pandoc" <> str ".")++    , "simple citation succeeded by colon" =:+      "cite:pandoc:" =?>+      let citation = Citation+                     { citationId = "pandoc"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = AuthorInText+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "cite:pandoc" <> str ":")++    , "simple citep citation" =:+      "citep:pandoc" =?>+      let citation = Citation+                     { citationId = "pandoc"+                     , citationPrefix = mempty+                     , citationSuffix = mempty+                     , citationMode = NormalCitation+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "citep:pandoc")++    , "extended citation" =:+      "[[citep:Dominik201408][See page 20::, for example]]" =?>+      let citation = Citation+                     { citationId = "Dominik201408"+                     , citationPrefix = toList "See page 20"+                     , citationSuffix = toList ", for example"+                     , citationMode = NormalCitation+                     , citationNoteNum = 0+                     , citationHash = 0+                     }+      in (para $ cite [citation] "[[citep:Dominik201408][See page 20::, for example]]")+    ]++  , testGroup "Berkeley-style citations" $+    let pandocCite = Citation+          { citationId = "Pandoc"+          , citationPrefix = mempty+          , citationSuffix = mempty+          , citationMode = NormalCitation+          , citationNoteNum = 0+          , citationHash = 0+          }+        pandocInText = pandocCite { citationMode = AuthorInText }+        dominikCite = Citation+          { citationId = "Dominik201408"+          , citationPrefix = mempty+          , citationSuffix = mempty+          , citationMode = NormalCitation+          , citationNoteNum = 0+          , citationHash = 0+          }+        dominikInText = dominikCite { citationMode = AuthorInText }+    in+      [ "Berkeley-style in-text citation" =:+        "See @Dominik201408." =?>+        para ("See "+               <> cite [dominikInText] "@Dominik201408"+               <> ".")++      , "Berkeley-style parenthetical citation list" =:+        "[(cite): see; @Dominik201408;also @Pandoc; and others]" =?>+        let pandocCite'  = pandocCite {+                             citationPrefix = toList "also"+                           , citationSuffix = toList "and others"+                           }+            dominikCite' = dominikCite {+                             citationPrefix = toList "see"+                           }+        in (para $ cite [dominikCite', pandocCite'] "")++      , "Berkeley-style plain citation list" =:+        "[cite: See; @Dominik201408; and @Pandoc; and others]" =?>+        let pandocCite' = pandocInText { citationPrefix = toList "and" }+        in (para $ "See "+             <> cite [dominikInText] ""+             <> "," <> space+             <> cite [pandocCite'] ""+             <> "," <> space <> "and others")+    ]++  , "LaTeX citation" =:+    "\\cite{Coffee}" =?>+    let citation = Citation+                   { citationId = "Coffee"+                   , citationPrefix = []+                   , citationSuffix = []+                   , citationMode = NormalCitation+                   , citationNoteNum = 0+                   , citationHash = 0}+    in (para . cite [citation] $ rawInline "latex" "\\cite{Coffee}")++  ]
test/Tests/Readers/Org/Inline/Note.hs view
@@ -84,4 +84,3 @@       , para "next"       ]   ]-  
test/Tests/Readers/Org/Inline/Smart.hs view
@@ -38,9 +38,9 @@    , test orgSmart "Single quotes can be followed by emphasized text"     ("Singles on the '/meat market/'" =?>-     para ("Singles on the " <> (singleQuoted $ emph "meat market")))+     para ("Singles on the " <> singleQuoted (emph "meat market")))    , test orgSmart "Double quotes can be followed by emphasized text"     ("Double income, no kids: \"/DINK/\"" =?>-     para ("Double income, no kids: " <> (doubleQuoted $ emph "DINK")))+     para ("Double income, no kids: " <> doubleQuoted (emph "DINK")))   ]
test/Tests/Readers/Org/Meta.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} module Tests.Readers.Org.Meta (tests) where -import Test.Tasty (TestTree)+import Test.Tasty (TestTree, testGroup) import Tests.Helpers ((=?>)) import Tests.Readers.Org.Shared ((=:), spcSep) import Text.Pandoc@@ -30,32 +30,32 @@   , "Title" =:     "#+TITLE: Hello, World" =?>     let titleInline = toList $ "Hello," <> space <> "World"-        meta = setMeta "title" (MetaInlines titleInline) $ nullMeta+        meta = setMeta "title" (MetaInlines titleInline) nullMeta     in Pandoc meta mempty    , "Author" =:     "#+author: John /Emacs-Fanboy/ Doe" =?>     let author = toList . spcSep $ [ "John", emph "Emacs-Fanboy", "Doe" ]-        meta = setMeta "author" (MetaList [MetaInlines author]) $ nullMeta+        meta = setMeta "author" (MetaList [MetaInlines author]) nullMeta     in Pandoc meta mempty    , "Multiple authors" =:     "#+author: James Dewey Watson, Francis Harry Compton Crick " =?>     let watson = MetaInlines $ toList "James Dewey Watson"         crick = MetaInlines $ toList "Francis Harry Compton Crick"-        meta = setMeta "author" (MetaList [watson, crick]) $ nullMeta+        meta = setMeta "author" (MetaList [watson, crick]) nullMeta     in Pandoc meta mempty    , "Date" =:     "#+Date: Feb. *28*, 2014" =?>-    let date = toList . spcSep $ [ "Feb.", (strong "28") <> ",", "2014" ]-        meta = setMeta "date" (MetaInlines date) $ nullMeta+    let date = toList . spcSep $ [ "Feb.", strong "28" <> ",", "2014" ]+        meta = setMeta "date" (MetaInlines date) nullMeta     in Pandoc meta mempty    , "Description" =:     "#+DESCRIPTION: Explanatory text" =?>     let description = "Explanatory text"-        meta = setMeta "description" (MetaString description) $ nullMeta+        meta = setMeta "description" (MetaString description) nullMeta     in Pandoc meta mempty    , "Properties drawer" =:@@ -94,7 +94,7 @@                 , "#+author: Max"                 ] =?>       let author = MetaInlines [Str "Max"]-          meta = setMeta "author" (MetaList [author]) $ nullMeta+          meta = setMeta "author" (MetaList [author]) nullMeta       in Pandoc meta mempty    , "Logbook drawer" =:@@ -135,7 +135,7 @@    , "Search links are read as emph" =:       "[[Wally][Where's Wally?]]" =?>-      (para (emph $ "Where's" <> space <> "Wally?"))+      para (emph $ "Where's" <> space <> "Wally?")    , "Link to nonexistent anchor" =:       T.unlines [ "<<link-here>> Target."@@ -149,25 +149,43 @@       T.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")))+      para (link "https://en.wikipedia.org/wiki/Org_mode" ""+                  ("Wikipedia" <> space <> "on" <> space <> "Org-mode"))    , "Link abbreviation, defined after first use" =:       T.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")))+      para (link "http://zeitlens.com/tags/non-sense.html" ""+                  ("Non-sense" <> space <> "articles"))    , "Link abbreviation, URL encoded arguments" =:       T.unlines [ "#+link: expl http://example.com/%h/foo"                 , "[[expl:Hello, World!][Moin!]]"                 ] =?>-      (para (link "http://example.com/Hello%2C%20World%21/foo" "" "Moin!"))+      para (link "http://example.com/Hello%2C%20World%21/foo" "" "Moin!")    , "Link abbreviation, append arguments" =:       T.unlines [ "#+link: expl http://example.com/"                 , "[[expl:foo][bar]]"                 ] =?>-      (para (link "http://example.com/foo" "" "bar"))+      para (link "http://example.com/foo" "" "bar")++  , testGroup "emphasis config"+    [ "Changing pre and post chars for emphasis" =:+        T.unlines [ "#+pandoc-emphasis-pre: \"[)\""+                  , "#+pandoc-emphasis-post: \"]\\n\""+                  , "([/emph/])*foo*"+                  ] =?>+        para ("([" <> emph "emph" <> "])" <> strong "foo")++    , "setting an invalid value restores the default" =:+        T.unlines [ "#+pandoc-emphasis-pre: \"[\""+                  , "#+pandoc-emphasis-post: \"]\""+                  , "#+pandoc-emphasis-pre:"+                  , "#+pandoc-emphasis-post:"+                  , "[/noemph/]"+                  ] =?>+        para ("[/noemph/]")+    ]   ]
test/Tests/Readers/RST.hs view
@@ -36,8 +36,8 @@              , ":Parameter i: integer"              , ":Final: item"              , "  on two lines" ]-             =?> ( doc-                 $ para "para" <>+             =?>+              doc (para "para" <>                    definitionList [ (str "Hostname", [para "media08"])                                   , (text "IP address", [para "10.0.0.19"])                                   , (str "Size", [para "3ru"])@@ -56,10 +56,10 @@              , ""              , ":Version: 1"              ]-             =?> ( setMeta "version" (para "1")-                 $ setMeta "title" ("Title" :: Inlines)+             =?>+              setMeta "version" (para "1") (setMeta "title" ("Title" :: Inlines)                  $ setMeta "subtitle" ("Subtitle" :: Inlines)-                 $ doc mempty )+                 $ doc mempty)           , "with inline markup" =: T.unlines              [ ":*Date*: today"              , ""@@ -73,8 +73,8 @@              , ".. _two: http://example.com"              , ".. _three: http://example.org"              ]-             =?> ( setMeta "date" (str "today")-                 $ doc+             =?>+              setMeta "date" (str "today") (doc                  $ definitionList [ (emph "one", [para "emphasis"])                                   , (link "http://example.com" "" "two", [para "reference"])                                   , (link "http://example.org" "" "three", [para "another one"])@@ -102,13 +102,12 @@             , "  def func(x):"             , "    return y"             ]  =?>-              ( doc $ codeBlockWith+              doc (codeBlockWith                   ( ""                   , ["sourceCode", "python", "numberLines", "class1", "class2", "class3"]                   , [ ("startFrom", "34") ]                   )-                  "def func(x):\n  return y"-              )+                  "def func(x):\n  return y")         , "Code directive with number-lines, no line specified" =: T.unlines             [ ".. code::python"             , "   :number-lines: "@@ -116,13 +115,12 @@             , "  def func(x):"             , "    return y"             ]  =?>-              ( doc $ codeBlockWith+              doc (codeBlockWith                   ( ""                   , ["sourceCode", "python", "numberLines"]                   , [ ("startFrom", "") ]                   )-                  "def func(x):\n  return y"-              )+                  "def func(x):\n  return y")         , testGroup "literal / line / code blocks"           [ "indented literal block" =: T.unlines             [ "::"@@ -131,7 +129,8 @@             , ""             , "  can go on for many lines"             , "but must stop here"]-            =?> (doc $+            =?>+              doc (                  codeBlock "block quotes\n\ncan go on for many lines" <>                  para "but must stop here")           , "line block with 3 lines" =: "| a\n| b\n| c"@@ -185,6 +184,6 @@             , ".. [1]"             , "   bar"             ] =?>-            (para $ "foo" <> (note $ para "bar"))+              para ("foo" <> (note $ para "bar"))           ]         ]
test/Tests/Readers/Txt2Tags.hs view
@@ -30,11 +30,11 @@              -> [Blocks]              -> [[Blocks]]              -> Blocks-simpleTable' n = table "" (take n $ repeat (AlignCenter, 0.0))+simpleTable' n = table "" (replicate n (AlignCenter, 0.0))  tests :: [TestTree] tests =-  [ testGroup "Inlines" $+  [ testGroup "Inlines"       [ "Plain String" =:           "Hello, World" =?>           para (spcSep [ "Hello,", "World" ])@@ -96,9 +96,12 @@       , "Autolink" =:           "http://www.google.com" =?>             para (link "http://www.google.com" "" (str "http://www.google.com"))-      , "Image" =:+      , "JPEG Image" =:           "[image.jpg]" =?>             para (image "image.jpg" "" mempty)+      , "PNG Image" =:+          "[image.png]" =?>+            para (image "image.png" "" mempty)        , "Link" =:           "[title http://google.com]" =?>@@ -114,7 +117,7 @@        ] -  , testGroup "Basic Blocks" $+  , testGroup "Basic Blocks"       ["Paragraph, lines grouped together" =:           "A paragraph\n A blank line ends the \n current paragraph\n"             =?> para "A paragraph\n A blank line ends the\n current paragraph"@@ -197,7 +200,7 @@      ] -  , testGroup "Lists" $+  , testGroup "Lists"       [ "Simple Bullet Lists" =:           ("- Item1\n" <>            "- Item2\n") =?>
test/Tests/Shared.hs view
@@ -19,21 +19,21 @@  testCollapse :: [TestTree] testCollapse = map (testCase "collapse")- [  (collapseFilePath (joinPath [ ""]) @?= (joinPath [ ""]))- ,  (collapseFilePath (joinPath [ ".","foo"]) @?= (joinPath [ "foo"]))- ,  (collapseFilePath (joinPath [ ".",".","..","foo"]) @?= (joinPath [ joinPath ["..", "foo"]]))- ,  (collapseFilePath (joinPath [ "..","foo"]) @?= (joinPath [ "..","foo"]))- ,  (collapseFilePath (joinPath [ "","bar","..","baz"]) @?= (joinPath [ "","baz"]))- ,  (collapseFilePath (joinPath [ "","..","baz"]) @?= (joinPath [ "","..","baz"]))- ,  (collapseFilePath (joinPath [ ".","foo","..",".","bar","..",".",".","baz"]) @?= (joinPath [ "baz"]))- ,  (collapseFilePath (joinPath [ ".",""]) @?= (joinPath [ ""]))- ,  (collapseFilePath (joinPath [ ".",".",""]) @?= (joinPath [ ""]))- ,  (collapseFilePath (joinPath [ "..",""]) @?= (joinPath [ ".."]))- ,  (collapseFilePath (joinPath [ "..",".",""]) @?= (joinPath [ ".."]))- ,  (collapseFilePath (joinPath [ ".","..",""]) @?= (joinPath [ ".."]))- ,  (collapseFilePath (joinPath [ "..","..",""]) @?= (joinPath [ "..",".."]))- ,  (collapseFilePath (joinPath [ "parent","foo","baz","..","bar"]) @?= (joinPath [ "parent","foo","bar"]))- ,  (collapseFilePath (joinPath [ "parent","foo","baz","..","..","bar"]) @?= (joinPath [ "parent","bar"]))- ,  (collapseFilePath (joinPath [ "parent","foo",".."]) @?= (joinPath [ "parent"]))- ,  (collapseFilePath (joinPath [ "","parent","foo","..","..","bar"]) @?= (joinPath [ "","bar"]))- ,  (collapseFilePath (joinPath [ "",".","parent","foo"]) @?= (joinPath [ "","parent","foo"]))]+ [  collapseFilePath (joinPath [ ""]) @?= (joinPath [ ""])+ ,  collapseFilePath (joinPath [ ".","foo"]) @?= (joinPath [ "foo"])+ ,  collapseFilePath (joinPath [ ".",".","..","foo"]) @?= (joinPath [ joinPath ["..", "foo"]])+ ,  collapseFilePath (joinPath [ "..","foo"]) @?= (joinPath [ "..","foo"])+ ,  collapseFilePath (joinPath [ "","bar","..","baz"]) @?= (joinPath [ "","baz"])+ ,  collapseFilePath (joinPath [ "","..","baz"]) @?= (joinPath [ "","..","baz"])+ ,  collapseFilePath (joinPath [ ".","foo","..",".","bar","..",".",".","baz"]) @?= (joinPath [ "baz"])+ ,  collapseFilePath (joinPath [ ".",""]) @?= (joinPath [ ""])+ ,  collapseFilePath (joinPath [ ".",".",""]) @?= (joinPath [ ""])+ ,  collapseFilePath (joinPath [ "..",""]) @?= (joinPath [ ".."])+ ,  collapseFilePath (joinPath [ "..",".",""]) @?= (joinPath [ ".."])+ ,  collapseFilePath (joinPath [ ".","..",""]) @?= (joinPath [ ".."])+ ,  collapseFilePath (joinPath [ "..","..",""]) @?= (joinPath [ "..",".."])+ ,  collapseFilePath (joinPath [ "parent","foo","baz","..","bar"]) @?= (joinPath [ "parent","foo","bar"])+ ,  collapseFilePath (joinPath [ "parent","foo","baz","..","..","bar"]) @?= (joinPath [ "parent","bar"])+ ,  collapseFilePath (joinPath [ "parent","foo",".."]) @?= (joinPath [ "parent"])+ ,  collapseFilePath (joinPath [ "","parent","foo","..","..","bar"]) @?= (joinPath [ "","bar"])+ ,  collapseFilePath (joinPath [ "",".","parent","foo"]) @?= (joinPath [ "","parent","foo"])]
test/Tests/Writers/ConTeXt.hs view
@@ -18,6 +18,9 @@ contextNtb :: (ToPandoc a) => a -> String contextNtb = unpack . purely (writeConTeXt def{ writerExtensions = enableExtension Ext_ntb pandocExtensions }) . toPandoc +contextDiv :: (ToPandoc a) => a -> String+contextDiv = unpack . purely (writeConTeXt def{ writerSectionDivs = True }) . toPandoc+ {-   "my test" =: X =?> Y @@ -41,13 +44,33 @@           , "without '}'" =: code "]" =?> "\\type{]}"           , testProperty "code property" $ \s -> null s ||                 if '{' `elem` s || '}' `elem` s-                   then (context' $ code s) == "\\mono{" ++-                             (context' $ str s) ++ "}"-                   else (context' $ code s) == "\\type{" ++ s ++ "}"+                   then context' (code s) == "\\mono{" +++                             context' (str s) ++ "}"+                   else context' (code s) == "\\type{" ++ s ++ "}"           ]         , testGroup "headers"           [ "level 1" =:-            headerWith ("my-header",[],[]) 1 "My header" =?> "\\section[my-header]{My header}"+            headerWith ("my-header",[],[]) 1 "My header" =?> "\\section[title={My header},reference={my-header}]"+          , test contextDiv "section-divs" $+                   (   headerWith ("header1", [], []) 1 (text "Header1")+                    <> headerWith ("header2", [], []) 2 (text "Header2")+                    <> headerWith ("header3", [], []) 3 (text "Header3")+                    <> headerWith ("header4", [], []) 4 (text "Header4")+                    <> headerWith ("header5", [], []) 5 (text "Header5")+                    <> headerWith ("header6", [], []) 6 (text "Header6"))+                   =?>+              unlines [ "\\startsection[title={Header1},reference={header1}]\n"+                      , "\\startsubsection[title={Header2},reference={header2}]\n"+                      , "\\startsubsubsection[title={Header3},reference={header3}]\n"+                      , "\\startsubsubsubsection[title={Header4},reference={header4}]\n"+                      , "\\startsubsubsubsubsection[title={Header5},reference={header5}]\n"+                      , "\\startsubsubsubsubsubsection[title={Header6},reference={header6}]\n"+                      , "\\stopsubsubsubsubsubsection\n"+                      , "\\stopsubsubsubsubsection\n"+                      , "\\stopsubsubsubsection\n"+                      , "\\stopsubsubsection\n"+                      , "\\stopsubsection\n"+                      , "\\stopsection" ]           ]         , testGroup "bullet lists"           [ "nested" =:@@ -92,7 +115,7 @@                            plain $ text "3.3",                            plain $ text "3.4"]]               in table caption aligns headers rows-              =?> unlines [ "\\startplacetable[caption={Table 1}]"+              =?> unlines [ "\\startplacetable[title={Table 1}]"                           , "\\startTABLE"                           , "\\startTABLEhead"                           , "\\NC[align=left] Right"@@ -124,4 +147,3 @@                           , "\\stopplacetable" ]             ]         ]-
test/Tests/Writers/Docbook.hs view
@@ -230,7 +230,7 @@                                       ]             ]           ]-        , testGroup "writer options" $+        , testGroup "writer options"           [ testGroup "top-level division" $             let               headers =  header 1 (text "header1")
test/Tests/Writers/Docx.hs view
@@ -1,161 +1,157 @@ module Tests.Writers.Docx (tests) where -import qualified Data.ByteString as BS-import System.FilePath ((</>))-import System.IO.Unsafe (unsafePerformIO)+import Text.Pandoc import Test.Tasty-import Tests.Helpers-import Text.Pandoc.Class (runIOorExplode, setUserDataDir)-import Text.Pandoc.Definition-import Text.Pandoc.Options-import Text.Pandoc.Readers.Docx-import Text.Pandoc.Readers.Native-import qualified Text.Pandoc.UTF8 as UTF8-import Text.Pandoc.Walk-import Text.Pandoc.Writers.Docx--type Options = (WriterOptions, ReaderOptions)--compareOutput :: Options-              -> FilePath-              -> FilePath-              -> IO (Pandoc, Pandoc)-compareOutput (wopts, ropts) nativeFileIn nativeFileOut = do-  nf <- UTF8.toText <$> BS.readFile nativeFileIn-  nf' <- UTF8.toText <$> BS.readFile nativeFileOut-  runIOorExplode $ do-    setUserDataDir $ Just (".." </> "data")-    roundtripped <- readNative def nf >>=-            writeDocx wopts >>= readDocx ropts-    orig <- readNative def nf'-    return (walk fixImages roundtripped, walk fixImages orig)---- make all image filenames "image", since otherwise round-trip--- tests fail because of different behavior of Data.Unique in--- different ghc versions...-fixImages :: Inline -> Inline-fixImages (Image attr alt (_,tit)) = Image attr alt ("image",tit)-fixImages x                        = x--testCompareWithOptsIO :: Options -> String -> FilePath -> FilePath -> IO TestTree-testCompareWithOptsIO opts name nativeFileIn nativeFileOut = do-  (dp, np) <- compareOutput opts nativeFileIn nativeFileOut-  return $ test id name (dp, np)--testCompareWithOpts :: Options -> String -> FilePath -> FilePath -> TestTree-testCompareWithOpts opts name nativeFileIn nativeFileOut =-  unsafePerformIO $ testCompareWithOptsIO opts name nativeFileIn nativeFileOut--roundTripCompareWithOpts :: Options -> String -> FilePath -> TestTree-roundTripCompareWithOpts opts name nativeFile =-  testCompareWithOpts opts name nativeFile nativeFile---- testCompare :: String -> FilePath -> FilePath -> TestTree--- testCompare = testCompareWithOpts def+import Tests.Writers.OOXML+import Test.Tasty.HUnit+import Data.List (isPrefixOf) -roundTripCompare :: String -> FilePath -> TestTree-roundTripCompare = roundTripCompareWithOpts def+-- we add an extra check to make sure that we're not writing in the+-- toplevel docx directory. We don't want to accidentally overwrite an+-- Word-generated docx file used to test the reader.+docxTest :: String -> WriterOptions -> FilePath -> FilePath -> TestTree+docxTest testName opts nativeFP goldenFP =+  if "docx/golden/" `isPrefixOf` goldenFP+  then ooxmlTest writeDocx testName opts nativeFP goldenFP+  else testCase testName $+       assertFailure $+       goldenFP ++ " is not in `test/docx/golden`"  tests :: [TestTree] tests = [ testGroup "inlines"-          [ roundTripCompare+          [ docxTest             "font formatting"-            "docx/inline_formatting_writer.native"-          , roundTripCompare-            "font formatting with character styles"-            "docx/char_styles.native"-          , roundTripCompare+            def+            "docx/inline_formatting.native"+            "docx/golden/inline_formatting.docx"+          , docxTest             "hyperlinks"-            "docx/links_writer.native"-          , roundTripCompare+            def+            "docx/links.native"+            "docx/golden/links.docx"+          , docxTest             "inline image"-            "docx/image_no_embed_writer.native"-          , roundTripCompare-            "inline image in links"-            "docx/inline_images_writer.native"-          , roundTripCompare+            def+            "docx/image_writer_test.native"+            "docx/golden/image.docx"+          , docxTest+            "inline images"+            def+            "docx/inline_images_writer_test.native"+            "docx/golden/inline_images.docx"+          , docxTest             "handling unicode input"+            def             "docx/unicode.native"-          , roundTripCompare-            "literal tabs"-            "docx/tabs.native"-          , roundTripCompare-            "normalizing inlines"-            "docx/normalize.native"-          , roundTripCompare-            "normalizing inlines deep inside blocks"-            "docx/deep_normalize.native"-          , roundTripCompare-            "move trailing spaces outside of formatting"-            "docx/trailing_spaces_in_formatting.native"-          , roundTripCompare-            "inline code (with VerbatimChar style)"+            "docx/golden/unicode.docx"+          , docxTest+            "inline code"+            def             "docx/inline_code.native"-          , roundTripCompare+            "docx/golden/inline_code.docx"+          , docxTest             "inline code in subscript and superscript"+            def             "docx/verbatim_subsuper.native"+            "docx/golden/verbatim_subsuper.docx"           ]         , testGroup "blocks"-          [ roundTripCompare+          [ docxTest             "headers"+            def             "docx/headers.native"-          , roundTripCompare-            "headers already having auto identifiers"-            "docx/already_auto_ident.native"-          , roundTripCompare-            "numbered headers automatically made into list"-            "docx/numbered_header.native"-          , roundTripCompare-            "i18n blocks (headers and blockquotes)"-            "docx/i18n_blocks.native"-          -- Continuation does not survive round-trip-          , roundTripCompare+            "docx/golden/headers.docx"+          , docxTest+            "nested anchor spans in header"+            def+            "docx/nested_anchors_in_header.native"+            "docx/golden/nested_anchors_in_header.docx"+          , docxTest             "lists"-            "docx/lists_writer.native"-          , roundTripCompare+            def+            "docx/lists.native"+            "docx/golden/lists.docx"+          , docxTest+            "lists continuing after interruption"+            def+            "docx/lists_continuing.native"+            "docx/golden/lists_continuing.docx"+          , docxTest+            "lists restarting after interruption"+            def+            "docx/lists_restarting.native"+            "docx/golden/lists_restarting.docx"+          , docxTest             "definition lists"+            def             "docx/definition_list.native"-          , roundTripCompare-            "custom defined lists in styles"-            "docx/german_styled_lists.native"-          , roundTripCompare+            "docx/golden/definition_list.docx"+          , docxTest             "footnotes and endnotes"+            def             "docx/notes.native"-          , roundTripCompare-            "blockquotes (parsing indent as blockquote)"+            "docx/golden/notes.docx"+          , docxTest+            "links in footnotes and endnotes"+            def+            "docx/link_in_notes.native"+            "docx/golden/link_in_notes.docx"+          , docxTest+            "blockquotes"+            def             "docx/block_quotes_parse_indent.native"-          , roundTripCompare-            "hanging indents"-            "docx/hanging_indent.native"-          -- tables headers do not survive round-trip, should look into that-          , roundTripCompare+            "docx/golden/block_quotes.docx"+          , docxTest             "tables"+            def             "docx/tables.native"-          , roundTripCompare+            "docx/golden/tables.docx"+          , docxTest             "tables with lists in cells"+            def             "docx/table_with_list_cell.native"-          , roundTripCompare+            "docx/golden/table_with_list_cell.docx"+          , docxTest+            "tables with one row"+            def+            "docx/table_one_row.native"+            "docx/golden/table_one_row.docx"+          , docxTest             "code block"+            def             "docx/codeblock.native"-          , roundTripCompare-            "dropcap paragraphs"-            "docx/drop_cap.native"+            "docx/golden/codeblock.docx"           ]-        , testGroup "metadata"-          [ roundTripCompareWithOpts (def,def{readerStandalone=True})-            "metadata fields"-            "docx/metadata.native"-          , roundTripCompareWithOpts (def,def{readerStandalone=True})-            "stop recording metadata with normal text"-            "docx/metadata_after_normal.native"+        , testGroup "track changes"+          [ docxTest+            "insertion"+            def+            "docx/track_changes_insertion_all.native"+            "docx/golden/track_changes_insertion.docx"+          , docxTest+            "deletion"+            def+            "docx/track_changes_deletion_all.native"+            "docx/golden/track_changes_deletion.docx"+          , docxTest+            "move text"+            def+            "docx/track_changes_move_all.native"+            "docx/golden/track_changes_move.docx"+          , docxTest+            "comments"+            def+            "docx/comments.native"+            "docx/golden/comments.docx"           ]-        , testGroup "customized styles"-          [ testCompareWithOpts-            ( def{writerReferenceDoc=Just "docx/custom-style-reference.docx"}-            , def)-            "simple customized blocks and inlines"-            "docx/custom-style-roundtrip-start.native"-            "docx/custom-style-roundtrip-end.native"+        , testGroup "custom styles"+          [ docxTest "custom styles without reference.docx"+            def+            "docx/custom_style.native"+            "docx/golden/custom_style_no_reference.docx"+          , docxTest "custom styles with reference.docx"+            def{writerReferenceDoc = Just "docx/custom-style-reference.docx"}+            "docx/custom_style.native"+            "docx/golden/custom_style_reference.docx"           ]-         ]
test/Tests/Writers/FB2.hs view
@@ -23,7 +23,7 @@           ]         , testGroup "inlines"           [-            "Emphasis"      =:  emph ("emphasized")+            "Emphasis"      =:  emph "emphasized"                             =?> fb2 "<emphasis>emphasized</emphasis>"           ]         , "bullet list" =: bulletList [ plain $ text "first"
test/Tests/Writers/JATS.hs view
@@ -120,5 +120,3 @@             \</sec>"           ]         ]--
test/Tests/Writers/Markdown.hs view
@@ -80,7 +80,7 @@         ".") <>   blockQuote (para ("A note inside a block quote." <>                     note (para "The second note.")) <>-              para ("A second paragraph.")) <>+              para "A second paragraph.") <>   header 1 "Second Header" <>   para "Some more text." @@ -91,7 +91,7 @@   [ test (markdownWithOpts defopts)     "footnotes at the end of a document" $     noteTestDoc =?>-    (unlines $ [ "First Header"+    (unlines [ "First Header"                , "============"                , ""                , "This is a footnote.[^1] And this is a [link](https://www.google.com)."@@ -112,7 +112,7 @@   , test (markdownWithOpts defopts{writerReferenceLocation=EndOfBlock})     "footnotes at the end of blocks" $     noteTestDoc =?>-    (unlines $ [ "First Header"+    (unlines [ "First Header"                , "============"                , ""                , "This is a footnote.[^1] And this is a [link](https://www.google.com)."@@ -133,7 +133,7 @@   , test (markdownWithOpts defopts{writerReferenceLocation=EndOfBlock, writerReferenceLinks=True})     "footnotes and reference links at the end of blocks" $     noteTestDoc =?>-    (unlines $ [ "First Header"+    (unlines [ "First Header"                , "============"                , ""                , "This is a footnote.[^1] And this is a [link]."@@ -156,7 +156,7 @@   , test (markdownWithOpts defopts{writerReferenceLocation=EndOfSection})     "footnotes at the end of section" $     noteTestDoc =?>-    (unlines $ [ "First Header"+    (unlines [ "First Header"                , "============"                , ""                , "This is a footnote.[^1] And this is a [link](https://www.google.com)."@@ -186,27 +186,27 @@       (=:) = test (purely (writeMarkdown defopts{writerReferenceLinks = True}) . toPandoc)   in testGroup "Shortcut reference links"      [ "Simple link (shortcutable)"-           =: (para (link "/url" "title" "foo"))+           =: para (link "/url" "title" "foo")            =?> "[foo]\n\n  [foo]: /url \"title\""      , "Followed by another link (unshortcutable)"-           =: (para ((link "/url1" "title1" "first")-                  <> (link "/url2" "title2" "second")))+           =: para ((link "/url1" "title1" "first")+                  <> (link "/url2" "title2" "second"))            =?> unlines [ "[first][][second]"                        , ""                        , "  [first]: /url1 \"title1\""                        , "  [second]: /url2 \"title2\""                        ]      , "Followed by space and another link (unshortcutable)"-           =: (para ((link "/url1" "title1" "first") <> " "-                  <> (link "/url2" "title2" "second")))+           =: para ((link "/url1" "title1" "first") <> " "+                  <> (link "/url2" "title2" "second"))            =?> unlines [ "[first][] [second]"                        , ""                        , "  [first]: /url1 \"title1\""                        , "  [second]: /url2 \"title2\""                        ]      , "Reference link is used multiple times (unshortcutable)"-           =: (para ((link "/url1" "" "foo") <> (link "/url2" "" "foo")-                                             <> (link "/url3" "" "foo")))+           =: para ((link "/url1" "" "foo") <> (link "/url2" "" "foo")+                                             <> (link "/url3" "" "foo"))            =?> unlines [ "[foo][][foo][1][foo][2]"                        , ""                        , "  [foo]: /url1"@@ -214,8 +214,8 @@                        , "  [2]: /url3"                        ]      , "Reference link is used multiple times (unshortcutable)"-           =: (para ((link "/url1" "" "foo") <> " " <> (link "/url2" "" "foo")-                                             <> " " <> (link "/url3" "" "foo")))+           =: para ((link "/url1" "" "foo") <> " " <> (link "/url2" "" "foo")+                                             <> " " <> (link "/url3" "" "foo"))            =?> unlines [ "[foo][] [foo][1] [foo][2]"                        , ""                        , "  [foo]: /url1"@@ -223,43 +223,43 @@                        , "  [2]: /url3"                        ]      , "Reference link is followed by text in brackets"-          =:  (para ((link "/url" "" "link") <> "[text in brackets]"))+          =:  para ((link "/url" "" "link") <> "[text in brackets]")           =?> unlines [ "[link][]\\[text in brackets\\]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by space and text in brackets"-          =:  (para ((link "/url" "" "link") <> " [text in brackets]"))+          =:  para ((link "/url" "" "link") <> " [text in brackets]")           =?> unlines [ "[link][] \\[text in brackets\\]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by RawInline"-          =: (para ((link "/url" "" "link") <> rawInline "markdown" "[rawText]"))+          =: para ((link "/url" "" "link") <> rawInline "markdown" "[rawText]")           =?> unlines [ "[link][][rawText]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by space and RawInline"-          =: (para ((link "/url" "" "link") <> space <> rawInline "markdown" "[rawText]"))+          =: para ((link "/url" "" "link") <> space <> rawInline "markdown" "[rawText]")           =?> unlines [ "[link][] [rawText]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by RawInline with space"-          =: (para ((link "/url" "" "link") <> rawInline "markdown" " [rawText]"))+          =: para ((link "/url" "" "link") <> rawInline "markdown" " [rawText]")           =?> unlines [ "[link][] [rawText]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by citation"-          =: (para ((link "/url" "" "link") <> cite [Citation "author" [] [] NormalCitation 0 0] (str "[@author]")))+          =: para ((link "/url" "" "link") <> cite [Citation "author" [] [] NormalCitation 0 0] (str "[@author]"))           =?> unlines [ "[link][][@author]"                       , ""                       , "  [link]: /url"                       ]      , "Reference link is followed by space and citation"-          =: (para ((link "/url" "" "link") <> space <> cite [Citation "author" [] [] NormalCitation 0 0] (str "[@author]")))+          =: para ((link "/url" "" "link") <> space <> cite [Citation "author" [] [] NormalCitation 0 0] (str "[@author]"))           =?> unlines [ "[link][] [@author]"                       , ""                       , "  [link]: /url"
test/Tests/Writers/Muse.hs view
@@ -34,11 +34,9 @@                                            ]             ]           , "line block" =: lineBlock [text "Foo", text "bar", text "baz"]-                         =?> unlines [ "<verse>"-                                     , "Foo"-                                     , "bar"-                                     , "baz"-                                     , "</verse>"+                         =?> unlines [ "> Foo"+                                     , "> bar"+                                     , "> baz"                                      ]           , "code block" =: codeBlock "int main(void) {\n\treturn 0;\n}"                          =?> unlines [ "<example>"@@ -94,6 +92,15 @@                                               , " second definition :: second description"                                               , " third definition :: third description"                                               ]+              , "definition list with multiple descriptions" =:+                definitionList [ (text "first definition", [plain $ text "first description"+                                                           ,plain $ text "second description"])+                               , (text "second definition", [plain $ text "third description"])+                               ]+                =?> unlines [ " first definition :: first description"+                            , "                  :: second description"+                            , " second definition :: third description"+                            ]               ]             -- Test that lists of the same type and style are separated with two blanklines             , testGroup "sequential lists"@@ -197,8 +204,8 @@                                                   ]               , "nested definition lists" =: definitionList [ (text "first definition", [plain $ text "first description"])                                                             , (text "second definition",-                                                               [ plain (text "second description")-                                                               , definitionList [ ( text "first inner definition"+                                                               [ plain (text "second description") <>+                                                                 definitionList [ ( text "first inner definition"                                                                                   , [plain $ text "first inner description"])                                                                                 , ( text "second inner definition"                                                                                   , [plain $ text "second inner description"])@@ -208,8 +215,8 @@                                                             ]                                           =?> unlines [ " first definition :: first description"                                                       , " second definition :: second description"-                                                      , "                       first inner definition :: first inner description"-                                                      , "                       second inner definition :: second inner description"+                                                      , "                      first inner definition :: first inner description"+                                                      , "                      second inner definition :: second inner description"                                                       ]               ]             -- Check that list is intended with one space even inside a quote@@ -242,6 +249,7 @@             ]           , "horizontal rule" =: horizontalRule =?> "----"           , "escape horizontal rule" =: para (text "----") =?> "<verbatim>----</verbatim>"+          , "escape nonbreaking space" =: para (text "~~") =?> "<verbatim>~~</verbatim>"           , testGroup "tables"             [ "table without header" =:               let rows = [[para $ text "Para 1.1", para $ text "Para 1.2"]@@ -273,7 +281,9 @@                           , " |+ Table 1 +|"                           ]             ]-          -- Div is trivial+          , "div with bullet list" =:+            divWith nullAttr (bulletList [para $ text "foo"]) =?>+            unlines [ " - foo" ] -- Making sure bullets are indented           -- Null is trivial           ]         , testGroup "inline elements"@@ -287,6 +297,7 @@             , "escape hash to avoid accidental anchors" =: text "#foo bar"               =?> "<verbatim>#foo</verbatim> bar"             , "escape definition list markers" =: str "::" =?> "<verbatim>::</verbatim>"+            , "normalize strings before escaping" =: fromList [Str ":", Str ":"] =?> "<verbatim>::</verbatim>"             -- We don't want colons to be escaped if they can't be confused             -- with definition list item markers.             , "do not escape colon" =: str ":" =?> ":"@@ -299,13 +310,15 @@           , "superscript" =: superscript (text "foo") =?> "<sup>foo</sup>"           , "subscript" =: subscript (text "foo") =?> "<sub>foo</sub>"           , "smallcaps" =: smallcaps (text "foo") =?> "foo"-          , "single quoted" =: singleQuoted (text "foo") =?> "'foo'"-          , "double quoted" =: doubleQuoted (text "foo") =?> "\"foo\""+          , "single quoted" =: singleQuoted (text "foo") =?> "‘foo’"+          , "double quoted" =: doubleQuoted (text "foo") =?> "“foo”"           -- Cite is trivial           , testGroup "code"             [ "simple" =: code "foo" =?> "<code>foo</code>"             , "escape tag" =: code "<code>foo = bar</code> baz" =?> "<code><code>foo = bar<</code><code>/code> baz</code>"+            , "normalization with attributes" =: codeWith ("",["haskell"],[]) "foo" <> code "bar" =?> "<code>foobar</code>"             , "normalization" =: code "</co" <> code "de>" =?> "<code><</code><code>/code></code>"+            , "normalization with empty string" =: code "</co" <> str "" <> code "de>" =?> "<code><</code><code>/code></code>"             ]           , testGroup "spaces"             [ "space" =: text "a" <> space <> text "b" =?> "a b"@@ -317,7 +330,7 @@             ]           , testGroup "math"             [ "inline math" =: math "2^3" =?> "2<sup>3</sup>"-            , "display math" =: displayMath "2^3" =?> "<verse>2<sup>3</sup></verse>"+            , "display math" =: displayMath "2^3" =?> "2<sup>3</sup>"             , "multiple letters in inline math" =: math "abc" =?> "<em>abc</em>"             ]           , "raw inline"@@ -338,6 +351,9 @@                                                   =?> "[[URL:1.png]]"             ]           , "image" =: image "image.png" "Image 1" (str "") =?> "[[image.png][Image 1]]"+          , "image with width" =:+            imageWith ("", [], [("width", "60%")]) "image.png" "Image" (str "") =?>+            "[[image.png 60][Image]]"           , "note" =: note (plain (text "Foo"))                    =?> unlines [ "[1]"                                , ""@@ -354,7 +370,7 @@                     "<em>foo</em>bar"             , "emph quoted" =:                 para (doubleQuoted (emph (text "foo"))) =?>-                    "\"<em>foo</em>\""+                    "“<em>foo</em>”"             , "strong word before" =:                 para (text "foo" <> strong (text "bar")) =?>                     "foo<strong>bar</strong>"@@ -363,7 +379,7 @@                     "<strong>foo</strong>bar"             , "strong quoted" =:                 para (singleQuoted (strong (text "foo"))) =?>-                    "'<strong>foo</strong>'"+                    "‘<strong>foo</strong>’"             ]          ]        ]
test/Tests/Writers/Native.hs view
@@ -18,5 +18,5 @@ tests :: [TestTree] tests = [ testProperty "p_write_rt" p_write_rt         , testProperty "p_write_blocks_rt" $ mapSize-             (\x -> if x > 3 then 3 else x) $ p_write_blocks_rt+             (\x -> if x > 3 then 3 else x) p_write_blocks_rt         ]
+ test/Tests/Writers/OOXML.hs view
@@ -0,0 +1,184 @@+{-# LANGUAGE PatternGuards     #-}+{-# LANGUAGE OverloadedStrings #-}++module Tests.Writers.OOXML (ooxmlTest) where++import Text.Pandoc+import Test.Tasty+import Test.Tasty.Golden.Advanced+import Codec.Archive.Zip+import Text.XML.Light+import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as BL+import qualified Data.Text.IO as T+import Data.List (isSuffixOf, sort, (\\), intercalate, union)+import Data.Maybe (catMaybes, mapMaybe)+import Tests.Helpers+import Data.Algorithm.Diff+import System.FilePath.Glob (compile, match)++compareXMLBool :: Content -> Content -> Bool+-- We make a special exception for times at the moment, and just pass+-- them because we can't control the utctime when running IO. Besides,+-- so long as we have two times, we're okay.+compareXMLBool (Elem myElem) (Elem goodElem)+  | (QName "created" _ (Just "dcterms")) <- elName myElem+  , (QName "created" _ (Just "dcterms")) <- elName goodElem =+      True+compareXMLBool (Elem myElem) (Elem goodElem)+  | (QName "modified" _ (Just "dcterms")) <- elName myElem+  , (QName "modified" _ (Just "dcterms")) <- elName goodElem =+      True+compareXMLBool (Elem myElem) (Elem goodElem) =+  elName myElem == elName goodElem &&+  elAttribs myElem == elAttribs goodElem &&+  and (zipWith compareXMLBool (elContent myElem) (elContent goodElem))+compareXMLBool (Text myCData) (Text goodCData) =+  cdVerbatim myCData == cdVerbatim goodCData &&+  cdData myCData == cdData goodCData &&+  cdLine myCData == cdLine goodCData+compareXMLBool (CRef myStr) (CRef goodStr) =+  myStr == goodStr+compareXMLBool _ _ = False++displayDiff :: Content -> Content -> String+displayDiff elemA elemB =+  showDiff (1,1) $ getDiff (lines $ ppContent elemA) (lines $ ppContent elemB)++goldenArchive :: FilePath -> IO Archive+goldenArchive fp = (toArchive . BL.fromStrict) <$> BS.readFile fp++testArchive :: (WriterOptions -> Pandoc -> PandocIO BL.ByteString)+            -> WriterOptions+            -> FilePath+            -> IO Archive+testArchive writerFn opts fp = do+  txt <- T.readFile fp+  bs <- runIOorExplode $ readNative def txt >>= writerFn opts+  return $ toArchive bs++compareFileList :: FilePath -> Archive -> Archive -> Maybe String+compareFileList goldenFP goldenArch testArch =+  let testFiles = filesInArchive testArch+      goldenFiles = filesInArchive goldenArch+      diffTestGolden = testFiles \\ goldenFiles+      diffGoldenTest = goldenFiles \\ testFiles++      results =+        [ if null diffGoldenTest+          then Nothing+          else Just $+               "Files in " ++ goldenFP ++ " but not in generated archive:\n" +++               intercalate ", " diffGoldenTest+        , if null diffTestGolden+          then Nothing+          else Just $+               "Files in generated archive but not in " ++ goldenFP ++ ":\n" +++               intercalate ", " diffTestGolden+        ]+  in+    if null $ catMaybes results+    then Nothing+    else Just $ intercalate "\n" $ catMaybes results++compareXMLFile' :: FilePath -> Archive -> Archive -> Either String ()+compareXMLFile' fp goldenArch testArch = do+  testEntry <- case findEntryByPath fp testArch of+                 Just entry -> Right entry+                 Nothing -> Left $+                   "Can't extract " ++ fp ++ " from generated archive"+  testXMLDoc <- case parseXMLDoc $ fromEntry testEntry of+                  Just doc -> Right doc+                  Nothing -> Left $+                    "Can't parse xml in  " ++ fp ++ " from generated archive"++  goldenEntry <- case findEntryByPath fp goldenArch of+                 Just entry -> Right entry+                 Nothing -> Left $+                   "Can't extract " ++ fp ++ " from archive in stored file"+  goldenXMLDoc <- case parseXMLDoc $ fromEntry goldenEntry of+                  Just doc -> Right doc+                  Nothing -> Left $+                    "Can't parse xml in  " ++ fp ++ " from archive in stored file"++  let testContent = Elem testXMLDoc+      goldenContent = Elem goldenXMLDoc++  if compareXMLBool goldenContent testContent+    then Right ()+    else Left $+    "Non-matching xml in " ++ fp ++ ":\n" ++ displayDiff testContent goldenContent++compareXMLFile :: FilePath -> Archive -> Archive -> Maybe String+compareXMLFile fp goldenArch testArch =+  case compareXMLFile' fp goldenArch testArch of+    Right _ -> Nothing+    Left s -> Just s++compareAllXMLFiles :: Archive -> Archive -> Maybe String+compareAllXMLFiles goldenArch testArch =+  let allFiles = filesInArchive goldenArch `union` filesInArchive testArch+      allXMLFiles = sort $+        filter+        (\fp -> ".xml" `isSuffixOf` fp || ".rels" `isSuffixOf` fp)+        allFiles+      results =+        mapMaybe (\fp -> compareXMLFile fp goldenArch testArch) allXMLFiles+  in+    if null results+    then Nothing+    else Just $ unlines results++compareMediaFile' :: FilePath -> Archive -> Archive -> Either String ()+compareMediaFile' fp goldenArch testArch = do+  testEntry <- case findEntryByPath fp testArch of+                 Just entry -> Right entry+                 Nothing -> Left $+                   "Can't extract " ++ fp ++ " from generated archive"+  goldenEntry <- case findEntryByPath fp goldenArch of+                 Just entry -> Right entry+                 Nothing -> Left $+                   "Can't extract " ++ fp ++ " from archive in stored file"++  if fromEntry testEntry == fromEntry goldenEntry+    then Right ()+    else Left $+    "Non-matching binary file: " ++ fp++compareMediaFile :: FilePath -> Archive -> Archive -> Maybe String+compareMediaFile fp goldenArch testArch =+  case compareMediaFile' fp goldenArch testArch of+    Right _ -> Nothing+    Left s -> Just s++compareAllMediaFiles :: Archive -> Archive -> Maybe String+compareAllMediaFiles goldenArch testArch =+  let allFiles = filesInArchive goldenArch `union` filesInArchive testArch+      mediaPattern = compile "*/media/*"+      allMediaFiles = sort $+        filter (match mediaPattern) allFiles+      results =+        mapMaybe (\fp -> compareMediaFile fp goldenArch testArch) allMediaFiles+  in+    if null results+    then Nothing+    else Just $ unlines results++ooxmlTest :: (WriterOptions -> Pandoc -> PandocIO BL.ByteString)+          -> String+          -> WriterOptions+          -> FilePath+          -> FilePath+          -> TestTree+ooxmlTest writerFn testName opts nativeFP goldenFP =+  goldenTest+  testName+  (goldenArchive goldenFP)+  (testArchive writerFn opts nativeFP)+  (\goldenArch testArch ->+     let res = catMaybes [ compareFileList goldenFP goldenArch testArch+                         , compareAllXMLFiles goldenArch testArch+                         , compareAllMediaFiles goldenArch testArch+                         ]+     in return $ if null res then Nothing else Just $ unlines res)+  (\a -> BL.writeFile goldenFP $ fromArchive a)
test/Tests/Writers/Powerpoint.hs view
@@ -1,169 +1,93 @@-{-# LANGUAGE OverloadedStrings #-}- module Tests.Writers.Powerpoint (tests) where -import Control.Exception (throwIO)+import Tests.Writers.OOXML (ooxmlTest) import Text.Pandoc-import Text.Pandoc.Builder-import Text.Pandoc.Arbitrary ()-import Text.Pandoc.Walk import Test.Tasty-import Test.Tasty.HUnit-import Test.Tasty.QuickCheck-import Codec.Archive.Zip-import Text.XML.Light-import Data.List (isPrefixOf, isSuffixOf, sort)-import Data.Maybe (mapMaybe)--getPptxArchive :: WriterOptions -> Pandoc -> IO Archive-getPptxArchive opts pd = do-  mbs <- runIO $-         do setUserDataDir $ Just "../data"-            writePowerpoint opts pd-  case mbs of-       Left e   -> throwIO e-       Right bs -> return $ toArchive bs------- Number of Slides -------------numberOfSlides :: WriterOptions -> Pandoc -> IO Int-numberOfSlides opts pd = do-  archive <- getPptxArchive opts pd-  return $-    length $-    filter (isSuffixOf ".xml") $-    filter (isPrefixOf "ppt/slides/slide") $-    filesInArchive archive--testNumberOfSlides :: TestName -> Int -> WriterOptions -> Pandoc -> TestTree-testNumberOfSlides name n opts pd =-  testCase name $ do-    n' <- numberOfSlides opts pd-    n' @=? n--numSlideTests :: TestTree-numSlideTests = testGroup "Number of slides in output"-  [ testNumberOfSlides-    "simple one-slide deck" 1-    def-    (doc $ para "foo")-  , testNumberOfSlides-    "with metadata (header slide)" 2-    def-    (setTitle "My Title" $ doc $ para "foo")-  , testNumberOfSlides-    "With h1 slide (using default slide-level)" 1-    def-    (doc $ header 1 "Header" <> para "foo")-  , testNumberOfSlides-    "With h2 slide (using default slide-level)" 2-    def-    (doc $ header 1 "Header" <> header 2 "subeader" <> para "foo")-  , testNumberOfSlides-    "With h1 slide (using slide-level 3)" 2-    def {writerSlideLevel= Just 3}-    (doc $ header 1 "Header" <> para "foo")-  , testNumberOfSlides-    "With h2 slide (using slide-level 3)" 3-    def {writerSlideLevel= Just 3}-    (doc $ header 1 "Header" <> header 2 "subeader" <> para "foo")-  , testNumberOfSlides-    "With image slide, no header" 3-    def-    (doc $-      para "first slide" <>-      (para $ image "lalune.jpg" "" "") <>-      para "foo")-  , testNumberOfSlides-    "With image slide, header" 3-    def-    (doc $-      para "first slide" <>-      header 2 "image header" <>-      (para $ image "lalune.jpg" "" "") <>-      para "foo")-  , testNumberOfSlides-    "With table, no header" 3-    def-    (doc $-     para "first slide" <>-     (simpleTable [para "foo" <> para "bar"] [[para "this" <> para "that"]]) <>-     para "foo")-  , testNumberOfSlides-    "With table, header" 3-    def-    (doc $-     para "first slide" <>-     header 2 "table header" <>-     (simpleTable [para "foo" <> para "bar"] [[para "this" <> para "that"]]) <>-     para "foo")-  , testNumberOfSlides-    "hrule" 2-    def-    (doc $-     para "first slide" <> horizontalRule <> para "last slide")-  , testNumberOfSlides-    "with notes slide" 2-    def-    (doc $-      para $ text "Foo" <> note (para "note text"))-  ]+import System.FilePath ------ Content Types -----------+-- templating is important enough, and can break enough things, that+-- we want to run all our tests with both default formatting and a+-- template. +modifyPptxName :: FilePath -> FilePath+modifyPptxName fp =+  addExtension (dropExtension fp ++ "_templated") "pptx" -contentTypesFileExists :: WriterOptions -> Pandoc -> TestTree-contentTypesFileExists opts pd =-  testCase "Existence of [Content_Types].xml file" $-  do archive <- getPptxArchive opts pd-     assertBool "Missing [Content_Types].xml file" $-       "[Content_Types].xml" `elem` (filesInArchive archive)+pptxTests :: String -> WriterOptions -> FilePath -> FilePath -> (TestTree, TestTree)+pptxTests name opts native pptx =+  let referenceDoc = "pptx/reference_depth.pptx"+  in+    ( ooxmlTest+      writePowerpoint+      name+      opts{writerReferenceDoc=Nothing}+      native+      pptx+    , ooxmlTest+      writePowerpoint+      name+      opts{writerReferenceDoc=Just referenceDoc}+      native+      (modifyPptxName pptx)+    ) +groupPptxTests :: [(TestTree, TestTree)] -> [TestTree]+groupPptxTests pairs =+  let (noRefs, refs) = unzip pairs+  in+    [ testGroup "Default slide formatting" noRefs+    , testGroup "With `--reference-doc` pptx file" refs+    ]  --- We want an "Override" entry for each xml file under ppt/.-prop_ContentOverrides :: Pandoc -> IO Bool-prop_ContentOverrides pd = do-  -- remove Math to avoid warnings-  let go :: Inline -> Inline-      go (Math _ _) = Str "Math"-      go i = i-      pd' = walk go pd-  archive <- getPptxArchive def pd'-  let xmlFiles = filter ("[Content_Types].xml" /=) $-                  filter (isSuffixOf ".xml") $-                  filesInArchive archive-  contentTypes <- case findEntryByPath "[Content_Types].xml" archive of-                    Just ent -> return $ fromEntry ent-                    Nothing  -> throwIO $-                      PandocSomeError "Missing [Content_Types].xml file"-  typesElem <- case parseXMLDoc contentTypes of-                    Just element -> return $ element-                    Nothing      -> throwIO $-                      PandocSomeError "[Content_Types].xml cannot be parsed"-  let ns = findAttr (QName "xmlns" Nothing Nothing) typesElem-      overrides = findChildren (QName "Override" ns Nothing) typesElem-      partNames = mapMaybe (findAttr (QName "PartName" Nothing Nothing)) overrides-      -- files in content_types are absolute-      absXmlFiles = map (\fp -> case fp of-                                  ('/':_) -> fp-                                  _       -> '/': fp-                        )-                    xmlFiles-  return $ sort absXmlFiles == sort partNames--contentOverridesTests :: TestTree-contentOverridesTests = localOption (QuickCheckTests 20) $-                       testProperty "Content Overrides for each XML file" $-                       \x -> ioProperty $ prop_ContentOverrides (x :: Pandoc)--contentTypeTests :: TestTree-contentTypeTests = testGroup "[Content_Types].xml file"-  [ contentTypesFileExists def (doc $ para "foo")-  , contentOverridesTests-  ]- tests :: [TestTree]-tests = [ numSlideTests-        , contentTypeTests-        ]+tests = groupPptxTests [ pptxTests "Inline formatting"+                         def+                         "pptx/inline_formatting.native"+                         "pptx/inline_formatting.pptx"+                       , pptxTests "Slide breaks (default slide-level)"+                         def+                         "pptx/slide_breaks.native"+                         "pptx/slide_breaks.pptx"+                       , pptxTests "slide breaks (slide-level set to 1)"+                         def{ writerSlideLevel = Just 1 }+                         "pptx/slide_breaks.native"+                         "pptx/slide_breaks_slide_level_1.pptx"+                       , pptxTests "lists"+                         def+                         "pptx/lists.native"+                         "pptx/lists.pptx"+                       , pptxTests "tables"+                         def+                         "pptx/tables.native"+                         "pptx/tables.pptx"+                       , pptxTests "table of contents"+                         def{ writerTableOfContents = True }+                         "pptx/slide_breaks.native"+                         "pptx/slide_breaks_toc.pptx"+                       , pptxTests "end notes"+                         def+                         "pptx/endnotes.native"+                         "pptx/endnotes.pptx"+                       , pptxTests "end notes, with table of contents"+                         def { writerTableOfContents = True }+                         "pptx/endnotes.native"+                         "pptx/endnotes_toc.pptx"+                       , pptxTests "images"+                         def+                         "pptx/images.native"+                         "pptx/images.pptx"+                       , pptxTests "two-column layout"+                         def+                         "pptx/two_column.native"+                         "pptx/two_column.pptx"+                       , pptxTests "speaker notes"+                         def+                         "pptx/speaker_notes.native"+                         "pptx/speaker_notes.pptx"+                       , pptxTests "remove empty slides"+                         def+                         "pptx/remove_empty_slides.native"+                         "pptx/remove_empty_slides.pptx"++                       ]
test/Tests/Writers/RST.hs view
@@ -40,6 +40,16 @@               , "       :name: foo"               , "       :class: baz"]           ]+        , testGroup "ligatures" -- handling specific sequences of blocks+          [ "a list is closed by a comment before a quote" =: -- issue 4248+            bulletList [plain "bulleted"] <> blockQuote (plain "quoted") =?>+              unlines+              [ "-  bulleted"+              , ""+              , ".."+              , ""+              , "    quoted"]+          ]         , testGroup "headings"           [ "normal heading" =:               header 1 (text "foo") =?>
test/Tests/Writers/TEI.hs view
@@ -31,7 +31,7 @@           ]         , testGroup "inlines"           [-            "Emphasis"      =:  emph ("emphasized")+            "Emphasis"      =:  emph "emphasized"                             =?> "<p><hi rendition=\"simple:italic\">emphasized</hi></p>"            ,"SingleQuoted"  =:  singleQuoted (text "quoted material")                             =?> "<p><quote>quoted material</quote></p>"
test/command/3968.md view
@@ -4,6 +4,7 @@  ## Section ^D-\chapter[chapter]{Chapter}-\section[section]{Section}+\chapter[title={Chapter},reference={chapter}]++\section[title={Section},reference={section}] ```
+ test/command/4280.md view
@@ -0,0 +1,7 @@+```+% pandoc -f rst -t native+Driver +------+^D+[Header 1 ("driver",[],[]) [Str "Driver"]]+```
+ test/command/4281.md view
@@ -0,0 +1,18 @@+```+% pandoc -t native+:::: {.a}+- ::: {.b}+  text+  :::+  ::: {.c}+  text+  :::+::::+^D+[Div ("",["a"],[])+ [BulletList+  [[Div ("",["b"],[])+    [Para [Str "text"]]+   ,Div ("",["c"],[])+    [Para [Str "text"]]]]]]+```
+ test/command/4374.md view
@@ -0,0 +1,7 @@+```+% pandoc -f latex -t native+\cite{a%+}+^D+[Para [Cite [Citation {citationId = "a", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline (Format "latex") "\\cite{a%\n}"]]]+```
+ test/command/4424.md view
@@ -0,0 +1,10 @@+```+% pandoc -f latex -t native+\documentclass{article}+\usepackage[sortlocale=en_GB]{biblatex}+\begin{document}+Test+\end{document}+^D+[Para [Str "Test"]]+```
+ test/docx/custom-style-no-styles.native view
@@ -0,0 +1,4 @@+[Para [Str "This",Space,Str "is",Space,Str "some",Space,Str "text."]+,Para [Str "This",Space,Str "is",Space,Str "text",Space,Str "with",Space,Str "an",Space,Emph [Str "emphasized"],Space,Str "text",Space,Str "style.",Space,Str "And",Space,Str "this",Space,Str "is",Space,Str "text",Space,Str "with",Space,Str "a",Space,Strong [Str "strengthened"],Space,Str "text",Space,Str "style."]+,BlockQuote+ [Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "styled",Space,Str "paragraph",Space,Str "that",Space,Str "inherits",Space,Str "from",Space,Str "Block",Space,Str "Text."]]]
− test/docx/custom-style-roundtrip-start.native
@@ -1,5 +0,0 @@-[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Space,Str "of",Space,Str "custom-styles."]-,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Span ("",[],[("custom-style","Emphatic")]) [Str "emphasized"],Str ".",Space,Str "And",SoftBreak,Str "here",Space,Str "is",Space,Str "something",Space,Span ("",[],[("custom-style","Strengthened")]) [Str "strong"],Str "."]-,Div ("",[],[("custom-style","My Block Style")])- [Para [Str "One",Space,Str "paragraph",Space,Str "of",Space,Str "text."]- ,Para [Str "And",Space,Str "another",Space,Str "paragraph",Space,Str "of",Space,Span ("",[],[("custom-style","Emphatic")]) [Str "really",SoftBreak,Str "cool"],Space,Str "text."]]]
+ test/docx/custom-style-with-styles.native view
@@ -0,0 +1,7 @@+[Div ("",[],[("custom-style","FirstParagraph")])+ [Para [Str "This",Space,Str "is",Space,Str "some",Space,Str "text."]]+,Div ("",[],[("custom-style","BodyText")])+ [Para [Str "This",Space,Str "is",Space,Str "text",Space,Str "with",Space,Str "an",Space,Span ("",[],[("custom-style","Emphatic")]) [Str "emphasized"],Space,Str "text",Space,Str "style.",Space,Str "And",Space,Str "this",Space,Str "is",Space,Str "text",Space,Str "with",Space,Str "a",Space,Span ("",[],[("custom-style","Strengthened")]) [Str "strengthened"],Space,Str "text",Space,Str "style."]]+,Div ("",[],[("custom-style","MyBlockStyle")])+ [BlockQuote+  [Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "styled",Space,Str "paragraph",Space,Str "that",Space,Str "inherits",Space,Str "from",Space,Str "Block",Space,Str "Text."]]]]
+ test/docx/custom_style.native view
@@ -0,0 +1,5 @@+[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Space,Str "of",Space,Str "custom-styles."]+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Span ("",[],[("custom-style","Emphatic")]) [Str "emphasized"],Str ".",Space,Str "And",SoftBreak,Str "here",Space,Str "is",Space,Str "something",Space,Span ("",[],[("custom-style","Strengthened")]) [Str "strong"],Str "."]+,Div ("",[],[("custom-style","My Block Style")])+ [Para [Str "One",Space,Str "paragraph",Space,Str "of",Space,Str "text."]+ ,Para [Str "And",Space,Str "another",Space,Str "paragraph",Space,Str "of",Space,Span ("",[],[("custom-style","Emphatic")]) [Str "really",SoftBreak,Str "cool"],Space,Str "text."]]]
+ test/docx/golden/block_quotes.docx view

binary file changed (absent → 9778 bytes)

+ test/docx/golden/codeblock.docx view

binary file changed (absent → 9638 bytes)

+ test/docx/golden/comments.docx view

binary file changed (absent → 9960 bytes)

+ test/docx/golden/custom_style_no_reference.docx view

binary file changed (absent → 9724 bytes)

+ test/docx/golden/custom_style_reference.docx view

binary file changed (absent → 12118 bytes)

+ test/docx/golden/definition_list.docx view

binary file changed (absent → 9617 bytes)

+ test/docx/golden/headers.docx view

binary file changed (absent → 9765 bytes)

+ test/docx/golden/image.docx view

binary file changed (absent → 26452 bytes)

+ test/docx/golden/inline_code.docx view

binary file changed (absent → 9560 bytes)

+ test/docx/golden/inline_formatting.docx view

binary file changed (absent → 9737 bytes)

+ test/docx/golden/inline_images.docx view

binary file changed (absent → 26506 bytes)

binary file changed (absent → 9781 bytes)

+ test/docx/golden/links.docx view

binary file changed (absent → 9960 bytes)

+ test/docx/golden/lists.docx view

binary file changed (absent → 10031 bytes)

+ test/docx/golden/lists_continuing.docx view

binary file changed (absent → 9830 bytes)

+ test/docx/golden/lists_restarting.docx view

binary file changed (absent → 9830 bytes)

+ test/docx/golden/nested_anchors_in_header.docx view

binary file changed (absent → 9882 bytes)

+ test/docx/golden/notes.docx view

binary file changed (absent → 9731 bytes)

+ test/docx/golden/table_one_row.docx view

binary file changed (absent → 9581 bytes)

+ test/docx/golden/table_with_list_cell.docx view

binary file changed (absent → 9948 bytes)

+ test/docx/golden/tables.docx view

binary file changed (absent → 9963 bytes)

+ test/docx/golden/track_changes_deletion.docx view

binary file changed (absent → 9604 bytes)

+ test/docx/golden/track_changes_insertion.docx view

binary file changed (absent → 9587 bytes)

+ test/docx/golden/track_changes_move.docx view

binary file changed (absent → 9621 bytes)

+ test/docx/golden/unicode.docx view

binary file changed (absent → 9545 bytes)

+ test/docx/golden/verbatim_subsuper.docx view

binary file changed (absent → 9593 bytes)

+ test/docx/image_writer_test.native view
@@ -0,0 +1,8 @@+[Para [Str "No",Space,Str "width",Space,Str "given:"]+,Para [Image ("",[],[]) [Str "testimg"] ("lalune.jpg","fig:")]+,Para [Str "With",Space,Str "height",Space,Str "10cm:"]+,Para [Image ("",[],[("height","10cm")]) [Str "2testimg"] ("lalune.jpg","fig:")]+,Para [Str "With",Space,Str "width",Space,Str "6cm:"]+,Para [Image ("",[],[("width","6cm")]) [Str "3testimg"] ("lalune.jpg","fig:")]+,Header 1 ("with-height-3in-and-width-6in",[],[]) [Str "With",Space,Str "height",Space,Str "3in",Space,Str "and",Space,Str "width",Space,Str "6in:"]+,Para [Image ("",[],[("width","6in"),("height","3in")]) [Str "4testimg"] ("lalune.jpg","fig:")]]
+ test/docx/inline_images_writer_test.native view
@@ -0,0 +1,2 @@+[Para [Str "This",Space,Str "picture",Space,Image ("",[],[("width","0.8888888888888888in"),("height","0.8888888888888888in")]) [Str "This",Space,Str "one",Space,Str "is",Space,Str "green",Space,Str "and",Space,Str "looks",Space,Str "like",Space,Str "Sideshow",Space,Str "Bob."] ("lalune.jpg","First identicon"),Space,Str "is",Space,Str "an",Space,Str "identicon."]+,Para [Str "Here",Space,Str "is",Space,Link ("",[],[]) [Str "one",Space,Image ("",[],[("width","0.8888888888888888in"),("height","0.8888888888888888in")]) [Str "This",Space,Str "one",Space,Str "is",Space,Str "reddish,",Space,Str "and",Space,Str "looks",Space,Str "like",Space,Str "a",Space,Str "heart",Space,Str "that",Space,Str "has",Space,Str "leaked",Space,Str "out."] ("lalune.jpg","Second identicon"),Space,Str "that"] ("http://www.google.com",""),Space,Str "links."]]
+ test/docx/nested_sdt.docx view

binary file changed (absent → 11694 bytes)

+ test/docx/nested_sdt.native view
@@ -0,0 +1,3 @@+[Para [Str "Test",Space,Str "Paragraph1"]+,Para [Str "Test",Space,Str "Paragraph2"]+,Para [Str "Test",Space,Str "Paragraph3"]]
+ test/docx/table_variable_width.docx view

binary file changed (absent → 10006 bytes)

+ test/docx/table_variable_width.native view
@@ -0,0 +1,13 @@+[Table [] [AlignDefault,AlignDefault,AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0,0.0,0.0]+ [[]+ ,[]+ ,[Plain [Str "h3"]]+ ,[Plain [Str "h4"]]+ ,[Plain [Str "h5"]]]+ [[[Plain [Str "c11"]]+  ,[]+  ,[]]+ ,[[]+  ,[Plain [Str "c22"]]+  ,[Plain [Str "c23"]]+  ,[]]]]
+ test/lua/script-name.lua view
@@ -0,0 +1,3 @@+function Para (_)+  return pandoc.Para{pandoc.Str(PANDOC_SCRIPT_FILE)}+end
+ test/pptx/endnotes.native view
@@ -0,0 +1,2 @@+Pandoc (Meta {unMeta = fromList []})+[Para [Str "Here",Space,Str "is",Space,Str "one",Space,Str "note.",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "note."]],Space,Str "And",Space,Str "one",Space,Str "more",Space,Str "note.",Note [Para [Str "And",Space,Str "another",Space,Str "note."]]]]
+ test/pptx/endnotes.pptx view

binary file changed (absent → 26678 bytes)

+ test/pptx/endnotes_templated.pptx view

binary file changed (absent → 394003 bytes)

+ test/pptx/endnotes_toc.pptx view

binary file changed (absent → 27602 bytes)

+ test/pptx/endnotes_toc_templated.pptx view

binary file changed (absent → 394926 bytes)

+ test/pptx/images.native view
@@ -0,0 +1,5 @@+Pandoc (Meta {unMeta = fromList []})+[Para [Image ("",[],[]) [] ("lalune.jpg","")]+,Para [Image ("",[],[]) [Str "The",Space,Str "Moon"] ("lalune.jpg","fig:")]+,Header 1 ("one-more",[],[]) [Str "One",Space,Str "More"]+,Para [Image ("",[],[]) [Str "The",Space,Str "Moon"] ("lalune.jpg","fig:")]]
+ test/pptx/images.pptx view

binary file changed (absent → 44338 bytes)

+ test/pptx/images_templated.pptx view

binary file changed (absent → 411657 bytes)

+ test/pptx/inline_formatting.native view
@@ -0,0 +1,5 @@+Pandoc (Meta {unMeta = fromList []})+[Para [Str "Here",Space,Str "are",Space,Str "examples",Space,Str "of",Space,Emph [Str "italics"],Str ",",Space,Strong [Str "bold"],Str ",",Space,Str "and",Space,Strong [Emph [Str "bold",Space,Str "italics"]],Str "."]+,Para [Str "Here",Space,Str "is",Space,Strikeout [Str "strook-three"],Space,Str "strike-through",Space,Str "and",Space,SmallCaps [Str "small",Space,Str "caps"],Str "."]+,Para [Str "We",Space,Str "can",Space,Str "also",Space,Str "do",Space,Str "subscripts",Space,Str "(H",Subscript [Str "2"],Str "0)",Space,Str "and",Space,Str "super",Superscript [Str "script"],Str "."]+,RawBlock (Format "html") "<!-- Comments don't show up. -->"]
+ test/pptx/inline_formatting.pptx view

binary file changed (absent → 25842 bytes)

+ test/pptx/inline_formatting_templated.pptx view

binary file changed (absent → 393163 bytes)

+ test/pptx/lists.native view
@@ -0,0 +1,18 @@+[Header 1 ("lists",[],[]) [Str "Lists"]+,BulletList+ [[Para [Str "Bulleted",Space,Str "bulleted",Space,Str "lists."]]+ ,[Para [Str "And",Space,Str "go",Space,Str "to",Space,Str "aribtrary",Space,Str "depth."]+  ,BulletList+   [[Para [Str "Like",Space,Str "this"]+    ,BulletList+     [[Plain [Str "Or",Space,Str "this"]]]]+   ,[Para [Str "Back",Space,Str "to",Space,Str "here."]]]]]+,Header 1 ("lists-continued",[],[]) [Str "Lists",Space,Str "(continued)"]+,Para [Str "Lists",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "numbered:"]+,OrderedList (1,Decimal,Period)+ [[Para [Str "Tomatoes"]]+ ,[Para [Str "Potatoes",Space,Str "of",Space,Str "various",Space,Str "sorts"]+  ,OrderedList (1,LowerAlpha,Period)+   [[Para [Str "sweet",Space,Str "potatoes"]]+   ,[Para [Str "russet",Space,Str "potates"]]]]+ ,[Para [Str "Tornadoes,",Space,Str "for",Space,Str "the",Space,Str "rhyme."]]]]
+ test/pptx/lists.pptx view

binary file changed (absent → 26765 bytes)

+ test/pptx/lists_templated.pptx view

binary file changed (absent → 394091 bytes)

+ test/pptx/reference_depth.pptx view

binary file changed (absent → 397502 bytes)

+ test/pptx/remove_empty_slides.native view
@@ -0,0 +1,5 @@+[Para [Str "Content"]+,Para [Image ("",[],[]) [] ("lalune.jpg",""),Space,RawInline (Format "html") "<!--  -->"]+,HorizontalRule+,HorizontalRule+,Para [Str "More",Space,Str "content"]]
+ test/pptx/remove_empty_slides.pptx view

binary file changed (absent → 43784 bytes)

+ test/pptx/remove_empty_slides_templated.pptx view

binary file changed (absent → 411101 bytes)

+ test/pptx/slide_breaks.native view
@@ -0,0 +1,7 @@+Pandoc (Meta {unMeta = fromList []})+[Para [Str "Break",Space,Str "with",Space,Str "a",Space,Str "new",Space,Str "section-level",Space,Str "header"]+,Header 1 ("below-section-level",[],[]) [Str "Below",Space,Str "section-level"]+,Header 2 ("section-level",[],[]) [Str "Section-level"]+,Para [Str "Third",Space,Str "slide",Space,Str "(with",Space,Str "a",Space,Str "section-level",Space,Str "of",Space,Str "2)"]+,HorizontalRule+,Para [Str "This",Space,Str "is",Space,Str "another",Space,Str "slide."]]
+ test/pptx/slide_breaks.pptx view

binary file changed (absent → 28290 bytes)

+ test/pptx/slide_breaks_slide_level_1.pptx view

binary file changed (absent → 27461 bytes)

+ test/pptx/slide_breaks_slide_level_1_templated.pptx view

binary file changed (absent → 394785 bytes)

+ test/pptx/slide_breaks_templated.pptx view

binary file changed (absent → 395614 bytes)

+ test/pptx/slide_breaks_toc.pptx view

binary file changed (absent → 29248 bytes)

+ test/pptx/slide_breaks_toc_templated.pptx view

binary file changed (absent → 396572 bytes)

+ test/pptx/speaker_notes.native view
@@ -0,0 +1,17 @@+[Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "slide."]+,Div ("",["notes"],[])+ [Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "note."]+ ,Para [Str "Here",Space,Str "is",Space,Emph [Str "some"],Space,Strong [Str "other"],Space,Str "formatting."]]+,HorizontalRule+,Para [Str "A",Space,Str "page",Space,Str "with",Space,Str "no",Space,Str "speaker",Space,Str "notes"]+,HorizontalRule+,Div ("",["notes"],[])+ [Para [Str "The",Space,Str "first",Space,Str "note",Space,Str "div"]]+,Para [Str "A",Space,Str "page",Space,Str "with",Space,Str "two",Space,Str "notes."]+,Div ("",["notes"],[])+ [Para [Str "The",Space,Str "second",Space,Str "note",Space,Str "div"]]+,HorizontalRule+,Para [Str "Strip",Space,Str "links",Space,Str "and",Space,Str "footnotes."]+,Div ("",["notes"],[])+ [Para [Str "No",Space,Link ("",[],[]) [Str "link"] ("https://www.google.com",""),Space,Str "here."]+ ,Para [Str "No",Space,Str "note",Space,Str "here.",Note [Para [Str "You\8217ll",Space,Str "never",Space,Str "read",Space,Str "this"]]]]]
+ test/pptx/speaker_notes.pptx view

binary file changed (absent → 35156 bytes)

+ test/pptx/speaker_notes_templated.pptx view

binary file changed (absent → 402475 bytes)

+ test/pptx/tables.native view
@@ -0,0 +1,35 @@+[Header 2 ("a-table-with-a-caption",[],[]) [Str "A",Space,Str "Table,",Space,Str "with",Space,Str "a",Space,Str "caption"]+,Table [Str "Demonstration",Space,Str "of",Space,Str "simple",Space,Str "table",Space,Str "syntax,",Space,Str "with",Space,Str "alignment"] [AlignRight,AlignLeft,AlignCenter,AlignDefault] [0.0,0.0,0.0,0.0]+ [[Plain [Str "Right"]]+ ,[Plain [Str "Left"]]+ ,[Plain [Str "Center"]]+ ,[Plain [Str "Default"]]]+ [[[Plain [Str "12"]]+  ,[Plain [Str "12"]]+  ,[Plain [Str "12"]]+  ,[Plain [Str "12"]]]+ ,[[Plain [Str "123"]]+  ,[Plain [Str "123"]]+  ,[Plain [Str "123"]]+  ,[Plain [Str "123"]]]+ ,[[Plain [Str "1"]]+  ,[Plain [Str "1"]]+  ,[Plain [Str "1"]]+  ,[Plain [Str "1"]]]]+,Table [] [AlignRight,AlignLeft,AlignCenter,AlignDefault] [0.0,0.0,0.0,0.0]+ [[Plain [Str "Right"]]+ ,[Plain [Str "Left"]]+ ,[Plain [Str "Center"]]+ ,[Plain [Str "Default"]]]+ [[[Plain [Str "12"]]+  ,[Plain [Str "12"]]+  ,[Plain [Str "12"]]+  ,[Plain [Str "12"]]]+ ,[[Plain [Str "123"]]+  ,[Plain [Str "123"]]+  ,[Plain [Str "123"]]+  ,[Plain [Str "123"]]]+ ,[[Plain [Str "1"]]+  ,[Plain [Str "1"]]+  ,[Plain [Str "1"]]+  ,[Plain [Str "1"]]]]]
+ test/pptx/tables.pptx view

binary file changed (absent → 27282 bytes)

+ test/pptx/tables_templated.pptx view

binary file changed (absent → 394610 bytes)

+ test/pptx/two_column.native view
@@ -0,0 +1,9 @@+Pandoc (Meta {unMeta = fromList []})+[Header 1 ("two-column-layout",[],[]) [Str "Two-Column",Space,Str "Layout"]+,Div ("",["columns"],[])+ [Div ("",["column"],[])+  [Para [Str "One",Space,Str "paragraph."]+  ,Para [Str "Another",Space,Str "paragraph."]]+ ,Div ("",["column"],[])+  [Para [Str "Second",Space,Str "column",Space,Str "paragraph."]+  ,Para [Str "Another",Space,Str "second",Space,Str "paragraph."]]]]
+ test/pptx/two_column.pptx view

binary file changed (absent → 25785 bytes)

+ test/pptx/two_column_templated.pptx view

binary file changed (absent → 393106 bytes)

test/tables.context view
@@ -1,6 +1,6 @@ Simple table with caption: -\startplacetable[caption={Demonstration of simple table syntax.}]+\startplacetable[title={Demonstration of simple table syntax.}] \startxtable \startxtablehead[head] \startxrow@@ -74,7 +74,7 @@  Simple table indented two spaces: -\startplacetable[caption={Demonstration of simple table syntax.}]+\startplacetable[title={Demonstration of simple table syntax.}] \startxtable \startxtablehead[head] \startxrow@@ -111,7 +111,7 @@  Multiline table with caption: -\startplacetable[caption={Here's the caption. It may span multiple lines.}]+\startplacetable[title={Here's the caption. It may span multiple lines.}] \startxtable \startxtablehead[head] \startxrow
test/writer.asciidoc view
@@ -8,40 +8,31 @@  ''''' -[[headers]] Headers ------- -[[level-2-with-an-embedded-link]] Level 2 with an link:/url[embedded link] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -[[level-3-with-emphasis]] Level 3 with _emphasis_ ^^^^^^^^^^^^^^^^^^^^^^^ -[[level-4]] Level 4 +++++++ -[[level-5]] Level 5 -[[level-1]] Level 1 ------- -[[level-2-with-emphasis]] Level 2 with _emphasis_ ~~~~~~~~~~~~~~~~~~~~~~~ -[[level-3]] Level 3 ^^^^^^^  with no blank line -[[level-2]] Level 2 ~~~~~~~ @@ -49,7 +40,6 @@  ''''' -[[paragraphs]] Paragraphs ---------- @@ -66,7 +56,6 @@  ''''' -[[block-quotes]] Block Quotes ------------ @@ -110,7 +99,6 @@  ''''' -[[code-blocks]] Code Blocks ----------- @@ -136,11 +124,9 @@  ''''' -[[lists]] Lists ----- -[[unordered]] Unordered ~~~~~~~~~ @@ -180,7 +166,6 @@ * Minus 2 * Minus 3 -[[ordered]] Ordered ~~~~~~~ @@ -216,7 +201,6 @@ 2.  Item 2. 3.  Item 3. -[[nested]] Nested ~~~~~~ @@ -242,7 +226,6 @@ * Foe 3.  Third -[[tabs-and-spaces]] Tabs and spaces ~~~~~~~~~~~~~~~ @@ -251,7 +234,6 @@ ** this is an example list item indented with tabs ** this is an example list item indented with spaces -[[fancy-list-markers]] Fancy list markers ~~~~~~~~~~~~~~~~~~ @@ -285,7 +267,6 @@  ''''' -[[definition-lists]] Definition Lists ---------------- @@ -367,7 +348,6 @@   1.  sublist   2.  sublist -[[html-blocks]] HTML Blocks ----------- @@ -431,7 +411,6 @@  ''''' -[[inline-markup]] Inline Markup ------------- @@ -462,7 +441,6 @@  ''''' -[[smart-quotes-ellipses-dashes]] Smart quotes, ellipses, dashes ------------------------------ @@ -485,7 +463,6 @@  ''''' -[[latex]] LaTeX ----- @@ -512,7 +489,6 @@  ''''' -[[special-characters]] Special Characters ------------------ @@ -568,11 +544,9 @@  ''''' -[[links]] Links ----- -[[explicit]] Explicit ~~~~~~~~ @@ -594,7 +568,6 @@  link:[Empty]. -[[reference]] Reference ~~~~~~~~~ @@ -620,7 +593,6 @@  Foo link:/url/[biz]. -[[with-ampersands]] With ampersands ~~~~~~~~~~~~~~~ @@ -632,7 +604,6 @@  Here’s an link:/script?foo=1&bar=2[inline link in pointy braces]. -[[autolinks]] Autolinks ~~~~~~~~~ @@ -656,7 +627,6 @@  ''''' -[[images]] Images ------ @@ -668,7 +638,6 @@  ''''' -[[footnotes]] Footnotes --------- 
test/writer.context view
@@ -72,32 +72,34 @@  \thinrule -\section[headers]{Headers}+\section[title={Headers},reference={headers}] -\subsection[level-2-with-an-embedded-link]{Level 2 with an-\useURL[url1][/url][][embedded link]\from[url1]}+\subsection[title={Level 2 with an \useURL[url1][/url][][embedded+link]\from[url1]},reference={level-2-with-an-embedded-link}] -\subsubsection[level-3-with-emphasis]{Level 3 with {\em emphasis}}+\subsubsection[title={Level 3 with+{\em emphasis}},reference={level-3-with-emphasis}] -\subsubsubsection[level-4]{Level 4}+\subsubsubsection[title={Level 4},reference={level-4}] -\subsubsubsubsection[level-5]{Level 5}+\subsubsubsubsection[title={Level 5},reference={level-5}] -\section[level-1]{Level 1}+\section[title={Level 1},reference={level-1}] -\subsection[level-2-with-emphasis]{Level 2 with {\em emphasis}}+\subsection[title={Level 2 with+{\em emphasis}},reference={level-2-with-emphasis}] -\subsubsection[level-3]{Level 3}+\subsubsection[title={Level 3},reference={level-3}]  with no blank line -\subsection[level-2]{Level 2}+\subsection[title={Level 2},reference={level-2}]  with no blank line  \thinrule -\section[paragraphs]{Paragraphs}+\section[title={Paragraphs},reference={paragraphs}]  Here's a regular paragraph. @@ -112,7 +114,7 @@  \thinrule -\section[block-quotes]{Block Quotes}+\section[title={Block Quotes},reference={block-quotes}]  E-mail style: @@ -155,7 +157,7 @@  \thinrule -\section[code-blocks]{Code Blocks}+\section[title={Code Blocks},reference={code-blocks}]  Code: @@ -179,9 +181,9 @@  \thinrule -\section[lists]{Lists}+\section[title={Lists},reference={lists}] -\subsection[unordered]{Unordered}+\subsection[title={Unordered},reference={unordered}]  Asterisks tight: @@ -249,7 +251,7 @@   Minus 3 \stopitemize -\subsection[ordered]{Ordered}+\subsection[title={Ordered},reference={ordered}]  Tight: @@ -308,7 +310,7 @@   Item 3. \stopitemize -\subsection[nested]{Nested}+\subsection[title={Nested},reference={nested}]  \startitemize[packed] \item@@ -362,7 +364,7 @@   Third \stopitemize -\subsection[tabs-and-spaces]{Tabs and spaces}+\subsection[title={Tabs and spaces},reference={tabs-and-spaces}]  \startitemize \item@@ -378,7 +380,7 @@   \stopitemize \stopitemize -\subsection[fancy-list-markers]{Fancy list markers}+\subsection[title={Fancy list markers},reference={fancy-list-markers}]  \startitemize[n][start=2,left=(,stopper=),width=2.0em] \item@@ -442,7 +444,7 @@  \thinrule -\section[definition-lists]{Definition Lists}+\section[title={Definition Lists},reference={definition-lists}]  Tight using spaces: @@ -553,7 +555,7 @@   \stopitemize \stopdescription -\section[html-blocks]{HTML Blocks}+\section[title={HTML Blocks},reference={html-blocks}]  Simple block on one line: @@ -613,7 +615,7 @@  \thinrule -\section[inline-markup]{Inline Markup}+\section[title={Inline Markup},reference={inline-markup}]  This is {\em emphasized}, and so {\em is this}. @@ -642,7 +644,8 @@  \thinrule -\section[smart-quotes-ellipses-dashes]{Smart quotes, ellipses, dashes}+\section[title={Smart quotes, ellipses,+dashes},reference={smart-quotes-ellipses-dashes}]  \quotation{Hello,} said the spider. \quotation{\quote{Shelob} is my name.} @@ -665,7 +668,7 @@  \thinrule -\section[latex]{LaTeX}+\section[title={LaTeX},reference={latex}]  \startitemize[packed] \item@@ -705,7 +708,7 @@  \thinrule -\section[special-characters]{Special Characters}+\section[title={Special Characters},reference={special-characters}]  Here is some unicode: @@ -766,9 +769,9 @@  \thinrule -\section[links]{Links}+\section[title={Links},reference={links}] -\subsection[explicit]{Explicit}+\subsection[title={Explicit},reference={explicit}]  Just a \useURL[url4][/url/][][URL]\from[url4]. @@ -788,7 +791,7 @@  \useURL[url12][][][Empty]\from[url12]. -\subsection[reference]{Reference}+\subsection[title={Reference},reference={reference}]  Foo \useURL[url13][/url/][][bar]\from[url13]. @@ -812,7 +815,7 @@  Foo \useURL[url20][/url/][][biz]\from[url20]. -\subsection[with-ampersands]{With ampersands}+\subsection[title={With ampersands},reference={with-ampersands}]  Here's a \useURL[url21][http://example.com/?foo=1&bar=2][][link with an ampersand in the URL]\from[url21].@@ -825,7 +828,7 @@ Here's an \useURL[url24][/script?foo=1&bar=2][][inline link in pointy braces]\from[url24]. -\subsection[autolinks]{Autolinks}+\subsection[title={Autolinks},reference={autolinks}]  With an ampersand: \useURL[url25][http://example.com/?foo=1&bar=2]\from[url25] @@ -853,7 +856,7 @@  \thinrule -\section[images]{Images}+\section[title={Images},reference={images}]  From \quotation{Voyage dans la Lune} by Georges Melies (1902): @@ -863,7 +866,7 @@  \thinrule -\section[footnotes]{Footnotes}+\section[title={Footnotes},reference={footnotes}]  Here is a footnote reference,\footnote{Here is the footnote. It can go   anywhere after the footnote reference. It need not be placed at the end of
test/writer.muse view
@@ -287,24 +287,21 @@ Multiple definitions, tight:   apple :: red fruit-          computer+       :: computer  orange :: orange fruit-           bank+        :: bank  Multiple definitions, loose:   apple :: red fruit--          computer+       :: computer  orange :: orange fruit--           bank+        :: bank  Blank line after term, indented marker, alternate markers:   apple :: red fruit--          computer+       :: computer  orange :: orange fruit             1. sublist@@ -495,16 +492,16 @@  * Smart quotes, ellipses, dashes -"Hello," said the spider. "'Shelob' is my name."+“Hello,” said the spider. “‘Shelob’ is my name.” -'A', 'B', and 'C' are letters.+‘A’, ‘B’, and ‘C’ are letters. -'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.'+‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’ -'He said, "I want to go."' Were you alive in the 70’s?+‘He said, “I want to go.”’ Were you alive in the 70’s? -Here is some quoted '<code>code</code>' and a-"[[http://example.com/?foo=1&bar=2][quoted link]]".+Here is some quoted ‘<code>code</code>’ and a+“[[http://example.com/?foo=1&bar=2][quoted link]]”.  Some dashes: one—two — three—four — five. @@ -517,20 +514,20 @@ * LaTeX   - <literal style="tex">\cite[22-23]{smith.1899}</literal>- - 2 + 2 <verbatim>=</verbatim> 4+ - <verbatim>2 + 2 = 4</verbatim>  - <em>x</em> ∈ <em>y</em>  - <em>α</em> ∧ <em>ω</em>  - 223  - <em>p</em>-Tree  - Here’s some display math:-   <verse><verbatim>$$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$</verbatim></verse>+   <verbatim>$$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$</verbatim>  - Here’s one that has a line break in it:    <em>α</em> + <em>ω</em> × <em>x</em><sup>2</sup>.  These shouldn’t be math:   - To get the famous equation, write <code>$e = mc^2$</code>.- - $22,000 is a <em>lot</em> of money. So is $34,000. (It worked if "lot" is+ - $22,000 is a <em>lot</em> of money. So is $34,000. (It worked if “lot” is    emphasized.)  - Shoes ($20) and socks ($5).  - Escaped <code>$</code>: $73 <em>this should be emphasized</em> 23$.@@ -682,7 +679,7 @@  * Images -From "Voyage dans la Lune" by Georges Melies (1902):+From “Voyage dans la Lune” by Georges Melies (1902):  [[lalune.jpg][Voyage dans la Lune]] 
test/writer.rst view
@@ -6,10 +6,6 @@ :Author: Anonymous :Date:   July 17, 2006 -.. role:: math(raw)-   :format: html latex-..- .. role:: raw-latex(raw)    :format: latex ..
test/writer.tei view
@@ -20,15 +20,15 @@ <p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p> <milestone unit="undefined" type="separator" rendition="line" />-<div type="level1" id="headers">+<div type="level1" xml:id="headers">   <head>Headers</head>-  <div type="level2" id="level-2-with-an-embedded-link">+  <div type="level2" xml:id="level-2-with-an-embedded-link">     <head>Level 2 with an <ref target="/url">embedded link</ref></head>-    <div type="level3" id="level-3-with-emphasis">+    <div type="level3" xml:id="level-3-with-emphasis">       <head>Level 3 with <hi rendition="simple:italic">emphasis</hi></head>-      <div type="level4" id="level-4">+      <div type="level4" xml:id="level-4">         <head>Level 4</head>-        <div type="level5" id="level-5">+        <div type="level5" xml:id="level-5">           <head>Level 5</head>           <p></p>         </div>@@ -36,22 +36,22 @@     </div>   </div> </div>-<div type="level1" id="level-1">+<div type="level1" xml:id="level-1">   <head>Level 1</head>-  <div type="level2" id="level-2-with-emphasis">+  <div type="level2" xml:id="level-2-with-emphasis">     <head>Level 2 with <hi rendition="simple:italic">emphasis</hi></head>-    <div type="level3" id="level-3">+    <div type="level3" xml:id="level-3">       <head>Level 3</head>       <p>with no blank line</p>     </div>   </div>-  <div type="level2" id="level-2">+  <div type="level2" xml:id="level-2">     <head>Level 2</head>     <p>with no blank line</p>     <milestone unit="undefined" type="separator" rendition="line" />   </div> </div>-<div type="level1" id="paragraphs">+<div type="level1" xml:id="paragraphs">   <head>Paragraphs</head>   <p>Here’s a regular paragraph.</p>   <p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list@@ -61,7 +61,7 @@   <p>There should be a hard line break<lb />here.</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="block-quotes">+<div type="level1" xml:id="block-quotes">   <head>Block Quotes</head>   <p>E-mail style:</p>   <quote>@@ -95,7 +95,7 @@   <p>And a following paragraph.</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="code-blocks">+<div type="level1" xml:id="code-blocks">   <head>Code Blocks</head>   <p>Code:</p>   <ab type='codeblock '>@@ -115,9 +115,9 @@ </ab>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="lists">+<div type="level1" xml:id="lists">   <head>Lists</head>-  <div type="level2" id="unordered">+  <div type="level2" xml:id="unordered">     <head>Unordered</head>     <p>Asterisks tight:</p>     <list type="unordered">@@ -192,7 +192,7 @@       </item>     </list>   </div>-  <div type="level2" id="ordered">+  <div type="level2" xml:id="ordered">     <head>Ordered</head>     <p>Tight:</p>     <list type="ordered:arabic">@@ -257,7 +257,7 @@       </item>     </list>   </div>-  <div type="level2" id="nested">+  <div type="level2" xml:id="nested">     <head>Nested</head>     <list type="unordered">       <item>@@ -321,7 +321,7 @@       </item>     </list>   </div>-  <div type="level2" id="tabs-and-spaces">+  <div type="level2" xml:id="tabs-and-spaces">     <head>Tabs and spaces</head>     <list type="unordered">       <item>@@ -340,7 +340,7 @@       </item>     </list>   </div>-  <div type="level2" id="fancy-list-markers">+  <div type="level2" xml:id="fancy-list-markers">     <head>Fancy list markers</head>     <list type="ordered:arabic">       <item n="2">@@ -408,7 +408,7 @@     <milestone unit="undefined" type="separator" rendition="line" />   </div> </div>-<div type="level1" id="definition-lists">+<div type="level1" xml:id="definition-lists">   <head>Definition Lists</head>   <p>Tight using spaces:</p>   <list type="definition">@@ -554,7 +554,7 @@     </item>   </list> </div>-<div type="level1" id="html-blocks">+<div type="level1" xml:id="html-blocks">   <head>HTML Blocks</head>   <p>Simple block on one line:</p>   <p>foo</p>@@ -592,7 +592,7 @@   <p>Hr’s:</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="inline-markup">+<div type="level1" xml:id="inline-markup">   <head>Inline Markup</head>   <p>This is <hi rendition="simple:italic">emphasized</hi>, and so   <hi rendition="simple:italic">is this</hi>.</p>@@ -625,7 +625,7 @@   spaces: a^b c^d, a~b c~d.</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="smart-quotes-ellipses-dashes">+<div type="level1" xml:id="smart-quotes-ellipses-dashes">   <head>Smart quotes, ellipses, dashes</head>   <p><quote>Hello,</quote> said the spider. <quote><quote>Shelob</quote> is my   name.</quote></p>@@ -642,7 +642,7 @@   <p>Ellipses…and…and….</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="latex">+<div type="level1" xml:id="latex">   <head>LaTeX</head>   <list type="unordered">     <item>@@ -694,7 +694,7 @@   <p>Here’s a LaTeX table:</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="special-characters">+<div type="level1" xml:id="special-characters">   <head>Special Characters</head>   <p>Here is some unicode:</p>   <list type="unordered">@@ -737,9 +737,9 @@   <p>Minus: -</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="links">+<div type="level1" xml:id="links">   <head>Links</head>-  <div type="level2" id="explicit">+  <div type="level2" xml:id="explicit">     <head>Explicit</head>     <p>Just a <ref target="/url/">URL</ref>.</p>     <p><ref target="/url/">URL and title</ref>.</p>@@ -751,7 +751,7 @@     <p>Email link (nobody@nowhere.net)</p>     <p><ref target="">Empty</ref>.</p>   </div>-  <div type="level2" id="reference">+  <div type="level2" xml:id="reference">     <head>Reference</head>     <p>Foo <ref target="/url/">bar</ref>.</p>     <p>With <ref target="/url/">embedded [brackets]</ref>.</p>@@ -766,7 +766,7 @@     <p>Foo <ref target="/url/">bar</ref>.</p>     <p>Foo <ref target="/url/">biz</ref>.</p>   </div>-  <div type="level2" id="with-ampersands">+  <div type="level2" xml:id="with-ampersands">     <head>With ampersands</head>     <p>Here’s a <ref target="http://example.com/?foo=1&amp;bar=2">link with an     ampersand in the URL</ref>.</p>@@ -776,7 +776,7 @@     <p>Here’s an <ref target="/script?foo=1&amp;bar=2">inline link in pointy     braces</ref>.</p>   </div>-  <div type="level2" id="autolinks">+  <div type="level2" xml:id="autolinks">     <head>Autolinks</head>     <p>With an ampersand:     <ref target="http://example.com/?foo=1&amp;bar=2">http://example.com/?foo=1&amp;bar=2</ref></p>@@ -804,7 +804,7 @@     <milestone unit="undefined" type="separator" rendition="line" />   </div> </div>-<div type="level1" id="images">+<div type="level1" xml:id="images">   <head>Images</head>   <p>From <quote>Voyage dans la Lune</quote> by Georges Melies (1902):</p>   <p><figure>@@ -818,7 +818,7 @@   </figure> icon.</p>   <milestone unit="undefined" type="separator" rendition="line" /> </div>-<div type="level1" id="footnotes">+<div type="level1" xml:id="footnotes">   <head>Footnotes</head>   <p>Here is a footnote reference,<note>     <p>Here is the footnote. It can go anywhere after the footnote reference.
test/writers-lang-and-dir.context view
@@ -57,7 +57,7 @@  \starttext -\section[empty-divs-and-spans]{Empty Divs and Spans}+\section[title={Empty Divs and Spans},reference={empty-divs-and-spans}]  Some text and @@ -67,7 +67,7 @@  Next paragraph with a span and a word-thatincludesaspanright? -\section[directionality]{Directionality}+\section[title={Directionality},reference={directionality}]  Some text and @@ -86,7 +86,7 @@ Next paragraph with a {\righttoleft rtl span} and a word-that-includesa{\lefttoright ltrspan}right? -\section[languages]{Languages}+\section[title={Languages},reference={languages}]  Some text and @@ -102,7 +102,7 @@  Some \start\language[es]Spanish text\stop . -\section[combined]{Combined}+\section[title={Combined},reference={combined}]  Some text and