pandoc 2.7.2 → 2.7.3
raw patch · 125 files changed
+4310/−1664 lines, 125 filesdep +hslua-module-systemdep +tasty-luadep ~cmark-gfmdep ~skylighting
Dependencies added: hslua-module-system, tasty-lua
Dependency ranges changed: cmark-gfm, skylighting
Files
- AUTHORS.md +7/−0
- MANUAL.txt +35/−9
- README.md +3/−0
- changelog +323/−0
- data/epub.css +5/−0
- data/jats.csl +2/−4
- data/pandoc.lua +5/−1
- data/templates/default.epub2 +0/−9
- data/templates/default.epub3 +1/−10
- data/templates/default.jats +6/−14
- data/templates/default.jira +9/−0
- data/templates/default.latex +7/−0
- data/templates/default.revealjs +1/−1
- man/pandoc.1 +71/−14
- pandoc.cabal +21/−8
- src/Text/Pandoc/App.hs +4/−4
- src/Text/Pandoc/App/OutputSettings.hs +5/−0
- src/Text/Pandoc/Asciify.hs +1/−0
- src/Text/Pandoc/Class.hs +2/−2
- src/Text/Pandoc/Extensions.hs +1/−0
- src/Text/Pandoc/Logging.hs +12/−0
- src/Text/Pandoc/Lua/Global.hs +2/−3
- src/Text/Pandoc/Lua/Marshaling.hs +1/−0
- src/Text/Pandoc/Lua/Marshaling/MediaBag.hs +75/−0
- src/Text/Pandoc/Lua/Marshaling/Version.hs +154/−0
- src/Text/Pandoc/Lua/Module/MediaBag.hs +20/−2
- src/Text/Pandoc/Lua/Module/System.hs +34/−0
- src/Text/Pandoc/Lua/Module/Types.hs +28/−0
- src/Text/Pandoc/Lua/Module/Utils.hs +2/−0
- src/Text/Pandoc/Lua/Packages.hs +4/−0
- src/Text/Pandoc/MIME.hs +15/−4
- src/Text/Pandoc/MediaBag.hs +15/−0
- src/Text/Pandoc/PDF.hs +18/−9
- src/Text/Pandoc/Readers/DocBook.hs +37/−28
- src/Text/Pandoc/Readers/Docx.hs +11/−1
- src/Text/Pandoc/Readers/Docx/Parse.hs +8/−3
- src/Text/Pandoc/Readers/FB2.hs +109/−41
- src/Text/Pandoc/Readers/HTML.hs +44/−38
- src/Text/Pandoc/Readers/LaTeX.hs +29/−13
- src/Text/Pandoc/Readers/Markdown.hs +7/−4
- src/Text/Pandoc/Readers/MediaWiki.hs +2/−2
- src/Text/Pandoc/Readers/Muse.hs +4/−5
- src/Text/Pandoc/Readers/Org/DocumentTree.hs +4/−2
- src/Text/Pandoc/Readers/Org/ExportSettings.hs +13/−3
- src/Text/Pandoc/Readers/Org/Inlines.hs +1/−1
- src/Text/Pandoc/Readers/Org/Meta.hs +1/−1
- src/Text/Pandoc/Shared.hs +15/−0
- src/Text/Pandoc/Writers.hs +3/−0
- src/Text/Pandoc/Writers/AsciiDoc.hs +16/−6
- src/Text/Pandoc/Writers/CommonMark.hs +4/−14
- src/Text/Pandoc/Writers/EPUB.hs +20/−16
- src/Text/Pandoc/Writers/FB2.hs +27/−29
- src/Text/Pandoc/Writers/HTML.hs +37/−33
- src/Text/Pandoc/Writers/JATS.hs +100/−18
- src/Text/Pandoc/Writers/Jira.hs +322/−0
- src/Text/Pandoc/Writers/LaTeX.hs +40/−25
- src/Text/Pandoc/Writers/Markdown.hs +34/−27
- src/Text/Pandoc/Writers/Muse.hs +6/−15
- src/Text/Pandoc/Writers/OpenDocument.hs +11/−2
- src/Text/Pandoc/Writers/Org.hs +1/−3
- src/Text/Pandoc/Writers/RST.hs +3/−0
- src/Text/Pandoc/Writers/Shared.hs +3/−0
- src/Text/Pandoc/Writers/Textile.hs +1/−1
- stack.yaml +9/−7
- test/Tests/Lua.hs +19/−33
- test/Tests/Lua/Module.hs +33/−0
- test/Tests/Old.hs +3/−0
- test/Tests/Readers/FB2.hs +1/−0
- test/Tests/Readers/Muse.hs +6/−0
- test/Tests/Readers/Org/Block/Header.hs +31/−0
- test/Tests/Readers/Org/Directive.hs +18/−0
- test/Tests/Readers/Org/Inline.hs +7/−3
- test/Tests/Writers/JATS.hs +1/−3
- test/Tests/Writers/LaTeX.hs +1/−1
- test/Tests/Writers/Muse.hs +7/−6
- test/command/2662.md +1/−1
- test/command/3450.md +1/−1
- test/command/3577.md +3/−3
- test/command/4012.md +1/−1
- test/command/4235.md +1/−1
- test/command/4677.md +1/−1
- test/command/5121.md +1/−1
- test/command/5178.md +6/−6
- test/command/5420.md +6/−0
- test/command/5439.md +6/−0
- test/command/5446.md +6/−0
- test/command/5476.md +12/−0
- test/command/5495.md +18/−0
- test/command/5519.md +14/−0
- test/command/5529.md +10/−0
- test/command/5540.md +8/−0
- test/command/5543.md +8/−0
- test/command/5549.md +9/−0
- test/command/5565.md +6/−0
- test/command/5566.md +6/−0
- test/command/5574.md +8/−0
- test/command/html-trim-definition-list-terms.md +17/−0
- test/command/video-audio.md +19/−0
- test/epub/wasteland.native +890/−893
- test/fb2/basic.fb2 +1/−3
- test/fb2/reader/notes.fb2 +19/−0
- test/fb2/reader/notes.native +4/−0
- test/html-reader.native +1/−1
- test/lhs-test.html +16/−14
- test/lhs-test.html+lhs +16/−14
- test/lua/module/pandoc-mediabag.lua +72/−0
- test/lua/module/pandoc-types.lua +112/−0
- test/lua/module/pandoc-utils.lua +96/−0
- test/lua/module/pandoc.lua +136/−0
- test/lua/test-pandoc-utils.lua +0/−138
- test/tables.jira +44/−0
- test/tables.opendocument +6/−6
- test/tables.xwiki +46/−0
- test/test-pandoc.hs +5/−1
- test/writer.asciidoc +6/−6
- test/writer.fb2 +4/−14
- test/writer.html4 +6/−6
- test/writer.html5 +6/−6
- test/writer.jats +58/−41
- test/writer.jira +630/−0
- test/writer.opendocument +1/−1
- test/writer.org +20/−20
- test/writer.textile +7/−7
- test/writers-lang-and-dir.latex +1/−0
- trypandoc/index.html +1/−0
AUTHORS.md view
@@ -45,6 +45,7 @@ - Craig S. Bosma - Damien Clochard - Daniel Bergey+- Daniel Maslowski - Daniel T. Staal - Daniele D'Orazio - David A Roberts@@ -57,6 +58,7 @@ - Emily Eisenberg - Eric Kow - Eric Seidel+- Eric Schrijver - Étienne Bersac - Felix Yan - Florian Eitel@@ -129,6 +131,7 @@ - Mathias Schenner - Mathias Walter - Mathieu Duponchelle+- Matthew Doty - Matthew Eddey - Matthew Pickering - Matthias C. M. Troffaes@@ -177,6 +180,7 @@ - Sergey Astanin - Shahbaz Youssefi - Shaun Attfield+- Shim Myeongseob - Sidarth Kapur - Sidharth Kapur - Simon Hengel@@ -201,14 +205,17 @@ - Wandmalfarbe - Waldir Pimenta - Wikiwide+- Winnie Hellmann - Xavier Olive - Yan Pashkovsky - Yoan Blanc - Yuchen Pei - bucklereed - bumper314+- chinapedia - csforste - d-dorazio+- ebiim - iandol - infinity0x - kaizshang91
MANUAL.txt view
@@ -1,6 +1,6 @@ % Pandoc User's Guide % John MacFarlane-% April 5, 2019+% June 11, 2019 Synopsis ========@@ -300,6 +300,7 @@ - `icml` ([InDesign ICML]) - `ipynb` ([Jupyter notebook]) - `jats` ([JATS] XML)+ - `jira` ([Jira] wiki markup) - `json` (JSON version of native AST) - `latex` ([LaTeX]) - `man` ([roff man])@@ -442,6 +443,7 @@ [Rich Text Format]: http://en.wikipedia.org/wiki/Rich_Text_Format [DocBook]: http://docbook.org [JATS]: https://jats.nlm.nih.gov+[Jira]: https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all [txt2tags]: http://txt2tags.org [EPUB]: http://idpf.org/epub [OPML]: http://dev.opml.org/spec2.html@@ -751,6 +753,12 @@ unless `-s/--standalone` is used, and it has no effect on `man`, `docbook4`, `docbook5`, or `jats` output. + Note that if you are producing a PDF via `ms`, the table+ of contents will appear at the beginning of the+ document, before the title. If you would prefer it to+ be at the end of the document, use the option+ `--pdf-engine-opt=--no-toc-relocation`.+ `--toc-depth=`*NUMBER* : Specify the number of section levels to include in the table@@ -1397,6 +1405,12 @@ - Peter Abelard ... + Note that if you just want to set PDF or HTML metadata, without+ including a title block in the document itself, you can+ set the `title-meta`, `author-meta`, and `date-meta`+ variables. (By default these are set automatically, based+ on `title`, `author`, and `date`.)+ `subtitle` : document subtitle, included in HTML, EPUB, LaTeX, ConTeXt, and docx documents@@ -1905,6 +1919,11 @@ Similarly, `outputfile` can be `-` if output goes to the terminal. + If you need absolute paths, use e.g. `$curdir$/$sourcefile$`.++`curdir`+: working directory from which pandoc is run.+ `toc` : non-null value if `--toc/--table-of-contents` was specified @@ -2418,7 +2437,7 @@ attributes, writers generally don't use all of this information. Identifiers, classes, and key/value attributes are used in HTML and HTML-based formats such as EPUB and slidy. Identifiers are used for labels and link anchors in the-LaTeX, ConTeXt, Textile, and AsciiDoc writers.+LaTeX, ConTeXt, Textile, Jira markup, and AsciiDoc writers. Headings with the class `unnumbered` will not be numbered, even if `--number-sections` is specified. A single hyphen (`-`) in an attribute@@ -3575,7 +3594,7 @@ Texinfo ~ It will be rendered inside a `@math` command. -roff man+roff man, Jira markup ~ It will be rendered verbatim without `$`'s. MediaWiki, DokuWiki@@ -3773,7 +3792,7 @@ $\tuple{a, b, c}$ Note that LaTeX macros will not be applied if they occur-inside inside a raw span or block marked with the+inside a raw span or block marked with the [`raw_attribute` extension](#extension-raw_attribute). When `latex_macros` is disabled, the raw LaTeX and math will@@ -4933,17 +4952,24 @@ acknowledgments frontmatter copyright-page frontmatter dedication frontmatter+credits frontmatter+keywords frontmatter+imprint frontmatter+contributors frontmatter+other-credits frontmatter+errata frontmatter+revision-history frontmatter+titlepage frontmatter+halftitlepage frontmatter+seriespage frontmatter foreword frontmatter-halftitle, frontmatter-introduction frontmatter preface frontmatter seriespage frontmatter titlepage frontmatter-afterword backmatter appendix backmatter colophon backmatter-conclusion backmatter-epigraph backmatter+bibliography backmatter+index backmatter [epub-type]: http://www.idpf.org/epub/31/spec/epub-contentdocs.html#sec-epub-type-attribute
README.md view
@@ -111,6 +111,9 @@ - `ipynb` ([Jupyter notebook](https://nbformat.readthedocs.io/en/latest/)) - `jats` ([JATS](https://jats.nlm.nih.gov) XML)+ - `jira`+ ([Jira](https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all)+ wiki markup) - `json` (JSON version of native AST) - `latex` ([LaTeX](http://latex-project.org)) - `man` ([roff
changelog view
@@ -1,3 +1,326 @@+pandoc (2.7.3)++ * Add `jira` (Atlassian's Jira wiki markup) as output format (#2497,+ Albert Krewinkel).++ * Add `tex_math_dollars` to `multimarkdownExtensions` (#5512).+ This form is now supported in multimarkdown,+ in addition to `tex_math_double_backslash`.++ * Fix `--self-contained` so it works when output format has extensions.+ Previously if you used `--self-contained` with `html-smart` or+ `html+smart`, it wouldn't work.++ * Add template variable `curdir` with working directory+ from which pandoc is run (#5464).++ * Markdown reader: don't create implicit reference for empty header+ (#5549).++ * Muse reader: allow images inside link descriptions (Alexander Krotov).++ * HTML reader: epub related fixes.++ + With epub extensions, check for `epub:type` in addition to `type`.+ + Fix problem with noteref parsing which caused block-level+ content to be eaten with the noteref.+ + Rename `pAnyTag` to `pAny`.+ + Refactor note resolution.+ + Trim definition list terms (Alexander Krotov).++ * LaTeX reader:++ + Add braces when resolving `\DeclareMathOperator`+ (#5441). These seem to be needed for xelatex but not pdflatex.+ + Allow newlines in `\mintinline`.+ + Pass through unknown listings language as class (#5540).+ Previously if the language was not in the list of languages supported+ by listings, it would not be added as a class, so highlighting+ would not be triggered.+ + `rawLaTeXInline`: Include trailing `{}`s in raw latex commands (#5439).+ This change affects the markdown reader and other readers that allow raw+ LaTeX. Previously, trailing `{}` would be included for unknown+ commands, but not for known commands. However, they are sometimes used+ to avoid a trailing space after the command. The chances that a `{}`+ after a LaTeX command is not part of the command are very small.++ * MediaWiki reader: handle multiple attributes in table row (#5471,+ chinapedia).++ * Docx reader: Add support for `w:rtl` (#5545). Elements with this+ property are put into Span inlines with `dir="rtl"`.++ * DocBook reader: Issue `IgnoredElement` warnings.++ * Org reader (Albert Krewinkel):++ + Fix planning elements in headers level 3 and higher+ (#5494). Planning info is now always placed before+ the subtree contents. Previously, the planning info was placed after+ the content if the header's subtree was converted to a list, which+ happens with headers of level 3 and higher per default.+ + Omit, but warn about unknown export options. Unknown export+ options are properly ignored and omitted from the output.+ + Prefer plain symbols over math symbols (#5483).+ Symbols like `\alpha` are output plain and unemphasized, not as math.+ + Recognize emphasis after TODO/DONE keyword (#5484).++ * FB2 reader:++ + Skip unknown elements rather than throwing errors (#5560).+ Sometimes custom elements are used (e.g. `id` element+ inside `author`); previously the reader would halt with an error.+ Now it skips the element and issues an `IgnoredElement` warning.+ + Parse notes (#5493, Alexander Krotov).+ + Internal improvements (Alexander Krotov).++ * OpenDocument writer: Roll back automatic figure/table numbering+ (#5474). This was added in pandoc 2.7.2, but it makes it impossible+ to use pandoc-crossref. So this has been rolled back for now,+ until we find a good solution to make this behavior optional+ (or a creative way to let pandoc-crossref and this feature+ to coexist).++ * New module Text.Pandoc.Writers.Jira, exporting `writeJira` [API+ change] (Albert Krewinkel).++ * EPUB writer:++ + Don't include 'landmarks' if there aren't any.+ Previously we could get an empty ol element, which caused+ validation errors with epubcheck.+ + Ensure unique ids for styleesheets in content.opf (#5463).+ + Make stylesheet link compatible with kindlegen (#5466,+ Eric Schrijver). Pandoc omitted `type="text/css"` from both+ `<style>` and `<rel="stylesheet">` elements in all templates, which+ is valid according to the spec. However, Amazon’s kindlegen software+ relies on this attribute on `<link>` elements when detecting+ stylesheets to include.++ * HTML writer:++ + Output video and audio elements depending on file+ extension of the image path (Mauro Bieg).+ + Emit empty alt tag in figures (#5518, Mauro Bieg).+ The same text is already in the <figcaption> and+ screen-readers would read it twice, see #4737.+ + Don't add variation selector if it's already there.+ This fixes round-trip failures.+ + Prevent gratuitious emojification on iOS (#5469).+ iOS chooses to render a number of Unicode entities, including '↩', as+ big colorful emoji. This can be defeated by appending Unicode VARIATION+ SELECTOR-15'/'VARIATION SELECTOR-16'. So we now append this character+ when escaping strings, for both '↩' and '↔'. If other characters prove+ problematic, they can simply be added to `needsVariationSelector`.+ + Add `class="heading"` to level 7+ Headers rendered as `<p>` elements+ (#5457).++ * RST writer: treat Span with no attributes as transparent (#5446).+ Previously an Emph inside a Span was being treated as+ nested markup and ignored. With this patch, the Span+ is just ignored.++ * LaTeX writer:++ + Include inline code attributes with `--listings` (#5420).+ + Don't produce columns environment unless beamer (#5485).+ + Fix footnote in image caption. Regression: the fix for #4683 broke+ this case.+ + Don't highlight code in headings (#5574). This causes+ compilation errors.+ + Use `\mbox` to get proper behavior inside `\sout` (#5529).++ * EPUB writer: Fix document section assignments (#5546).+ For example, introduction should go in bodymatter, not frontmatter, and+ epigraph, conclusion, and afterward should go in bodymatter, not+ backmatter. For the full list of assignments, see the manual.++ * Markdown writer:++ + Add backslashes to avoid unwanted interpretation of+ definition list terms as other kinds of block (#554).+ + Ensure the code fence is long enough (#5519).+ Previously too few backticks were used when the code block+ contained an indented line of backticks. (Ditto tildes.)+ + Handle labels with integer names (Jesse Rosenthal, #5495).+ Previously if labels had integer names, it could produce a conflict+ with auto-labeled reference links. Now we test for a conflict and+ find the next available integer. This involves adding a new state+ variable `stPrevRefs` to keep track of refs used in other document+ parts when using `--reference-location=block|section`++ * Textile writer: fix closing tag for math output (Albert Krewinkel).+ Opening and closing tag for math output match now.++ * Org writer: always indent src blocks content by 2 spaces (#5440, Albert+ Krewinkel). Emacs always uses two spaces when indenting the content of+ src blocks, e.g., when exiting a `C-c '` edit-buffer. Pandoc used to+ indent contents by the space-equivalent of one tab, but now always uses+ two spaces, too.++ * Asciidoc writer:++ + Use `` `+...+` `` form for inline code.+ The old `` `a__b__c` `` yields emphasis inside code in asciidoc.+ To get a pure literal code span, use `` `+a__b__c+` ``.+ + Use proper smart quotes with asciidoctor (#5487).+ Asciidoctor has a different format for smart quotes.+ + Use doubled ## when necessary for spans (#5566).+ + Ensure correct nesting of strong/emph (#5565): strong+ must be the outer element.++ * JATS writer:++ + Wrap elements with p when needed (#5570). The JATS spec restricts+ what elements can go inside `fn` and `list-item`. So we wrap other+ elements inside `<p specific-use="wrapper">` when needed.+ + Properly handle footnotes (#5511) according to "best practice."+ (Group them at the end in `<fn-group>` and use `<xref>` elements+ to link them.)+ + Fix citations with PMID so they validate (#5481). This includes+ an update to data/jats.csl.+ + Ensure validity of `<pub-date>` by parsing the date and+ extracting year, month, and day, as expected. Also add an+ iso-8601-date attribute automatically.+ + Don't use `<break>` element for LineBreak. It is only+ allowed in a few special contexts, and not in `<p>` elements.+ + Don't make `<string-name>` a child of `<string>`, which is illegal.++ * FB2 writer:++ + Do not wrap note references into `<sup>` and brackets+ (Alexander Krotov). Existing FB2 readers, such as FBReader, already+ display links with type="note" as a superscript.+ + Use genre metadata field (#5478).++ * Muse writer: do not escape empty line after `<br>` (Alexander Krotov).++ * Add unicode code point in "Missing character" warning (#5538).+ If the character isn't in the console font, the message is pretty useless,+ so we show the code point for anything non-ASCII.++ * Lua: add Version type to simplify comparisons (Albert Krewinkel).+ Version specifiers like `PANDOC_VERSION` and `PANDOC_API_VERSION` are+ turned into `Version` objects. The objects simplify version-appropriate+ comparisons while maintaining backward-compatibility.+ A function `pandoc.types.Version` is added as part of the newly+ introduced module `pandoc.types`, allowing users to create version+ objects in scripts.++ * pandoc lua module (Albert Krewinkel):++ - Fix deletion of nonexistent attributes (#5569).+ - Better tests for Attr and AttributeList.++ * pandoc.mediabag lua module (Albert Krewinkel):++ + Add function `delete` for deleting a single item.+ + Add function `empty` for removing all entries.+ + Add function `items` for iterating over mediabag.++ * Text.Pandoc.Class: Fix handling of `file:` URL scheme in+ `downloadOrRead` (#5517, Mauro Bieg). Previously `file:/`+ URLs were handled wrongly and pandoc attempted to make HTTP+ requests, which failed.++ * Text.Pandoc.MIME: add `mediaCategory` [API change] (Mauro Bieg).++ * Text.Pandoc.Shared:++ + Add `onlySimpleTableCells` [API change]+ (Mauro Bieg) and use this to consolidate simple-table detection+ (#5524). This fixes an inconsistency in the HTML reader, which did not+ treat tables with `<p>` inside cells as simple.+ + `metaToJSON`: treat digits starting with 0 as a string, not a number+ (#5479). This fixes a regression in YAML metadata in pandoc 2.7.2.++ * Text.Pandoc.Logging: Add `IgnoredElement` constructor for+ `LogMessage`. `SkippedConetnt` doesn't work for some XML-based+ readers which don't have access to parsec source positions.++ * Text.Pandoc.Asciify: Add Turkish undotted-i (#5433, Mauro Bieg).++ * Improve output of Lua tests (#5499, Albert Krewinkel).+ This makes use of tasty-lua, a package to write tests in Lua+ and integrate the results into Tasty output. Test output becomes+ more informative: individual tests and test groups become visible+ in test output. Failures are reported with helpful error messages.++ * Lua: add `pandoc.system` module (#5468, Albert Krewinkel).+ The `system` Lua module provides utility functions to interact with the+ operating- and file system. E.g.+ `print(pandoc.system.get_current_directory())`+ or+ ```lua+ pandoc.system.with_temporary_directory('tikz', function (dir)+ -- write and compile a TikZ file with pdflatex+ end)+ ```++ * LaTeX template: Add pdflang to hypersetup if lang is set (#5443).++ * beamer template: Fix using Beamer with geometry (#5505, Daniel Maslowski).+ Beamer already loads geometry, so we need to use the `\geometry`+ command to set geometry options.++ * EPUB2/3 templates: Move inline styles to default epub.css (#5466).+ NOTE: Those who use a custom CSS stylesheet with EPUB should+ add these lines:++ code{ white-space: pre-wrap; }+ span.smallcaps{ font-variant: small-caps; }+ span.underline{ text-decoration: underline; }+ q { quotes: "“" "”" "‘" "’"; }+ div.column{ display: inline-block; vertical-align: top; width: 50%; }++ * reveal.js template:++ + Updates for revealjs 3.8.0 (#5435, ebiim).+ + Remove reference to head.min.js (#5448, Winnie Hellmann).+ NOTE: users will need to update reveal.js to at least 3.8.0+ for their presentations generated with this version of pandoc+ to work correctly.++ * Text.Pandoc.PDF:++ + Replace `</>` with literal `/` (#5451).+ We use forward-slash for a directory separator in tmpDir,+ even on Windows (because that's what tex likes). So we+ should not put a backslash between the tmpDir and the+ filename on Windows. This is harmless enough in normal+ Windows setups, but it breaks on Cygwin.+ Thanks to @cc2x for noticing and diagnosing the problem.+ + Allow use of `-output-directory` in `--pdf-engine-opt` (#5462).+ This is currently possible with `mklatex` and `-outdir`, but+ was not yet possible with xelatex and `-output-directory`.+ + For PDF via ms/pdfroff, make TOC appear at beginning and in+ PDF bookmarks (#5553). Previously the TOC appeared at the end+ of the document, and was not bookmarked. To keep it at the end,+ add `--pdf-engine-opt=--no-toc-relocation` to your command line.++ * Fix broken links in documents (#5473, Shim Myeongseob).+ Also, use absolute links to pandoc.org when possible, so that+ the links can be followed by people viewing these documents+ on GitHub.++ * Improved sample lua tikz filter in lua-filters docs (#5445,+ Matthew Doty). There are three changes:++ + It only processes elements which begin with `\begin{tikzpicture}`+ + It uses pdf2svg instead of imagemagick to preserve fidelity+ + The images produced have transparent backgrounds++ * MANUAL.txt:++ + Add note about `title-meta`, `author-meta`, `date-meta` (#5486).+ + Fix typo (#5489, Christian Krause).++ * add test/tables.xwiki to git and pandoc.cabal (#5498, Mauro Bieg).++ * Disable missing-home-modules warning in `stack.yaml`.+ Otherwise `stack ghci` fails.++ pandoc (2.7.2) * Add XWiki writer (#1800, Derek Chen-Becker).
data/epub.css view
@@ -17,3 +17,8 @@ a.footnote-ref { vertical-align: super; } em, em em em, em em em em em { font-style: italic;} em em, em em em em { font-style: normal; }+code{ white-space: pre-wrap; }+span.smallcaps{ font-variant: small-caps; }+span.underline{ text-decoration: underline; }+q { quotes: "“" "”" "‘" "’"; }+div.column{ display: inline-block; vertical-align: top; width: 50%; }
data/jats.csl view
@@ -64,7 +64,7 @@ <if type="book" match="any"> <group prefix="{{jats}}<source>{{/jats}}" suffix="{{jats}}</source>{{/jats}}"> <text variable="title"/>- </group> + </group> </if> <else> <group prefix="{{jats}}<article-title>{{/jats}}" suffix="{{jats}}</article-title>{{/jats}}">@@ -90,8 +90,7 @@ </choose> <choose> <if match="any" variable="PMID">- <group prefix="{{jats}}<ext-link ext-link-type="pmid" {{/jats}}" suffix="{{jats}}</ext-link>{{/jats}}">- <text variable="PMID" prefix="{{jats}}xlink:href="http://www.ncbi.nlm.nih.gov/pubmed/{{/jats}}" suffix="{{jats}}" xlink:type="simple">{{/jats}}"/>+ <group prefix="{{jats}}<pub-id pub-id-type="pmid">{{/jats}}" suffix="{{jats}}</pub-id>{{/jats}}"> <text variable="PMID"/> </group> </if>@@ -202,4 +201,3 @@ </layout> </bibliography> </style>-
data/pandoc.lua view
@@ -27,6 +27,7 @@ -- Re-export bundled modules M.List = require 'pandoc.List' M.mediabag = require 'pandoc.mediabag'+M.system = require 'pandoc.system' M.utils = require 'pandoc.utils' M.text = require 'text' @@ -845,7 +846,10 @@ __newindex = function (t, k, v) local cur, idx = List.find_if(t, assoc_key_equals(k))- if v == nil then+ if v == nil and not cur then+ -- deleted key does not exists in list+ return+ elseif v == nil then table.remove(t, idx) elseif cur then cur[2] = v
data/templates/default.epub2 view
@@ -6,15 +6,6 @@ <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="generator" content="pandoc" /> <title>$pagetitle$</title>- <style type="text/css">- code{white-space: pre-wrap;}- span.smallcaps{font-variant: small-caps;}- span.underline{text-decoration: underline;}- div.column{display: inline-block; vertical-align: top; width: 50%;}-$if(quotes)$- q { quotes: "“" "”" "‘" "’"; }-$endif$- </style> $if(highlighting-css)$ <style type="text/css"> $highlighting-css$
data/templates/default.epub3 view
@@ -5,22 +5,13 @@ <meta charset="utf-8" /> <meta name="generator" content="pandoc" /> <title>$pagetitle$</title>- <style>- code{white-space: pre-wrap;}- span.smallcaps{font-variant: small-caps;}- span.underline{text-decoration: underline;}- div.column{display: inline-block; vertical-align: top; width: 50%;}-$if(quotes)$- q { quotes: "“" "”" "‘" "’"; }-$endif$- </style> $if(highlighting-css)$ <style> $highlighting-css$ </style> $endif$ $for(css)$- <link rel="stylesheet" href="$css$" />+ <link rel="stylesheet" type="text/css" href="$css$" /> $endfor$ $for(header-includes)$ $header-includes$
data/templates/default.jats view
@@ -83,14 +83,14 @@ $if(author.orcid)$ <contrib-id contrib-id-type="orcid">$author.orcid$</contrib-id> $endif$-<name> $if(author.surname)$+<name> <surname>$author.surname$</surname> <given-names>$author.given-names$</given-names>+</name> $else$ <string-name>$author$</string-name> $endif$-</name> $if(author.email)$ <email>$author.email$</email> $endif$@@ -120,22 +120,14 @@ </author-notes> $endif$ $if(date)$-$if(date.iso-8601)$-<pub-date pub-type="epub" iso-8601-date="$date.iso-8601$">-$else$-<pub-date pub-type="epub">-$endif$+<pub-date pub-type="epub"$if(date.iso-8601)$ iso-8601-date="$date.iso-8601$"$endif$> $if(date.day)$-<day>$pub-date.day$</day>+<day>$date.day$</day> $endif$ $if(date.month)$-<month>$pub-date.month$</month>-$endif$-$if(date.year)$-<year>$pub-date.year$</year>-$else$-<string-date>$date$</string-date>+<month>$date.month$</month> $endif$+<year>$date.year$</year> </pub-date> $endif$ $if(article.volume)$
+ data/templates/default.jira view
@@ -0,0 +1,9 @@+$for(include-before)$+$include-before$++$endfor$+$body$+$for(include-after)$++$include-after$+$endfor$
data/templates/default.latex view
@@ -205,6 +205,9 @@ $if(author-meta)$ pdfauthor={$author-meta$}, $endif$+$if(lang)$+ pdflang={$lang$},+$endif$ $if(subject)$ pdfsubject={$subject$}, $endif$@@ -226,7 +229,11 @@ \VerbatimFootnotes % allow verbatim text in footnotes $endif$ $if(geometry)$+$if(beamer)$+\geometry{$for(geometry)$$geometry$$sep$,$endfor$}+$else$ \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}+$endif$ $endif$ $if(beamer)$ \newif\ifbibliography
data/templates/default.revealjs view
@@ -16,6 +16,7 @@ <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">+ <link rel="stylesheet" href="$revealjs-url$/css/reset.css"> <link rel="stylesheet" href="$revealjs-url$/css/reveal.css"> <style> code{white-space: pre-wrap;}@@ -88,7 +89,6 @@ </div> </div> - <script src="$revealjs-url$/lib/js/head.min.js"></script> <script src="$revealjs-url$/js/reveal.js"></script> <script>
man/pandoc.1 view
@@ -1,5 +1,5 @@ .\"t-.TH PANDOC 1 "April 5, 2019" "pandoc 2.7.2"+.TH PANDOC 1 "June 11, 2019" "pandoc 2.7.3" .SH NAME pandoc - general markup converter .SH SYNOPSIS@@ -339,6 +339,8 @@ .IP \[bu] 2 \f[C]jats\f[R] (JATS XML) .IP \[bu] 2+\f[C]jira\f[R] (Jira wiki markup)+.IP \[bu] 2 \f[C]json\f[R] (JSON version of native AST) .IP \[bu] 2 \f[C]latex\f[R] (LaTeX)@@ -765,6 +767,13 @@ This option has no effect unless \f[C]-s/--standalone\f[R] is used, and it has no effect on \f[C]man\f[R], \f[C]docbook4\f[R], \f[C]docbook5\f[R], or \f[C]jats\f[R] output.+.RS+.PP+Note that if you are producing a PDF via \f[C]ms\f[R], the table of+contents will appear at the beginning of the document, before the title.+If you would prefer it to be at the end of the document, use the option+\f[C]--pdf-engine-opt=--no-toc-relocation\f[R].+.RE .TP .B \f[C]--toc-depth=\f[R]\f[I]NUMBER\f[R] Specify the number of section levels to include in the table of@@ -1493,6 +1502,13 @@ \&... \f[R] .fi+.PP+Note that if you just want to set PDF or HTML metadata, without+including a title block in the document itself, you can set the+\f[C]title-meta\f[R], \f[C]author-meta\f[R], and \f[C]date-meta\f[R]+variables.+(By default these are set automatically, based on \f[C]title\f[R],+\f[C]author\f[R], and \f[C]date\f[R].) .RE .TP .B \f[C]subtitle\f[R]@@ -2036,8 +2052,14 @@ .PP Similarly, \f[C]outputfile\f[R] can be \f[C]-\f[R] if output goes to the terminal.+.PP+If you need absolute paths, use e.g.+\f[C]$curdir$/$sourcefile$\f[R]. .RE .TP+.B \f[C]curdir\f[R]+working directory from which pandoc is run.+.TP .B \f[C]toc\f[R] non-null value if \f[C]--toc/--table-of-contents\f[R] was specified .TP@@ -2643,7 +2665,7 @@ Identifiers, classes, and key/value attributes are used in HTML and HTML-based formats such as EPUB and slidy. Identifiers are used for labels and link anchors in the LaTeX, ConTeXt,-Textile, and AsciiDoc writers.+Textile, Jira markup, and AsciiDoc writers. .PP Headings with the class \f[C]unnumbered\f[R] will not be numbered, even if \f[C]--number-sections\f[R] is specified.@@ -4126,7 +4148,7 @@ .B Texinfo It will be rendered inside a \f[C]\[at]math\f[R] command. .TP-.B roff man+.B roff man, Jira markup It will be rendered verbatim without \f[C]$\f[R]\[aq]s. .TP .B MediaWiki, DokuWiki@@ -4350,8 +4372,8 @@ \f[R] .fi .PP-Note that LaTeX macros will not be applied if they occur inside inside a-raw span or block marked with the \f[C]raw_attribute\f[R] extension.+Note that LaTeX macros will not be applied if they occur inside a raw+span or block marked with the \f[C]raw_attribute\f[R] extension. .PP When \f[C]latex_macros\f[R] is disabled, the raw LaTeX and math will not have macros applied.@@ -5814,41 +5836,76 @@ frontmatter T} T{-foreword+credits T}@T{ frontmatter T} T{-halftitle,+keywords T}@T{ frontmatter T} T{-introduction+imprint T}@T{ frontmatter T} T{-preface+contributors T}@T{ frontmatter T} T{-seriespage+other-credits T}@T{ frontmatter T} T{+errata+T}@T{+frontmatter+T}+T{+revision-history+T}@T{+frontmatter+T}+T{ titlepage T}@T{ frontmatter T} T{-afterword+halftitlepage T}@T{-backmatter+frontmatter T} T{+seriespage+T}@T{+frontmatter+T}+T{+foreword+T}@T{+frontmatter+T}+T{+preface+T}@T{+frontmatter+T}+T{+seriespage+T}@T{+frontmatter+T}+T{+titlepage+T}@T{+frontmatter+T}+T{ appendix T}@T{ backmatter@@ -5859,12 +5916,12 @@ backmatter T} T{-conclusion+bibliography T}@T{ backmatter T} T{-epigraph+index T}@T{ backmatter T}
pandoc.cabal view
@@ -1,17 +1,17 @@ name: pandoc-version: 2.7.2+version: 2.7.3 cabal-version: 2.0 build-type: Simple license: GPL-2 license-file: COPYING.md-copyright: (c) 2006-2018 John MacFarlane+copyright: (c) 2006-2019 John MacFarlane author: John MacFarlane <jgm@berkeley.edu> maintainer: John MacFarlane <jgm@berkeley.edu> bug-reports: https://github.com/jgm/pandoc/issues stability: alpha homepage: https://pandoc.org category: Text-tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.3+tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5 synopsis: Conversion between markup formats description: Pandoc is a Haskell library for converting from one markup format to another, and a command-line tool that uses@@ -25,7 +25,7 @@ reStructuredText, XHTML, HTML 5, LaTeX, ConTeXt, DocBook, JATS, OPML, TEI, OpenDocument, ODT, Word docx, PowerPoint pptx, RTF, MediaWiki, DokuWiki, XWiki,- ZimWiki, Textile, roff man, roff ms, plain text,+ ZimWiki, Textile, Jira, roff man, roff ms, plain text, Emacs Org-Mode, AsciiDoc, Haddock markup, EPUB (v2 and v3), ipynb, FictionBook2, InDesign ICML, Muse, LaTeX beamer slides,@@ -53,6 +53,7 @@ data/templates/default.latex data/templates/default.context data/templates/default.texinfo+ data/templates/default.jira data/templates/default.man data/templates/default.ms data/templates/default.markdown@@ -242,6 +243,7 @@ test/tables.docbook4 test/tables.docbook5 test/tables.jats+ test/tables.jira test/tables.dokuwiki test/tables.zimwiki test/tables.icml@@ -266,12 +268,14 @@ test/tables.fb2 test/tables.muse test/tables.custom+ test/tables.xwiki test/testsuite.txt test/writer.latex test/writer.context test/writer.docbook4 test/writer.docbook5 test/writer.jats+ test/writer.jira test/writer.html4 test/writer.html5 test/writer.man@@ -338,6 +342,7 @@ test/odt/markdown/*.md test/odt/native/*.native test/lua/*.lua+ test/lua/module/*.lua source-repository head type: git location: git://github.com/jgm/pandoc.git@@ -360,7 +365,7 @@ Default: False library- build-depends: base >= 4.8 && < 5,+ build-depends: base >= 4.9 && < 5, syb >= 0.1 && < 0.8, containers >= 0.4.2.1 && < 0.7, unordered-containers >= 0.2 && < 0.3,@@ -387,13 +392,14 @@ tagsoup >= 0.14.6 && < 0.15, base64-bytestring >= 0.1 && < 1.1, zlib >= 0.5 && < 0.7,- skylighting >= 0.7.7 && < 0.8,+ skylighting >= 0.8.1 && < 0.9, data-default >= 0.4 && < 0.8, temporary >= 1.1 && < 1.4, blaze-html >= 0.9 && < 0.10, blaze-markup >= 0.8 && < 0.9, vector >= 0.10 && < 0.13, hslua >= 1.0.1 && < 1.1,+ hslua-module-system >= 0.2 && < 0.3, hslua-module-text >= 0.2 && < 0.3, binary >= 0.5 && < 0.11, SHA >= 1.6 && < 1.7,@@ -401,7 +407,7 @@ deepseq >= 1.3 && < 1.5, JuicyPixels >= 3.1.6.1 && < 3.4, Glob >= 0.7 && < 0.11,- cmark-gfm >= 0.1.8 && < 0.2,+ cmark-gfm >= 0.2 && < 0.3, doctemplates >= 0.2.1 && < 0.3, network-uri >= 2.6 && < 2.7, network >= 2.6,@@ -497,6 +503,7 @@ Text.Pandoc.Writers.HTML, Text.Pandoc.Writers.Ipynb, Text.Pandoc.Writers.ICML,+ Text.Pandoc.Writers.Jira, Text.Pandoc.Writers.LaTeX, Text.Pandoc.Writers.ConTeXt, Text.Pandoc.Writers.OpenDocument,@@ -588,9 +595,13 @@ Text.Pandoc.Lua.Marshaling.AST, Text.Pandoc.Lua.Marshaling.AnyValue, Text.Pandoc.Lua.Marshaling.CommonState,+ Text.Pandoc.Lua.Marshaling.MediaBag, Text.Pandoc.Lua.Marshaling.ReaderOptions,+ Text.Pandoc.Lua.Marshaling.Version, Text.Pandoc.Lua.Module.MediaBag, Text.Pandoc.Lua.Module.Pandoc,+ Text.Pandoc.Lua.Module.System,+ Text.Pandoc.Lua.Module.Types, Text.Pandoc.Lua.Module.Utils, Text.Pandoc.Lua.Packages, Text.Pandoc.Lua.Util,@@ -678,9 +689,10 @@ Diff >= 0.2 && < 0.4, tasty >= 0.11 && < 1.3, tasty-hunit >= 0.9 && < 0.11,+ tasty-lua >= 0.2 && < 0.3, tasty-quickcheck >= 0.8 && < 0.11, tasty-golden >= 2.3 && < 2.4,- QuickCheck >= 2.4 && < 2.13,+ QuickCheck >= 2.4 && < 2.14, containers >= 0.4.2.1 && < 0.7, executable-path >= 0.0 && < 0.1, zip-archive >= 0.2.3.4 && < 0.5,@@ -696,6 +708,7 @@ Tests.Command Tests.Helpers Tests.Lua+ Tests.Lua.Module Tests.Shared Tests.Readers.LaTeX Tests.Readers.HTML
src/Text/Pandoc/App.hs view
@@ -241,13 +241,13 @@ "all" -> id "none" -> (filterIpynbOutput Nothing :) "best" -> (filterIpynbOutput (Just $- if htmlFormat writerName+ if htmlFormat format then Format "html" else- case writerName of+ case format of "latex" -> Format "latex" "beamer" -> Format "latex"- _ -> Format writerName) :)+ _ -> Format format) :) _ -> id) -- should not happen $ [] @@ -299,7 +299,7 @@ else (<> T.singleton '\n') output <- addNl <$> f writerOptions doc writerFn eol outputFile =<<- if optSelfContained opts && htmlFormat writerName+ if optSelfContained opts && htmlFormat format -- TODO not maximally efficient; change type -- of makeSelfContained so it works w/ Text then T.pack <$> makeSelfContained (T.unpack output)
src/Text/Pandoc/App/OutputSettings.hs view
@@ -28,6 +28,7 @@ import Data.Maybe (fromMaybe) import Skylighting (defaultSyntaxMap) import Skylighting.Parser (addSyntaxDefinition, parseSyntaxDefinition)+import System.Directory (getCurrentDirectory) import System.Exit (exitSuccess) import System.FilePath import System.IO (stdout)@@ -113,6 +114,8 @@ s <- UTF8.toString . fst <$> fetchItem fp return $ (varname, s) : vars + curdir <- liftIO getCurrentDirectory+ variables <- withList (addStringAsVariable "sourcefile") (reverse $ optInputFiles opts)@@ -139,6 +142,8 @@ >>= maybe return (addStringAsVariable "epub-cover-image") (optEpubCoverImage opts)+ >>=+ addStringAsVariable "curdir" curdir >>= (\vars -> if format == "dzslides" then do
src/Text/Pandoc/Asciify.hs view
@@ -121,6 +121,7 @@ ,('\302','I') ,('\303','i') ,('\304','I')+ ,('\305','i') ,('\308','J') ,('\309','j') ,('\310','K')
src/Text/Pandoc/Class.hs view
@@ -572,10 +572,10 @@ Nothing -> openURL s' -- will throw error (Nothing, s') -> case parseURI s' of -- requires absolute URI- -- We don't want to treat C:/ as a scheme:- Just u' | length (uriScheme u') > 2 -> openURL (show u') Just u' | uriScheme u' == "file:" -> readLocalFile $ uriPathToPath (uriPath u')+ -- We don't want to treat C:/ as a scheme:+ Just u' | length (uriScheme u') > 2 -> openURL (show u') _ -> readLocalFile fp -- get from local file system where readLocalFile f = do resourcePath <- getResourcePath
src/Text/Pandoc/Extensions.hs view
@@ -275,6 +275,7 @@ -- Note: MMD's raw TeX syntax requires raw TeX to be -- enclosed in HTML comment , Ext_tex_math_double_backslash+ , Ext_tex_math_dollars , Ext_intraword_underscores , Ext_mmd_title_block , Ext_footnotes
src/Text/Pandoc/Logging.hs view
@@ -54,6 +54,7 @@ data LogMessage = SkippedContent String SourcePos+ | IgnoredElement String | CouldNotParseYamlMetadata String SourcePos | DuplicateLinkReference String SourcePos | DuplicateNoteReference String SourcePos@@ -86,6 +87,7 @@ | NoTranslation String | CouldNotLoadTranslations String String | UnexpectedXmlElement String String+ | UnknownOrgExportOption String deriving (Show, Eq, Data, Ord, Typeable, Generic) instance ToJSON LogMessage where@@ -98,6 +100,8 @@ "source" .= Text.pack (sourceName pos), "line" .= sourceLine pos, "column" .= sourceColumn pos]+ IgnoredElement s ->+ ["contents" .= Text.pack s] CouldNotParseYamlMetadata s pos -> ["message" .= Text.pack s, "source" .= Text.pack (sourceName pos),@@ -201,6 +205,8 @@ UnexpectedXmlElement element parent -> ["element" .= Text.pack element, "parent" .= Text.pack parent]+ UnknownOrgExportOption option ->+ ["option" .= Text.pack option] showPos :: SourcePos -> String@@ -221,6 +227,8 @@ case msg of SkippedContent s pos -> "Skipped '" ++ s ++ "' at " ++ showPos pos+ IgnoredElement s ->+ "Ignored element " ++ s CouldNotParseYamlMetadata s pos -> "Could not parse YAML metadata at " ++ showPos pos ++ if null s then "" else ": " ++ s@@ -300,11 +308,14 @@ if null m then "" else '\n' : m UnexpectedXmlElement element parent -> "Unexpected XML element " ++ element ++ " in " ++ parent+ UnknownOrgExportOption option ->+ "Ignoring unknown Org export option: " ++ option messageVerbosity:: LogMessage -> Verbosity messageVerbosity msg = case msg of SkippedContent{} -> INFO+ IgnoredElement{} -> INFO CouldNotParseYamlMetadata{} -> WARNING DuplicateLinkReference{} -> WARNING DuplicateNoteReference{} -> WARNING@@ -339,3 +350,4 @@ NoTranslation{} -> WARNING CouldNotLoadTranslations{} -> WARNING UnexpectedXmlElement {} -> WARNING+ UnknownOrgExportOption {} -> WARNING
src/Text/Pandoc/Lua/Global.hs view
@@ -17,7 +17,6 @@ import Prelude import Data.Data (Data)-import Data.Version (Version (versionBranch)) import Foreign.Lua (Lua, Peekable, Pushable) import Foreign.Lua.Userdata ( ensureUserdataMetatable, pushAnyWithMetatable , metatableName)@@ -52,7 +51,7 @@ Lua.push format Lua.setglobal "FORMAT" PANDOC_API_VERSION -> do- Lua.push (versionBranch pandocTypesVersion)+ Lua.push pandocTypesVersion Lua.setglobal "PANDOC_API_VERSION" PANDOC_DOCUMENT doc -> do Lua.push (LazyPandoc doc)@@ -67,7 +66,7 @@ Lua.push commonState Lua.setglobal "PANDOC_STATE" PANDOC_VERSION -> do- Lua.push (versionBranch version)+ Lua.push version Lua.setglobal "PANDOC_VERSION" -- | Readonly and lazy pandoc objects.
src/Text/Pandoc/Lua/Marshaling.hs view
@@ -14,3 +14,4 @@ import Text.Pandoc.Lua.Marshaling.AST () import Text.Pandoc.Lua.Marshaling.CommonState () import Text.Pandoc.Lua.Marshaling.ReaderOptions ()+import Text.Pandoc.Lua.Marshaling.Version ()
+ src/Text/Pandoc/Lua/Marshaling/MediaBag.hs view
@@ -0,0 +1,75 @@+{-# LANGUAGE NoImplicitPrelude #-}+{- |+ Module : Text.Pandoc.Lua.Marshaling.MediaBag+ Copyright : © 2012-2019 John MacFarlane+ © 2017-2019 Albert Krewinkel+ License : GNU GPL, version 2 or above+ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>+ Stability : alpha++Instances to marshal (push) and unmarshal (peek) media data.+-}+module Text.Pandoc.Lua.Marshaling.MediaBag (pushIterator) where++import Prelude+import Foreign.Ptr (Ptr)+import Foreign.StablePtr (StablePtr, deRefStablePtr, newStablePtr)+import Foreign.Lua (Lua, NumResults, Peekable, Pushable, StackIndex)+import Foreign.Lua.Types.Peekable (reportValueOnFailure)+import Foreign.Lua.Userdata (ensureUserdataMetatable, pushAnyWithMetatable,+ toAnyWithName)+import Text.Pandoc.MediaBag (MediaBag, mediaItems)+import Text.Pandoc.MIME (MimeType)+import Text.Pandoc.Lua.Marshaling.AnyValue (AnyValue (..))++import qualified Data.ByteString.Lazy as BL+import qualified Foreign.Lua as Lua+import qualified Foreign.Storable as Storable++-- | A list of 'MediaBag' items.+newtype MediaItems = MediaItems [(String, MimeType, BL.ByteString)]++instance Pushable MediaItems where+ push = pushMediaItems++instance Peekable MediaItems where+ peek = peekMediaItems++-- | Push an iterator triple to be used with Lua's @for@ loop construct.+-- Each iterator invokation returns a tripple consisting of an item's+-- filename, MIME type, and content.+pushIterator :: MediaBag -> Lua NumResults+pushIterator mb = do+ Lua.pushHaskellFunction nextItem+ Lua.push (MediaItems $ mediaItems mb)+ Lua.pushnil+ return 3++-- | Lua type name for @'MediaItems'@.+mediaItemsTypeName :: String+mediaItemsTypeName = "pandoc MediaItems"++-- | Push a @MediaItems@ element to the stack.+pushMediaItems :: MediaItems -> Lua ()+pushMediaItems xs = pushAnyWithMetatable pushMT xs+ where+ pushMT = ensureUserdataMetatable mediaItemsTypeName (return ())++-- | Retrieve a @MediaItems@ element from the stack.+peekMediaItems :: StackIndex -> Lua MediaItems+peekMediaItems = reportValueOnFailure mediaItemsTypeName+ (`toAnyWithName` mediaItemsTypeName)++-- | Retrieve a list of items from an iterator state, return the first+-- item (if present), and advance the state.+nextItem :: Ptr (StablePtr MediaItems) -> AnyValue -> Lua NumResults+nextItem ptr _ = do+ (MediaItems items) <- Lua.liftIO $ deRefStablePtr =<< Storable.peek ptr+ case items of+ [] -> 2 <$ (Lua.pushnil *> Lua.pushnil)+ (key, mt, content):xs -> do+ Lua.liftIO $ Storable.poke ptr =<< newStablePtr (MediaItems xs)+ Lua.push key+ Lua.push mt+ Lua.push content+ return 3
+ src/Text/Pandoc/Lua/Marshaling/Version.hs view
@@ -0,0 +1,154 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NoImplicitPrelude #-}+{- |+ Module : Text.Pandoc.Lua.Marshaling.Version+ Copyright : © 2019 Albert Krewinkel+ License : GNU GPL, version 2 or above++ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>+ Stability : alpha++Marshaling of @'Version'@s. The marshaled elements can be compared using+default comparison operators (like @>@ and @<=@).+-}+module Text.Pandoc.Lua.Marshaling.Version+ ( peekVersion+ , pushVersion+ )+ where++import Prelude+import Data.Maybe (fromMaybe)+import Data.Version (Version (..), makeVersion, parseVersion, showVersion)+import Foreign.Lua (Lua, Optional (..), NumResults,+ Peekable, Pushable, StackIndex)+import Foreign.Lua.Types.Peekable (reportValueOnFailure)+import Foreign.Lua.Userdata (ensureUserdataMetatable, pushAnyWithMetatable,+ toAnyWithName)+import Safe (atMay, lastMay)+import Text.Pandoc.Lua.Marshaling.AnyValue (AnyValue (..))+import Text.ParserCombinators.ReadP (readP_to_S)++import qualified Foreign.Lua as Lua+import qualified Text.Pandoc.Lua.Util as LuaUtil++-- | Push a @'Version'@ element to the Lua stack.+pushVersion :: Version -> Lua ()+pushVersion version = pushAnyWithMetatable pushVersionMT version+ where+ pushVersionMT = ensureUserdataMetatable versionTypeName $ do+ LuaUtil.addFunction "__eq" __eq+ LuaUtil.addFunction "__le" __le+ LuaUtil.addFunction "__lt" __lt+ LuaUtil.addFunction "__len" __len+ LuaUtil.addFunction "__index" __index+ LuaUtil.addFunction "__pairs" __pairs+ LuaUtil.addFunction "__tostring" __tostring++instance Pushable Version where+ push = pushVersion++peekVersion :: StackIndex -> Lua Version+peekVersion idx = Lua.ltype idx >>= \case+ Lua.TypeString -> do+ versionStr <- Lua.peek idx+ let parses = readP_to_S parseVersion versionStr+ case lastMay parses of+ Just (v, "") -> return v+ _ -> Lua.throwException $ "could not parse as Version: " ++ versionStr++ Lua.TypeUserdata ->+ reportValueOnFailure versionTypeName+ (`toAnyWithName` versionTypeName)+ idx+ Lua.TypeNumber -> do+ n <- Lua.peek idx+ return (makeVersion [n])++ Lua.TypeTable ->+ makeVersion <$> Lua.peek idx++ _ ->+ Lua.throwException "could not peek Version"++instance Peekable Version where+ peek = peekVersion++-- | Name used by Lua for the @CommonState@ type.+versionTypeName :: String+versionTypeName = "HsLua Version"++__eq :: Version -> Version -> Lua Bool+__eq v1 v2 = return (v1 == v2)++__le :: Version -> Version -> Lua Bool+__le v1 v2 = return (v1 <= v2)++__lt :: Version -> Version -> Lua Bool+__lt v1 v2 = return (v1 < v2)++-- | Get number of version components.+__len :: Version -> Lua Int+__len = return . length . versionBranch++-- | Access fields.+__index :: Version -> AnyValue -> Lua NumResults+__index v (AnyValue k) = do+ ty <- Lua.ltype k+ case ty of+ Lua.TypeNumber -> do+ n <- Lua.peek k+ let versionPart = atMay (versionBranch v) (n - 1)+ Lua.push (Lua.Optional versionPart)+ return 1+ Lua.TypeString -> do+ str <- Lua.peek k+ if str == "must_be_at_least"+ then 1 <$ Lua.pushHaskellFunction must_be_at_least+ else 1 <$ Lua.pushnil+ _ -> 1 <$ Lua.pushnil++-- | Create iterator.+__pairs :: Version -> Lua NumResults+__pairs v = do+ Lua.pushHaskellFunction nextFn+ Lua.pushnil+ Lua.pushnil+ return 3+ where+ nextFn :: AnyValue -> Optional Int -> Lua Lua.NumResults+ nextFn _ (Optional key) =+ case key of+ Nothing -> case versionBranch v of+ [] -> 2 <$ (Lua.pushnil *> Lua.pushnil)+ n:_ -> 2 <$ (Lua.push (1 :: Int) *> Lua.push n)+ Just n -> case atMay (versionBranch v) n of+ Nothing -> 2 <$ (Lua.pushnil *> Lua.pushnil)+ Just b -> 2 <$ (Lua.push (n + 1) *> Lua.push b)++-- | Convert to string.+__tostring :: Version -> Lua String+__tostring v = return (showVersion v)++-- | Default error message when a version is too old. This message is+-- formatted in Lua with the expected and actual versions as arguments.+versionTooOldMessage :: String+versionTooOldMessage = "expected version %s or newer, got %s"++-- | Throw an error if this version is older than the given version.+-- FIXME: This function currently requires the string library to be+-- loaded.+must_be_at_least :: Version -> Version -> Optional String -> Lua NumResults+must_be_at_least actual expected optMsg = do+ let msg = fromMaybe versionTooOldMessage (fromOptional optMsg)+ if expected <= actual+ then return 0+ else do+ Lua.getglobal' "string.format"+ Lua.push msg+ Lua.push (showVersion expected)+ Lua.push (showVersion actual)+ Lua.call 3 1+ Lua.error+
src/Text/Pandoc/Lua/Module/MediaBag.hs view
@@ -20,6 +20,7 @@ import Text.Pandoc.Class (CommonState (..), fetchItem, putCommonState, runIOorExplode, setMediaBag) import Text.Pandoc.Lua.Marshaling ()+import Text.Pandoc.Lua.Marshaling.MediaBag (pushIterator) import Text.Pandoc.Lua.Util (addFunction) import Text.Pandoc.MIME (MimeType) @@ -33,7 +34,10 @@ pushModule :: Lua NumResults pushModule = do Lua.newtable+ addFunction "delete" delete+ addFunction "empty" empty addFunction "insert" insertMediaFn+ addFunction "items" items addFunction "lookup" lookupMediaFn addFunction "list" mediaDirectoryFn addFunction "fetch" fetch@@ -58,6 +62,16 @@ modifyCommonState :: (CommonState -> CommonState) -> Lua () modifyCommonState f = getCommonState >>= setCommonState . f +-- | Delete a single item from the media bag.+delete :: FilePath -> Lua NumResults+delete fp = 0 <$ modifyCommonState+ (\st -> st { stMediaBag = MB.deleteMedia fp (stMediaBag st) })++-- | Delete all items from the media bag.+empty :: Lua NumResults+empty = 0 <$ modifyCommonState (\st -> st { stMediaBag = mempty })++-- | Insert a new item into the media bag. insertMediaFn :: FilePath -> Optional MimeType -> BL.ByteString@@ -66,15 +80,19 @@ modifyCommonState $ \st -> let mb = MB.insertMedia fp (Lua.fromOptional optionalMime) contents (stMediaBag st)- in st { stMediaBag = mb}+ in st { stMediaBag = mb } return 0 +-- | Returns iterator values to be used with a Lua @for@ loop.+items :: Lua NumResults+items = stMediaBag <$> getCommonState >>= pushIterator+ lookupMediaFn :: FilePath -> Lua NumResults lookupMediaFn fp = do res <- MB.lookupMedia fp . stMediaBag <$> getCommonState case res of- Nothing -> Lua.pushnil *> return 1+ Nothing -> 1 <$ Lua.pushnil Just (mimeType, contents) -> do Lua.push mimeType Lua.push contents
+ src/Text/Pandoc/Lua/Module/System.hs view
@@ -0,0 +1,34 @@+{- |+ Module : Text.Pandoc.Lua.Module.System+ Copyright : © 2019 Albert Krewinkel+ License : GNU GPL, version 2 or above++ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>+ Stability : alpha++Pandoc's system Lua module.+-}+module Text.Pandoc.Lua.Module.System+ ( pushModule+ ) where++import Prelude+import Foreign.Lua (Lua, NumResults)+import Foreign.Lua.Module.System (arch, env, getwd, os,+ with_env, with_tmpdir, with_wd)+import Text.Pandoc.Lua.Util (addFunction, addField)++import qualified Foreign.Lua as Lua++-- | Push the pandoc.system module on the Lua stack.+pushModule :: Lua NumResults+pushModule = do+ Lua.newtable+ addField "arch" arch+ addField "os" os+ addFunction "environment" env+ addFunction "get_current_directory" getwd+ addFunction "with_environment" with_env+ addFunction "with_temp_directory" with_tmpdir+ addFunction "with_working_directory" with_wd+ return 1
+ src/Text/Pandoc/Lua/Module/Types.hs view
@@ -0,0 +1,28 @@+{- |+ Module : Text.Pandoc.Lua.Module.Types+ Copyright : © 2019 Albert Krewinkel+ License : GNU GPL, version 2 or above++ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>+ Stability : alpha++Pandoc data type constructors.+-}+module Text.Pandoc.Lua.Module.Types+ ( pushModule+ ) where++import Prelude+import Data.Version (Version)+import Foreign.Lua (Lua, NumResults)+import Text.Pandoc.Lua.Marshaling.Version ()+import Text.Pandoc.Lua.Util (addFunction)++import qualified Foreign.Lua as Lua++-- | Push the pandoc.system module on the Lua stack.+pushModule :: Lua NumResults+pushModule = do+ Lua.newtable+ addFunction "Version" (return :: Version -> Lua Version)+ return 1
src/Text/Pandoc/Lua/Module/Utils.hs view
@@ -17,6 +17,7 @@ import Control.Applicative ((<|>)) import Data.Char (toLower) import Data.Default (def)+import Data.Version (Version) import Foreign.Lua (Peekable, Lua, NumResults) import Text.Pandoc.Class (runIO, setUserDataDir) import Text.Pandoc.Definition ( Pandoc, Meta, MetaValue (..), Block, Inline@@ -43,6 +44,7 @@ addFunction "sha1" sha1 addFunction "stringify" stringify addFunction "to_roman_numeral" toRomanNumeral+ addFunction "Version" (return :: Version -> Lua Version) return 1 -- | Squashes a list of blocks into inlines.
src/Text/Pandoc/Lua/Packages.hs view
@@ -25,6 +25,8 @@ import qualified Foreign.Lua as Lua import Text.Pandoc.Lua.Module.Pandoc as Pandoc import Text.Pandoc.Lua.Module.MediaBag as MediaBag+import Text.Pandoc.Lua.Module.System as System+import Text.Pandoc.Lua.Module.Types as Types import Text.Pandoc.Lua.Module.Utils as Utils -- | Parameters used to create lua packages/modules.@@ -52,6 +54,8 @@ "pandoc" -> let datadir = luaPkgDataDir pkgParams in pushWrappedHsFun (Pandoc.pushModule datadir) "pandoc.mediabag" -> pushWrappedHsFun MediaBag.pushModule+ "pandoc.system" -> pushWrappedHsFun System.pushModule+ "pandoc.types" -> pushWrappedHsFun Types.pushModule "pandoc.utils" -> let datadir = luaPkgDataDir pkgParams in pushWrappedHsFun (Utils.pushModule datadir) _ -> searchPureLuaLoader
src/Text/Pandoc/MIME.hs view
@@ -11,12 +11,13 @@ Mime type lookup for ODT writer. -} module Text.Pandoc.MIME ( MimeType, getMimeType, getMimeTypeDef,- extensionFromMimeType )where+ extensionFromMimeType, mediaCategory ) where import Prelude import Data.Char (toLower) import Data.List (isPrefixOf, isSuffixOf)+import Data.List.Split (splitOn) import qualified Data.Map as M-import Data.Maybe (fromMaybe)+import Data.Maybe (fromMaybe, listToMaybe) import System.FilePath type MimeType = String@@ -42,15 +43,25 @@ M.lookup (takeWhile (/=';') mimetype) reverseMimeTypes -- note: we just look up the basic mime type, dropping the content-encoding etc. +-- | Determine general media category for file path, e.g.+--+-- prop> mediaCategory "foo.jpg" = Just "image"+mediaCategory :: FilePath -> Maybe String+mediaCategory fp = getMimeType fp >>= listToMaybe . splitOn "/"+ reverseMimeTypes :: M.Map MimeType String reverseMimeTypes = M.fromList $ map (\(k,v) -> (v,k)) mimeTypesList mimeTypes :: M.Map String MimeType mimeTypes = M.fromList mimeTypesList +-- | Collection of common mime types.+-- Except for first entry, list borrowed from+-- <https://github.com/Happstack/happstack-server/blob/master/src/Happstack/Server/FileServe/BuildingBlocks.hs happstack-server> mimeTypesList :: [(String, MimeType)]-mimeTypesList = -- List borrowed from happstack-server.- [("gz","application/x-gzip")+mimeTypesList =+ [("cpt","image/x-corelphotopaint")+ ,("gz","application/x-gzip") ,("cabal","application/x-cabal") ,("%","application/x-trash") ,("323","text/h323")
src/Text/Pandoc/MediaBag.hs view
@@ -16,9 +16,11 @@ -} module Text.Pandoc.MediaBag ( MediaBag,+ deleteMedia, lookupMedia, insertMedia, mediaDirectory,+ mediaItems ) where import Prelude import qualified Data.ByteString.Lazy as BL@@ -40,6 +42,14 @@ instance Show MediaBag where show bag = "MediaBag " ++ show (mediaDirectory bag) +-- | Delete a media item from a 'MediaBag', or do nothing if no item corresponds+-- to the given path.+deleteMedia :: FilePath -- ^ relative path and canonical name of resource+ -> MediaBag+ -> MediaBag+deleteMedia fp (MediaBag mediamap) =+ MediaBag $ M.delete (splitDirectories fp) mediamap+ -- | Insert a media item into a 'MediaBag', replacing any existing -- value with the same name. insertMedia :: FilePath -- ^ relative path and canonical name of resource@@ -66,3 +76,8 @@ mediaDirectory (MediaBag mediamap) = M.foldrWithKey (\fp (mime,contents) -> ((Posix.joinPath fp, mime, fromIntegral $ BL.length contents):)) [] mediamap++mediaItems :: MediaBag -> [(String, MimeType, BL.ByteString)]+mediaItems (MediaBag mediamap) =+ M.foldrWithKey (\fp (mime,contents) ->+ ((Posix.joinPath fp, mime, contents):)) [] mediamap
src/Text/Pandoc/PDF.hs view
@@ -27,6 +27,8 @@ import Data.Maybe (fromMaybe) import Data.Text (Text) import qualified Data.Text as T+import Text.Printf (printf)+import Data.Char (ord, isAscii) import System.Directory import System.Environment import System.Exit (ExitCode (..))@@ -47,7 +49,7 @@ #ifdef _WINDOWS import Data.List (intercalate) #endif-import Data.List (isPrefixOf)+import Data.List (isPrefixOf, find) import Text.Pandoc.Class (PandocIO, extractMedia, fillMediaBag, getCommonState, getVerbosity, putCommonState, report, runIOorExplode, setVerbosity)@@ -75,8 +77,8 @@ liftIO $ html2pdf verbosity program pdfargs source "pdfroff" -> do source <- writer opts doc- let args = ["-ms", "-mpdfmark", "-e", "-t", "-k", "-KUTF-8", "-i",- "--no-toc-relocation"] ++ pdfargs+ let args = ["-ms", "-mpdfmark", "-mspdf",+ "-e", "-t", "-k", "-KUTF-8", "-i"] ++ pdfargs verbosity <- getVerbosity liftIO $ generic2pdf verbosity program args source baseProg -> do@@ -243,7 +245,12 @@ missingCharacterWarnings verbosity log' = do let ls = BC.lines log' let isMissingCharacterWarning = BC.isPrefixOf "Missing character: "- let warnings = [ UTF8.toStringLazy (BC.drop 19 l)+ let addCodePoint [] = []+ addCodePoint (c:cs)+ | isAscii c = c : addCodePoint cs+ | otherwise = c : " (U+" ++ printf "%04X" (ord c) ++ ")" +++ addCodePoint cs+ let warnings = [ addCodePoint (UTF8.toStringLazy (BC.drop 19 l)) | l <- ls , isMissingCharacterWarning l ]@@ -297,7 +304,7 @@ putStrLn "[makePDF] Running" BL.hPutStr stdout out putStr "\n"- let pdfFile = tmpDir </> "texput.pdf"+ let pdfFile = tmpDir ++ "/texput.pdf" (_, pdf) <- getResultingPDF Nothing pdfFile return (exit, out, pdf) @@ -330,12 +337,14 @@ runTeXProgram :: Verbosity -> String -> [String] -> Int -> Int -> FilePath -> Text -> PandocIO (ExitCode, ByteString, Maybe ByteString) runTeXProgram verbosity program args runNumber numRuns tmpDir' source = do+ let isOutdirArg x = "-outdir=" `isPrefixOf` x ||+ "-output-directory=" `isPrefixOf` x let tmpDir =- case [x | x <- args, "-outdir=" `isPrefixOf` x] of- [x] -> drop 8 x- _ -> tmpDir'+ case find isOutdirArg args of+ Just x -> drop 1 $ dropWhile (/='=') x+ Nothing -> tmpDir' liftIO $ createDirectoryIfMissing True tmpDir- let file = tmpDir </> "input.tex"+ let file = tmpDir ++ "/input.tex" -- note: tmpDir has / path separators exists <- liftIO $ doesFileExist file unless exists $ liftIO $ BS.writeFile file $ UTF8.fromText source let isLatexMk = takeBaseName program == "latexmk"
src/Text/Pandoc/Readers/DocBook.hs view
@@ -24,8 +24,9 @@ import qualified Data.Text as T import Text.HTML.TagSoup.Entity (lookupEntity) import Text.Pandoc.Builder-import Text.Pandoc.Class (PandocMonad)+import Text.Pandoc.Class (PandocMonad, report) import Text.Pandoc.Options+import Text.Pandoc.Logging (LogMessage(..)) import Text.Pandoc.Shared (crFilter, safeRead) import Text.TeXMath (readMathML, writeTeX) import Text.XML.Light@@ -690,8 +691,8 @@ parseBlock (CRef x) = return $ plain $ str $ map toUpper x parseBlock (Elem e) = case qName (elName e) of- "toc" -> return mempty -- skip TOC, since in pandoc it's autogenerated- "index" -> return mempty -- skip index, since page numbers meaningless+ "toc" -> skip -- skip TOC, since in pandoc it's autogenerated+ "index" -> skip -- skip index, since page numbers meaningless "para" -> parseMixed para (elContent e) "formalpara" -> do tit <- case filterChild (named "title") e of@@ -703,9 +704,9 @@ "ackno" -> parseMixed para (elContent e) "epigraph" -> parseBlockquote "blockquote" -> parseBlockquote- "attribution" -> return mempty- "titleabbrev" -> return mempty- "authorinitials" -> return mempty+ "attribution" -> skip+ "titleabbrev" -> skip+ "authorinitials" -> skip "bibliography" -> sect 0 "bibliodiv" -> sect 1 "biblioentry" -> parseMixed para (elContent e)@@ -745,9 +746,9 @@ <$> getBlocks e "warning" -> blockQuote . (para (strong $ str "Warning") <>) <$> getBlocks e- "area" -> return mempty- "areaset" -> return mempty- "areaspec" -> return mempty+ "area" -> skip+ "areaset" -> skip+ "areaspec" -> skip "qandadiv" -> gets dbSectionLevel >>= sect . (+1) "question" -> addToStart (strong (str "Q:") <> str " ") <$> getBlocks e "answer" -> addToStart (strong (str "A:") <> str " ") <$> getBlocks e@@ -770,22 +771,22 @@ "variablelist" -> definitionList <$> deflistitems "figure" -> getFigure e "mediaobject" -> para <$> getMediaobject e- "caption" -> return mempty+ "caption" -> skip "info" -> addMetadataFromElement e "articleinfo" -> addMetadataFromElement e- "sectioninfo" -> return mempty -- keywords & other metadata- "refsectioninfo" -> return mempty -- keywords & other metadata- "refsect1info" -> return mempty -- keywords & other metadata- "refsect2info" -> return mempty -- keywords & other metadata- "refsect3info" -> return mempty -- keywords & other metadata- "sect1info" -> return mempty -- keywords & other metadata- "sect2info" -> return mempty -- keywords & other metadata- "sect3info" -> return mempty -- keywords & other metadata- "sect4info" -> return mempty -- keywords & other metadata- "sect5info" -> return mempty -- keywords & other metadata- "chapterinfo" -> return mempty -- keywords & other metadata- "glossaryinfo" -> return mempty -- keywords & other metadata- "appendixinfo" -> return mempty -- keywords & other metadata+ "sectioninfo" -> skip -- keywords & other metadata+ "refsectioninfo" -> skip -- keywords & other metadata+ "refsect1info" -> skip -- keywords & other metadata+ "refsect2info" -> skip -- keywords & other metadata+ "refsect3info" -> skip -- keywords & other metadata+ "sect1info" -> skip -- keywords & other metadata+ "sect2info" -> skip -- keywords & other metadata+ "sect3info" -> skip -- keywords & other metadata+ "sect4info" -> skip -- keywords & other metadata+ "sect5info" -> skip -- keywords & other metadata+ "chapterinfo" -> skip -- keywords & other metadata+ "glossaryinfo" -> skip -- keywords & other metadata+ "appendixinfo" -> skip -- keywords & other metadata "bookinfo" -> addMetadataFromElement e "article" -> modify (\st -> st{ dbBook = False }) >> addMetadataFromElement e >> getBlocks e@@ -802,8 +803,12 @@ "?xml" -> return mempty "title" -> return mempty -- handled in parent element "subtitle" -> return mempty -- handled in parent element- _ -> getBlocks e- where parseMixed container conts = do+ _ -> skip >> getBlocks e+ where skip = do+ lift $ report $ IgnoredElement $ qName (elName e)+ return mempty++ parseMixed container conts = do let (ils,rest) = break isBlockElement conts ils' <- (trimInlines . mconcat) <$> mapM parseInline ils let p = if ils' == mempty then mempty else container ils'@@ -1000,13 +1005,17 @@ "footnote" -> (note . mconcat) <$> mapM parseBlock (elContent e) "title" -> return mempty- "affiliation" -> return mempty+ "affiliation" -> skip -- Note: this isn't a real docbook tag; it's what we convert -- <?asciidor-br?> to in handleInstructions, above. A kludge to -- work around xml-light's inability to parse an instruction. "br" -> return linebreak- _ -> innerInlines- where innerInlines = (trimInlines . mconcat) <$>+ _ -> skip >> innerInlines+ where skip = do+ lift $ report $ IgnoredElement $ qName (elName e)+ return mempty++ innerInlines = (trimInlines . mconcat) <$> mapM parseInline (elContent e) codeWithLang = do let classes' = case attrValue "language" e of
src/Text/Pandoc/Readers/Docx.hs view
@@ -252,13 +252,17 @@ , isStrike = case isStrike rPr of Just bool -> Just bool Nothing -> isStrike rPr'+ , isRTL = case isRTL rPr of+ Just bool -> Just bool+ Nothing -> isRTL 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 }+ , rStyle = rStyle rPr+ } | otherwise = return rPr runStyleToTransform :: PandocMonad m => RunStyle -> DocxContext m (Inlines -> Inlines)@@ -286,6 +290,12 @@ | Just True <- isStrike rPr = do transform <- runStyleToTransform rPr{isStrike = Nothing} return $ strikeout . transform+ | Just True <- isRTL rPr = do+ transform <- runStyleToTransform rPr{isRTL = Nothing}+ return $ spanWith ("",[],[("dir","rtl")]) . transform+ | Just False <- isRTL rPr = do+ transform <- runStyleToTransform rPr{isRTL = Nothing}+ return $ spanWith ("",[],[("dir","ltr")]) . transform | Just SupScrpt <- rVertAlign rPr = do transform <- runStyleToTransform rPr{rVertAlign = Nothing} return $ superscript . transform
src/Text/Pandoc/Readers/Docx/Parse.hs view
@@ -289,9 +289,11 @@ , isItalic :: Maybe Bool , isSmallCaps :: Maybe Bool , isStrike :: Maybe Bool+ , isRTL :: Maybe Bool , rVertAlign :: Maybe VertAlign , rUnderline :: Maybe String- , rStyle :: Maybe CharStyle}+ , rStyle :: Maybe CharStyle+ } deriving Show data ParStyleData = ParStyleData { headingLev :: Maybe (String, Int)@@ -305,9 +307,11 @@ , isItalic = Nothing , isSmallCaps = Nothing , isStrike = Nothing+ , isRTL = Nothing , rVertAlign = Nothing , rUnderline = Nothing- , rStyle = Nothing}+ , rStyle = Nothing+ } type Target = String type Anchor = String@@ -1106,6 +1110,7 @@ checkOnOff ns rPr (elemName ns "w" "iCs") , isSmallCaps = checkOnOff ns rPr (elemName ns "w" "smallCaps") , isStrike = checkOnOff ns rPr (elemName ns "w" "strike")+ , isRTL = checkOnOff ns rPr (elemName ns "w" "rtl") , rVertAlign = findChildByName ns "w" "vertAlign" rPr >>= findAttrByName ns "w" "val" >>=@@ -1117,7 +1122,7 @@ findChildByName ns "w" "u" rPr >>= findAttrByName ns "w" "val" , rStyle = parentStyle- }+ } elemToRunStyle _ _ _ = defaultRunStyle getHeaderLevel :: NameSpaces -> Element -> Maybe (String,Int)
src/Text/Pandoc/Readers/FB2.hs view
@@ -31,6 +31,7 @@ import Data.Functor import Data.List (dropWhileEnd, intersperse) import Data.List.Split (splitOn)+import qualified Data.Map as M import Data.Text (Text) import Data.Default import Data.Maybe@@ -48,12 +49,14 @@ data FB2State = FB2State{ fb2SectionLevel :: Int , fb2Meta :: Meta , fb2Authors :: [String]+ , fb2Notes :: M.Map String Blocks } deriving Show instance Default FB2State where def = FB2State{ fb2SectionLevel = 1 , fb2Meta = mempty , fb2Authors = []+ , fb2Notes = M.empty } instance HasMeta FB2State where@@ -61,12 +64,15 @@ deleteMeta field s = s {fb2Meta = deleteMeta field (fb2Meta s)} readFB2 :: PandocMonad m => ReaderOptions -> Text -> m Pandoc-readFB2 _ inp = do- (bs, st) <- runStateT (mapM parseBlock $ parseXML (crFilter inp)) def- let authors = if null $ fb2Authors st- then id- else setMeta "author" (map text $ reverse $ fb2Authors st)- pure $ Pandoc (authors $ fb2Meta st) (toList . mconcat $ bs)+readFB2 _ inp =+ case parseXMLDoc $ crFilter inp of+ Nothing -> throwError $ PandocParseError "Not an XML document"+ Just e -> do+ (bs, st) <- runStateT (parseRootElement e) def+ let authors = if null $ fb2Authors st+ then id+ else setMeta "author" (map text $ reverse $ fb2Authors st)+ pure $ Pandoc (authors $ fb2Meta st) $ toList bs -- * Utility functions @@ -92,7 +98,9 @@ "sup" -> superscript <$> parseStyleType e "code" -> pure $ code $ strContent e "image" -> parseInlineImageElement e- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ ".")+ name -> do+ report $ IgnoredElement name+ pure mempty parseInline (Text x) = pure $ text $ cdData x parseInline (CRef r) = pure $ str $ convertEntity r @@ -101,21 +109,59 @@ -- * Root element parser -parseBlock :: PandocMonad m => Content -> FB2 m Blocks-parseBlock (Elem e) =+parseRootElement :: PandocMonad m => Element -> FB2 m Blocks+parseRootElement e = case qName $ elName e of- "?xml" -> pure mempty- "FictionBook" -> mconcat <$> mapM parseFictionBookChild (elChildren e)+ "FictionBook" -> do+ -- Parse notes before parsing the rest of the content.+ case filterChild isNotesBody e of+ Nothing -> pure ()+ Just notesBody -> parseNotesBody notesBody+ -- Parse metadata and content+ mconcat <$> mapM parseFictionBookChild (elChildren e) name -> report (UnexpectedXmlElement name "root") $> mempty-parseBlock _ = pure mempty +-- | Parse notes+parseNotesBody :: PandocMonad m => Element -> FB2 m ()+parseNotesBody e = mempty <$ mapM parseNotesBodyChild (elChildren e)++-- | Parse a child of @\<body name="notes">@ element.+parseNotesBodyChild :: PandocMonad m => Element -> FB2 m ()+parseNotesBodyChild e =+ case qName $ elName e of+ "section" -> parseNote e+ _ -> pure ()++isNotesBody :: Element -> Bool+isNotesBody e =+ qName (elName e) == "body" &&+ findAttr (unqual "name") e == Just "notes"++parseNote :: PandocMonad m => Element -> FB2 m ()+parseNote e =+ case findAttr (unqual "id") e of+ Nothing -> pure ()+ Just sectionId -> do+ content <- mconcat <$> mapM parseSectionChild (dropTitle $ elChildren e)+ oldNotes <- gets fb2Notes+ modify $ \s -> s { fb2Notes = M.insert ("#" ++ sectionId) content oldNotes }+ pure ()+ where+ isTitle x = qName (elName x) == "title"+ dropTitle (x:xs) = if isTitle x+ then xs -- Drop note section <title> if present+ else (x:xs)+ dropTitle [] = []+ -- | Parse a child of @\<FictionBook>@ element. parseFictionBookChild :: PandocMonad m => Element -> FB2 m Blocks parseFictionBookChild e = case qName $ elName e of "stylesheet" -> pure mempty -- stylesheet is ignored "description" -> mempty <$ mapM_ parseDescriptionChild (elChildren e)- "body" -> mconcat <$> mapM parseBodyChild (elChildren e)+ "body" -> if isNotesBody e+ then pure mempty+ else mconcat <$> mapM parseBodyChild (elChildren e) "binary" -> mempty <$ parseBinaryElement e name -> report (UnexpectedXmlElement name "FictionBook") $> mempty @@ -129,7 +175,9 @@ "publish-info" -> pure () "custom-info" -> pure () "output" -> pure ()- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ "in description.")+ name -> do+ report $ IgnoredElement $ name ++ " in description"+ pure mempty -- | Parse a child of @\<body>@ element. parseBodyChild :: PandocMonad m => Element -> FB2 m Blocks@@ -144,27 +192,30 @@ -- | Parse a @\<binary>@ element. parseBinaryElement :: PandocMonad m => Element -> FB2 m () parseBinaryElement e =- case (findAttr (QName "id" Nothing Nothing) e, findAttr (QName "content-type" Nothing Nothing) e) of- (Nothing, _) -> throwError $ PandocParseError "<binary> element must have an \"id\" attribute"- (Just _, Nothing) -> throwError $ PandocParseError "<binary> element must have a \"content-type\" attribute"+ case (findAttr (unqual "id") e, findAttr (unqual "content-type") e) of+ (Nothing, _) -> report $ IgnoredElement "binary without id attribute"+ (Just _, Nothing) ->+ report $ IgnoredElement "binary without content-type attribute" (Just filename, contentType) -> insertMedia filename contentType (decodeLenient (pack (strContent e))) -- * Type parsers -- | Parse @authorType@ parseAuthor :: PandocMonad m => Element -> FB2 m String-parseAuthor e = unwords <$> mapM parseAuthorChild (elChildren e)+parseAuthor e = unwords . catMaybes <$> mapM parseAuthorChild (elChildren e) -parseAuthorChild :: PandocMonad m => Element -> FB2 m String+parseAuthorChild :: PandocMonad m => Element -> FB2 m (Maybe String) parseAuthorChild e = case qName $ elName e of- "first-name" -> pure $ strContent e- "middle-name" -> pure $ strContent e- "last-name" -> pure $ strContent e- "nickname" -> pure $ strContent e- "home-page" -> pure $ strContent e- "email" -> pure $ strContent e- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ " in author.")+ "first-name" -> pure $ Just $ strContent e+ "middle-name" -> pure $ Just $ strContent e+ "last-name" -> pure $ Just $ strContent e+ "nickname" -> pure $ Just $ strContent e+ "home-page" -> pure $ Just $ strContent e+ "email" -> pure $ Just $ strContent e+ name -> do+ report $ IgnoredElement $ name ++ " in author"+ pure Nothing -- | Parse @titleType@ parseTitle :: PandocMonad m => Element -> FB2 m Blocks@@ -186,10 +237,12 @@ parseImageElement e = case href of Just src -> pure $ para $ imageWith (imgId, [], []) (removeHash src) title alt- Nothing -> throwError $ PandocParseError "Couldn't parse FB2 file: image without href."- where alt = maybe mempty str $ findAttr (QName "alt" Nothing Nothing) e- title = fromMaybe "" $ findAttr (QName "title" Nothing Nothing) e- imgId = fromMaybe "" $ findAttr (QName "id" Nothing Nothing) e+ Nothing -> do+ report $ IgnoredElement " image without href"+ pure mempty+ where alt = maybe mempty str $ findAttr (unqual "alt") e+ title = fromMaybe "" $ findAttr (unqual "title") e+ imgId = fromMaybe "" $ findAttr (unqual "id") e href = findAttr (QName "href" (Just "http://www.w3.org/1999/xlink") Nothing) e -- | Parse @pType@@@ -247,7 +300,7 @@ parseEpigraph :: PandocMonad m => Element -> FB2 m Blocks parseEpigraph e = divWith (divId, ["epigraph"], []) . mconcat <$> mapM parseEpigraphChild (elChildren e)- where divId = fromMaybe "" $ findAttr (QName "id" Nothing Nothing) e+ where divId = fromMaybe "" $ findAttr (unqual "id") e parseEpigraphChild :: PandocMonad m => Element -> FB2 m Blocks parseEpigraphChild e =@@ -279,7 +332,7 @@ parseSection e = do n <- gets fb2SectionLevel modify $ \st -> st{ fb2SectionLevel = n + 1 }- let sectionId = fromMaybe "" $ findAttr (QName "id" Nothing Nothing) e+ let sectionId = fromMaybe "" $ findAttr (unqual "id") e bs <- divWith (sectionId, ["section"], []) . mconcat <$> mapM parseSectionChild (elChildren e) modify $ \st -> st{ fb2SectionLevel = n } pure bs@@ -309,9 +362,11 @@ parseNamedStyle e = do content <- mconcat <$> mapM parseNamedStyleChild (elContent e) let lang = maybeToList $ ("lang",) <$> findAttr (QName "lang" Nothing (Just "xml")) e- case findAttr (QName "name" Nothing Nothing) e of+ case findAttr (unqual "name") e of Just name -> pure $ spanWith ("", [name], lang) content- Nothing -> throwError $ PandocParseError "Couldn't parse FB2 file: link without required name."+ Nothing -> do+ report $ IgnoredElement "link without required name"+ pure mempty parseNamedStyleChild :: PandocMonad m => Content -> FB2 m Inlines parseNamedStyleChild (Elem e) =@@ -325,22 +380,33 @@ "sup" -> superscript <$> parseStyleType e "code" -> pure $ code $ strContent e "image" -> parseInlineImageElement e- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ ".")+ name -> do+ report $ IgnoredElement $ name ++ " in style"+ pure mempty parseNamedStyleChild x = parseInline x -- | Parse @linkType@ parseLinkType :: PandocMonad m => Element -> FB2 m Inlines parseLinkType e = do content <- mconcat <$> mapM parseStyleLinkType (elContent e)+ notes <- gets fb2Notes case findAttr (QName "href" (Just "http://www.w3.org/1999/xlink") Nothing) e of- Just href -> pure $ link href "" content- Nothing -> throwError $ PandocParseError "Couldn't parse FB2 file: link without required href."+ Just href -> case findAttr (QName "type" Nothing Nothing) e of+ Just "note" -> case M.lookup href notes of+ Nothing -> pure $ link href "" content+ Just contents -> pure $ note contents+ _ -> pure $ link href "" content+ Nothing -> do+ report $ IgnoredElement "link without required href"+ pure mempty -- | Parse @styleLinkType@ parseStyleLinkType :: PandocMonad m => Content -> FB2 m Inlines parseStyleLinkType x@(Elem e) = case qName (elName e) of- "a" -> throwError $ PandocParseError "Couldn't parse FB2 file: links cannot be nested."+ "a" -> do+ report $ IgnoredElement "nested link"+ pure mempty _ -> parseInline x parseStyleLinkType x = parseInline x @@ -363,7 +429,7 @@ "src-lang" -> pure () "translator" -> pure () "sequence" -> pure ()- name -> throwError $ PandocParseError ("Couldn't parse FB2 file: unexpected element " ++ name ++ " in title-info.")+ name -> report $ IgnoredElement $ name ++ " in title-info" parseCoverPage :: PandocMonad m => Element -> FB2 m () parseCoverPage e =@@ -381,6 +447,8 @@ parseInlineImageElement e = case href of Just src -> pure $ imageWith ("", [], []) (removeHash src) "" alt- Nothing -> throwError $ PandocParseError "Couldn't parse FB2 file: inline image without href."- where alt = maybe mempty str $ findAttr (QName "alt" Nothing Nothing) e+ Nothing -> do+ report $ IgnoredElement "inline image without href"+ pure mempty+ where alt = maybe mempty str $ findAttr (unqual "alt") e href = findAttr (QName "href" (Just "http://www.w3.org/1999/xlink") Nothing) e
src/Text/Pandoc/Readers/HTML.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -61,7 +62,7 @@ extensionEnabled) import Text.Pandoc.Parsing hiding ((<|>)) import Text.Pandoc.Shared (addMetaField, blocksToInlines', crFilter, escapeURI,- extractSpaces, safeRead, underlineSpan)+ extractSpaces, onlySimpleTableCells, safeRead, underlineSpan) import Text.Pandoc.Walk import Text.Parsec.Error import Text.TeXMath (readMathML, writeTeX)@@ -94,13 +95,14 @@ Left err -> throwError $ PandocParseError $ getError err replaceNotes :: PandocMonad m => [Block] -> TagParser m [Block]-replaceNotes = walkM replaceNotes'+replaceNotes bs = do+ st <- getState+ return $ walk (replaceNotes' (noteTable st)) bs -replaceNotes' :: PandocMonad m => Inline -> TagParser m Inline-replaceNotes' (RawInline (Format "noteref") ref) = maybe (Str "") (Note . B.toList) . lookup ref <$> getNotes- where- getNotes = noteTable <$> getState-replaceNotes' x = return x+replaceNotes' :: [(String, Blocks)] -> Inline -> Inline+replaceNotes' noteTbl (RawInline (Format "noteref") ref) =+ maybe (Str "") (Note . B.toList) $ lookup ref noteTbl+replaceNotes' _ x = x data HTMLState = HTMLState@@ -129,7 +131,7 @@ pHtml :: PandocMonad m => TagParser m Blocks pHtml = try $ do- (TagOpen "html" attr) <- lookAhead pAnyTag+ (TagOpen "html" attr) <- lookAhead pAny for_ (lookup "lang" attr) $ updateState . B.setMeta "lang" . B.text . T.unpack pInTags "html" block@@ -138,7 +140,7 @@ pBody = pInTags "body" block pHead :: PandocMonad m => TagParser m Blocks-pHead = pInTags "head" $ pTitle <|> pMetaTag <|> pBaseTag <|> (mempty <$ pAnyTag)+pHead = pInTags "head" $ pTitle <|> pMetaTag <|> pBaseTag <|> (mempty <$ pAny) where pTitle = pInTags "title" inline >>= setTitle . trimInlines setTitle t = mempty <$ updateState (B.setMeta "title" t) pMetaTag = do@@ -216,15 +218,16 @@ let attr = toStringAttr attr' case flip lookup namespaces =<< lookup "required-namespace" attr of Just p -> Just <$> pInTags "case" (skipMany pBlank *> p <* skipMany pBlank)- Nothing -> Nothing <$ manyTill pAnyTag (pSatisfy (matchTagClose "case"))+ Nothing -> Nothing <$ manyTill pAny (pSatisfy (matchTagClose "case")) eFootnote :: PandocMonad m => TagParser m () eFootnote = try $ do let notes = ["footnote", "rearnote"] guardEnabled Ext_epub_html_exts- (TagOpen tag attr') <- lookAhead pAnyTag+ (TagOpen tag attr') <- lookAhead pAny let attr = toStringAttr attr'- guard $ maybe False (`elem` notes) (lookup "type" attr)+ guard $ maybe False (`elem` notes)+ (lookup "type" attr <|> lookup "epub:type" attr) let ident = fromMaybe "" (lookup "id" attr) content <- pInTags tag block addNote ident content@@ -235,20 +238,26 @@ eNoteref :: PandocMonad m => TagParser m Inlines eNoteref = try $ do guardEnabled Ext_epub_html_exts- TagOpen tag attr' <- lookAhead pAnyTag- let attr = toStringAttr attr'- guard $ lookup "type" attr == Just "noteref"- let ident = maybe "" (dropWhile (== '#')) (lookup "href" attr)- guard (not (null ident))- pInTags tag block+ TagOpen tag attr <-+ pSatisfy (\case+ TagOpen _ as+ -> (lookup "type" as <|> lookup "epub:type" as)+ == Just "noteref"+ _ -> False)+ ident <- case T.unpack <$> lookup "href" attr of+ Just ('#':rest) -> return rest+ _ -> mzero+ _ <- manyTill pAny (pSatisfy (\case+ TagClose t -> t == tag+ _ -> False)) return $ B.rawInline "noteref" ident -- Strip TOC if there is one, better to generate again eTOC :: PandocMonad m => TagParser m () eTOC = try $ do guardEnabled Ext_epub_html_exts- (TagOpen tag attr) <- lookAhead pAnyTag- guard $ lookup "type" attr == Just "toc"+ (TagOpen tag attr) <- lookAhead pAny+ guard $ (lookup "type" attr <|> lookup "epub:type" attr) == Just "toc" void (pInTags tag block) pList :: PandocMonad m => TagParser m Blocks@@ -336,7 +345,7 @@ terms <- many1 (try $ skipMany nonItem >> pInTags "dt" inline) defs <- many1 (try $ skipMany nonItem >> pInTags "dd" block) skipMany nonItem- let term = foldl1 (\x y -> x <> B.linebreak <> y) terms+ let term = foldl1 (\x y -> x <> B.linebreak <> y) $ map trimInlines terms return (term, map (fixPlains True) defs) fixPlains :: Bool -> Blocks -> Blocks@@ -357,7 +366,7 @@ pRawTag :: PandocMonad m => TagParser m Text pRawTag = do- tag <- pAnyTag+ tag <- pAny let ignorable x = x `elem` ["html","head","body","!DOCTYPE","?xml"] if tagOpen ignorable (const True) tag || tagClose ignorable tag then return mempty@@ -414,13 +423,14 @@ pHtmlBlock :: PandocMonad m => Text -> TagParser m Text pHtmlBlock t = try $ do open <- pSatisfy (matchTagOpen t [])- contents <- manyTill pAnyTag (pSatisfy (matchTagClose t))+ contents <- manyTill pAny (pSatisfy (matchTagClose t)) return $ renderTags' $ [open] <> contents <> [TagClose t] -- Sets chapter context eSection :: PandocMonad m => TagParser m Blocks eSection = try $ do- let matchChapter as = maybe False (T.isInfixOf "chapter") (lookup "type" as)+ let matchChapter as = maybe False (T.isInfixOf "chapter")+ (lookup "type" as <|> lookup "epub:type" as) let sectTag = tagOpen (`elem` sectioningContent) matchChapter TagOpen tag _ <- lookAhead $ pSatisfy sectTag setInChapter (pInTags tag block)@@ -439,7 +449,8 @@ eTitlePage :: PandocMonad m => TagParser m () eTitlePage = try $ do- let isTitlePage as = maybe False (T.isInfixOf "titlepage") (lookup "type" as)+ let isTitlePage as = maybe False (T.isInfixOf "titlepage")+ (lookup "type" as <|> lookup "epub:type" as) let groupTag = tagOpen (\x -> x `elem` groupingContent || x == "section") isTitlePage TagOpen tag _ <- lookAhead $ pSatisfy groupTag@@ -488,14 +499,9 @@ TagClose _ <- pSatisfy (matchTagClose "table") let rows'' = concat rowsLs <> topfoot <> bottomfoot let rows''' = map (map snd) rows''- -- let rows''' = map (map snd) rows'' -- fail on empty table guard $ not $ null head' && null rows'''- let isSinglePlain x = case B.toList x of- [] -> True- [Plain _] -> True- _ -> False- let isSimple = all isSinglePlain $ concat (head':rows''')+ let isSimple = onlySimpleTableCells $ fmap B.toList <$> head':rows''' let cols = if null head' then maximum (map length rows''') else length head'@@ -610,7 +616,7 @@ pCodeBlock = try $ do TagOpen _ attr' <- pSatisfy (matchTagOpen "pre" []) let attr = toStringAttr attr'- contents <- manyTill pAnyTag (pCloses "pre" <|> eof)+ contents <- manyTill pAny (pCloses "pre" <|> eof) let rawText = concatMap tagToString contents -- drop leading newline if any let result' = case rawText of@@ -663,8 +669,8 @@ pSatisfy :: PandocMonad m => (Tag Text -> Bool) -> TagParser m (Tag Text) pSatisfy f = try $ optional pLocation >> pSat f -pAnyTag :: PandocMonad m => TagParser m (Tag Text)-pAnyTag = pSatisfy (const True)+pAny :: PandocMonad m => TagParser m (Tag Text)+pAny = pSatisfy (const True) pSelfClosing :: PandocMonad m => (Text -> Bool) -> ([Attribute Text] -> Bool)@@ -771,7 +777,7 @@ pCode = try $ do (TagOpen open attr') <- pSatisfy $ tagOpen (`elem` ["code","tt"]) (const True) let attr = toStringAttr attr'- result <- manyTill pAnyTag (pCloses open)+ result <- manyTill pAny (pCloses open) return $ B.codeWith (mkAttr attr) $ unwords $ lines $ T.unpack $ innerText result @@ -818,7 +824,7 @@ -> return $ "display" `T.isSuffixOf` x _ -> mzero contents <- T.unpack . innerText <$>- manyTill pAnyTag (pSatisfy (matchTagClose "script"))+ manyTill pAny (pSatisfy (matchTagClose "script")) return $ (if isdisplay then B.displayMath else B.math) contents pMath :: PandocMonad m => Bool -> TagParser m Inlines@@ -829,7 +835,7 @@ let attr = toStringAttr attr' unless inCase $ guard (maybe True (== mathMLNamespace) (lookup "xmlns" attr))- contents <- manyTill pAnyTag (pSatisfy (matchTagClose "math"))+ contents <- manyTill pAny (pSatisfy (matchTagClose "math")) case mathMLToTeXMath (T.unpack $ renderTags $ [open] <> contents <> [TagClose "math"]) of Left _ -> return $ B.spanWith ("",["math"],attr) $ B.text $@@ -872,7 +878,7 @@ pCloses tagtype = try $ do t <- lookAhead $ pSatisfy $ \tag -> isTagClose tag || isTagOpen tag case t of- (TagClose t') | t' == tagtype -> void pAnyTag+ (TagClose t') | t' == tagtype -> void pAny (TagOpen t' _) | t' `closes` tagtype -> return () (TagClose "ul") | tagtype == "li" -> return () (TagClose "ol") | tagtype == "li" -> return ()
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -155,10 +155,15 @@ => ParserT String s m String rawLaTeXInline = do lookAhead (try (char '\\' >> letter))- snd <$> ( rawLaTeXParser True+ raw <- snd <$>+ ( rawLaTeXParser True (mempty <$ (controlSeq "input" >> skipMany opt >> braced)) inlines- <|> rawLaTeXParser True (inlineEnvironment <|> inlineCommand') inlines)+ <|> rawLaTeXParser True (inlineEnvironment <|> inlineCommand')+ inlines+ )+ finalbraces <- mconcat <$> many (try (string "{}")) -- see #5439+ return $ raw <> finalbraces inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines inlineCommand = do@@ -511,11 +516,11 @@ _ -> mzero withVerbatimMode $ (code . T.unpack . untokenize) <$>- manyTill (verbTok marker) (symbol marker)+ manyTill (notFollowedBy newlineTok >> verbTok marker) (symbol marker) verbTok :: PandocMonad m => Char -> LP m Tok verbTok stopchar = do- t@(Tok pos toktype txt) <- satisfyTok (not . isNewlineTok)+ t@(Tok pos toktype txt) <- anyTok case T.findIndex (== stopchar) txt of Nothing -> return t Just i -> do@@ -525,10 +530,16 @@ : totoks (incSourceColumn pos (i + 1)) (T.drop 1 t2) ++ inp return $ Tok pos toktype t1 +listingsLanguage :: [(String, String)] -> Maybe String+listingsLanguage opts =+ case lookup "language" opts of+ Nothing -> Nothing+ Just l -> fromListingsLanguage l `mplus` Just l+ dolstinline :: PandocMonad m => LP m Inlines dolstinline = do options <- option [] keyvals- let classes = maybeToList $ lookup "language" options >>= fromListingsLanguage+ let classes = maybeToList $ listingsLanguage options doinlinecode classes domintinline :: PandocMonad m => LP m Inlines@@ -545,9 +556,13 @@ _ -> mzero let stopchar = if marker == '{' then '}' else marker withVerbatimMode $- (codeWith ("",classes,[]) . T.unpack . untokenize) <$>+ (codeWith ("",classes,[]) . map nlToSpace . T.unpack . untokenize) <$> manyTill (verbTok stopchar) (symbol stopchar) +nlToSpace :: Char -> Char+nlToSpace '\n' = ' '+nlToSpace x = x+ keyval :: PandocMonad m => LP m (String, String) keyval = try $ do Tok _ Word key <- satisfyTok isWordTok@@ -1559,10 +1574,11 @@ case mtype of "DeclareMathOperator" -> Tok pos (CtrlSeq "mathop") "\\mathop"+ : Tok pos Symbol "{" : Tok pos (CtrlSeq "mathrm") "\\mathrm" : Tok pos Symbol "{" : (contents' ++- [ Tok pos Symbol "}" ])+ [ Tok pos Symbol "}", Tok pos Symbol "}" ]) _ -> contents' when (mtype == "newcommand") $ do macros <- sMacros <$> getState@@ -2031,8 +2047,7 @@ else k, v) | (k,v) <- options ] classes = [ "numberLines" | lookup "numbers" options == Just "left" ]- ++ maybeToList (lookup "language" options- >>= fromListingsLanguage)+ ++ maybeToList (listingsLanguage options) in (fromMaybe "" (lookup "label" options), classes, kvs) inputListing :: PandocMonad m => LP m Blocks@@ -2048,15 +2063,16 @@ report $ CouldNotLoadIncludeFile f pos return [] let (ident,classes,kvs) = parseListingsOptions options- let language = case lookup "language" options >>= fromListingsLanguage of- Just l -> [l]- Nothing -> take 1 $ languagesByExtension (takeExtension f)+ let classes' =+ (case listingsLanguage options of+ Nothing -> (take 1 (languagesByExtension (takeExtension f)) ++)+ Just _ -> id) classes let firstline = fromMaybe 1 $ lookup "firstline" options >>= safeRead let lastline = fromMaybe (length codeLines) $ lookup "lastline" options >>= safeRead let codeContents = intercalate "\n" $ take (1 + lastline - firstline) $ drop (firstline - 1) codeLines- return $ codeBlockWith (ident,ordNub (classes ++ language),kvs) codeContents+ return $ codeBlockWith (ident,classes',kvs) codeContents -- lists
src/Text/Pandoc/Readers/Markdown.hs view
@@ -589,10 +589,13 @@ return $ B.headerWith attr' level <$> text registerImplicitHeader :: PandocMonad m => String -> Attr -> MarkdownParser m ()-registerImplicitHeader raw attr@(ident, _, _) = do- let key = toKey $ "[" ++ raw ++ "]"- updateState (\s -> s { stateHeaderKeys =- M.insert key (('#':ident,""), attr) (stateHeaderKeys s) })+registerImplicitHeader raw attr@(ident, _, _)+ | null raw = return ()+ | otherwise = do+ let key = toKey $ "[" ++ raw ++ "]"+ updateState $ \s ->+ s { stateHeaderKeys = M.insert key (('#':ident,""), attr)+ (stateHeaderKeys s) } -- -- hrule block
src/Text/Pandoc/Readers/MediaWiki.hs view
@@ -253,7 +253,7 @@ rowsep :: PandocMonad m => MWParser m () rowsep = try $ guardColumnOne *> skipSpaces *> sym "|-" <*- many (char '-') <* optional parseAttr <* blanklines+ many (char '-') <* optional parseAttrs <* blanklines cellsep :: PandocMonad m => MWParser m () cellsep = try $ do@@ -277,7 +277,7 @@ guardColumnOne skipSpaces sym "|+"- optional (try $ parseAttr *> skipSpaces *> char '|' *> blanklines)+ optional (try $ parseAttrs *> skipSpaces *> char '|' *> blanklines) (trimInlines . mconcat) <$> many (notFollowedBy (cellsep <|> rowsep) *> inline)
src/Text/Pandoc/Readers/Muse.hs view
@@ -903,10 +903,7 @@ -- | Parse a link or image. linkOrImage :: PandocMonad m => MuseParser m (F Inlines)-linkOrImage = try $ do- inLink <- asks museInLink- guard $ not inLink- local (\s -> s { museInLink = True }) (link "URL:" <|> image <|> link "")+linkOrImage = try $ link "URL:" <|> image <|> link "" linkContent :: PandocMonad m => MuseParser m (F Inlines) linkContent = trimInlinesF . mconcat@@ -916,9 +913,11 @@ -- | Parse a link starting with (possibly null) prefix link :: PandocMonad m => String -> MuseParser m (F Inlines) link prefix = try $ do+ inLink <- asks museInLink+ guard $ not inLink string $ "[[" ++ prefix url <- manyTill anyChar $ char ']'- content <- option (pure $ B.str url) linkContent+ content <- option (pure $ B.str url) (local (\s -> s { museInLink = True }) linkContent) char ']' return $ B.link url "" <$> content
src/Text/Pandoc/Readers/Org/DocumentTree.hs view
@@ -235,8 +235,8 @@ else flattenHeader header return . mconcat $ [ headerText- , headlineContents hdln , planningBlock+ , headlineContents hdln , listBlock ] where@@ -273,7 +273,9 @@ todoKeyword :: Monad m => OrgParser m TodoMarker todoKeyword = try $ do taskStates <- activeTodoMarkers <$> getState- let kwParser tdm = try (tdm <$ string (todoMarkerName tdm) <* spaceChar)+ let kwParser tdm = try (tdm <$ string (todoMarkerName tdm)+ <* spaceChar+ <* updateLastPreCharPos) choice (map kwParser taskStates) todoKeywordToInlines :: TodoMarker -> Inlines
src/Text/Pandoc/Readers/Org/ExportSettings.hs view
@@ -13,6 +13,8 @@ ) where import Prelude+import Text.Pandoc.Class (PandocMonad, report)+import Text.Pandoc.Logging (LogMessage (UnknownOrgExportOption)) import Text.Pandoc.Readers.Org.ParserState import Text.Pandoc.Readers.Org.Parsing @@ -21,14 +23,14 @@ import Data.Maybe (listToMaybe) -- | Read and handle space separated org-mode export settings.-exportSettings :: Monad m => OrgParser m ()-exportSettings = void $ sepBy spaces exportSetting+exportSettings :: PandocMonad m => OrgParser m ()+exportSettings = void $ sepBy skipSpaces exportSetting -- | Setter function for export settings. type ExportSettingSetter a = a -> ExportSettings -> ExportSettings -- | Read and process a single org-mode export option.-exportSetting :: Monad m => OrgParser m ()+exportSetting :: PandocMonad m => OrgParser m () exportSetting = choice [ booleanSetting "^" (\val es -> es { exportSubSuperscripts = val }) , booleanSetting "'" (\val es -> es { exportSmartQuotes = val })@@ -63,6 +65,7 @@ , ignoredSetting "toc" , booleanSetting "todo" (\val es -> es { exportWithTodoKeywords = val }) , ignoredSetting "|"+ , ignoreAndWarn ] <?> "export setting" genericExportSetting :: Monad m@@ -143,6 +146,13 @@ -- | Read but ignore the export setting. ignoredSetting :: Monad m => String -> OrgParser m () ignoredSetting s = try (() <$ string s <* char ':' <* many1 nonspaceChar)++-- | Read any setting string, but ignore it and emit a warning.+ignoreAndWarn :: PandocMonad m => OrgParser m ()+ignoreAndWarn = try $ do+ opt <- many1 nonspaceChar+ report (UnknownOrgExportOption opt)+ return () -- | Read an elisp boolean. Only NIL is treated as false, non-NIL values are -- interpreted as true.
src/Text/Pandoc/Readers/Org/Inlines.hs view
@@ -791,7 +791,7 @@ cmd <- inlineLaTeXCommand ils <- (lift . lift) $ parseAsInlineLaTeX cmd maybe mzero returnF $- parseAsMath cmd `mplus` parseAsMathMLSym cmd `mplus` ils+ parseAsMathMLSym cmd `mplus` parseAsMath cmd `mplus` ils where parseAsMath :: String -> Maybe Inlines parseAsMath cs = B.fromList <$> texMathToPandoc cs
src/Text/Pandoc/Readers/Org/Meta.hs view
@@ -131,7 +131,7 @@ -- -- export options ---optionLine :: Monad m => OrgParser m ()+optionLine :: PandocMonad m => OrgParser m () optionLine = try $ do key <- metaKey case key of
@@ -59,6 +59,7 @@ isHeaderBlock, headerShift, stripEmptyParagraphs,+ onlySimpleTableCells, isTightList, taskListItemFromAscii, taskListItemToAscii,@@ -108,6 +109,7 @@ import Data.Ord (comparing) import qualified Data.Map as M import Data.Maybe (mapMaybe)+import Data.Monoid (Any (..)) import Data.Sequence (ViewL (..), ViewR (..), viewl, viewr) import qualified Data.Set as Set import qualified Data.Text as T@@ -570,6 +572,19 @@ go = filter (not . isEmptyParagraph) isEmptyParagraph (Para []) = True isEmptyParagraph _ = False++-- | Detect if table rows contain only cells consisting of a single+-- paragraph that has no @LineBreak@.+onlySimpleTableCells :: [[TableCell]] -> Bool+onlySimpleTableCells = all isSimpleCell . concat+ where+ isSimpleCell [Plain ils] = not (hasLineBreak ils)+ isSimpleCell [Para ils ] = not (hasLineBreak ils)+ isSimpleCell [] = True+ isSimpleCell _ = False+ hasLineBreak = getAny . query isLineBreak+ isLineBreak LineBreak = Any True+ isLineBreak _ = Any False -- | Detect if a list is tight. isTightList :: [[Block]] -> Bool
src/Text/Pandoc/Writers.hs view
@@ -41,6 +41,7 @@ , writeICML , writeJATS , writeJSON+ , writeJira , writeLaTeX , writeMan , writeMarkdown@@ -91,6 +92,7 @@ import Text.Pandoc.Writers.HTML import Text.Pandoc.Writers.ICML import Text.Pandoc.Writers.JATS+import Text.Pandoc.Writers.Jira import Text.Pandoc.Writers.LaTeX import Text.Pandoc.Writers.Man import Text.Pandoc.Writers.Markdown@@ -141,6 +143,7 @@ ,("docbook4" , TextWriter writeDocbook4) ,("docbook5" , TextWriter writeDocbook5) ,("jats" , TextWriter writeJATS)+ ,("jira" , TextWriter writeJira) ,("opml" , TextWriter writeOPML) ,("opendocument" , TextWriter writeOpenDocument) ,("latex" , TextWriter writeLaTeX)
src/Text/Pandoc/Writers/AsciiDoc.hs view
@@ -405,6 +405,8 @@ -- | Convert Pandoc inline element to asciidoc. inlineToAsciiDoc :: PandocMonad m => WriterOptions -> Inline -> ADW m Doc+inlineToAsciiDoc opts (Emph [Strong xs]) =+ inlineToAsciiDoc opts (Strong [Emph xs]) -- see #5565 inlineToAsciiDoc opts (Emph lst) = do contents <- inlineListToAsciiDoc opts lst isIntraword <- gets intraword@@ -425,12 +427,18 @@ contents <- inlineListToAsciiDoc opts lst return $ "~" <> contents <> "~" inlineToAsciiDoc opts (SmallCaps lst) = inlineListToAsciiDoc opts lst-inlineToAsciiDoc opts (Quoted SingleQuote lst) =- inlineListToAsciiDoc opts (Str "`" : lst ++ [Str "'"])-inlineToAsciiDoc opts (Quoted DoubleQuote lst) =- inlineListToAsciiDoc opts (Str "``" : lst ++ [Str "''"])+inlineToAsciiDoc opts (Quoted qt lst) = do+ isAsciidoctor <- gets asciidoctorVariant+ inlineListToAsciiDoc opts $+ case qt of+ SingleQuote+ | isAsciidoctor -> [Str "'`"] ++ lst ++ [Str "`'"]+ | otherwise -> [Str "`"] ++ lst ++ [Str "'"]+ DoubleQuote+ | isAsciidoctor -> [Str "\"`"] ++ lst ++ [Str "`\""]+ | otherwise -> [Str "``"] ++ lst ++ [Str "''"] inlineToAsciiDoc _ (Code _ str) = return $- text "`" <> text (escapeStringUsing (backslashEscapes "`") str) <> "`"+ text "`+" <> text (escapeStringUsing (backslashEscapes "`") str) <> "+`" inlineToAsciiDoc _ (Str str) = return $ text $ escapeString str inlineToAsciiDoc _ (Math InlineMath str) = do isAsciidoctor <- gets asciidoctorVariant@@ -512,9 +520,11 @@ inlineToAsciiDoc _ (Note _) = return "[multiblock footnote omitted]" inlineToAsciiDoc opts (Span (ident,classes,_) ils) = do contents <- inlineListToAsciiDoc opts ils+ isIntraword <- gets intraword+ let marker = if isIntraword then "##" else "#" if null ident && null classes then return contents else do let modifier = brackets $ text $ unwords $ [ '#':ident | not (null ident)] ++ map ('.':) classes- return $ modifier <> "#" <> contents <> "#"+ return $ modifier <> marker <> contents <> marker
src/Text/Pandoc/Writers/CommonMark.hs view
@@ -21,17 +21,16 @@ import Data.Char (isAscii) import Data.Foldable (foldrM) import Data.List (transpose)-import Data.Monoid (Any (..)) import Data.Text (Text) import qualified Data.Text as T import Network.HTTP (urlEncode) import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition import Text.Pandoc.Options-import Text.Pandoc.Shared (isTightList, taskListItemToAscii, linesToPara,- substitute, capitalize, isHeaderBlock)+import Text.Pandoc.Shared (capitalize, isHeaderBlock, isTightList,+ linesToPara, onlySimpleTableCells, substitute, taskListItemToAscii) import Text.Pandoc.Templates (renderTemplate')-import Text.Pandoc.Walk (query, walk, walkM)+import Text.Pandoc.Walk (walk, walkM) import Text.Pandoc.Writers.HTML (writeHtml5String, tagWithAttributes) import Text.Pandoc.Writers.Shared import Text.Pandoc.XML (toHtml5Entities)@@ -159,16 +158,7 @@ dlToBullet (term, xs) = Para term : concat xs blockToNodes opts t@(Table capt aligns _widths headers rows) ns = do- let allcells = concat (headers:rows)- let isLineBreak LineBreak = Any True- isLineBreak _ = Any False- let isPlainOrPara [Para _] = True- isPlainOrPara [Plain _] = True- isPlainOrPara [] = True- isPlainOrPara _ = False- let isSimple = all isPlainOrPara allcells &&- not ( getAny (query isLineBreak allcells) )- if isEnabled Ext_pipe_tables opts && isSimple+ if isEnabled Ext_pipe_tables opts && onlySimpleTableCells (headers:rows) then do -- We construct a table manually as a CUSTOM_BLOCK, for -- two reasons: (1) cmark-gfm currently doesn't support
src/Text/Pandoc/Writers/EPUB.hs view
@@ -584,11 +584,14 @@ _ -> (Pandoc nullMeta bs, "bodymatter") frontMatterTypes = ["prologue", "abstract", "acknowledgments", "copyright-page", "dedication",- "foreword", "halftitle",- "introduction", "preface",+ "credits", "keywords", "imprint",+ "contributors", "other-credits",+ "errata", "revision-history",+ "titlepage", "halftitlepage", "seriespage",+ "foreword", "preface", "seriespage", "titlepage"]- backMatterTypes = ["afterword", "appendix", "colophon",- "conclusion", "epigraph"]+ backMatterTypes = ["appendix", "colophon", "bibliography",+ "index"] chapterEntries <- zipWithM chapToEntry [1..] chapters @@ -656,11 +659,11 @@ ,("media-type","application/xhtml+xml")] ++ [("properties","nav") | epub3 ]) $ () ] ++- [ unode "item" ! [("id","style"), ("href",fp)+ [ unode "item" ! [("id","stylesheet" ++ show n), ("href",fp) ,("media-type","text/css")] $ () |- fp <- map+ (n :: Int, fp) <- zip [1..] (map (makeRelative epubSubdir . eRelativePath)- stylesheetEntries ] +++ stylesheetEntries) ] ++ map chapterNode (cpgEntry ++ (tpEntry : chapterEntries)) ++ (case cpicEntry of [] -> []@@ -793,13 +796,8 @@ [("id","toc")]) $ [ unode "h1" ! [("id","toc-title")] $ tocTitle , unode "ol" ! [("class","toc")] $ tocBlocks ]]- let landmarks = if epub3- then [RawBlock (Format "html") $ ppElement $- unode "nav" ! [("epub:type","landmarks")- ,("id","landmarks")- ,("hidden","hidden")] $- [ unode "ol" $- [ unode "li"+ let landmarkItems = if epub3+ then [ unode "li" [ unode "a" ! [("href", "text/cover.xhtml") ,("epub:type", "cover")] $ "Cover"] |@@ -811,9 +809,15 @@ "Table of contents" ] | writerTableOfContents opts ]- ]+ else []+ let landmarks = if null landmarkItems+ then []+ else [RawBlock (Format "html") $ ppElement $+ unode "nav" ! [("epub:type","landmarks")+ ,("id","landmarks")+ ,("hidden","hidden")] $+ [ unode "ol" landmarkItems ] ]- else [] navData <- lift $ writeHtml opts'{ writerVariables = ("navpage","true"): cssvars False ++ vars } (Pandoc (setMeta "title"
src/Text/Pandoc/Writers/FB2.hs view
@@ -21,7 +21,7 @@ import Prelude import Control.Monad (zipWithM) import Control.Monad.Except (catchError)-import Control.Monad.State.Strict (StateT, evalStateT, get, lift, liftM, modify)+import Control.Monad.State.Strict (StateT, evalStateT, get, gets, lift, liftM, modify) import Data.ByteString.Base64 (encode) import qualified Data.ByteString.Char8 as B8 import Data.Char (isAscii, isControl, isSpace, toLower)@@ -40,6 +40,7 @@ import Text.Pandoc.Logging import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..), def) import Text.Pandoc.Shared (capitalize, isURI, orderedListMarkers, hierarchicalize)+import Text.Pandoc.Writers.Shared (lookupMetaString) import qualified Text.Pandoc.Shared as Shared (Element(Blk, Sec)) -- | Data to be written at the end of the document:@@ -96,12 +97,14 @@ description :: PandocMonad m => Meta -> FBM m Content description meta' = do- let genre = el "genre" "unrecognised"+ let genre = case lookupMetaString "genre" meta' of+ "" -> el "genre" "unrecognised"+ s -> el "genre" s bt <- booktitle meta' let as = authors meta' dd <- docdate meta' annotation <- case lookupMeta "abstract" meta' of- Just (MetaBlocks bs) -> (list . el "annotation") <$> cMapM blockToXml (map unPlain bs)+ Just (MetaBlocks bs) -> list . el "annotation" <$> cMapM blockToXml (map unPlain bs) _ -> pure mempty let lang = case lookupMeta "lang" meta' of Just (MetaInlines [Str s]) -> [el "lang" $ iso639 s]@@ -179,8 +182,8 @@ else list . el "title" <$> formatTitle title let sectionContent = if null id' then el "section" (title' ++ content)- else el "section" ([uattr "id" id'], (title' ++ content))- return $ [sectionContent]+ else el "section" ([uattr "id" id'], title' ++ content)+ return [sectionContent] -- | Only <p> and <empty-line> are allowed within <title> in FB2. formatTitle :: PandocMonad m => [Inline] -> FBM m [Content]@@ -287,6 +290,15 @@ footnoteID :: Int -> String footnoteID i = "n" ++ show i +mkitem :: PandocMonad m => String -> [Block] -> FBM m [Content]+mkitem mrk bs = do+ pmrk <- gets parentListMarker+ let nmrk = pmrk ++ mrk ++ " "+ modify (\s -> s { parentListMarker = nmrk})+ item <- cMapM blockToXml $ plainToPara $ indentBlocks nmrk bs+ modify (\s -> s { parentListMarker = pmrk }) -- old parent marker+ return item+ -- | Convert a block-level Pandoc's element to FictionBook XML representation. blockToXml :: PandocMonad m => Block -> FBM m [Content] blockToXml (Plain ss) = cMapM toXml ss -- FIXME: can lead to malformed FB2@@ -294,40 +306,26 @@ -- title beginning with fig: indicates that the image is a figure blockToXml (Para [Image atr alt (src,'f':'i':'g':':':tit)]) = insertImage NormalImage (Image atr alt (src,tit))-blockToXml (Para ss) = (list . el "p") <$> cMapM toXml ss+blockToXml (Para ss) = list . el "p" <$> cMapM toXml ss blockToXml (CodeBlock _ s) = return . spaceBeforeAfter . map (el "p" . el "code") . lines $ s-blockToXml (RawBlock f str) = do+blockToXml (RawBlock f str) = if f == Format "fb2" then return $ XI.parseXML str else return [] blockToXml (Div _ bs) = cMapM blockToXml bs-blockToXml (BlockQuote bs) = (list . el "cite") <$> cMapM blockToXml bs+blockToXml (BlockQuote bs) = list . el "cite" <$> cMapM blockToXml bs blockToXml (LineBlock lns) =- (list . el "poem") <$> mapM stanza (split null lns)+ list . el "poem" <$> mapM stanza (split null lns) where v xs = el "v" <$> cMapM toXml xs stanza xs = el "stanza" <$> mapM v xs-blockToXml (OrderedList a bss) = do- state <- get- let pmrk = parentListMarker state- let markers = (pmrk ++) <$> orderedListMarkers a- let mkitem mrk bs = do- modify (\s -> s { parentListMarker = mrk ++ " "})- item <- cMapM blockToXml $ plainToPara $ indentBlocks (mrk ++ " ") bs- modify (\s -> s { parentListMarker = pmrk }) -- old parent marker- return item+blockToXml (OrderedList a bss) = concat <$> zipWithM mkitem markers bss-blockToXml (BulletList bss) = do- state <- get- let pmrk = parentListMarker state- let mrk = pmrk ++ "•"- let mkitem bs = do- modify (\s -> s { parentListMarker = mrk ++ " "})- item <- cMapM blockToXml $ plainToPara $ indentBlocks (mrk ++ " ") bs- modify (\s -> s { parentListMarker = pmrk }) -- old parent marker- return item- cMapM mkitem bss+ where+ markers = orderedListMarkers a+blockToXml (BulletList bss) =+ cMapM (mkitem "•") bss blockToXml (DefinitionList defs) = cMapM mkdef defs where@@ -441,7 +439,7 @@ let fn_id = footnoteID n fn_desc <- cMapM blockToXml bs modify (\s -> s { footnotes = (n, fn_id, fn_desc) : fns })- let fn_ref = el "sup" . txt $ "[" ++ show n ++ "]"+ let fn_ref = txt $ "[" ++ show n ++ "]" return . list $ el "a" ( [ attr ("l","href") ('#':fn_id) , uattr "type" "note" ] , fn_ref )
src/Text/Pandoc/Writers/HTML.hs view
@@ -65,18 +65,21 @@ #endif #if MIN_VERSION_blaze_html(0,5,1) import qualified Text.Blaze.XHtml5 as H5+import qualified Text.Blaze.XHtml5.Attributes as A5 #else import qualified Text.Blaze.Html5 as H5+import qualified Text.Blaze.Html5.Attributes as A5 #endif import Control.Monad.Except (throwError) import Data.Aeson (Value)-import System.FilePath (takeBaseName, takeExtension)+import System.FilePath (takeBaseName) import Text.Blaze.Html.Renderer.Text (renderHtml) import qualified Text.Blaze.XHtml1.Transitional as H import qualified Text.Blaze.XHtml1.Transitional.Attributes as A import Text.Pandoc.Class (PandocMonad, report, runPure) import Text.Pandoc.Error import Text.Pandoc.Logging+import Text.Pandoc.MIME (mediaCategory) import Text.TeXMath import Text.XML.Light (elChildren, unode, unqual) import qualified Text.XML.Light as XML@@ -108,11 +111,23 @@ strToHtml :: String -> Html strToHtml ('\'':xs) = preEscapedString "\'" `mappend` strToHtml xs strToHtml ('"' :xs) = preEscapedString "\"" `mappend` strToHtml xs-strToHtml xs@(_:_) = case break (\c -> c == '\'' || c == '"') xs of+strToHtml (x:xs) | needsVariationSelector x+ = preEscapedString [x, '\xFE0E'] `mappend`+ case xs of+ ('\xFE0E':ys) -> strToHtml ys+ _ -> strToHtml xs+strToHtml xs@(_:_) = case break (\c -> c == '\'' || c == '"' ||+ needsVariationSelector c) xs of (_ ,[]) -> toHtml xs (ys,zs) -> toHtml ys `mappend` strToHtml zs strToHtml [] = "" +-- See #5469: this prevents iOS from substituting emojis.+needsVariationSelector :: Char -> Bool+needsVariationSelector '↩' = True+needsVariationSelector '↔' = True+needsVariationSelector _ = False+ -- | Hard linebreak. nl :: WriterOptions -> Html nl opts = if writerWrapText opts == WrapNone@@ -653,23 +668,11 @@ (Just x) -> [("style", show dir ++ ":" ++ show x)] Nothing -> [] -imageExts :: [String]-imageExts = [ "art", "bmp", "cdr", "cdt", "cpt", "cr2", "crw", "djvu", "erf",- "gif", "ico", "ief", "jng", "jpg", "jpeg", "nef", "orf", "pat", "pbm",- "pcx", "pgm", "png", "pnm", "ppm", "psd", "ras", "rgb", "svg", "tiff",- "wbmp", "xbm", "xpm", "xwd" ]--treatAsImage :: FilePath -> Bool-treatAsImage fp =- let path = maybe fp uriPath (parseURIReference fp)- ext = map toLower $ drop 1 $ takeExtension path- in null ext || ext `elem` imageExts- figure :: PandocMonad m => WriterOptions -> Attr -> [Inline] -> (String, String) -> StateT WriterState m Html figure opts attr txt (s,tit) = do- img <- inlineToHtml opts (Image attr txt (s,tit))+ img <- inlineToHtml opts (Image attr [Str ""] (s,tit)) html5 <- gets stHtml5 let tocapt = if html5 then H5.figcaption@@ -836,7 +839,7 @@ 4 -> H.h4 contents' 5 -> H.h5 contents' 6 -> H.h6 contents'- _ -> H.p contents'+ _ -> H.p ! A.class_ "heading" $ contents' blockToHtml opts (BulletList lst) = do contents <- mapM (listItemToHtml opts) lst unordList opts contents@@ -1123,8 +1126,8 @@ return $ if null tit then link' else link' ! A.title (toValue tit)- (Image attr txt (s,tit)) | treatAsImage s -> do- let alternate' = stringify txt+ (Image attr txt (s,tit)) -> do+ let alternate = stringify txt slideVariant <- gets stSlideVariant let isReveal = slideVariant == RevealJsSlides attrs <- imgAttrsToHtml opts attr@@ -1134,22 +1137,23 @@ then customAttribute "data-src" $ toValue s else A.src $ toValue s) : [A.title $ toValue tit | not (null tit)] ++- [A.alt $ toValue alternate' | not (null txt)] ++ attrs- let tag = if html5 then H5.img else H.img- return $ foldl (!) tag attributes- -- note: null title included, as in Markdown.pl- (Image attr _ (s,tit)) -> do- slideVariant <- gets stSlideVariant- let isReveal = slideVariant == RevealJsSlides- attrs <- imgAttrsToHtml opts attr- let attributes =- (if isReveal- then customAttribute "data-src" $ toValue s- else A.src $ toValue s) :- [A.title $ toValue tit | not (null tit)] ++- attrs- return $ foldl (!) H5.embed attributes+ imageTag = (if html5 then H5.img else H.img+ , [A.alt $ toValue alternate | not (null txt)] )+ mediaTag tg fallbackTxt =+ let linkTxt = if null txt+ then fallbackTxt+ else alternate+ in (tg $ H.a ! A.href (toValue s) $ toHtml linkTxt+ , [A5.controls ""] )+ normSrc = maybe s uriPath (parseURIReference s)+ (tag, specAttrs) = case mediaCategory normSrc of+ Just "image" -> imageTag+ Just "video" -> mediaTag H5.video "Video"+ Just "audio" -> mediaTag H5.audio "Audio"+ Just _ -> (H5.embed, [])+ _ -> imageTag+ return $ foldl (!) tag $ attributes ++ specAttrs -- note: null title included, as in Markdown.pl (Note contents) -> do notes <- gets stNotes
src/Text/Pandoc/Writers/JATS.hs view
@@ -16,16 +16,20 @@ module Text.Pandoc.Writers.JATS ( writeJATS ) where import Prelude import Control.Monad.Reader+import Control.Monad.State import Data.Char (toLower) import Data.Generics (everywhere, mkT)-import Data.List (isSuffixOf, partition)+import Data.List (isSuffixOf, partition, isPrefixOf)+import qualified Data.Map as M import Data.Maybe (fromMaybe)+import Data.Time (toGregorian, Day, parseTimeM, defaultTimeLocale, formatTime) import Data.Text (Text) import Text.Pandoc.Class (PandocMonad, report) import Text.Pandoc.Definition import Text.Pandoc.Highlighting (languages, languagesByExtension) import Text.Pandoc.Logging import Text.Pandoc.MIME (getMimeType)+import Text.Pandoc.Walk (walk) import Text.Pandoc.Options import Text.Pandoc.Pretty import Text.Pandoc.Shared@@ -39,11 +43,16 @@ data JATSVersion = JATS1_1 deriving (Eq, Show) -type JATS = ReaderT JATSVersion+data JATSState = JATSState+ { jatsNotes :: [(Int, Doc)] } +type JATS a = StateT JATSState (ReaderT JATSVersion a)+ writeJATS :: PandocMonad m => WriterOptions -> Pandoc -> m Text writeJATS opts d =- runReaderT (docToJATS opts d) JATS1_1+ runReaderT (evalStateT (docToJATS opts d)+ (JATSState{ jatsNotes = [] }))+ JATS1_1 -- | Convert Pandoc document to string in JATS format. docToJATS :: PandocMonad m => WriterOptions -> Pandoc -> JATS m Text@@ -52,7 +61,7 @@ isBackBlock _ = False let (backblocks, bodyblocks) = partition isBackBlock blocks let elements = hierarchicalize bodyblocks- let backElements = hierarchicalize backblocks+ let backElements = hierarchicalize $ backblocks let colwidth = if writerWrapText opts == WrapAuto then Just $ writerColumns opts else Nothing@@ -77,10 +86,25 @@ meta main <- (render' . vcat) <$> mapM (elementToJATS opts' startLvl) elements- back <- (render' . vcat) <$>- mapM (elementToJATS opts' startLvl) backElements+ notes <- reverse . map snd <$> gets jatsNotes+ backs <- mapM (elementToJATS opts' startLvl) backElements+ let fns = inTagsIndented "fn-group" $ vcat notes+ let back = render' $ vcat backs $$ fns+ let date = case getField "date" metadata -- an object+ `mplus`+ (getField "date" metadata >>= parseDate) of+ Nothing -> mempty+ Just day ->+ let (y,m,d) = toGregorian day+ in M.insert ("year" :: String) (show y)+ $ M.insert "month" (show m)+ $ M.insert "day" (show d)+ $ M.insert "iso-8601"+ (formatTime defaultTimeLocale "%F" day)+ $ mempty let context = defField "body" main $ defField "back" back+ $ resetField ("date" :: String) date $ defField "mathml" (case writerHTMLMathMethod opts of MathML -> True _ -> False) metadata@@ -103,8 +127,23 @@ -- | Convert a list of Pandoc blocks to JATS. blocksToJATS :: PandocMonad m => WriterOptions -> [Block] -> JATS m Doc-blocksToJATS opts = fmap vcat . mapM (blockToJATS opts)+blocksToJATS = wrappedBlocksToJATS (const False) +wrappedBlocksToJATS :: PandocMonad m+ => (Block -> Bool)+ -> WriterOptions+ -> [Block]+ -> JATS m Doc+wrappedBlocksToJATS needsWrap opts =+ fmap vcat . mapM wrappedBlockToJATS+ where+ wrappedBlockToJATS b = do+ inner <- blockToJATS opts b+ return $+ if needsWrap b+ then inTags True "p" [("specific-use","wrapper")] inner+ else inner+ -- | Auxiliary function to convert Plain block to Para. plainToPara :: Block -> Block plainToPara (Plain x) = Para x@@ -122,7 +161,9 @@ => WriterOptions -> [Inline] -> [[Block]] -> JATS m Doc deflistItemToJATS opts term defs = do term' <- inlinesToJATS opts term- def' <- blocksToJATS opts $ concatMap (map plainToPara) defs+ def' <- wrappedBlocksToJATS (not . isPara)+ opts $ concatMap (walk demoteHeaderAndRefs .+ map plainToPara) defs return $ inTagsIndented "def-item" $ inTagsSimple "term" term' $$ inTagsIndented "def" def'@@ -139,7 +180,8 @@ listItemToJATS :: PandocMonad m => WriterOptions -> Maybe String -> [Block] -> JATS m Doc listItemToJATS opts mbmarker item = do- contents <- blocksToJATS opts item+ contents <- wrappedBlocksToJATS (not . isParaOrList) opts+ (walk demoteHeaderAndRefs item) return $ inTagsIndented "list-item" $ maybe empty (\lbl -> inTagsSimple "label" (text lbl)) mbmarker $$ contents@@ -322,11 +364,15 @@ inlinesToJATS opts lst = hcat <$> mapM (inlineToJATS opts) (fixCitations lst) where fixCitations [] = []- fixCitations (x@(RawInline (Format "jats") "<pub-id pub-id-type=\"doi\">") : xs) =- let isRawInline (RawInline{}) = True- isRawInline _ = False- (ys,zs) = break isRawInline xs- in x : Str (stringify ys) : fixCitations zs+ fixCitations (x:xs) | needsFixing x =+ x : Str (stringify ys) : fixCitations zs+ where+ needsFixing (RawInline (Format "jats") z) =+ "<pub-id pub-id-type=" `isPrefixOf` z+ needsFixing _ = False+ isRawInline (RawInline{}) = True+ isRawInline _ = False+ (ys,zs) = break isRawInline xs fixCitations (x:xs) = x : fixCitations xs -- | Convert an inline element to JATS.@@ -359,14 +405,24 @@ | otherwise = do report $ InlineNotRendered il return empty-inlineToJATS _ LineBreak = return $ selfClosingTag "break" []+inlineToJATS _ LineBreak = return cr -- not allowed as child of p+-- see https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/break.html inlineToJATS _ Space = return space inlineToJATS opts SoftBreak | writerWrapText opts == WrapPreserve = return cr | otherwise = return space-inlineToJATS opts (Note contents) =- -- TODO technically only <p> tags are allowed inside- inTagsIndented "fn" <$> blocksToJATS opts contents+inlineToJATS opts (Note contents) = do+ notes <- gets jatsNotes+ let notenum = case notes of+ (n, _):_ -> n + 1+ [] -> 1+ thenote <- inTags True "fn" [("id","fn" ++ show notenum)]+ <$> wrappedBlocksToJATS (not . isPara) opts+ (walk demoteHeaderAndRefs contents)+ modify $ \st -> st{ jatsNotes = (notenum, thenote) : notes }+ return $ inTags False "xref" [("ref-type", "fn"),+ ("rid", "fn" ++ show notenum)]+ $ text (show notenum) inlineToJATS opts (Cite _ lst) = -- TODO revisit this after examining the jats.csl pipeline inlinesToJATS opts lst@@ -445,3 +501,29 @@ "xlink:href", "xlink:role", "xlink:show", "xlink:type"]] return $ selfClosingTag "inline-graphic" attr++isParaOrList :: Block -> Bool+isParaOrList Para{} = True+isParaOrList Plain{} = True+isParaOrList BulletList{} = True+isParaOrList OrderedList{} = True+isParaOrList DefinitionList{} = True+isParaOrList _ = False++isPara :: Block -> Bool+isPara Para{} = True+isPara Plain{} = True+isPara _ = False++demoteHeaderAndRefs :: Block -> Block+demoteHeaderAndRefs (Header _ _ ils) = Para ils+demoteHeaderAndRefs (Div ("refs",cls,kvs) bs) =+ Div ("",cls,kvs) bs+demoteHeaderAndRefs x = x++parseDate :: String -> Maybe Day+parseDate s = msum (map (\fs -> parsetimeWith fs s) formats) :: Maybe Day+ where parsetimeWith = parseTimeM True defaultTimeLocale+ formats = ["%x","%m/%d/%Y", "%D","%F", "%d %b %Y",+ "%e %B %Y", "%b. %e, %Y", "%B %e, %Y",+ "%Y%m%d", "%Y%m", "%Y"]
+ src/Text/Pandoc/Writers/Jira.hs view
@@ -0,0 +1,322 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoImplicitPrelude #-}+{- |+ Module : Text.Pandoc.Writers.Jira+ Copyright : © 2010-2019 Albert Krewinkel, John MacFarlane+ License : GNU GPL, version 2 or above++ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>+ Stability : alpha+ Portability : portable++Conversion of 'Pandoc' documents to Jira markup.++JIRA:+<https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all>+-}+module Text.Pandoc.Writers.Jira ( writeJira ) where+import Prelude+import Control.Monad.State.Strict+import Data.Char (toLower)+import Data.Foldable (find)+import Data.Text (Text, pack)+import Text.Pandoc.Class (PandocMonad, report)+import Text.Pandoc.Definition+import Text.Pandoc.Logging (LogMessage (BlockNotRendered, InlineNotRendered))+import Text.Pandoc.Options (WriterOptions (writerTemplate))+import Text.Pandoc.Shared (blocksToInlines, linesToPara)+import Text.Pandoc.Templates (renderTemplate')+import Text.Pandoc.Writers.Math (texMathToInlines)+import Text.Pandoc.Writers.Shared (metaToJSON, defField)+import qualified Data.Text as T++data WriterState = WriterState+ { stNotes :: [Text] -- Footnotes+ , stListLevel :: Text -- String at beginning of list items, e.g. "**"+ }++-- | Initial writer state+startState :: WriterState+startState = WriterState+ { stNotes = []+ , stListLevel = ""+ }++type JiraWriter = StateT WriterState++-- | Convert Pandoc to Jira.+writeJira :: PandocMonad m => WriterOptions -> Pandoc -> m Text+writeJira opts document =+ evalStateT (pandocToJira opts document) startState++-- | Return Jira representation of document.+pandocToJira :: PandocMonad m+ => WriterOptions -> Pandoc -> JiraWriter m Text+pandocToJira opts (Pandoc meta blocks) = do+ metadata <- metaToJSON opts (blockListToJira opts)+ (inlineListToJira opts) meta+ body <- blockListToJira opts blocks+ notes <- gets $ T.intercalate "\n" . reverse . stNotes+ let main = body <> if T.null notes then "" else "\n\n" <> notes+ let context = defField "body" main metadata+ case writerTemplate opts of+ Nothing -> return main+ Just tpl -> renderTemplate' tpl context++-- | Escape one character as needed for Jira.+escapeCharForJira :: Char -> Text+escapeCharForJira c = case c of+ '&' -> "&"+ '<' -> "<"+ '>' -> ">"+ '"' -> """+ '*' -> "*"+ '_' -> "_"+ '@' -> "@"+ '+' -> "+"+ '-' -> "‐"+ '|' -> "|"+ '{' -> "\\{"+ '\x2014' -> " -- "+ '\x2013' -> " - "+ '\x2019' -> "'"+ '\x2026' -> "..."+ _ -> T.singleton c++-- | Escape string as needed for Jira.+escapeStringForJira :: Text -> Text+escapeStringForJira = T.concatMap escapeCharForJira++-- | Create an anchor macro from the given element attributes.+anchor :: Attr -> Text+anchor (ident,_,_) =+ if ident == ""+ then ""+ else "{anchor:" <> pack ident <> "}"++-- | Append a newline character unless we are in a list.+appendNewlineUnlessInList :: PandocMonad m+ => Text+ -> JiraWriter m Text+appendNewlineUnlessInList t = do+ listLevel <- gets stListLevel+ return (if T.null listLevel then t <> "\n" else t)++-- | Convert Pandoc block element to Jira.+blockToJira :: PandocMonad m+ => WriterOptions -- ^ Options+ -> Block -- ^ Block element+ -> JiraWriter m Text++blockToJira _ Null = return ""++blockToJira opts (Div attr bs) =+ (anchor attr <>) <$> blockListToJira opts bs++blockToJira opts (Plain inlines) =+ inlineListToJira opts inlines++blockToJira opts (Para inlines) = do+ contents <- inlineListToJira opts inlines+ appendNewlineUnlessInList contents++blockToJira opts (LineBlock lns) =+ blockToJira opts $ linesToPara lns++blockToJira _ b@(RawBlock f str) =+ if f == Format "jira"+ then return (pack str)+ else "" <$ report (BlockNotRendered b)++blockToJira _ HorizontalRule = return "----\n"++blockToJira opts (Header level attr inlines) = do+ contents <- inlineListToJira opts inlines+ let prefix = "h" <> pack (show level) <> ". "+ return $ prefix <> anchor attr <> contents <> "\n"++blockToJira _ (CodeBlock attr@(_,classes,_) str) = do+ let lang = find (\c -> map toLower c `elem` knownLanguages) classes+ let start = case lang of+ Nothing -> "{code}"+ Just l -> "{code:" <> pack l <> "}"+ let anchorMacro = anchor attr+ appendNewlineUnlessInList . T.intercalate "\n" $+ (if anchorMacro == "" then id else (anchorMacro :))+ [start, escapeStringForJira (pack str), "{code}"]++blockToJira opts (BlockQuote [p@(Para _)]) = do+ contents <- blockToJira opts p+ appendNewlineUnlessInList ("bq. " <> contents)++blockToJira opts (BlockQuote blocks) = do+ contents <- blockListToJira opts blocks+ appendNewlineUnlessInList . T.intercalate "\n" $+ [ "{quote}", contents, "{quote}"]++blockToJira opts (Table _caption _aligns _widths headers rows) = do+ headerCells <- mapM blocksToCell headers+ bodyRows <- mapM (mapM blocksToCell) rows+ let tblHead = headerCellsToRow headerCells+ let tblBody = map cellsToRow bodyRows+ return $ if all null headers+ then T.unlines tblBody+ else T.unlines (tblHead : tblBody)+ where+ blocksToCell :: PandocMonad m => [Block] -> JiraWriter m Text+ blocksToCell = inlineListToJira opts . blocksToInlines++ cellsToRow :: [Text] -> Text+ cellsToRow cells = "|" <> T.intercalate "|" cells <> "|"++ headerCellsToRow :: [Text] -> Text+ headerCellsToRow cells = "||" <> T.intercalate "||" cells <> "||"++blockToJira opts (BulletList items) =+ listWithMarker opts items '*'++blockToJira opts (OrderedList _listAttr items) =+ listWithMarker opts items '#'++blockToJira opts (DefinitionList items) =+ blockToJira opts (BulletList (map defToBulletItem items))+ where+ defToBulletItem :: ([Inline], [[Block]]) -> [Block]+ defToBulletItem (inlns, defs) =+ let term = Plain [Strong inlns]+ blks = mconcat defs+ in term : blks++-- Auxiliary functions for lists:++-- | Create a list using the given character as bullet item marker.+listWithMarker :: PandocMonad m+ => WriterOptions+ -> [[Block]]+ -> Char+ -> JiraWriter m Text+listWithMarker opts items marker = do+ modify $ \s -> s { stListLevel = stListLevel s `T.snoc` marker }+ contents <- mapM (listItemToJira opts) items+ modify $ \s -> s { stListLevel = T.init (stListLevel s) }+ appendNewlineUnlessInList $ T.intercalate "\n" contents++-- | Convert bullet or ordered list item (list of blocks) to Jira.+listItemToJira :: PandocMonad m+ => WriterOptions+ -> [Block]+ -> JiraWriter m Text+listItemToJira opts items = do+ contents <- blockListToJira opts items+ marker <- gets stListLevel+ return $ marker <> " " <> contents++-- | Convert list of Pandoc block elements to Jira.+blockListToJira :: PandocMonad m+ => WriterOptions -- ^ Options+ -> [Block] -- ^ List of block elements+ -> JiraWriter m Text+blockListToJira opts blocks =+ T.intercalate "\n" <$> mapM (blockToJira opts) blocks++-- | Convert list of Pandoc inline elements to Jira.+inlineListToJira :: PandocMonad m+ => WriterOptions+ -> [Inline]+ -> JiraWriter m Text+inlineListToJira opts lst =+ T.concat <$> mapM (inlineToJira opts) lst++-- | Convert Pandoc inline element to Jira.+inlineToJira :: PandocMonad m+ => WriterOptions+ -> Inline+ -> JiraWriter m Text++inlineToJira opts (Span attr lst) =+ (anchor attr <>) <$> inlineListToJira opts lst++inlineToJira opts (Emph lst) = do+ contents <- inlineListToJira opts lst+ return $ "_" <> contents <> "_"++inlineToJira opts (Strong lst) = do+ contents <- inlineListToJira opts lst+ return $ "*" <> contents <> "*"++inlineToJira opts (Strikeout lst) = do+ contents <- inlineListToJira opts lst+ return $ "-" <> contents <> "-"++inlineToJira opts (Superscript lst) = do+ contents <- inlineListToJira opts lst+ return $ "{^" <> contents <> "^}"++inlineToJira opts (Subscript lst) = do+ contents <- inlineListToJira opts lst+ return $ "{~" <> contents <> "~}"++inlineToJira opts (SmallCaps lst) = inlineListToJira opts lst++inlineToJira opts (Quoted SingleQuote lst) = do+ contents <- inlineListToJira opts lst+ return $ "'" <> contents <> "'"++inlineToJira opts (Quoted DoubleQuote lst) = do+ contents <- inlineListToJira opts lst+ return $ "\"" <> contents <> "\""++inlineToJira opts (Cite _ lst) = inlineListToJira opts lst++inlineToJira _ (Code attr str) =+ return (anchor attr <> "{{" <> escapeStringForJira (pack str) <> "}}")++inlineToJira _ (Str str) = return $ escapeStringForJira (pack str)++inlineToJira opts (Math InlineMath str) =+ lift (texMathToInlines InlineMath str) >>= inlineListToJira opts++inlineToJira opts (Math DisplayMath str) = do+ mathInlines <- lift (texMathToInlines DisplayMath str)+ contents <- inlineListToJira opts mathInlines+ return $ "\\\\" <> contents <> "\\\\"++inlineToJira _opts il@(RawInline f str) =+ if f == Format "jira"+ then return (pack str)+ else "" <$ report (InlineNotRendered il)++inlineToJira _ LineBreak = return "\n"++inlineToJira _ SoftBreak = return " "++inlineToJira _ Space = return " "++inlineToJira opts (Link _attr txt (src, _title)) = do+ linkText <- inlineListToJira opts txt+ return $ T.concat+ [ "["+ , if null txt then "" else linkText <> "|"+ , pack src+ , "]"+ ]++inlineToJira _opts (Image attr _alt (src, _title)) =+ return . T.concat $ [anchor attr, "!", pack src, "!"]++inlineToJira opts (Note contents) = do+ curNotes <- gets stNotes+ let newnum = length curNotes + 1+ contents' <- blockListToJira opts contents+ let thisnote = "[" <> pack (show newnum) <> "] " <> contents' <> "\n"+ modify $ \s -> s { stNotes = thisnote : curNotes }+ return $ "[" <> pack (show newnum) <> "]"++-- | Language codes recognized by jira+knownLanguages :: [String]+knownLanguages =+ [ "actionscript", "ada", "applescript", "bash", "c", "c#", "c++"+ , "css", "erlang", "go", "groovy", "haskell", "html", "javascript"+ , "json", "lua", "nyan", "objc", "perl", "php", "python", "r", "ruby"+ , "scala", "sql", "swift", "visualbasic", "xml", "yaml"+ ]
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -54,6 +54,7 @@ , stInQuote :: Bool -- true if in a blockquote , stExternalNotes :: Bool -- true if in context where -- we need to store footnotes+ , stInMinipage :: Bool -- true if in minipage , stInHeading :: Bool -- true if in a section heading , stInItem :: Bool -- true if in \item[..] , stNotes :: [Doc] -- notes in a minipage@@ -80,6 +81,7 @@ , stInQuote = False , stExternalNotes = False , stInHeading = False+ , stInMinipage = False , stInItem = False , stNotes = [] , stOLLevel = 1@@ -558,13 +560,13 @@ _ -> linkAnchor' let align dir txt = inCmd "begin" dir $$ txt $$ inCmd "end" dir lang <- toLang $ lookup "lang" kvs- let wrapColumns = if "columns" `elem` classes+ let wrapColumns = if beamer && "columns" `elem` classes then \contents -> inCmd "begin" "columns" <> brackets "T" $$ contents $$ inCmd "end" "columns" else id- wrapColumn = if "column" `elem` classes+ wrapColumn = if beamer && "column" `elem` classes then \contents -> let w = maybe "0.48" fromPct (lookup "width" kvs) in inCmd "begin" "column" <>@@ -608,11 +610,12 @@ "\\centering" $$ img $$ caption <> cr let figure = cr <> "\\begin{figure}" $$ innards $$ "\\end{figure}" st <- get- return $ if stExternalNotes st- -- 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+ return $ (if stInMinipage st+ -- can't have figures in notes or minipage (here, table cell)+ -- http://www.tex.ac.uk/FAQ-ouparmd.html+ then cr <> "\\begin{center}" $$ img $+$ capt $$+ "\\end{center}"+ else figure) $$ footnotes -- . . . indicates pause in beamer slides blockToLaTeX (Para [Str ".",Space,Str ".",Space,Str "."]) = do beamer <- gets stBeamer@@ -833,6 +836,9 @@ oldExternalNotes <- gets stExternalNotes modify $ \st -> st{ stExternalNotes = externalNotes, stNotes = [] } capt <- inlineListToLaTeX txt+ footnotes <- if externalNotes+ then notesToLaTeX <$> gets stNotes+ else return empty modify $ \st -> st{ stExternalNotes = oldExternalNotes, stNotes = [] } -- We can't have footnotes in the list of figures/tables, so remove them: let getNote (Note _) = Any True@@ -841,9 +847,6 @@ captForLof <- if hasNotes txt then brackets <$> inlineListToLaTeX (walk deNote txt) else return empty- footnotes <- if externalNotes- then notesToLaTeX <$> gets stNotes- else return empty return (capt, captForLof, footnotes) toColDescriptor :: Alignment -> String@@ -911,11 +914,14 @@ tableCellToLaTeX header (width, align, blocks) = do beamer <- gets stBeamer externalNotes <- gets stExternalNotes+ inMinipage <- gets stInMinipage -- See #5367 -- footnotehyper/footnote don't work in beamer, -- so we need to produce the notes outside the table...- modify $ \st -> st{ stExternalNotes = beamer }+ modify $ \st -> st{ stExternalNotes = beamer,+ stInMinipage = True } cellContents <- blockListToLaTeX blocks- modify $ \st -> st{ stExternalNotes = externalNotes }+ modify $ \st -> st{ stExternalNotes = externalNotes,+ stInMinipage = inMinipage } let valign = text $ if header then "[b]" else "[t]" let halign = case align of AlignLeft -> "\\raggedright"@@ -1125,7 +1131,9 @@ inlineToLaTeX (Strikeout lst) = do -- we need to protect VERB in an mbox or we get an error -- see #1294- contents <- inlineListToLaTeX $ protectCode lst+ -- with regular texttt we don't get an error, but we get+ -- incorrect results if there is a space, see #5529+ contents <- inlineListToLaTeX $ walk (concatMap protectCode) lst modify $ \s -> s{ stStrikeout = True } return $ inCmd "sout" contents inlineToLaTeX (Superscript lst) =@@ -1142,14 +1150,22 @@ Biblatex -> citationsToBiblatex cits _ -> inlineListToLaTeX lst -inlineToLaTeX (Code (_,classes,_) str) = do+inlineToLaTeX (Code (_,classes,kvs) str) = do opts <- gets stOptions inHeading <- gets stInHeading inItem <- gets stInItem let listingsCode = do- let listingsopt = case getListingsLanguage classes of- Just l -> "[language=" ++ mbBraced l ++ "]"- Nothing -> ""+ let listingsopts = (case getListingsLanguage classes of+ Just l -> (("language", mbBraced l):)+ Nothing -> id) $+ [(k,v) | (k,v) <- kvs+ , k `notElem` ["exports","tangle","results"]]+ let listingsopt = if null listingsopts+ then ""+ else "[" +++ intercalate ", "+ (map (\(k,v) -> k ++ "=" ++ v)+ listingsopts) ++ "]" inNote <- gets stInNote when inNote $ modify $ \s -> s{ stVerbInNote = True } let chr = case "!\"'()*,-./:;?@" \\ str of@@ -1174,10 +1190,11 @@ Right h -> modify (\st -> st{ stHighlighting = True }) >> return (text (T.unpack h)) case () of- _ | writerListings opts && not (inHeading || inItem) -> listingsCode+ _ | inHeading || inItem -> rawCode -- see #5574+ | writerListings opts -> listingsCode | isJust (writerHighlightStyle opts) && not (null classes)- -> highlightCode- | otherwise -> rawCode+ -> highlightCode+ | otherwise -> rawCode inlineToLaTeX (Quoted qt lst) = do contents <- inlineListToLaTeX lst csquotes <- liftM stCsquotes get@@ -1322,12 +1339,10 @@ '%':_ -> s ++ "\n" _ -> s -protectCode :: [Inline] -> [Inline]-protectCode [] = []-protectCode (x@(Code ("",[],[]) _) : xs) = x : protectCode xs-protectCode (x@(Code _ _) : xs) = ltx "\\mbox{" : x : ltx "}" : xs+protectCode :: Inline -> [Inline]+protectCode x@(Code _ _) = [ltx "\\mbox{" , x , ltx "}"] where ltx = RawInline (Format "latex")-protectCode (x : xs) = x : protectCode xs+protectCode x = [x] setEmptyLine :: PandocMonad m => Bool -> LW m () setEmptyLine b = modify $ \st -> st{ stEmptyLine = b }
src/Text/Pandoc/Writers/Markdown.hs view
@@ -23,10 +23,10 @@ import Data.Char (isPunctuation, isSpace, isAlphaNum) import Data.Default import qualified Data.HashMap.Strict as H-import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)+import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose,+ isPrefixOf) import qualified Data.Map as M import Data.Maybe (fromMaybe)-import Data.Monoid (Any (..)) import Data.Ord (comparing) import qualified Data.Set as Set import qualified Data.Scientific as Scientific@@ -75,6 +75,7 @@ } data WriterState = WriterState { stNotes :: Notes+ , stPrevRefs :: Refs , stRefs :: Refs , stKeys :: M.Map Key (M.Map (Target, Attr) Int)@@ -85,6 +86,7 @@ instance Default WriterState where def = WriterState{ stNotes = []+ , stPrevRefs = [] , stRefs = [] , stKeys = M.empty , stLastIdx = 0@@ -355,7 +357,8 @@ notes' <- reverse <$> gets stNotes >>= notesToMarkdown opts modify $ \s -> s { stNotes = [] } refs' <- reverse <$> gets stRefs >>= refsToMarkdown opts- modify $ \s -> s { stRefs = [] }+ modify $ \s -> s { stPrevRefs = stPrevRefs s ++ stRefs s+ , stRefs = []} let endSpacing = if | writerReferenceLocation opts == EndOfDocument -> empty@@ -541,16 +544,14 @@ | isEnabled Ext_fenced_code_blocks opts -> tildes <> attrs <> cr <> text str <> cr <> tildes <> blankline _ -> nest (writerTabStop opts) (text str) <> blankline- where tildes = text $ case [ln | ln <- lines str, all (=='~') ln] of- [] -> "~~~~"- xs -> case maximum $ map length xs of- n | n < 3 -> "~~~~"- | otherwise -> replicate (n+1) '~'- backticks = text $ case [ln | ln <- lines str, all (=='`') ln] of- [] -> "```"- xs -> case maximum $ map length xs of- n | n < 3 -> "```"- | otherwise -> replicate (n+1) '`'+ where endline c = text $ case [length ln+ | ln <- map trim (lines str)+ , [c,c,c] `isPrefixOf` ln+ , all (== c) ln] of+ [] -> replicate 3 c+ xs -> replicate (maximum xs + 1) c+ backticks = endline '`'+ tildes = endline '~' attrs = if isEnabled Ext_fenced_code_attributes opts then nowrap $ " " <> attrsToMarkdown attribs else case attribs of@@ -572,14 +573,7 @@ let caption'' = if null caption || not (isEnabled Ext_table_captions opts) then blankline else blankline $$ (": " <> caption') $$ blankline- let isLineBreak LineBreak = Any True- isLineBreak _ = Any False- let hasLineBreak = getAny . query isLineBreak- let isSimpleCell [Plain ils] = not (hasLineBreak ils)- isSimpleCell [Para ils ] = not (hasLineBreak ils)- isSimpleCell [] = True- isSimpleCell _ = False- let hasSimpleCells = all isSimpleCell (concat (headers:rows))+ let hasSimpleCells = onlySimpleTableCells $ headers:rows let isSimple = hasSimpleCells && all (==0) widths let isPlainBlock (Plain _) = True isPlainBlock _ = False@@ -789,7 +783,7 @@ -> ([Inline],[[Block]]) -> MD m Doc definitionListItemToMarkdown opts (label, defs) = do- labelText <- inlineListToMarkdown opts label+ labelText <- blockToMarkdown opts (Plain label) defs' <- mapM (mapM (blockToMarkdown opts)) defs if isEnabled Ext_definition_lists opts then do@@ -810,10 +804,10 @@ let isTight = case defs of ((Plain _ : _): _) -> True _ -> False- return $ blankline <> nowrap labelText <>- (if isTight then cr else blankline) <> contents <> blankline+ return $ blankline <> nowrap labelText $$+ (if isTight then empty else blankline) <> contents <> blankline else do- return $ nowrap labelText <> text " " <> cr <>+ return $ nowrap (chomp labelText <> text " " <> cr) <> vsep (map vsep defs') <> blankline -- | Convert list of Pandoc block elements to markdown.@@ -867,6 +861,19 @@ getKey :: Doc -> Key getKey = toKey . render Nothing +findUsableIndex :: [Doc] -> Int -> Int+findUsableIndex lbls i = if (text (show i)) `elem` lbls+ then findUsableIndex lbls (i + 1)+ else i++getNextIndex :: PandocMonad m => MD m Int+getNextIndex = do+ prevRefs <- gets stPrevRefs+ refs <- gets stRefs+ i <- (+ 1) <$> gets stLastIdx+ let refLbls = map (\(r,_,_) -> r) $ prevRefs ++ refs+ return $ findUsableIndex refLbls i+ -- | Get reference for target; if none exists, create unique one and return. -- Prefer label if possible; otherwise, generate a unique key. getReference :: PandocMonad m => Attr -> Doc -> Target -> MD m Doc@@ -880,7 +887,7 @@ Nothing -> do -- no other refs with this label (lab', idx) <- if isEmpty label then do- i <- (+ 1) <$> gets stLastIdx+ i <- getNextIndex modify $ \s -> s{ stLastIdx = i } return (text (show i), i) else return (label, 0)@@ -905,7 +912,7 @@ stRefs = (lab', target, attr) : refs }) return lab' Nothing -> do -- but this one is to a new target- i <- (+ 1) <$> gets stLastIdx+ i <- getNextIndex modify $ \s -> s{ stLastIdx = i } let lab' = text (show i) modify (\s -> s{
src/Text/Pandoc/Writers/Muse.hs view
@@ -31,7 +31,6 @@ import Data.Char (isAlphaNum, isAsciiLower, isAsciiUpper, isDigit, isSpace) import Data.Default import Data.List (intersperse, isInfixOf, transpose)-import Data.Monoid (Any (..)) import qualified Data.Set as Set import Data.Text (Text) import System.FilePath (takeExtension)@@ -44,7 +43,6 @@ import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Writers.Math import Text.Pandoc.Writers.Shared-import Text.Pandoc.Walk type Notes = [[Block]] @@ -269,15 +267,7 @@ blocksToDoc opts blocks = local (\env -> env { envOptions = opts }) $ blockListToMuse blocks numcols = maximum (length aligns : length widths : map length (headers:rows))- hasSimpleCells = all isSimpleCell (concat (headers:rows))- isLineBreak LineBreak = Any True- isLineBreak _ = Any False- hasLineBreak = getAny . query isLineBreak- isSimple = hasSimpleCells && all (== 0) widths- isSimpleCell [Plain ils] = not (hasLineBreak ils)- isSimpleCell [Para ils ] = not (hasLineBreak ils)- isSimpleCell [] = True- isSimpleCell _ = False+ isSimple = onlySimpleTableCells (headers:rows) && all (== 0) widths blockToMuse (Div _ bs) = flatBlockListToMuse bs blockToMuse Null = return empty @@ -510,9 +500,7 @@ renderInlineList :: PandocMonad m => [Inline] -> Muse m Doc-renderInlineList [] = do- start <- asks envInlineStart- pure $ if start then "<verbatim></verbatim>" else ""+renderInlineList [] = pure "" renderInlineList (x:xs) = do start <- asks envInlineStart afterSpace <- asks envAfterSpace@@ -545,8 +533,11 @@ inlineListToMuse lst = do lst' <- normalizeInlineList . fixNotes <$> preprocessInlineList (map (removeKeyValues . replaceSmallCaps) lst) insideAsterisks <- asks envInsideAsterisks+ start <- asks envInlineStart modify $ \st -> st { stUseTags = False } -- Previous character is likely a '>' or some other markup- local (\env -> env { envNearAsterisks = insideAsterisks }) $ renderInlineList lst'+ if start && null lst'+ then pure "<verbatim></verbatim>"+ else local (\env -> env { envNearAsterisks = insideAsterisks }) $ renderInlineList lst' inlineListToMuse' :: PandocMonad m => [Inline] -> Muse m Doc inlineListToMuse' lst = do
src/Text/Pandoc/Writers/OpenDocument.hs view
@@ -393,7 +393,10 @@ mapM_ addParaStyle . newPara $ paraHStyles ++ paraStyles captionDoc <- if null c then return empty- else inlinesToOpenDocument o c >>= numberedTableCaption+ else inlinesToOpenDocument o c >>=+ if True -- temporary: see #5474+ then unNumberedCaption "TableCaption"+ else numberedTableCaption th <- if all null h then return empty else colHeadsToOpenDocument o (map fst paraHStyles) h@@ -405,7 +408,10 @@ withParagraphStyle o "Figure" [Para [Image attr caption (source,title)]] | otherwise = do imageDoc <- withParagraphStyle o "FigureWithCaption" [Para [Image attr caption (source,title)]]- captionDoc <- inlinesToOpenDocument o caption >>= numberedFigureCaption+ captionDoc <- inlinesToOpenDocument o caption >>=+ if True -- temporary: see #5474+ then unNumberedCaption "FigureCaption"+ else numberedFigureCaption return $ imageDoc $$ captionDoc @@ -433,6 +439,9 @@ ("style:num-format", "1") ] $ text $ show num c = text ": " in inParagraphTagsWithStyle style $ hcat [ t, text " ", s, c, caption ]++unNumberedCaption :: Monad m => String -> Doc -> OD m Doc+unNumberedCaption style caption = return $ inParagraphTagsWithStyle style caption colHeadsToOpenDocument :: PandocMonad m => WriterOptions -> [String] -> [[Block]]
src/Text/Pandoc/Writers/Org.hs view
@@ -169,8 +169,6 @@ else cr <> nest (level + 1) (propertiesDrawer attr) return $ headerStr <> " " <> contents <> drawerStr <> blankline blockToOrg (CodeBlock (_,classes,kvs) str) = do- opts <- gets stOptions- let tabstop = writerTabStop opts let startnum = maybe "" (\x -> ' ' : trimr x) $ lookup "startFrom" kvs let numberlines = if "numberLines" `elem` classes then if "continuedSourceBlock" `elem` classes@@ -181,7 +179,7 @@ let (beg, end) = case at of [] -> ("#+BEGIN_EXAMPLE" ++ numberlines, "#+END_EXAMPLE") (x:_) -> ("#+BEGIN_SRC " ++ x ++ numberlines, "#+END_SRC")- return $ text beg $$ nest tabstop (text str) $$ text end $$ blankline+ return $ text beg $$ nest 2 (text str) $$ text end $$ blankline blockToOrg (BlockQuote blocks) = do contents <- blockListToOrg blocks return $ blankline $$ "#+BEGIN_QUOTE" $$
src/Text/Pandoc/Writers/RST.hs view
@@ -472,6 +472,9 @@ -- them and they will be readable and parsable (Quoted _ _, _) -> keep f i (_, Quoted _ _) -> keep f i+ -- spans are not rendered using RST inlines, so we can keep them+ (Span ("",[],[]) _, _) -> keep f i+ (_, Span ("",[],[]) _) -> keep f i -- inlineToRST handles this case properly so it's safe to keep (Link _ _ _, Image _ _ _) -> keep f i -- parent inlines would prevent links from being correctly
@@ -109,6 +109,9 @@ metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$> Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs metaValueToJSON _ _ (MetaBool b) = return $ toJSON b+metaValueToJSON _ inlineWriter (MetaString s@('0':_:_)) =+ -- don't treat string with leading 0 as string (#5479)+ toJSON <$> inlineWriter (Builder.toList (Builder.text s)) metaValueToJSON _ inlineWriter (MetaString s) = case safeRead s of Just (n :: Scientific) -> return $ Aeson.Number n
src/Text/Pandoc/Writers/Textile.hs view
@@ -428,7 +428,7 @@ inlineToTextile _ (Str str) = return $ escapeStringForTextile str inlineToTextile _ (Math _ str) =- return $ "<span class=\"math\">" ++ escapeStringForXML str ++ "</math>"+ return $ "<span class=\"math\">" ++ escapeStringForXML str ++ "</span>" inlineToTextile opts il@(RawInline f str) | f == Format "html" || f == Format "textile" = return str
stack.yaml view
@@ -11,12 +11,14 @@ packages: - '.' extra-deps:-- pandoc-citeproc-0.16.1.3-- skylighting-0.7.7-- skylighting-core-0.7.7+- pandoc-citeproc-0.16.2 - ipynb-0.1-- texmath-0.11.2.2-- cmark-gfm-0.1.8+- cmark-gfm-0.2.0+- hslua-1.0.3.1+- hslua-module-system-0.2.0+- tasty-lua-0.2.0+- skylighting-core-0.8.1+- skylighting-0.8.1 ghc-options:- "$locals": -Wall -fno-warn-unused-do-bind -Wincomplete-record-updates -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wincomplete-uni-patterns -Widentities -Wcpp-undef -fhide-source-paths-resolver: lts-13.9+ "$locals": -Wall -fno-warn-unused-do-bind -Wincomplete-record-updates -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wincomplete-uni-patterns -Widentities -Wcpp-undef -fhide-source-paths -Wno-missing-home-modules+resolver: lts-13.17
test/Tests/Lua.hs view
@@ -11,11 +11,10 @@ Unit and integration tests for pandoc's Lua subsystem. -}-module Tests.Lua ( tests ) where+module Tests.Lua ( runLuaTest, tests ) where import Prelude import Control.Monad (when)-import Data.Version (Version (versionBranch)) import System.FilePath ((</>)) import Test.Tasty (TestTree, localOption) import Test.Tasty.HUnit (Assertion, assertEqual, testCase)@@ -34,6 +33,7 @@ import Text.Pandoc.Shared (pandocVersion) import qualified Foreign.Lua as Lua+import qualified Data.ByteString.Char8 as BS tests :: [TestTree] tests = map (localOption (QuickCheckTests 20))@@ -128,43 +128,24 @@ (doc $ divWith ("", [], kv_before) (para "nil")) (doc $ divWith ("", [], kv_after) (para "nil")) - , testCase "Test module pandoc.utils" $- assertFilterConversion "pandoc.utils doesn't work as expected."- "test-pandoc-utils.lua"- (doc $ para "doesn't matter")- (doc $ mconcat [ plain (str "blocks_to_inlines: OK")- , plain (str "hierarchicalize: OK")- , plain (str "normalize_date: OK")- , plain (str "pipe: OK")- , plain (str "failing pipe: OK")- , plain (str "read: OK")- , plain (str "failing read: OK")- , plain (str "sha1: OK")- , plain (str "stringify: OK")- , 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" . runLua' $ do- Lua.getglobal' "table.concat"+ , testCase "Pandoc version is set" . runLuaTest $ do Lua.getglobal "PANDOC_VERSION"- Lua.push ("." :: String) -- separator- Lua.call 2 1- Lua.liftIO . assertEqual "pandoc version is wrong" pandocVersion- =<< Lua.peek Lua.stackTop+ Lua.liftIO .+ assertEqual "pandoc version is wrong" (BS.pack pandocVersion)+ =<< Lua.tostring' Lua.stackTop - , testCase "Pandoc types version is set" . runLua' $ do- let versionNums = versionBranch pandocTypesVersion+ , testCase "Pandoc types version is set" . runLuaTest $ do Lua.getglobal "PANDOC_API_VERSION"- Lua.liftIO . assertEqual "pandoc-types version is wrong" versionNums+ Lua.liftIO . assertEqual "pandoc-types version is wrong" pandocTypesVersion =<< Lua.peek Lua.stackTop - , testCase "Allow singleton inline in constructors" . runLua' $ do+ , testCase "Allow singleton inline in constructors" . runLuaTest $ do Lua.liftIO . assertEqual "Not the exptected Emph" (Emph [Str "test"]) =<< Lua.callFunc "pandoc.Emph" (Str "test") Lua.liftIO . assertEqual "Unexpected element" (Para [Str "test"])@@ -178,14 +159,19 @@ Lua.peek Lua.stackTop ) - , testCase "Elements with Attr have `attr` accessor" . runLua' $ do+ , testCase "Elements with Attr have `attr` accessor" . runLuaTest $ do Lua.push (Div ("hi", ["moin"], []) [Para [Str "ignored"]]) Lua.getfield Lua.stackTop "attr" Lua.liftIO . assertEqual "no accessor" (("hi", ["moin"], []) :: Attr) =<< Lua.peek Lua.stackTop - , testCase "informative error messages" . runLua' $ do+ , testCase "module `pandoc.system` is present" . runLuaTest $ do+ Lua.getglobal' "pandoc.system"+ ty <- Lua.ltype Lua.stackTop+ Lua.liftIO $ assertEqual "module should be a table" Lua.TypeTable ty++ , testCase "informative error messages" . runLuaTest $ do Lua.pushboolean True err <- Lua.peekEither Lua.stackTop case (err :: Either String Pandoc) of@@ -207,7 +193,7 @@ roundtripEqual x = (x ==) <$> roundtripped where roundtripped :: (Lua.Peekable a, Lua.Pushable a) => IO a- roundtripped = runLua' $ do+ roundtripped = runLuaTest $ do oldSize <- Lua.gettop Lua.push x size <- Lua.gettop@@ -218,8 +204,8 @@ Left e -> error (show e) Right y -> return y -runLua' :: Lua.Lua a -> IO a-runLua' op = runIOorExplode $ do+runLuaTest :: Lua.Lua a -> IO a+runLuaTest op = runIOorExplode $ do setUserDataDir (Just "../data") res <- runLua op case res of
+ test/Tests/Lua/Module.hs view
@@ -0,0 +1,33 @@+{- |+Module : Tests.Lua.Module+Copyright : © 2019 Albert Krewinkel+License : GNU GPL, version 2 or above++Maintainer : Albert Krewinkel <albert@zeitkraut.de>+Stability : alpha+Portability : portable++Lua module tests+-}+module Tests.Lua.Module (tests) where++import System.FilePath ((</>))+import Test.Tasty (TestName, TestTree)+import Test.Tasty.Lua (testLuaFile)++import Tests.Lua (runLuaTest)++tests :: [TestTree]+tests =+ [ testPandocLua "pandoc"+ ("lua" </> "module" </> "pandoc.lua")+ , testPandocLua "pandoc.mediabag"+ ("lua" </> "module" </> "pandoc-mediabag.lua")+ , testPandocLua "pandoc.types"+ ("lua" </> "module" </> "pandoc-types.lua")+ , testPandocLua "pandoc.util"+ ("lua" </> "module" </> "pandoc-utils.lua")+ ]++testPandocLua :: TestName -> FilePath -> TestTree+testPandocLua = testLuaFile runLuaTest
test/Tests/Old.hs view
@@ -96,6 +96,9 @@ , test' "reader" ["-r", "jats", "-w", "native", "-s"] "jats-reader.xml" "jats-reader.native" ]+ , testGroup "jira"+ [ testGroup "writer" $ writerTests' "jira"+ ] , testGroup "native" [ testGroup "writer" $ writerTests' "native" , test' "reader" ["-r", "native", "-w", "native", "-s"]
test/Tests/Readers/FB2.hs view
@@ -36,4 +36,5 @@ , fb2Test "Epigraph" "fb2/reader/epigraph.fb2" , fb2Test "Poem" "fb2/reader/poem.fb2" , fb2Test "Meta" "fb2/reader/meta.fb2"+ , fb2Test "Notes" "fb2/reader/notes.fb2" ]
test/Tests/Readers/Muse.hs view
@@ -289,6 +289,12 @@ , "No footnotes inside links" =: "[[https://amusewiki.org/][foo[1]]" =?> para (link "https://amusewiki.org/" "" (text "foo[1"))+ , "Image inside link" =:+ "[[https://amusewiki.org/][Image [[image.png][with it's own description]] inside link description]]" =?>+ para (link "https://amusewiki.org/" "" (text "Image " <> (image "image.png" "" (text "with it's own description")) <> text " inside link description"))+ , "Link inside image description" =:+ "[[image.jpg][Image from [[https://amusewiki.org/]]]]" =?>+ para (image "image.jpg" "" (text "Image from " <> link "https://amusewiki.org/" "" (str "https://amusewiki.org/"))) ] , testGroup "Literal"
test/Tests/Readers/Org/Block/Header.hs view
@@ -87,6 +87,13 @@ let todoSpan = spanWith ("", ["done", "DONE"], []) "DONE" in headerWith ("header", [], []) 1 (todoSpan <> space <> "header") + , "emphasis in first word" =:+ "** TODO /fix/ this" =?>+ let todoSpan = spanWith ("", ["todo", "TODO"], []) "TODO"+ in headerWith ("fix-this", [], [])+ 2+ (todoSpan <> space <> emph "fix" <> space <> "this")+ , "Header with unknown todo keyword" =: "* WAITING header" =?> headerWith ("waiting-header", [], []) 1 "WAITING header"@@ -229,5 +236,29 @@ , " :END:" ] =?> headerWith ("look", [], []) 1 "important"++ , "third and forth level headers" =:+ T.unlines [ "#+OPTIONS: p:t h:3"+ , "*** Third"+ , " CLOSED: [2018-09-05 Wed 13:58]"+ , " Text 3"+ , "**** Fourth"+ , "SCHEDULED: <2019-05-13 Mon 22:42>"+ , "Text 4"+ ] =?>+ mconcat+ [ headerWith ("third", [], mempty) 3 "Third"+ , plain $+ strong "CLOSED:" <> space <> emph (str "[2018-09-05 Wed 13:58]")+ , para "Text 3"+ , orderedList [+ mconcat+ [ para "Fourth"+ , plain $ strong "SCHEDULED:"+ <> space+ <> emph (str "<2019-05-13 Mon 22:42>")+ , para "Text 4"+ ]]+ ] ] ]
test/Tests/Readers/Org/Directive.hs view
@@ -184,6 +184,24 @@ ] =?> headerWith ("wichtig", mempty, mempty) 1 "Wichtig" ]++ , testGroup "unknown options"+ [ "unknown options are ignored" =:+ T.unlines [ "#+OPTIONS: does-not-exist:t "] =?>+ (mempty :: Pandoc)++ , "highlighting after unknown option" =:+ T.unlines [ "#+OPTIONS: nope"+ , "/yup/"+ ] =?>+ para (emph "yup")++ , "unknown option interleaved with known" =:+ T.unlines [ "#+OPTIONS: tags:nil foo:bar todo:nil"+ , "* DONE ignore things :easy:"+ ] =?>+ headerWith ("ignore-things", [], mempty) 1 "ignore things"+ ] ] , testGroup "Include"
test/Tests/Readers/Org/Inline.hs view
@@ -328,9 +328,13 @@ "\\emph{Emphasis mine}" =?> para (emph "Emphasis mine") - , "Inline LaTeX math symbol" =:- "\\tau" =?>- para (emph "τ")+ , "Inline math symbols" =:+ "\\tau \\oplus \\alpha" =?>+ para "τ ⊕ α"++ , "Inline LaTeX math command" =:+ "\\crarr" =?>+ para "↵" , "Unknown inline LaTeX command" =: "\\notacommand{foo}" =?>
test/Tests/Writers/JATS.hs view
@@ -86,9 +86,7 @@ headerWith ("foo",["unnumbered"],[]) 1 (text "Header 1" <> note (plain $ text "note")) =?> "<sec id=\"foo\">\n\- \ <title>Header 1<fn>\n\- \ <p>note</p>\n\- \ </fn></title>\n\+ \ <title>Header 1<xref ref-type=\"fn\" rid=\"fn1\">1</xref></title>\n\ \</sec>" , "unnumbered sub header" =: headerWith ("foo",["unnumbered"],[]) 1
test/Tests/Writers/LaTeX.hs view
@@ -81,7 +81,7 @@ , "struck out and not highlighted" =: strikeout (code "foo" <> space <> str "bar") =?>- "\\sout{\\texttt{foo} bar}"+ "\\sout{\\mbox{\\texttt{foo}} bar}" , "single quotes" =: code "dog's" =?> "\\texttt{dog\\textquotesingle{}s}" , "backtick" =:
test/Tests/Writers/Muse.hs view
@@ -2,8 +2,8 @@ {-# LANGUAGE OverloadedStrings #-} module Tests.Writers.Muse (tests) where -import Prelude-import Data.Text (unpack)+import Prelude hiding (unlines)+import Data.Text (Text, unlines) import Test.Tasty import Tests.Helpers import Text.Pandoc@@ -15,15 +15,15 @@ writerExtensions = extensionsFromList [Ext_amuse, Ext_auto_identifiers] } -muse :: (ToPandoc a) => a -> String+muse :: (ToPandoc a) => a -> Text muse = museWithOpts defopts -museWithOpts :: (ToPandoc a) => WriterOptions -> a -> String-museWithOpts opts = unpack . purely (writeMuse opts) . toPandoc+museWithOpts :: (ToPandoc a) => WriterOptions -> a -> Text+museWithOpts opts = purely (writeMuse opts) . toPandoc infix 4 =: (=:) :: (ToString a, ToPandoc a)- => String -> (a, String) -> TestTree+ => String -> (a, Text) -> TestTree (=:) = test muse noteLocationTestDoc :: Blocks@@ -545,6 +545,7 @@ "remove soft break" $ "a" <> softbreak <> "b" =?> ("a b" :: String) , "line break" =: "a" <> linebreak <> "b" =?> "a<br>\nb"+ , "line break at the end" =: "a" <> linebreak =?> "a<br>" , "no newline after line break in header" =: header 1 ("a" <> linebreak <> "b") =?> "* a<br>b" , "no softbreak in header" =: header 1 ("a" <> softbreak <> "b") =?> "* a b" ]
test/command/2662.md view
@@ -7,5 +7,5 @@ :scale: 300 % :alt: alternate text ^D-<p><img src="http://url.to.image/foo.png" alt="alternate text" class="align-left" width="600" height="300" /></p>+<p><img src="http://url.to.image/foo.png" class="align-left" width="600" height="300" alt="alternate text" /></p> ```
test/command/3450.md view
@@ -2,7 +2,7 @@ % pandoc -fmarkdown-implicit_figures {height=2em} ^D-<p><img src="lalune.jpg" alt="image" style="height:2em" /></p>+<p><img src="lalune.jpg" style="height:2em" alt="image" /></p> ``` ``` % pandoc -fmarkdown-implicit_figures -t latex
test/command/3577.md view
@@ -16,10 +16,10 @@ \end{figure} ^D <figure>-<img src="img1.jpg" alt="Caption 1" /><figcaption>Caption 1</figcaption>+<img src="img1.jpg" alt="" /><figcaption>Caption 1</figcaption> </figure> <figure>-<img src="img2.jpg" alt="Caption 2" /><figcaption>Caption 2</figcaption>+<img src="img2.jpg" alt="" /><figcaption>Caption 2</figcaption> </figure> ``` ```@@ -30,6 +30,6 @@ \end{figure} ^D <figure>-<img src="img1.jpg" alt="Caption 3" /><figcaption>Caption 3</figcaption>+<img src="img1.jpg" alt="" /><figcaption>Caption 3</figcaption> </figure> ```
test/command/4012.md view
@@ -4,5 +4,5 @@ [image]: http://example.com/image.jpg {height=35mm} ^D-<p><img src="http://example.com/image.jpg" alt="image" style="height:35mm" /></p>+<p><img src="http://example.com/image.jpg" style="height:35mm" alt="image" /></p> ```
test/command/4235.md view
@@ -6,7 +6,7 @@ <section class="footnotes" role="doc-endnotes"> <hr /> <ol>-<li id="foofn1" role="doc-endnote"><p>Has a footnote.<a href="#foofnref1" class="footnote-back" role="doc-backlink">↩</a></p></li>+<li id="foofn1" role="doc-endnote"><p>Has a footnote.<a href="#foofnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li> </ol> </section> ```
test/command/4677.md view
@@ -3,6 +3,6 @@ {#img:1} ^D <figure>-<img src="img.png" alt="Caption" id="img:1" /><figcaption>Caption</figcaption>+<img src="img.png" id="img:1" alt="" /><figcaption>Caption</figcaption> </figure> ```
test/command/5121.md view
@@ -5,7 +5,7 @@ ## Header 2 ^D <figure>-<img src="./my-figure.jpg" alt="My caption" width="500" /><figcaption>My caption</figcaption>+<img src="./my-figure.jpg" width="500" alt="" /><figcaption>My caption</figcaption> </figure> Header 2
test/command/5178.md view
@@ -7,19 +7,19 @@ unsafePerformIO main ^D #+BEGIN_SRC haskell -n 42- main = putStrLn "Hello World!"- unsafePerformIO main+ main = putStrLn "Hello World!"+ unsafePerformIO main #+END_SRC ``` ``` % pandoc -f org -t native #+BEGIN_SRC lisp -n 20- (+ 1 1)+ (+ 1 1) #+END_SRC #+BEGIN_SRC lisp +n 10- (+ 2 2)+ (+ 2 2) #+END_SRC ^D [CodeBlock ("",["commonlisp","numberLines"],[("org-language","lisp"),("startFrom","20")]) "(+ 1 1)\n"@@ -32,10 +32,10 @@ ,CodeBlock ("",["commonlisp","numberLines","continuedSourceBlock"],[("org-language","lisp"),("startFrom","10")]) "(+ 2 2)\n"] ^D #+BEGIN_SRC lisp -n 20- (+ 1 1)+ (+ 1 1) #+END_SRC #+BEGIN_SRC lisp +n 10- (+ 2 2)+ (+ 2 2) #+END_SRC ```
+ test/command/5420.md view
@@ -0,0 +1,6 @@+```+% pandoc --listings -t latex+`int a = 1;`{.cpp style=cpp}+^D+\passthrough{\lstinline[language={C++}, style=cpp]!int a = 1;!}+```
+ test/command/5439.md view
@@ -0,0 +1,6 @@+```+% pandoc -t latex+namespace\fshyp{}container+^D+namespace\fshyp{}container+```
+ test/command/5446.md view
@@ -0,0 +1,6 @@+```+% pandoc -f latex -t rst+{\em test test \/}+^D+*test test*+```
+ test/command/5476.md view
@@ -0,0 +1,12 @@+```+% pandoc -t latex+![moon^[the moon]](test/lalune.jpg)+^D+\begin{figure}+\centering+\includegraphics{test/lalune.jpg}+\caption[moon]{moon\footnotemark{}}+\end{figure}+\footnotetext{the moon}+```+
+ test/command/5495.md view
@@ -0,0 +1,18 @@+```+% pandoc -t markdown --reference-links+All because of [1](#one) link...++[This](#foo) will break Pandoc.++[This](#bar) will make you laugh.+^D+All because of [1] link...++[This] will break Pandoc.++[This][2] will make you laugh.++ [1]: #one+ [This]: #foo+ [2]: #bar+```
+ test/command/5519.md view
@@ -0,0 +1,14 @@+~~~+% pandoc -t markdown+``````{.attr}+ ```+ code+ ```+``````+^D+```` {.attr}+ ```+ code+ ```+````+~~~
+ test/command/5529.md view
@@ -0,0 +1,10 @@+```+% pandoc -t latex+~~`hello world`~~++~~_`hello world`_~~+^D+\sout{\mbox{\texttt{hello\ world}}}++\sout{\emph{\mbox{\texttt{hello\ world}}}}+```
+ test/command/5540.md view
@@ -0,0 +1,8 @@+```+% pandoc -f latex -t native+\begin{lstlisting}[language=myfunnylanguage]+Stay pure!+\end{lstlisting}+^D+[CodeBlock ("",["myfunnylanguage"],[("language","myfunnylanguage")]) "Stay pure!"]+```
+ test/command/5543.md view
@@ -0,0 +1,8 @@+```+% pandoc -t markdown+1\. item+: description+^D+1\. item+: description+```
+ test/command/5549.md view
@@ -0,0 +1,9 @@+```+% pandoc -t native+##++[]+^D+[Header 2 ("section",[],[]) []+,Para [Str "[]"]]+```
+ test/command/5565.md view
@@ -0,0 +1,6 @@+```+% pandoc -t asciidoc+***hi***+^D+*_hi_*+```
+ test/command/5566.md view
@@ -0,0 +1,6 @@+```+% pandoc -t asciidoc -f html+fo<span class="c">o</span> f<span class="c">o</span>o <span class="c">f</span>oo <span class="c">foo</span>+^D+fo[.c]##o## f[.c]##o##o [.c]##f##oo [.c]#foo#+```
+ test/command/5574.md view
@@ -0,0 +1,8 @@+No highlighting inside heading:+```+% pandoc -t latex+# `foo`{.cpp}+^D+\hypertarget{foo}{%+\section{\texorpdfstring{\texttt{foo}}{foo}}\label{foo}}+```
+ test/command/html-trim-definition-list-terms.md view
@@ -0,0 +1,17 @@+```+% pandoc -f html -t native+<dl>+ <dt>+ foo+ bar+ </dt>+ <dt>+ baz+ </dt>+ <dd>test</dd>+</dl>+^D+[DefinitionList+ [([Str "foo",SoftBreak,Str "bar",LineBreak,Str "baz"],+ [[Plain [Str "test"]]])]]+```
+ test/command/video-audio.md view
@@ -0,0 +1,19 @@+```+% pandoc -f markdown-implicit_figures -t html+++{width=300}+++++++^D+<p><video src="./test.mp4" controls=""><a href="./test.mp4">Video</a></video></p>+<p><video src="foo/test.webm" width="300" controls=""><a href="foo/test.webm">Your browser does not support video.</a></video></p>+<p><audio src="test.mp3" controls=""><a href="test.mp3">Audio</a></audio></p>+<p><embed src="./test.pdf" /></p>+<p><img src="./test.jpg" /></p>+```+
test/epub/wasteland.native view
@@ -46,896 +46,893 @@ [Div ("",[],[]) [Plain [Str "What",Space,Str "are",Space,Str "the",Space,Str "roots",Space,Str "that",Space,Str "clutch,",Space,Str "what",Space,Str "branches",Space,Str "grow"]] ,Div ("wasteland-content.xhtml#ln20",[],[])- [Plain [Str "Out",Space,Str "of",Space,Str "this",Space,Str "stony",Space,Str "rubbish?",Space,Str "Son",Space,Str "of",Space,Str "man,",Note [Para [Link ("",[],[]) [Str "Line",Space,Str "20."] ("#wasteland-content.xhtml#ln20",""),Space,Str "Cf.",Space,Str "Ezekiel",Space,Str "2:1."]]]- ,Div ("",[],[])- [Plain [Str "You",Space,Str "cannot",Space,Str "say,",Space,Str "or",Space,Str "guess,",Space,Str "for",Space,Str "you",Space,Str "know",Space,Str "only"]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "heap",Space,Str "of",Space,Str "broken",Space,Str "images,",Space,Str "where",Space,Str "the",Space,Str "sun",Space,Str "beats,"]]- ,Div ("wasteland-content.xhtml#ln23",[],[])- [Plain [Str "And",Space,Str "the",Space,Str "dead",Space,Str "tree",Space,Str "gives",Space,Str "no",Space,Str "shelter,",Space,Str "the",Space,Str "cricket",Space,Str "no",Space,Str "relief,",Note [Para [Link ("",[],[]) [Str "23."] ("#wasteland-content.xhtml#ln23",""),Space,Str "Cf.",Space,Str "Ecclesiastes",Space,Str "12:5."]]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "the",Space,Str "dry",Space,Str "stone",Space,Str "no",Space,Str "sound",Space,Str "of",Space,Str "water.",Space,Str "Only"]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "is",Space,Str "shadow",Space,Str "under",Space,Str "this",Space,Str "red",Space,Str "rock,"]]- ,Div ("",[],[])- [Plain [Str "(Come",Space,Str "in",Space,Str "under",Space,Str "the",Space,Str "shadow",Space,Str "of",Space,Str "this",Space,Str "red",Space,Str "rock),"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "I",Space,Str "will",Space,Str "show",Space,Str "you",Space,Str "something",Space,Str "different",Space,Str "from",Space,Str "either"]]- ,Div ("",[],[])- [Plain [Str "Your",Space,Str "shadow",Space,Str "at",Space,Str "morning",Space,Str "striding",Space,Str "behind",Space,Str "you"]]- ,Div ("",[],[])- [Plain [Str "Or",Space,Str "your",Space,Str "shadow",Space,Str "at",Space,Str "evening",Space,Str "rising",Space,Str "to",Space,Str "meet",Space,Str "you;"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "will",Space,Str "show",Space,Str "you",Space,Str "fear",Space,Str "in",Space,Str "a",Space,Str "handful",Space,Str "of",Space,Str "dust.",Span ("",["lnum"],[]) [Str "30"]]]- ,BlockQuote- [Div ("",[],[])- [Div ("wasteland-content.xhtml#ln31",[],[])- [Plain [Str "Frisch",Space,Str "weht",Space,Str "der",Space,Str "Wind",Note [Para [Link ("",[],[]) [Str "31."] ("#wasteland-content.xhtml#ln31",""),Space,Str "V.",Space,Str "Tristan",Space,Str "und",Space,Str "Isolde,",Space,Str "i,",Space,Str "verses",Space,Str "5-8."]]]- ,Div ("",[],[])- [Plain [Str "Der",Space,Str "Heimat",Space,Str "zu"]]- ,Div ("",[],[])- [Plain [Str "Mein",Space,Str "Irisch",Space,Str "Kind,"]]- ,Div ("",[],[])- [Plain [Str "Wo",Space,Str "weilest",Space,Str "du?"]]]- ,RawBlock (Format "html") "</blockquote>"- ,Div ("",[],[])- [Plain [Str "\"You",Space,Str "gave",Space,Str "me",Space,Str "hyacinths",Space,Str "first",Space,Str "a",Space,Str "year",Space,Str "ago;"]]- ,Div ("",[],[])- [Plain [Str "\"They",Space,Str "called",Space,Str "me",Space,Str "the",Space,Str "hyacinth",Space,Str "girl.\""]]- ,Div ("",[],[])- [Plain [Str "\8213Yet",Space,Str "when",Space,Str "we",Space,Str "came",Space,Str "back,",Space,Str "late,",Space,Str "from",Space,Str "the",Space,Str "Hyacinth",SoftBreak,Str "garden,"]]- ,Div ("",[],[])- [Plain [Str "Your",Space,Str "arms",Space,Str "full,",Space,Str "and",Space,Str "your",Space,Str "hair",Space,Str "wet,",Space,Str "I",Space,Str "could",Space,Str "not"]]- ,Div ("",[],[])- [Plain [Str "Speak,",Space,Str "and",Space,Str "my",Space,Str "eyes",Space,Str "failed,",Space,Str "I",Space,Str "was",Space,Str "neither"]]- ,Div ("",[],[])- [Plain [Str "Living",Space,Str "nor",Space,Str "dead,",Space,Str "and",Space,Str "I",Space,Str "knew",Space,Str "nothing,",Span ("",["lnum"],[]) [Str "40"]]]- ,Div ("",[],[])- [Plain [Str "Looking",Space,Str "into",Space,Str "the",Space,Str "heart",Space,Str "of",Space,Str "light,",Space,Str "the",Space,Str "silence."]]- ,Div ("wasteland-content.xhtml#ln42",[],[("lang","de")])- [Plain [Emph [Str "Od'",Space,Str "und",Space,Str "leer",Space,Str "das",Space,Str "Meer"],Str ".",Note [Para [Link ("",[],[]) [Str "42."] ("#wasteland-content.xhtml#ln42",""),Space,Str "Id.",Space,Str "iii,",Space,Str "verse",Space,Str "24."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Madame",Space,Str "Sosostris,",Space,Str "famous",Space,Str "clairvoyante,"]]- ,Div ("",[],[])- [Plain [Str "Had",Space,Str "a",Space,Str "bad",Space,Str "cold,",Space,Str "nevertheless"]]- ,Div ("",[],[])- [Plain [Str "Is",Space,Str "known",Space,Str "to",Space,Str "be",Space,Str "the",Space,Str "wisest",Space,Str "woman",Space,Str "in",Space,Str "Europe,"]]- ,Div ("wasteland-content.xhtml#ln46",[],[])- [Plain [Str "With",Space,Str "a",Space,Str "wicked",Space,Str "pack",Space,Str "of",Space,Str "cards.",Space,Str "Here,",Space,Str "said",Space,Str "she,",Note [Para [Link ("",[],[]) [Str "46."] ("#wasteland-content.xhtml#ln46",""),Space,Str "I",Space,Str "am",Space,Str "not",Space,Str "familiar",Space,Str "with",Space,Str "the",Space,Str "exact",Space,Str "constitution",Space,Str "of",Space,Str "the",Space,Str "Tarot",Space,Str "pack",Space,Str "of",SoftBreak,Str "cards,",Space,Str "from",Space,Str "which",Space,Str "I",Space,Str "have",Space,Str "obviously",Space,Str "departed",Space,Str "to",Space,Str "suit",Space,Str "my",Space,Str "own",Space,Str "convenience.",SoftBreak,Str "The",Space,Str "Hanged",Space,Str "Man,",Space,Str "a",Space,Str "member",Space,Str "of",Space,Str "the",Space,Str "traditional",Space,Str "pack,",Space,Str "fits",Space,Str "my",Space,Str "purpose",Space,Str "in",Space,Str "two",SoftBreak,Str "ways:",Space,Str "because",Space,Str "he",Space,Str "is",Space,Str "associated",Space,Str "in",Space,Str "my",Space,Str "mind",Space,Str "with",Space,Str "the",Space,Str "Hanged",Space,Str "God",Space,Str "of",Space,Str "Frazer,",SoftBreak,Str "and",Space,Str "because",Space,Str "I",Space,Str "associate",Space,Str "him",Space,Str "with",Space,Str "the",Space,Str "hooded",Space,Str "figure",Space,Str "in",Space,Str "the",Space,Str "passage",Space,Str "of",Space,Str "the",SoftBreak,Str "disciples",Space,Str "to",Space,Str "Emmaus",Space,Str "in",Space,Str "Part",Space,Str "V.",Space,Str "The",Space,Str "Phoenician",Space,Str "Sailor",Space,Str "and",Space,Str "the",Space,Str "Merchant",SoftBreak,Str "appear",Space,Str "later;",Space,Str "also",Space,Str "the",Space,Str "\"crowds",Space,Str "of",Space,Str "people,\"",Space,Str "and",Space,Str "Death",Space,Str "by",Space,Str "Water",Space,Str "is",SoftBreak,Str "executed",Space,Str "in",Space,Str "Part",Space,Str "IV.",Space,Str "The",Space,Str "Man",Space,Str "with",Space,Str "Three",Space,Str "Staves",Space,Str "(an",Space,Str "authentic",Space,Str "member",Space,Str "of",SoftBreak,Str "the",Space,Str "Tarot",Space,Str "pack)",Space,Str "I",Space,Str "associate,",Space,Str "quite",Space,Str "arbitrarily,",Space,Str "with",Space,Str "the",Space,Str "Fisher",Space,Str "King",SoftBreak,Str "himself."]]]- ,Div ("",[],[])- [Plain [Str "Is",Space,Str "your",Space,Str "card,",Space,Str "the",Space,Str "drowned",Space,Str "Phoenician",Space,Str "Sailor,"]]- ,Div ("",[],[])- [Plain [Str "(Those",Space,Str "are",Space,Str "pearls",Space,Str "that",Space,Str "were",Space,Str "his",Space,Str "eyes.",Space,Str "Look!)"]]- ,Div ("",[],[])- [Plain [Str "Here",Space,Str "is",Space,Str "Belladonna,",Space,Str "the",Space,Str "Lady",Space,Str "of",Space,Str "the",Space,Str "Rocks,"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "lady",Space,Str "of",Space,Str "situations.",Span ("",["lnum"],[]) [Str "50"]]]- ,Div ("",[],[])- [Plain [Str "Here",Space,Str "is",Space,Str "the",Space,Str "man",Space,Str "with",Space,Str "three",Space,Str "staves,",Space,Str "and",Space,Str "here",Space,Str "the",Space,Str "Wheel,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "here",Space,Str "is",Space,Str "the",Space,Str "one-eyed",Space,Str "merchant,",Space,Str "and",Space,Str "this",Space,Str "card,"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "is",Space,Str "blank,",Space,Str "is",Space,Str "something",Space,Str "he",Space,Str "carries",Space,Str "on",Space,Str "his",Space,Str "back,"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "I",Space,Str "am",Space,Str "forbidden",Space,Str "to",Space,Str "see.",Space,Str "I",Space,Str "do",Space,Str "not",Space,Str "find"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "Hanged",Space,Str "Man.",Space,Str "Fear",Space,Str "death",Space,Str "by",Space,Str "water."]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "see",Space,Str "crowds",Space,Str "of",Space,Str "people,",Space,Str "walking",Space,Str "round",Space,Str "in",Space,Str "a",Space,Str "ring."]]- ,Div ("",[],[])- [Plain [Str "Thank",Space,Str "you.",Space,Str "If",Space,Str "you",Space,Str "see",Space,Str "dear",Space,Str "Mrs.",Space,Str "Equitone,"]]- ,Div ("",[],[])- [Plain [Str "Tell",Space,Str "her",Space,Str "I",Space,Str "bring",Space,Str "the",Space,Str "horoscope",Space,Str "myself:"]]- ,Div ("",[],[])- [Plain [Str "One",Space,Str "must",Space,Str "be",Space,Str "so",Space,Str "careful",Space,Str "these",Space,Str "days."]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln60",[],[])- [Plain [Str "Unreal",Space,Str "City,",Note [Para [Link ("",[],[]) [Str "60."] ("#wasteland-content.xhtml#ln60",""),Space,Str "Cf.",Space,Str "Baudelaire:"],BlockQuote [Para [Str "\"Fourmillante",Space,Str "cite;,",Space,Str "cite;",Space,Str "pleine",Space,Str "de",Space,Str "reves,",LineBreak,Str "Ou",Space,Str "le",Space,Str "spectre",Space,Str "en",SoftBreak,Str "plein",Space,Str "jour",Space,Str "raccroche",Space,Str "le",Space,Str "passant.\""]]]]- ,Div ("",[],[])- [Plain [Str "Under",Space,Str "the",Space,Str "brown",Space,Str "fog",Space,Str "of",Space,Str "a",Space,Str "winter",Space,Str "dawn,"]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "crowd",Space,Str "flowed",Space,Str "over",Space,Str "London",Space,Str "Bridge,",Space,Str "so",Space,Str "many,"]]- ,Div ("wasteland-content.xhtml#ln63",[],[])- [Plain [Str "I",Space,Str "had",Space,Str "not",Space,Str "thought",Space,Str "death",Space,Str "had",Space,Str "undone",Space,Str "so",Space,Str "many.",Note [Para [Link ("",[],[]) [Str "63."] ("#wasteland-content.xhtml#ln63",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "iii.",Space,Str "55-7."],BlockQuote [Para [Str "\"si",Space,Str "lunga",Space,Str "tratta",LineBreak,Str "di",Space,Str "gente,",Space,Str "ch'io",Space,Str "non",Space,Str "avrei",Space,Str "mai",Space,Str "creduto",LineBreak,Str "che",SoftBreak,Str "morte",Space,Str "tanta",Space,Str "n'avesse",Space,Str "disfatta.\""]]]]- ,Div ("wasteland-content.xhtml#ln64",[],[])- [Plain [Str "Sighs,",Space,Str "short",Space,Str "and",Space,Str "infrequent,",Space,Str "were",Space,Str "exhaled,",Note [Para [Link ("",[],[]) [Str "64."] ("#wasteland-content.xhtml#ln64",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "iv.",Space,Str "25-7:"],BlockQuote [Para [Str "\"Quivi,",Space,Str "secondo",Space,Str "che",Space,Str "per",Space,Str "ascoltahre,",LineBreak,Str "\"non",Space,Str "avea",Space,Str "pianto,",Space,Str "ma'",Space,Str "che",Space,Str "di",SoftBreak,Str "sospiri,",LineBreak,Str "\"che",Space,Str "l'aura",Space,Str "eterna",Space,Str "facevan",Space,Str "tremare.\""]]]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "each",Space,Str "man",Space,Str "fixed",Space,Str "his",Space,Str "eyes",Space,Str "before",Space,Str "his",Space,Str "feet."]]- ,Div ("",[],[])- [Plain [Str "Flowed",Space,Str "up",Space,Str "the",Space,Str "hill",Space,Str "and",Space,Str "down",Space,Str "King",Space,Str "William",Space,Str "Street,"]]- ,Div ("",[],[])- [Plain [Str "To",Space,Str "where",Space,Str "Saint",Space,Str "Mary",Space,Str "Woolnoth",Space,Str "kept",Space,Str "the",Space,Str "hours"]]- ,Div ("wasteland-content.xhtml#ln68",[],[])- [Plain [Str "With",Space,Str "a",Space,Str "dead",Space,Str "sound",Space,Str "on",Space,Str "the",Space,Str "final",Space,Str "stroke",Space,Str "of",Space,Str "nine.",Note [Para [Link ("",[],[]) [Str "68."] ("#wasteland-content.xhtml#ln68",""),Space,Str "A",Space,Str "phenomenon",Space,Str "which",Space,Str "I",Space,Str "have",Space,Str "often",Space,Str "noticed."]]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "I",Space,Str "saw",Space,Str "one",Space,Str "I",Space,Str "knew,",Space,Str "and",Space,Str "stopped",Space,Str "him,",Space,Str "crying",SoftBreak,Str "\"Stetson!"]]- ,Div ("",[],[])- [Plain [Str "\"You",Space,Str "who",Space,Str "were",Space,Str "with",Space,Str "me",Space,Str "in",Space,Str "the",Space,Str "ships",Space,Str "at",Space,Str "Mylae!",Span ("",["lnum"],[]) [Str "70"]]]- ,Div ("",[],[])- [Plain [Str "\"That",Space,Str "corpse",Space,Str "you",Space,Str "planted",Space,Str "last",Space,Str "year",Space,Str "in",Space,Str "your",Space,Str "garden,"]]- ,Div ("",[],[])- [Plain [Str "\"Has",Space,Str "it",Space,Str "begun",Space,Str "to",Space,Str "sprout?",Space,Str "Will",Space,Str "it",Space,Str "bloom",Space,Str "this",Space,Str "year?"]]- ,Div ("",[],[])- [Plain [Str "\"Or",Space,Str "has",Space,Str "the",Space,Str "sudden",Space,Str "frost",Space,Str "disturbed",Space,Str "its",Space,Str "bed?"]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln74",[],[])- [Plain [Str "\"Oh",Space,Str "keep",Space,Str "the",Space,Str "Dog",Space,Str "far",Space,Str "hence,",Space,Str "that's",Space,Str "friend",Space,Str "to",Space,Str "men,",Note [Para [Link ("",[],[]) [Str "74."] ("#wasteland-content.xhtml#ln74",""),Space,Str "Cf.",Space,Str "the",Space,Str "Dirge",Space,Str "in",Space,Str "Webster's",Space,Str "White",Space,Str "Devil",Space,Str "."]]]- ,Div ("",[],[])- [Plain [Str "\"Or",Space,Str "with",Space,Str "his",Space,Str "nails",Space,Str "he'll",Space,Str "dig",Space,Str "it",Space,Str "up",Space,Str "again!"]]- ,Div ("wasteland-content.xhtml#ln76",[],[])- [Plain [Str "\"You!",Space,Span ("",[],[("lang","fr")]) [Str "hypocrite",Space,Str "lecteur!",Space,Str "-",Space,Str "mon",Space,Str "semblable,",Space,Str "-",SoftBreak,Str "mon",Space,Str "frere"],Space,Str "!\"",Note [Para [Link ("",[],[]) [Str "76."] ("#wasteland-content.xhtml#ln76",""),Space,Str "V.",Space,Str "Baudelaire,",Space,Str "Preface",Space,Str "to",Space,Str "Fleurs",Space,Str "du",Space,Str "Mal."]]]- ,Div ("wasteland-content.xhtml#ch2",["section"],[])- [Header 2 ("",[],[]) [Str "II.",Space,Str "A",Space,Str "GAME",Space,Str "OF",Space,Str "CHESS"]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln77",[],[])- [Plain [Str "The",Space,Str "Chair",Space,Str "she",Space,Str "sat",Space,Str "in,",Space,Str "like",Space,Str "a",Space,Str "burnished",Space,Str "throne,",Note [Para [Link ("",[],[]) [Str "77."] ("#wasteland-content.xhtml#ln77",""),Space,Str "Cf.",Space,Str "Antony",Space,Str "and",Space,Str "Cleopatra,",Space,Str "II.",Space,Str "ii.,",Space,Str "l.",Space,Str "190."]]]- ,Div ("",[],[])- [Plain [Str "Glowed",Space,Str "on",Space,Str "the",Space,Str "marble,",Space,Str "where",Space,Str "the",Space,Str "glass"]]- ,Div ("",[],[])- [Plain [Str "Held",Space,Str "up",Space,Str "by",Space,Str "standards",Space,Str "wrought",Space,Str "with",Space,Str "fruited",Space,Str "vines"]]- ,Div ("",[],[])- [Plain [Str "From",Space,Str "which",Space,Str "a",Space,Str "golden",Space,Str "Cupidon",Space,Str "peeped",Space,Str "out",Span ("",["lnum"],[]) [Str "80"]]]- ,Div ("",[],[])- [Plain [Str "(Another",Space,Str "hid",Space,Str "his",Space,Str "eyes",Space,Str "behind",Space,Str "his",Space,Str "wing)"]]- ,Div ("",[],[])- [Plain [Str "Doubled",Space,Str "the",Space,Str "flames",Space,Str "of",Space,Str "sevenbranched",Space,Str "candelabra"]]- ,Div ("",[],[])- [Plain [Str "Reflecting",Space,Str "light",Space,Str "upon",Space,Str "the",Space,Str "table",Space,Str "as"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "glitter",Space,Str "of",Space,Str "her",Space,Str "jewels",Space,Str "rose",Space,Str "to",Space,Str "meet",Space,Str "it,"]]- ,Div ("",[],[])- [Plain [Str "From",Space,Str "satin",Space,Str "cases",Space,Str "poured",Space,Str "in",Space,Str "rich",Space,Str "profusion;"]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "vials",Space,Str "of",Space,Str "ivory",Space,Str "and",Space,Str "coloured",Space,Str "glass"]]- ,Div ("",[],[])- [Plain [Str "Unstoppered,",Space,Str "lurked",Space,Str "her",Space,Str "strange",Space,Str "synthetic",Space,Str "perfumes,"]]- ,Div ("",[],[])- [Plain [Str "Unguent,",Space,Str "powdered,",Space,Str "or",Space,Str "liquid",Space,Str "-",Space,Str "troubled,",Space,Str "confused"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "drowned",Space,Str "the",Space,Str "sense",Space,Str "in",Space,Str "odours;",Space,Str "stirred",Space,Str "by",Space,Str "the",Space,Str "air"]]- ,Div ("",[],[])- [Plain [Str "That",Space,Str "freshened",Space,Str "from",Space,Str "the",Space,Str "window,",Space,Str "these",Space,Str "ascended",Span ("",["lnum"],[]) [Str "90"]]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "fattening",Space,Str "the",Space,Str "prolonged",Space,Str "candle-flames,"]]- ,Div ("wasteland-content.xhtml#ln92",[],[])- [Plain [Str "Flung",Space,Str "their",Space,Str "smoke",Space,Str "into",Space,Str "the",Space,Str "laquearia,",Note [Para [Link ("",[],[]) [Str "92."] ("#wasteland-content.xhtml#ln92",""),Space,Str "Laquearia.",Space,Str "V.",Space,Str "Aeneid,",Space,Str "I.",Space,Str "726:"],BlockQuote [Para [Str "dependent",Space,Str "lychni",Space,Str "laquearibus",Space,Str "aureis",Space,Str "incensi,",Space,Str "et",Space,Str "noctem",SoftBreak,Str "flammis",LineBreak,Str "funalia",Space,Str "vincunt."]]]]- ,Div ("",[],[])- [Plain [Str "Stirring",Space,Str "the",Space,Str "pattern",Space,Str "on",Space,Str "the",Space,Str "coffered",Space,Str "ceiling."]]- ,Div ("",[],[])- [Plain [Str "Huge",Space,Str "sea-wood",Space,Str "fed",Space,Str "with",Space,Str "copper"]]- ,Div ("",[],[])- [Plain [Str "Burned",Space,Str "green",Space,Str "and",Space,Str "orange,",Space,Str "framed",Space,Str "by",Space,Str "the",Space,Str "coloured",Space,Str "stone,"]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "which",Space,Str "sad",Space,Str "light",Space,Str "a",Space,Str "carved",Space,Str "dolphin",Space,Str "swam."]]- ,Div ("",[],[])- [Plain [Str "Above",Space,Str "the",Space,Str "antique",Space,Str "mantel",Space,Str "was",Space,Str "displayed"]]- ,Div ("wasteland-content.xhtml#ln98",[],[])- [Plain [Str "As",Space,Str "though",Space,Str "a",Space,Str "window",Space,Str "gave",Space,Str "upon",Space,Str "the",Space,Str "sylvan",Space,Str "scene",Note [Para [Link ("",[],[]) [Str "98."] ("#wasteland-content.xhtml#ln98",""),Space,Str "Sylvan",Space,Str "scene.",Space,Str "V.",Space,Str "Milton,",Space,Str "Paradise",Space,Str "Lost,",Space,Str "iv.",Space,Str "140."]]]- ,Div ("wasteland-content.xhtml#ln99",[],[])- [Plain [Str "The",Space,Str "change",Space,Str "of",Space,Str "Philomel,",Space,Str "by",Space,Str "the",Space,Str "barbarous",Space,Str "king",Note [Para [Link ("",[],[]) [Str "99."] ("#wasteland-content.xhtml#ln99",""),Space,Str "V.",Space,Str "Ovid,",Space,Str "Metamorphoses,",Space,Str "vi,",Space,Str "Philomela."]]]- ,Div ("wasteland-content.xhtml#ln100",[],[])- [Plain [Str "So",Space,Str "rudely",Space,Str "forced;",Space,Str "yet",Space,Str "there",Space,Str "the",Space,Str "nightingale",Note [Para [Link ("",[],[]) [Str "100."] ("#wasteland-content.xhtml#ln100",""),Space,Str "Cf.",Space,Str "Part",Space,Str "III,",Space,Str "l.",Space,Str "204."]]]- ,Div ("",[],[])- [Plain [Str "Filled",Space,Str "all",Space,Str "the",Space,Str "desert",Space,Str "with",Space,Str "inviolable",Space,Str "voice"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "still",Space,Str "she",Space,Str "cried,",Space,Str "and",Space,Str "still",Space,Str "the",Space,Str "world",Space,Str "pursues,"]]- ,Div ("",[],[])- [Plain [Str "\"Jug",Space,Str "Jug\"",Space,Str "to",Space,Str "dirty",Space,Str "ears."]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "other",Space,Str "withered",Space,Str "stumps",Space,Str "of",Space,Str "time"]]- ,Div ("",[],[])- [Plain [Str "Were",Space,Str "told",Space,Str "upon",Space,Str "the",Space,Str "walls;",Space,Str "staring",Space,Str "forms"]]- ,Div ("",[],[])- [Plain [Str "Leaned",Space,Str "out,",Space,Str "leaning,",Space,Str "hushing",Space,Str "the",Space,Str "room",Space,Str "enclosed."]]- ,Div ("",[],[])- [Plain [Str "Footsteps",Space,Str "shuffled",Space,Str "on",Space,Str "the",Space,Str "stair."]]- ,Div ("",[],[])- [Plain [Str "Under",Space,Str "the",Space,Str "firelight,",Space,Str "under",Space,Str "the",Space,Str "brush,",Space,Str "her",Space,Str "hair"]]- ,Div ("",[],[])- [Plain [Str "Spread",Space,Str "out",Space,Str "in",Space,Str "fiery",Space,Str "points"]]- ,Div ("",[],[])- [Plain [Str "Glowed",Space,Str "into",Space,Str "words,",Space,Str "then",Space,Str "would",Space,Str "be",Space,Str "savagely",Space,Str "still.",Span ("",["lnum"],[]) [Str "110"]]]]- ,Div ("",["linegroup"],[])- [Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "\"My",Space,Str "nerves",Space,Str "are",Space,Str "bad",Space,Str "to-night.",Space,Str "Yes,",Space,Str "bad.",Space,Str "Stay",Space,Str "with",Space,Str "me."]]- ,Div ("",[],[])- [Plain [Str "\"Speak",Space,Str "to",Space,Str "me.",Space,Str "Why",Space,Str "do",Space,Str "you",Space,Str "never",Space,Str "speak.",Space,Str "Speak."]]- ,Div ("",[],[])- [Plain [Str "\"What",Space,Str "are",Space,Str "you",Space,Str "thinking",Space,Str "of?",Space,Str "What",Space,Str "thinking?",Space,Str "What?"]]- ,Div ("",[],[])- [Plain [Str "\"I",Space,Str "never",Space,Str "know",Space,Str "what",Space,Str "you",Space,Str "are",Space,Str "thinking.",Space,Str "Think.\""]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln115",[],[])- [Plain [Str "I",Space,Str "think",Space,Str "we",Space,Str "are",Space,Str "in",Space,Str "rats'",Space,Str "alley",Note [Para [Link ("",[],[]) [Str "115."] ("#wasteland-content.xhtml#ln115",""),Space,Str "Cf.",Space,Str "Part",Space,Str "III,",Space,Str "l.",Space,Str "195."]]]- ,Div ("",[],[])- [Plain [Str "Where",Space,Str "the",Space,Str "dead",Space,Str "men",Space,Str "lost",Space,Str "their",Space,Str "bones."]]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "\"What",Space,Str "is",Space,Str "that",Space,Str "noise?\""]]- ,Div ("wasteland-content.xhtml#ln118",["indent"],[])- [Plain [Str "The",Space,Str "wind",Space,Str "under",Space,Str "the",Space,Str "door.",Note [Para [Link ("",[],[]) [Str "118."] ("#wasteland-content.xhtml#ln118",""),Space,Str "Cf.",Space,Str "Webster:"],BlockQuote [Para [Str "\"Is",Space,Str "the",Space,Str "wind",Space,Str "in",Space,Str "that",Space,Str "door",Space,Str "still?\""]]]]- ,Div ("",[],[])- [Plain [Str "\"What",Space,Str "is",Space,Str "that",Space,Str "noise",Space,Str "now?",Space,Str "What",Space,Str "is",Space,Str "the",Space,Str "wind",Space,Str "doing?\""]]- ,Div ("",["indent"],[])- [Plain [Str "Nothing",Space,Str "again",Space,Str "nothing.",Span ("",["lnum"],[]) [Str "120"]]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "\"Do"]]- ,Div ("",[],[])- [Plain [Str "\"You",Space,Str "know",Space,Str "nothing?",Space,Str "Do",Space,Str "you",Space,Str "see",Space,Str "nothing?",Space,Str "Do",Space,Str "you",Space,Str "remember"]]- ,Div ("",[],[])- [Plain [Str "\"Nothing?\""]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "I",Space,Str "remember"]]- ,Div ("",[],[])- [Plain [Str "Those",Space,Str "are",Space,Str "pearls",Space,Str "that",Space,Str "were",Space,Str "his",Space,Str "eyes."]]- ,Div ("wasteland-content.xhtml#ln126",[],[])- [Plain [Str "\"Are",Space,Str "you",Space,Str "alive,",Space,Str "or",Space,Str "not?",Space,Str "Is",Space,Str "there",Space,Str "nothing",Space,Str "in",Space,Str "your",Space,Str "head?\"",Note [Para [Link ("",[],[]) [Str "126."] ("#wasteland-content.xhtml#ln126",""),Space,Str "Cf.",Space,Str "Part",Space,Str "I,",Space,Str "l.",Space,Str "37,",Space,Str "48."]]]- ,Div ("",[],[])- [Plain [Str "But"]]- ,Div ("",[],[])- [Plain [Str "O",Space,Str "O",Space,Str "O",Space,Str "O",Space,Str "that",Space,Str "Shakespeherian",Space,Str "Rag\8213"]]- ,Div ("",[],[])- [Plain [Str "It's",Space,Str "so",Space,Str "elegant"]]- ,Div ("",[],[])- [Plain [Str "So",Space,Str "intelligent",Span ("",["lnum"],[]) [Str "130"]]]- ,Div ("",[],[])- [Plain [Str "\"What",Space,Str "shall",Space,Str "I",Space,Str "do",Space,Str "now?",Space,Str "What",Space,Str "shall",Space,Str "I",Space,Str "do?\""]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "shall",Space,Str "rush",Space,Str "out",Space,Str "as",Space,Str "I",Space,Str "am,",Space,Str "and",Space,Str "walk",Space,Str "the",Space,Str "street"]]- ,Div ("",[],[])- [Plain [Str "\"With",Space,Str "my",Space,Str "hair",Space,Str "down,",Space,Str "so.",Space,Str "What",Space,Str "shall",Space,Str "we",Space,Str "do",Space,Str "to-morrow?"]]- ,Div ("",[],[])- [Plain [Str "\"What",Space,Str "shall",Space,Str "we",Space,Str "ever",Space,Str "do?\""]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "hot",Space,Str "water",Space,Str "at",Space,Str "ten."]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "if",Space,Str "it",Space,Str "rains,",Space,Str "a",Space,Str "closed",Space,Str "car",Space,Str "at",Space,Str "four."]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "we",Space,Str "shall",Space,Str "play",Space,Str "a",Space,Str "game",Space,Str "of",Space,Str "chess,"]]- ,Div ("wasteland-content.xhtml#ln138",[],[])- [Plain [Str "Pressing",Space,Str "lidless",Space,Str "eyes",Space,Str "and",Space,Str "waiting",Space,Str "for",Space,Str "a",Space,Str "knock",Space,Str "upon",Space,Str "the",Space,Str "door.",Note [Para [Link ("",[],[]) [Str "138."] ("#wasteland-content.xhtml#ln138",""),Space,Str "Cf.",Space,Str "the",Space,Str "game",Space,Str "of",Space,Str "chess",Space,Str "in",Space,Str "Middleton's",Space,Str "Women",Space,Str "beware",Space,Str "Women."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "When",Space,Str "Lil's",Space,Str "husband",Space,Str "got",Space,Str "demobbed,",Space,Str "I",Space,Str "said",Space,Str "-"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "didn't",Space,Str "mince",Space,Str "my",Space,Str "words,",Space,Str "I",Space,Str "said",Space,Str "to",Space,Str "her",Space,Str "myself,",Span ("",["lnum"],[]) [Str "140"]]]- ,Div ("",[],[])- [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]- ,Div ("",[],[])- [Plain [Str "Now",Space,Str "Albert's",Space,Str "coming",Space,Str "back,",Space,Str "make",Space,Str "yourself",Space,Str "a",Space,Str "bit",Space,Str "smart."]]- ,Div ("",[],[])- [Plain [Str "He'll",Space,Str "want",Space,Str "to",Space,Str "know",Space,Str "what",Space,Str "you",Space,Str "done",Space,Str "with",Space,Str "that",Space,Str "money",Space,Str "he",Space,Str "gave",SoftBreak,Str "you"]]- ,Div ("",[],[])- [Plain [Str "To",Space,Str "get",Space,Str "yourself",Space,Str "some",Space,Str "teeth.",Space,Str "He",Space,Str "did,",Space,Str "I",Space,Str "was",Space,Str "there."]]- ,Div ("",[],[])- [Plain [Str "You",Space,Str "have",Space,Str "them",Space,Str "all",Space,Str "out,",Space,Str "Lil,",Space,Str "and",Space,Str "get",Space,Str "a",Space,Str "nice",Space,Str "set,"]]- ,Div ("",[],[])- [Plain [Str "He",Space,Str "said,",Space,Str "I",Space,Str "swear,",Space,Str "I",Space,Str "can't",Space,Str "bear",Space,Str "to",Space,Str "look",Space,Str "at",Space,Str "you."]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "no",Space,Str "more",Space,Str "can't",Space,Str "I,",Space,Str "I",Space,Str "said,",Space,Str "and",Space,Str "think",Space,Str "of",Space,Str "poor",Space,Str "Albert,"]]- ,Div ("",[],[])- [Plain [Str "He's",Space,Str "been",Space,Str "in",Space,Str "the",Space,Str "army",Space,Str "four",Space,Str "years,",Space,Str "he",Space,Str "wants",Space,Str "a",Space,Str "good",Space,Str "time,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "if",Space,Str "you",Space,Str "don't",Space,Str "give",Space,Str "it",Space,Str "him,",Space,Str "there's",Space,Str "others",Space,Str "will,",Space,Str "I",SoftBreak,Str "said."]]- ,Div ("",[],[])- [Plain [Str "Oh",Space,Str "is",Space,Str "there,",Space,Str "she",Space,Str "said.",Space,Str "Something",Space,Str "o'",Space,Str "that,",Space,Str "I",Space,Str "said.",Span ("",["lnum"],[]) [Str "150"]]]- ,Div ("",[],[])- [Plain [Str "Then",Space,Str "I'll",Space,Str "know",Space,Str "who",Space,Str "to",Space,Str "thank,",Space,Str "she",Space,Str "said,",Space,Str "and",Space,Str "give",Space,Str "me",Space,Str "a",Space,Str "straight",SoftBreak,Str "look."]]- ,Div ("",[],[])- [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]- ,Div ("",[],[])- [Plain [Str "If",Space,Str "you",Space,Str "don't",Space,Str "like",Space,Str "it",Space,Str "you",Space,Str "can",Space,Str "get",Space,Str "on",Space,Str "with",Space,Str "it,",Space,Str "I",Space,Str "said."]]- ,Div ("",[],[])- [Plain [Str "Others",Space,Str "can",Space,Str "pick",Space,Str "and",Space,Str "choose",Space,Str "if",Space,Str "you",Space,Str "can't."]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "if",Space,Str "Albert",Space,Str "makes",Space,Str "off,",Space,Str "it",Space,Str "won't",Space,Str "be",Space,Str "for",Space,Str "lack",Space,Str "of",SoftBreak,Str "telling."]]- ,Div ("",[],[])- [Plain [Str "You",Space,Str "ought",Space,Str "to",Space,Str "be",Space,Str "ashamed,",Space,Str "I",Space,Str "said,",Space,Str "to",Space,Str "look",Space,Str "so",Space,Str "antique."]]- ,Div ("",[],[])- [Plain [Str "(And",Space,Str "her",Space,Str "only",Space,Str "thirty-one.)"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "can't",Space,Str "help",Space,Str "it,",Space,Str "she",Space,Str "said,",Space,Str "pulling",Space,Str "a",Space,Str "long",Space,Str "face,"]]- ,Div ("",[],[])- [Plain [Str "It's",Space,Str "them",Space,Str "pills",Space,Str "I",Space,Str "took,",Space,Str "to",Space,Str "bring",Space,Str "it",Space,Str "off,",Space,Str "she",Space,Str "said."]]- ,Div ("",[],[])- [Plain [Str "(She's",Space,Str "had",Space,Str "five",Space,Str "already,",Space,Str "and",Space,Str "nearly",Space,Str "died",Space,Str "of",Space,Str "young",Space,Str "George.)",Span ("",["lnum"],[]) [Str "160"]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "chemist",Space,Str "said",Space,Str "it",Space,Str "would",Space,Str "be",Space,Str "all",Space,Str "right,",Space,Str "but",Space,Str "I've",Space,Str "never",Space,Str "been",Space,Str "the",SoftBreak,Str "same."]]- ,Div ("",[],[])- [Plain [Str "You",Space,Emph [Str "are"],Space,Str "a",Space,Str "proper",Space,Str "fool,",Space,Str "I",Space,Str "said."]]- ,Div ("",[],[])- [Plain [Str "Well,",Space,Str "if",Space,Str "Albert",Space,Str "won't",Space,Str "leave",Space,Str "you",Space,Str "alone,",Space,Str "there",Space,Str "it",Space,Str "is,",Space,Str "I",SoftBreak,Str "said,"]]- ,Div ("",[],[])- [Plain [Str "What",Space,Str "you",Space,Str "get",Space,Str "married",Space,Str "for",Space,Str "if",Space,Str "you",Space,Str "don't",Space,Str "want",Space,Str "children?"]]- ,Div ("",[],[])- [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]- ,Div ("",[],[])- [Plain [Str "Well,",Space,Str "that",Space,Str "Sunday",Space,Str "Albert",Space,Str "was",Space,Str "home,",Space,Str "they",Space,Str "had",Space,Str "a",Space,Str "hot",SoftBreak,Str "gammon,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "they",Space,Str "asked",Space,Str "me",Space,Str "in",Space,Str "to",Space,Str "dinner,",Space,Str "to",Space,Str "get",Space,Str "the",Space,Str "beauty",Space,Str "of",Space,Str "it",SoftBreak,Str "hot\8213"]]- ,Div ("",[],[])- [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]- ,Div ("",[],[])- [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]- ,Div ("",[],[])- [Plain [Str "Goonight",Space,Str "Bill.",Space,Str "Goonight",Space,Str "Lou.",Space,Str "Goonight",Space,Str "May.",Space,Str "Goonight.",Span ("",["lnum"],[]) [Str "170"]]]- ,Div ("",[],[])- [Plain [Str "Ta",Space,Str "ta.",Space,Str "Goonight.",Space,Str "Goonight."]]- ,Div ("",[],[])- [Plain [Str "Good",Space,Str "night,",Space,Str "ladies,",Space,Str "good",Space,Str "night,",Space,Str "sweet",Space,Str "ladies,",Space,Str "good",Space,Str "night,",Space,Str "good",SoftBreak,Str "night."]]]- ,RawBlock (Format "html") "</section>"- ,Div ("wasteland-content.xhtml#ch3",["section"],[])- [Header 2 ("",[],[]) [Str "III.",Space,Str "THE",Space,Str "FIRE",Space,Str "SERMON"]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "The",Space,Str "river's",Space,Str "tent",Space,Str "is",Space,Str "broken:",Space,Str "the",Space,Str "last",Space,Str "fingers",Space,Str "of",Space,Str "leaf"]]- ,Div ("",[],[])- [Plain [Str "Clutch",Space,Str "and",Space,Str "sink",Space,Str "into",Space,Str "the",Space,Str "wet",Space,Str "bank.",Space,Str "The",Space,Str "wind"]]- ,Div ("",[],[])- [Plain [Str "Crosses",Space,Str "the",Space,Str "brown",Space,Str "land,",Space,Str "unheard.",Space,Str "The",Space,Str "nymphs",Space,Str "are",SoftBreak,Str "departed."]]- ,Div ("wasteland-content.xhtml#ln176",[],[])- [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly,",Space,Str "till",Space,Str "I",Space,Str "end",Space,Str "my",Space,Str "song.",Note [Para [Link ("",[],[]) [Str "176."] ("#wasteland-content.xhtml#ln176",""),Space,Str "V.",Space,Str "Spenser,",Space,Str "Prothalamion."]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "river",Space,Str "bears",Space,Str "no",Space,Str "empty",Space,Str "bottles,",Space,Str "sandwich",Space,Str "papers,"]]- ,Div ("",[],[])- [Plain [Str "Silk",Space,Str "handkerchiefs,",Space,Str "cardboard",Space,Str "boxes,",Space,Str "cigarette",Space,Str "ends"]]- ,Div ("",[],[])- [Plain [Str "Or",Space,Str "other",Space,Str "testimony",Space,Str "of",Space,Str "summer",Space,Str "nights.",Space,Str "The",Space,Str "nymphs",Space,Str "are",SoftBreak,Str "departed."]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "their",Space,Str "friends,",Space,Str "the",Space,Str "loitering",Space,Str "heirs",Space,Str "of",Space,Str "city",Space,Str "directors;",Span ("",["lnum"],[]) [Str "180"]]]- ,Div ("",[],[])- [Plain [Str "Departed,",Space,Str "have",Space,Str "left",Space,Str "no",Space,Str "addresses."]]- ,Div ("",[],[])- [Plain [Str "By",Space,Str "the",Space,Str "waters",Space,Str "of",Space,Str "Leman",Space,Str "I",Space,Str "sat",Space,Str "down",Space,Str "and",Space,Str "wept",Space,Str ".",Space,Str ".",Space,Str "."]]- ,Div ("",[],[])- [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly",Space,Str "till",Space,Str "I",Space,Str "end",Space,Str "my",Space,Str "song,"]]- ,Div ("",[],[])- [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly,",Space,Str "for",Space,Str "I",Space,Str "speak",Space,Str "not",Space,Str "loud",Space,Str "or",Space,Str "long."]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "at",Space,Str "my",Space,Str "back",Space,Str "in",Space,Str "a",Space,Str "cold",Space,Str "blast",Space,Str "I",Space,Str "hear"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "rattle",Space,Str "of",Space,Str "the",Space,Str "bones,",Space,Str "and",Space,Str "chuckle",Space,Str "spread",Space,Str "from",Space,Str "ear",Space,Str "to",SoftBreak,Str "ear."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "A",Space,Str "rat",Space,Str "crept",Space,Str "softly",Space,Str "through",Space,Str "the",Space,Str "vegetation"]]- ,Div ("",[],[])- [Plain [Str "Dragging",Space,Str "its",Space,Str "slimy",Space,Str "belly",Space,Str "on",Space,Str "the",Space,Str "bank"]]- ,Div ("",[],[])- [Plain [Str "While",Space,Str "I",Space,Str "was",Space,Str "fishing",Space,Str "in",Space,Str "the",Space,Str "dull",Space,Str "canal"]]- ,Div ("",[],[])- [Plain [Str "On",Space,Str "a",Space,Str "winter",Space,Str "evening",Space,Str "round",Space,Str "behind",Space,Str "the",Space,Str "gashouse",Span ("",["lnum"],[]) [Str "190"]]]- ,Div ("",[],[])- [Plain [Str "Musing",Space,Str "upon",Space,Str "the",Space,Str "king",Space,Str "my",Space,Str "brother's",Space,Str "wreck"]]- ,Div ("wasteland-content.xhtml#ln192",[],[])- [Plain [Str "And",Space,Str "on",Space,Str "the",Space,Str "king",Space,Str "my",Space,Str "father's",Space,Str "death",Space,Str "before",Space,Str "him.",Note [Para [Link ("",[],[]) [Str "192."] ("#wasteland-content.xhtml#ln192",""),Space,Str "Cf.",Space,Str "The",Space,Str "Tempest,",Space,Str "I.",Space,Str "ii."]]]- ,Div ("",[],[])- [Plain [Str "White",Space,Str "bodies",Space,Str "naked",Space,Str "on",Space,Str "the",Space,Str "low",Space,Str "damp",Space,Str "ground"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "bones",Space,Str "cast",Space,Str "in",Space,Str "a",Space,Str "little",Space,Str "low",Space,Str "dry",Space,Str "garret,"]]- ,Div ("",[],[])- [Plain [Str "Rattled",Space,Str "by",Space,Str "the",Space,Str "rat's",Space,Str "foot",Space,Str "only,",Space,Str "year",Space,Str "to",Space,Str "year."]]- ,Div ("wasteland-content.xhtml#ln196",[],[])- [Plain [Str "But",Space,Str "at",Space,Str "my",Space,Str "back",Space,Str "from",Space,Str "time",Space,Str "to",Space,Str "time",Space,Str "I",Space,Str "hear",Note [Para [Link ("",[],[]) [Str "196."] ("#wasteland-content.xhtml#ln196",""),Space,Str "Cf.",Space,Str "Marvell,",Space,Str "To",Space,Str "His",Space,Str "Coy",Space,Str "Mistress."]]]- ,Div ("wasteland-content.xhtml#ln197",[],[])- [Plain [Str "The",Space,Str "sound",Space,Str "of",Space,Str "horns",Space,Str "and",Space,Str "motors,",Space,Str "which",Space,Str "shall",Space,Str "bring",Note [Para [Link ("",[],[]) [Str "197."] ("#wasteland-content.xhtml#ln197",""),Space,Str "Cf.",Space,Str "Day,",Space,Str "Parliament",Space,Str "of",Space,Str "Bees:"],BlockQuote [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "\"When",Space,Str "of",Space,Str "the",Space,Str "sudden,",Space,Str "listening,",Space,Str "you",Space,Str "shall",SoftBreak,Str "hear,"]],Div ("",[],[]) [Plain [Str "\"A",Space,Str "noise",Space,Str "of",Space,Str "horns",Space,Str "and",Space,Str "hunting,",Space,Str "which",Space,Str "shall",SoftBreak,Str "bring"]],Div ("",[],[]) [Plain [Str "\"Actaeon",Space,Str "to",Space,Str "Diana",Space,Str "in",Space,Str "the",Space,Str "spring,"]],Div ("",[],[]) [Plain [Str "\"Where",Space,Str "all",Space,Str "shall",Space,Str "see",Space,Str "her",Space,Str "naked",Space,Str "skin",Space,Str ".",Space,Str ".",Space,Str ".\""]]]]]]- ,Div ("",[],[])- [Plain [Str "Sweeney",Space,Str "to",Space,Str "Mrs.",Space,Str "Porter",Space,Str "in",Space,Str "the",Space,Str "spring."]]- ,Div ("wasteland-content.xhtml#ln199",[],[])- [Plain [Str "O",Space,Str "the",Space,Str "moon",Space,Str "shone",Space,Str "bright",Space,Str "on",Space,Str "Mrs.",Space,Str "Porter",Note [Para [Link ("",[],[]) [Str "199."] ("#wasteland-content.xhtml#ln199",""),Space,Str "I",Space,Str "do",Space,Str "not",Space,Str "know",Space,Str "the",Space,Str "origin",Space,Str "of",Space,Str "the",Space,Str "ballad",Space,Str "from",Space,Str "which",Space,Str "these",Space,Str "lines",Space,Str "are",SoftBreak,Str "taken:",Space,Str "it",Space,Str "was",Space,Str "reported",Space,Str "to",Space,Str "me",Space,Str "from",Space,Str "Sydney,",Space,Str "Australia."]]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "on",Space,Str "her",Space,Str "daughter",Span ("",["lnum"],[]) [Str "200"]]]- ,Div ("",[],[])- [Plain [Str "They",Space,Str "wash",Space,Str "their",Space,Str "feet",Space,Str "in",Space,Str "soda",Space,Str "water"]]- ,Div ("wasteland-content.xhtml#ln202",[],[("lang","fr")])- [Plain [Emph [Str "Et",Space,Str "O",Space,Str "ces",Space,Str "voix",Space,Str "d'enfants,",Space,Str "chantant",Space,Str "dans",Space,Str "la",Space,Str "coupole"],Str "!",Note [Para [Link ("",[],[]) [Str "202."] ("#wasteland-content.xhtml#ln202",""),Space,Str "V.",Space,Str "Verlaine,",Space,Str "Parsifal."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Twit",Space,Str "twit",Space,Str "twit"]]- ,Div ("",[],[])- [Plain [Str "Jug",Space,Str "jug",Space,Str "jug",Space,Str "jug",Space,Str "jug",Space,Str "jug"]]- ,Div ("",[],[])- [Plain [Str "So",Space,Str "rudely",Space,Str "forc'd."]]- ,Div ("",[],[])- [Plain [Str "Tereu"]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Unreal",Space,Str "City"]]- ,Div ("",[],[])- [Plain [Str "Under",Space,Str "the",Space,Str "brown",Space,Str "fog",Space,Str "of",Space,Str "a",Space,Str "winter",Space,Str "noon"]]- ,Div ("",[],[])- [Plain [Str "Mr.",Space,Str "Eugenides,",Space,Str "the",Space,Str "Smyrna",Space,Str "merchant"]]- ,Div ("wasteland-content.xhtml#ln210",[],[])- [Plain [Str "Unshaven,",Space,Str "with",Space,Str "a",Space,Str "pocket",Space,Str "full",Space,Str "of",Space,Str "currants",Note [Para [Link ("",[],[]) [Str "210."] ("#wasteland-content.xhtml#ln210",""),Space,Str "The",Space,Str "currants",Space,Str "were",Space,Str "quoted",Space,Str "at",Space,Str "a",Space,Str "price",Space,Str "\"cost",Space,Str "insurance",Space,Str "and",Space,Str "freight",Space,Str "to",SoftBreak,Str "London\";",Space,Str "and",Space,Str "the",Space,Str "Bill",Space,Str "of",Space,Str "Lading",Space,Str "etc.",Space,Str "were",Space,Str "to",Space,Str "be",Space,Str "handed",Space,Str "to",Space,Str "the",Space,Str "buyer",Space,Str "upon",SoftBreak,Str "payment",Space,Str "of",Space,Str "the",Space,Str "sight",Space,Str "draft."]]]- ,Div ("",[],[])- [Plain [Str "C.i.f.",Space,Str "London:",Space,Str "documents",Space,Str "at",Space,Str "sight,"]]- ,Div ("",[],[])- [Plain [Str "Asked",Space,Str "me",Space,Str "in",Space,Str "demotic",Space,Str "French"]]- ,Div ("",[],[])- [Plain [Str "To",Space,Str "luncheon",Space,Str "at",Space,Str "the",Space,Str "Cannon",Space,Str "Street",Space,Str "Hotel"]]- ,Div ("",[],[])- [Plain [Str "Followed",Space,Str "by",Space,Str "a",Space,Str "weekend",Space,Str "at",Space,Str "the",Space,Str "Metropole."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "At",Space,Str "the",Space,Str "violet",Space,Str "hour,",Space,Str "when",Space,Str "the",Space,Str "eyes",Space,Str "and",Space,Str "back"]]- ,Div ("",[],[])- [Plain [Str "Turn",Space,Str "upward",Space,Str "from",Space,Str "the",Space,Str "desk,",Space,Str "when",Space,Str "the",Space,Str "human",Space,Str "engine",Space,Str "waits"]]- ,Div ("",[],[])- [Plain [Str "Like",Space,Str "a",Space,Str "taxi",Space,Str "throbbing",Space,Str "waiting,"]]- ,Div ("wasteland-content.xhtml#ln218",[],[])- [Plain [Str "I",Space,Str "Tiresias,",Space,Str "though",Space,Str "blind,",Space,Str "throbbing",Space,Str "between",Space,Str "two",Space,Str "lives,",Note [Para [Link ("",[],[]) [Str "218."] ("#wasteland-content.xhtml#ln218",""),Space,Str "Tiresias,",Space,Str "although",Space,Str "a",Space,Str "mere",Space,Str "spectator",Space,Str "and",Space,Str "not",Space,Str "indeed",Space,Str "a",Space,Str "\"character,\"",Space,Str "is",SoftBreak,Str "yet",Space,Str "the",Space,Str "most",Space,Str "important",Space,Str "personage",Space,Str "in",Space,Str "the",Space,Str "poem,",Space,Str "uniting",Space,Str "all",Space,Str "the",Space,Str "rest.",Space,Str "Just",SoftBreak,Str "as",Space,Str "the",Space,Str "one-eyed",Space,Str "merchant,",Space,Str "seller",Space,Str "of",Space,Str "currants,",Space,Str "melts",Space,Str "into",Space,Str "the",Space,Str "Phoenician",SoftBreak,Str "Sailor,",Space,Str "and",Space,Str "the",Space,Str "latter",Space,Str "is",Space,Str "not",Space,Str "wholly",Space,Str "distinct",Space,Str "from",Space,Str "Ferdinand",Space,Str "Prince",Space,Str "of",SoftBreak,Str "Naples,",Space,Str "so",Space,Str "all",Space,Str "the",Space,Str "women",Space,Str "are",Space,Str "one",Space,Str "woman,",Space,Str "and",Space,Str "the",Space,Str "two",Space,Str "sexes",Space,Str "meet",Space,Str "in",SoftBreak,Str "Tiresias.",Space,Str "What",Space,Str "Tiresias",Space,Str "sees,",Space,Str "in",Space,Str "fact,",Space,Str "is",Space,Str "the",Space,Str "substance",Space,Str "of",Space,Str "the",Space,Str "poem.",Space,Str "The",SoftBreak,Str "whole",Space,Str "passage",Space,Str "from",Space,Str "Ovid",Space,Str "is",Space,Str "of",Space,Str "great",Space,Str "anthropological",Space,Str "interest:"],BlockQuote [Para [Str "'.",Space,Str ".",Space,Str ".",Space,Str "Cum",Space,Str "Iunone",Space,Str "iocos",Space,Str "et",Space,Str "maior",Space,Str "vestra",Space,Str "profecto",Space,Str "est",LineBreak,Str "Quam,",Space,Str "quae",SoftBreak,Str "contingit",Space,Str "maribus,'",Space,Str "dixisse,",Space,Str "'voluptas.'",LineBreak,Str "Illa",Space,Str "negat;",Space,Str "placuit",SoftBreak,Str "quae",Space,Str "sit",Space,Str "sententia",Space,Str "docti",LineBreak,Str "Quaerere",Space,Str "Tiresiae:",Space,Str "venus",Space,Str "huic",Space,Str "erat",SoftBreak,Str "utraque",Space,Str "nota.",LineBreak,Str "Nam",Space,Str "duo",Space,Str "magnorum",Space,Str "viridi",Space,Str "coeuntia",Space,Str "silva",LineBreak,Str "Corpora",Space,Str "serpentum",Space,Str "baculi",Space,Str "violaverat",Space,Str "ictu",LineBreak,Str "Deque",Space,Str "viro",Space,Str "factus,",SoftBreak,Str "mirabile,",Space,Str "femina",Space,Str "septem",LineBreak,Str "Egerat",Space,Str "autumnos;",Space,Str "octavo",Space,Str "rursus",SoftBreak,Str "eosdem",LineBreak,Str "Vidit",Space,Str "et",Space,Str "'est",Space,Str "vestrae",Space,Str "si",Space,Str "tanta",Space,Str "potentia",Space,Str "plagae,'",LineBreak,Str "Dixit",Space,Str "'ut",Space,Str "auctoris",Space,Str "sortem",Space,Str "in",Space,Str "contraria",Space,Str "mutet,",LineBreak,Str "Nunc",Space,Str "quoque",Space,Str "vos",SoftBreak,Str "feriam!'",Space,Str "percussis",Space,Str "anguibus",Space,Str "isdem",LineBreak,Str "Forma",Space,Str "prior",Space,Str "rediit",SoftBreak,Str "genetivaque",Space,Str "venit",Space,Str "imago.",LineBreak,Str "Arbiter",Space,Str "hic",Space,Str "igitur",Space,Str "sumptus",Space,Str "de",Space,Str "lite",SoftBreak,Str "iocosa",LineBreak,Str "Dicta",Space,Str "Iovis",Space,Str "firmat;",Space,Str "gravius",Space,Str "Saturnia",Space,Str "iusto",LineBreak,Str "Nec",SoftBreak,Str "pro",Space,Str "materia",Space,Str "fertur",Space,Str "doluisse",Space,Str "suique",LineBreak,Str "Iudicis",Space,Str "aeterna",Space,Str "damnavit",SoftBreak,Str "lumina",Space,Str "nocte,",LineBreak,Str "At",Space,Str "pater",Space,Str "omnipotens",Space,Str "(neque",Space,Str "enim",Space,Str "licet",Space,Str "inrita",SoftBreak,Str "cuiquam",LineBreak,Str "Facta",Space,Str "dei",Space,Str "fecisse",Space,Str "deo)",Space,Str "pro",Space,Str "lumine",Space,Str "adempto",LineBreak,Str "Scire",SoftBreak,Str "futura",Space,Str "dedit",Space,Str "poenamque",Space,Str "levavit",Space,Str "honore.",LineBreak]]]]- ,Div ("",[],[])- [Plain [Str "Old",Space,Str "man",Space,Str "with",Space,Str "wrinkled",Space,Str "female",Space,Str "breasts,",Space,Str "can",Space,Str "see"]]- ,Div ("",[],[])- [Plain [Str "At",Space,Str "the",Space,Str "violet",Space,Str "hour,",Space,Str "the",Space,Str "evening",Space,Str "hour",Space,Str "that",Space,Str "strives",Span ("",["lnum"],[]) [Str "220"]]]- ,Div ("wasteland-content.xhtml#ln221",[],[])- [Plain [Str "Homeward,",Space,Str "and",Space,Str "brings",Space,Str "the",Space,Str "sailor",Space,Str "home",Space,Str "from",Space,Str "sea,",Note [Para [Link ("",[],[]) [Str "221."] ("#wasteland-content.xhtml#ln221",""),Space,Str "This",Space,Str "may",Space,Str "not",Space,Str "appear",Space,Str "as",Space,Str "exact",Space,Str "as",Space,Str "Sappho's",Space,Str "lines,",Space,Str "but",Space,Str "I",Space,Str "had",Space,Str "in",Space,Str "mind",SoftBreak,Str "the",Space,Str "\"longshore\"",Space,Str "or",Space,Str "\"dory\"",Space,Str "fisherman,",Space,Str "who",Space,Str "returns",Space,Str "at",Space,Str "nightfall."]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "typist",Space,Str "home",Space,Str "at",Space,Str "teatime,",Space,Str "clears",Space,Str "her",Space,Str "breakfast,",Space,Str "lights"]]- ,Div ("",[],[])- [Plain [Str "Her",Space,Str "stove,",Space,Str "and",Space,Str "lays",Space,Str "out",Space,Str "food",Space,Str "in",Space,Str "tins."]]- ,Div ("",[],[])- [Plain [Str "Out",Space,Str "of",Space,Str "the",Space,Str "window",Space,Str "perilously",Space,Str "spread"]]- ,Div ("",[],[])- [Plain [Str "Her",Space,Str "drying",Space,Str "combinations",Space,Str "touched",Space,Str "by",Space,Str "the",Space,Str "sun's",Space,Str "last",Space,Str "rays,"]]- ,Div ("",[],[])- [Plain [Str "On",Space,Str "the",Space,Str "divan",Space,Str "are",Space,Str "piled",Space,Str "(at",Space,Str "night",Space,Str "her",Space,Str "bed)"]]- ,Div ("",[],[])- [Plain [Str "Stockings,",Space,Str "slippers,",Space,Str "camisoles,",Space,Str "and",Space,Str "stays."]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "Tiresias,",Space,Str "old",Space,Str "man",Space,Str "with",Space,Str "wrinkled",Space,Str "dugs"]]- ,Div ("",[],[])- [Plain [Str "Perceived",Space,Str "the",Space,Str "scene,",Space,Str "and",Space,Str "foretold",Space,Str "the",Space,Str "rest",Space,Str "-"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "too",Space,Str "awaited",Space,Str "the",Space,Str "expected",Space,Str "guest.",Span ("",["lnum"],[]) [Str "230"]]]- ,Div ("",[],[])- [Plain [Str "He,",Space,Str "the",Space,Str "young",Space,Str "man",Space,Str "carbuncular,",Space,Str "arrives,"]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "small",Space,Str "house",Space,Str "agent's",Space,Str "clerk,",Space,Str "with",Space,Str "one",Space,Str "bold",Space,Str "stare,"]]- ,Div ("",[],[])- [Plain [Str "One",Space,Str "of",Space,Str "the",Space,Str "low",Space,Str "on",Space,Str "whom",Space,Str "assurance",Space,Str "sits"]]- ,Div ("",[],[])- [Plain [Str "As",Space,Str "a",Space,Str "silk",Space,Str "hat",Space,Str "on",Space,Str "a",Space,Str "Bradford",Space,Str "millionaire."]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "time",Space,Str "is",Space,Str "now",Space,Str "propitious,",Space,Str "as",Space,Str "he",Space,Str "guesses,"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "meal",Space,Str "is",Space,Str "ended,",Space,Str "she",Space,Str "is",Space,Str "bored",Space,Str "and",Space,Str "tired,"]]- ,Div ("",[],[])- [Plain [Str "Endeavours",Space,Str "to",Space,Str "engage",Space,Str "her",Space,Str "in",Space,Str "caresses"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "still",Space,Str "are",Space,Str "unreproved,",Space,Str "if",Space,Str "undesired."]]- ,Div ("",[],[])- [Plain [Str "Flushed",Space,Str "and",Space,Str "decided,",Space,Str "he",Space,Str "assaults",Space,Str "at",Space,Str "once;"]]- ,Div ("",[],[])- [Plain [Str "Exploring",Space,Str "hands",Space,Str "encounter",Space,Str "no",Space,Str "defence;",Span ("",["lnum"],[]) [Str "240"]]]- ,Div ("",[],[])- [Plain [Str "His",Space,Str "vanity",Space,Str "requires",Space,Str "no",Space,Str "response,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "makes",Space,Str "a",Space,Str "welcome",Space,Str "of",Space,Str "indifference."]]- ,Div ("",[],[])- [Plain [Str "(And",Space,Str "I",Space,Str "Tiresias",Space,Str "have",Space,Str "foresuffered",Space,Str "all"]]- ,Div ("",[],[])- [Plain [Str "Enacted",Space,Str "on",Space,Str "this",Space,Str "same",Space,Str "divan",Space,Str "or",Space,Str "bed;"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "who",Space,Str "have",Space,Str "sat",Space,Str "by",Space,Str "Thebes",Space,Str "below",Space,Str "the",Space,Str "wall"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "walked",Space,Str "among",Space,Str "the",Space,Str "lowest",Space,Str "of",Space,Str "the",Space,Str "dead.)"]]- ,Div ("",[],[])- [Plain [Str "Bestows",Space,Str "one",Space,Str "final",Space,Str "patronising",Space,Str "kiss,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "gropes",Space,Str "his",Space,Str "way,",Space,Str "finding",Space,Str "the",Space,Str "stairs",Space,Str "unlit",Space,Str ".",Space,Str ".",Space,Str "."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "She",Space,Str "turns",Space,Str "and",Space,Str "looks",Space,Str "a",Space,Str "moment",Space,Str "in",Space,Str "the",Space,Str "glass,"]]- ,Div ("",[],[])- [Plain [Str "Hardly",Space,Str "aware",Space,Str "of",Space,Str "her",Space,Str "departed",Space,Str "lover;",Span ("",["lnum"],[]) [Str "250"]]]- ,Div ("",[],[])- [Plain [Str "Her",Space,Str "brain",Space,Str "allows",Space,Str "one",Space,Str "half-formed",Space,Str "thought",Space,Str "to",Space,Str "pass:"]]- ,Div ("",[],[])- [Plain [Str "\"Well",Space,Str "now",Space,Str "that's",Space,Str "done:",Space,Str "and",Space,Str "I'm",Space,Str "glad",Space,Str "it's",Space,Str "over.\""]]- ,Div ("wasteland-content.xhtml#ln253",[],[])- [Plain [Str "When",Space,Str "lovely",Space,Str "woman",Space,Str "stoops",Space,Str "to",Space,Str "folly",Space,Str "and",Note [Para [Link ("",[],[]) [Str "253."] ("#wasteland-content.xhtml#ln253",""),Space,Str "V.",Space,Str "Goldsmith,",Space,Str "the",Space,Str "song",Space,Str "in",Space,Str "The",Space,Str "Vicar",Space,Str "of",Space,Str "Wakefield."]]]- ,Div ("",[],[])- [Plain [Str "Paces",Space,Str "about",Space,Str "her",Space,Str "room",Space,Str "again,",Space,Str "alone,"]]- ,Div ("",[],[])- [Plain [Str "She",Space,Str "smoothes",Space,Str "her",Space,Str "hair",Space,Str "with",Space,Str "automatic",Space,Str "hand,"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "puts",Space,Str "a",Space,Str "record",Space,Str "on",Space,Str "the",Space,Str "gramophone."]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln257",[],[])- [Plain [Str "\"This",Space,Str "music",Space,Str "crept",Space,Str "by",Space,Str "me",Space,Str "upon",Space,Str "the",Space,Str "waters\"",Note [Para [Link ("",[],[]) [Str "257."] ("#wasteland-content.xhtml#ln257",""),Space,Str "V.",Space,Str "The",Space,Str "Tempest,",Space,Str "as",Space,Str "above."]]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "along",Space,Str "the",Space,Str "Strand,",Space,Str "up",Space,Str "Queen",Space,Str "Victoria",Space,Str "Street."]]- ,Div ("",[],[])- [Plain [Str "O",Space,Str "City",Space,Str "city,",Space,Str "I",Space,Str "can",Space,Str "sometimes",Space,Str "hear"]]- ,Div ("",[],[])- [Plain [Str "Beside",Space,Str "a",Space,Str "public",Space,Str "bar",Space,Str "in",Space,Str "Lower",Space,Str "Thames",Space,Str "Street,",Span ("",["lnum"],[]) [Str "260"]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "pleasant",Space,Str "whining",Space,Str "of",Space,Str "a",Space,Str "mandoline"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "a",Space,Str "clatter",Space,Str "and",Space,Str "a",Space,Str "chatter",Space,Str "from",Space,Str "within"]]- ,Div ("",[],[])- [Plain [Str "Where",Space,Str "fishmen",Space,Str "lounge",Space,Str "at",Space,Str "noon:",Space,Str "where",Space,Str "the",Space,Str "walls"]]- ,Div ("wasteland-content.xhtml#ln264",[],[])- [Plain [Str "Of",Space,Str "Magnus",Space,Str "Martyr",Space,Str "hold",Note [Para [Link ("",[],[]) [Str "264."] ("#wasteland-content.xhtml#ln264",""),Space,Str "The",Space,Str "interior",Space,Str "of",Space,Str "St.",Space,Str "Magnus",Space,Str "Martyr",Space,Str "is",Space,Str "to",Space,Str "my",Space,Str "mind",Space,Str "one",Space,Str "of",Space,Str "the",Space,Str "finest",SoftBreak,Str "among",Space,Str "Wren's",Space,Str "interiors.",Space,Str "See",Space,Str "The",Space,Str "Proposed",Space,Str "Demolition",Space,Str "of",Space,Str "Nineteen",Space,Str "City",SoftBreak,Str "Churches",Space,Str "(P.",Space,Str "S.",Space,Str "King",Space,Str "&",Space,Str "Son,",Space,Str "Ltd.)."]]]- ,Div ("",[],[])- [Plain [Str "Inexplicable",Space,Str "splendour",Space,Str "of",Space,Str "Ionian",Space,Str "white",Space,Str "and",Space,Str "gold."]]]- ,Div ("",["linegroup","indent"],[])- [Div ("wasteland-content.xhtml#ln266",[],[])- [Plain [Str "The",Space,Str "river",Space,Str "sweats",Note [Para [Link ("",[],[]) [Str "266."] ("#wasteland-content.xhtml#ln266",""),Space,Str "The",Space,Str "Song",Space,Str "of",Space,Str "the",Space,Str "(three)",Space,Str "Thames-daughters",Space,Str "begins",Space,Str "here.",Space,Str "From",Space,Str "line",Space,Str "292",SoftBreak,Str "to",Space,Str "306",Space,Str "inclusive",Space,Str "they",Space,Str "speak",Space,Str "in",Space,Str "turn.",Space,Str "V.",Space,Str "Gutterdsammerung,",Space,Str "III.",Space,Str "i:",Space,Str "the",SoftBreak,Str "Rhine-daughters."]]]- ,Div ("",[],[])- [Plain [Str "Oil",Space,Str "and",Space,Str "tar"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "barges",Space,Str "drift"]]- ,Div ("",[],[])- [Plain [Str "With",Space,Str "the",Space,Str "turning",Space,Str "tide"]]- ,Div ("",[],[])- [Plain [Str "Red",Space,Str "sails",Span ("",["lnum"],[]) [Str "270"]]]- ,Div ("",[],[])- [Plain [Str "Wide"]]- ,Div ("",[],[])- [Plain [Str "To",Space,Str "leeward,",Space,Str "swing",Space,Str "on",Space,Str "the",Space,Str "heavy",Space,Str "spar."]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "barges",Space,Str "wash"]]- ,Div ("",[],[])- [Plain [Str "Drifting",Space,Str "logs"]]- ,Div ("",[],[])- [Plain [Str "Down",Space,Str "Greenwich",Space,Str "reach"]]- ,Div ("",[],[])- [Plain [Str "Past",Space,Str "the",Space,Str "Isle",Space,Str "of",Space,Str "Dogs."]]- ,Div ("",["indent"],[])- [Plain [Str "Weialala",Space,Str "leia"]]- ,Div ("",["indent"],[])- [Plain [Str "Wallala",Space,Str "leialala"]]]- ,Div ("",["linegroup","indent"],[])- [Div ("wasteland-content.xhtml#ln279",[],[])- [Plain [Str "Elizabeth",Space,Str "and",Space,Str "Leicester",Note [Para [Link ("",[],[]) [Str "279."] ("#wasteland-content.xhtml#ln279",""),Space,Str "V.",Space,Str "Froude,",Space,Str "Elizabeth,",Space,Str "Vol.",Space,Str "I,",Space,Str "ch.",Space,Str "iv,",Space,Str "letter",Space,Str "of",Space,Str "De",Space,Str "Quadra",Space,Str "to",Space,Str "Philip",SoftBreak,Str "of",Space,Str "Spain:"],BlockQuote [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "\"In",Space,Str "the",Space,Str "afternoon",Space,Str "we",Space,Str "were",Space,Str "in",Space,Str "a",Space,Str "barge,",Space,Str "watching",Space,Str "the",SoftBreak,Str "games",Space,Str "on",Space,Str "the",Space,Str "river."]],Div ("",[],[]) [Plain [Str "(The",Space,Str "queen)",Space,Str "was",Space,Str "alone",Space,Str "with",Space,Str "Lord",Space,Str "Robert",Space,Str "and",Space,Str "myself",SoftBreak,Str "on",Space,Str "the",Space,Str "poop,"]],Div ("",[],[]) [Plain [Str "when",Space,Str "they",Space,Str "began",Space,Str "to",Space,Str "talk",Space,Str "nonsense,",Space,Str "and",Space,Str "went",Space,Str "so",Space,Str "far",SoftBreak,Str "that",Space,Str "Lord",Space,Str "Robert"]],Div ("",[],[]) [Plain [Str "at",Space,Str "last",Space,Str "said,",Space,Str "as",Space,Str "I",Space,Str "was",Space,Str "on",Space,Str "the",Space,Str "spot",Space,Str "there",Space,Str "was",Space,Str "no",SoftBreak,Str "reason",Space,Str "why",Space,Str "they"]],Div ("",[],[]) [Plain [Str "should",Space,Str "not",Space,Str "be",Space,Str "married",Space,Str "if",Space,Str "the",Space,Str "queen",Space,Str "pleased.\""]]]]]]- ,Div ("",[],[])- [Plain [Str "Beating",Space,Str "oars",Span ("",["lnum"],[]) [Str "280"]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "stern",Space,Str "was",Space,Str "formed"]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "gilded",Space,Str "shell"]]- ,Div ("",[],[])- [Plain [Str "Red",Space,Str "and",Space,Str "gold"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "brisk",Space,Str "swell"]]- ,Div ("",[],[])- [Plain [Str "Rippled",Space,Str "both",Space,Str "shores"]]- ,Div ("",[],[])- [Plain [Str "Southwest",Space,Str "wind"]]- ,Div ("",[],[])- [Plain [Str "Carried",Space,Str "down",Space,Str "stream"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "peal",Space,Str "of",Space,Str "bells"]]- ,Div ("",[],[])- [Plain [Str "White",Space,Str "towers"]]- ,Div ("",["indent"],[])- [Plain [Str "Weialala",Space,Str "leia",Span ("",["lnum"],[]) [Str "290"]]]- ,Div ("",["indent"],[])- [Plain [Str "Wallala",Space,Str "leialala"]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "\"Trams",Space,Str "and",Space,Str "dusty",Space,Str "trees."]]- ,Div ("wasteland-content.xhtml#ln293",[],[])- [Plain [Str "Highbury",Space,Str "bore",Space,Str "me.",Space,Str "Richmond",Space,Str "and",Space,Str "Kew",Note [Para [Link ("",[],[]) [Str "293."] ("#wasteland-content.xhtml#ln293",""),Space,Str "Cf.",Space,Str "Purgatorio,",Space,Str "v.",Space,Str "133:"],BlockQuote [Para [Str "\"Ricorditi",Space,Str "di",Space,Str "me,",Space,Str "che",Space,Str "son",Space,Str "la",Space,Str "Pia;",LineBreak,Str "Siena",Space,Str "mi",Space,Str "fe',",Space,Str "disfecemi",SoftBreak,Str "Maremma.\""]]]]- ,Div ("",[],[])- [Plain [Str "Undid",Space,Str "me.",Space,Str "By",Space,Str "Richmond",Space,Str "I",Space,Str "raised",Space,Str "my",Space,Str "knees"]]- ,Div ("",[],[])- [Plain [Str "Supine",Space,Str "on",Space,Str "the",Space,Str "floor",Space,Str "of",Space,Str "a",Space,Str "narrow",Space,Str "canoe.\""]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "\"My",Space,Str "feet",Space,Str "are",Space,Str "at",Space,Str "Moorgate,",Space,Str "and",Space,Str "my",Space,Str "heart"]]- ,Div ("",[],[])- [Plain [Str "Under",Space,Str "my",Space,Str "feet.",Space,Str "After",Space,Str "the",Space,Str "event"]]- ,Div ("",[],[])- [Plain [Str "He",Space,Str "wept.",Space,Str "He",Space,Str "promised",Space,Str "'a",Space,Str "new",Space,Str "start'."]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "made",Space,Str "no",Space,Str "comment.",Space,Str "What",Space,Str "should",Space,Str "I",Space,Str "resent?\""]]- ,Div ("",[],[])- [Plain [Str "\"On",Space,Str "Margate",Space,Str "Sands.",Span ("",["lnum"],[]) [Str "300"]]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "can",Space,Str "connect"]]- ,Div ("",[],[])- [Plain [Str "Nothing",Space,Str "with",Space,Str "nothing."]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "broken",Space,Str "fingernails",Space,Str "of",Space,Str "dirty",Space,Str "hands."]]- ,Div ("",[],[])- [Plain [Str "My",Space,Str "people",Space,Str "humble",Space,Str "people",Space,Str "who",Space,Str "expect"]]- ,Div ("",[],[])- [Plain [Str "Nothing.\""]]- ,Div ("",["indent"],[])- [Plain [Str "la",Space,Str "la"]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln307",[],[])- [Plain [Str "To",Space,Str "Carthage",Space,Str "then",Space,Str "I",Space,Str "came",Note [Para [Link ("",[],[]) [Str "307."] ("#wasteland-content.xhtml#ln307",""),Space,Str "V.",Space,Str "St.",Space,Str "Augustine's",Space,Str "Confessions:",Space,Str "\"to",Space,Str "Carthage",Space,Str "then",Space,Str "I",Space,Str "came,",Space,Str "where",Space,Str "a",SoftBreak,Str "cauldron",Space,Str "of",Space,Str "unholy",Space,Str "loves",Space,Str "sang",Space,Str "all",Space,Str "about",Space,Str "mine",Space,Str "ears.\""]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln308",[],[])- [Plain [Str "Burning",Space,Str "burning",Space,Str "burning",Space,Str "burning",Note [Para [Link ("",[],[]) [Str "308."] ("#wasteland-content.xhtml#ln308",""),Space,Str "The",Space,Str "complete",Space,Str "text",Space,Str "of",Space,Str "the",Space,Str "Buddha's",Space,Str "Fire",Space,Str "Sermon",Space,Str "(which",Space,Str "corresponds",Space,Str "in",SoftBreak,Str "importance",Space,Str "to",Space,Str "the",Space,Str "Sermon",Space,Str "on",Space,Str "the",Space,Str "Mount)",Space,Str "from",Space,Str "which",Space,Str "these",Space,Str "words",Space,Str "are",Space,Str "taken,",SoftBreak,Str "will",Space,Str "be",Space,Str "found",Space,Str "translated",Space,Str "in",Space,Str "the",Space,Str "late",Space,Str "Henry",Space,Str "Clarke",Space,Str "Warren's",Space,Str "Buddhism",Space,Str "in",SoftBreak,Str "Translation",Space,Str "(Harvard",Space,Str "Oriental",Space,Str "Series).",Space,Str "Mr.",Space,Str "Warren",Space,Str "was",Space,Str "one",Space,Str "of",Space,Str "the",Space,Str "great",SoftBreak,Str "pioneers",Space,Str "of",Space,Str "Buddhist",Space,Str "studies",Space,Str "in",Space,Str "the",Space,Str "Occident."]]]- ,Div ("wasteland-content.xhtml#ln309",[],[])- [Plain [Str "O",Space,Str "Lord",Space,Str "Thou",Space,Str "pluckest",Space,Str "me",Space,Str "out",Note [Para [Link ("",[],[]) [Str "309."] ("#wasteland-content.xhtml#ln309",""),Space,Str "From",Space,Str "St.",Space,Str "Augustine's",Space,Str "Confessions",Space,Str "again.",Space,Str "The",Space,Str "collocation",Space,Str "of",Space,Str "these",Space,Str "two",SoftBreak,Str "representatives",Space,Str "of",Space,Str "eastern",Space,Str "and",Space,Str "western",Space,Str "asceticism,",Space,Str "as",Space,Str "the",Space,Str "culmination",Space,Str "of",SoftBreak,Str "this",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "poem,",Space,Str "is",Space,Str "not",Space,Str "an",Space,Str "accident."]]]- ,Div ("",[],[])- [Plain [Str "O",Space,Str "Lord",Space,Str "Thou",Space,Str "pluckest",Span ("",["lnum"],[]) [Str "310"]]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "burning"]]]- ,RawBlock (Format "html") "</section>"- ,Div ("wasteland-content.xhtml#ch4",["section"],[])- [Header 2 ("",[],[]) [Str "IV.",Space,Str "DEATH",Space,Str "BY",Space,Str "WATER"]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Phlebas",Space,Str "the",Space,Str "Phoenician,",Space,Str "a",Space,Str "fortnight",Space,Str "dead,"]]- ,Div ("",[],[])- [Plain [Str "Forgot",Space,Str "the",Space,Str "cry",Space,Str "of",Space,Str "gulls,",Space,Str "and",Space,Str "the",Space,Str "deep",Space,Str "sea",Space,Str "swell"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "the",Space,Str "profit",Space,Str "and",Space,Str "loss."]]]- ,Div ("",["linegroup"],[])- [Div ("",["indent2"],[])- [Plain [Str "A",Space,Str "current",Space,Str "under",Space,Str "sea"]]- ,Div ("",[],[])- [Plain [Str "Picked",Space,Str "his",Space,Str "bones",Space,Str "in",Space,Str "whispers.",Space,Str "As",Space,Str "he",Space,Str "rose",Space,Str "and",Space,Str "fell"]]- ,Div ("",[],[])- [Plain [Str "He",Space,Str "passed",Space,Str "the",Space,Str "stages",Space,Str "of",Space,Str "his",Space,Str "age",Space,Str "and",Space,Str "youth"]]- ,Div ("",[],[])- [Plain [Str "Entering",Space,Str "the",Space,Str "whirlpool."]]]- ,Div ("",["linegroup"],[])- [Div ("",["indent2"],[])- [Plain [Str "Gentile",Space,Str "or",Space,Str "Jew"]]- ,Div ("",[],[])- [Plain [Str "O",Space,Str "you",Space,Str "who",Space,Str "turn",Space,Str "the",Space,Str "wheel",Space,Str "and",Space,Str "look",Space,Str "to",Space,Str "windward,",Span ("",["lnum"],[]) [Str "320"]]]- ,Div ("",[],[])- [Plain [Str "Consider",Space,Str "Phlebas,",Space,Str "who",Space,Str "was",Space,Str "once",Space,Str "handsome",Space,Str "and",Space,Str "tall",Space,Str "as",Space,Str "you."]]]]- ,Div ("wasteland-content.xhtml#ch5",["section"],[])- [Header 2 ("",[],[]) [Str "V.",Space,Str "WHAT",Space,Str "THE",Space,Str "THUNDER",Space,Str "SAID"]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "After",Space,Str "the",Space,Str "torchlight",Space,Str "red",Space,Str "on",Space,Str "sweaty",Space,Str "faces"]]- ,Div ("",[],[])- [Plain [Str "After",Space,Str "the",Space,Str "frosty",Space,Str "silence",Space,Str "in",Space,Str "the",Space,Str "gardens"]]- ,Div ("",[],[])- [Plain [Str "After",Space,Str "the",Space,Str "agony",Space,Str "in",Space,Str "stony",Space,Str "places"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "shouting",Space,Str "and",Space,Str "the",Space,Str "crying"]]- ,Div ("",[],[])- [Plain [Str "Prison",Space,Str "and",Space,Str "palace",Space,Str "and",Space,Str "reverberation"]]- ,Div ("",[],[])- [Plain [Str "Of",Space,Str "thunder",Space,Str "of",Space,Str "spring",Space,Str "over",Space,Str "distant",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "He",Space,Str "who",Space,Str "was",Space,Str "living",Space,Str "is",Space,Str "now",Space,Str "dead"]]- ,Div ("",[],[])- [Plain [Str "We",Space,Str "who",Space,Str "were",Space,Str "living",Space,Str "are",Space,Str "now",Space,Str "dying"]]- ,Div ("",[],[])- [Plain [Str "With",Space,Str "a",Space,Str "little",Space,Str "patience",Span ("",["lnum"],[]) [Str "330"]]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Here",Space,Str "is",Space,Str "no",Space,Str "water",Space,Str "but",Space,Str "only",Space,Str "rock"]]- ,Div ("",[],[])- [Plain [Str "Rock",Space,Str "and",Space,Str "no",Space,Str "water",Space,Str "and",Space,Str "the",Space,Str "sandy",Space,Str "road"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "road",Space,Str "winding",Space,Str "above",Space,Str "among",Space,Str "the",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "are",Space,Str "mountains",Space,Str "of",Space,Str "rock",Space,Str "without",Space,Str "water"]]- ,Div ("",[],[])- [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "water",Space,Str "we",Space,Str "should",Space,Str "stop",Space,Str "and",Space,Str "drink"]]- ,Div ("",[],[])- [Plain [Str "Amongst",Space,Str "the",Space,Str "rock",Space,Str "one",Space,Str "cannot",Space,Str "stop",Space,Str "or",Space,Str "think"]]- ,Div ("",[],[])- [Plain [Str "Sweat",Space,Str "is",Space,Str "dry",Space,Str "and",Space,Str "feet",Space,Str "are",Space,Str "in",Space,Str "the",Space,Str "sand"]]- ,Div ("",[],[])- [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "only",Space,Str "water",Space,Str "amongst",Space,Str "the",Space,Str "rock"]]- ,Div ("",[],[])- [Plain [Str "Dead",Space,Str "mountain",Space,Str "mouth",Space,Str "of",Space,Str "carious",Space,Str "teeth",Space,Str "that",Space,Str "cannot",Space,Str "spit"]]- ,Div ("",[],[])- [Plain [Str "Here",Space,Str "one",Space,Str "can",Space,Str "neither",Space,Str "stand",Space,Str "nor",Space,Str "lie",Space,Str "nor",Space,Str "sit",Span ("",["lnum"],[]) [Str "340"]]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "is",Space,Str "not",Space,Str "even",Space,Str "silence",Space,Str "in",Space,Str "the",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "dry",Space,Str "sterile",Space,Str "thunder",Space,Str "without",Space,Str "rain"]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "is",Space,Str "not",Space,Str "even",Space,Str "solitude",Space,Str "in",Space,Str "the",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "red",Space,Str "sullen",Space,Str "faces",Space,Str "sneer",Space,Str "and",Space,Str "snarl"]]- ,Div ("",[],[])- [Plain [Str "From",Space,Str "doors",Space,Str "of",Space,Str "mudcracked",Space,Str "houses"]]- ,Div ("",["linegroup"],[])- [Div ("",["indent2"],[])- [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "water"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "no",Space,Str "rock"]]- ,Div ("",[],[])- [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "rock"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "also",Space,Str "water"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "water",Span ("",["lnum"],[]) [Str "350"]]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "spring"]]- ,Div ("",[],[])- [Plain [Str "A",Space,Str "pool",Space,Str "among",Space,Str "the",Space,Str "rock"]]- ,Div ("",[],[])- [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "the",Space,Str "sound",Space,Str "of",Space,Str "water",Space,Str "only"]]- ,Div ("",[],[])- [Plain [Str "Not",Space,Str "the",Space,Str "cicada"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "dry",Space,Str "grass",Space,Str "singing"]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "sound",Space,Str "of",Space,Str "water",Space,Str "over",Space,Str "a",Space,Str "rock"]]- ,Div ("wasteland-content.xhtml#ln357",[],[])- [Plain [Str "Where",Space,Str "the",Space,Str "hermit-thrush",Space,Str "sings",Space,Str "in",Space,Str "the",Space,Str "pine",Space,Str "trees",Note [Para [Link ("",[],[]) [Str "357."] ("#wasteland-content.xhtml#ln357",""),Space,Str "This",Space,Str "is",Space,Str "Turdus",Space,Str "aonalaschkae",Space,Str "pallasii,",Space,Str "the",Space,Str "hermit-thrush",Space,Str "which",Space,Str "I",Space,Str "have",SoftBreak,Str "heard",Space,Str "in",Space,Str "Quebec",Space,Str "County.",Space,Str "Chapman",Space,Str "says",Space,Str "(Handbook",Space,Str "of",Space,Str "Birds",Space,Str "of",Space,Str "Eastern",Space,Str "North",SoftBreak,Str "America)",Space,Str "\"it",Space,Str "is",Space,Str "most",Space,Str "at",Space,Str "home",Space,Str "in",Space,Str "secluded",Space,Str "woodland",Space,Str "and",Space,Str "thickety",Space,Str "retreats.",SoftBreak,Str ".",Space,Str ".",Space,Str ".",Space,Str "Its",Space,Str "notes",Space,Str "are",Space,Str "not",Space,Str "remarkable",Space,Str "for",Space,Str "variety",Space,Str "or",Space,Str "volume,",Space,Str "but",Space,Str "in",Space,Str "purity",SoftBreak,Str "and",Space,Str "sweetness",Space,Str "of",Space,Str "tone",Space,Str "and",Space,Str "exquisite",Space,Str "modulation",Space,Str "they",Space,Str "are",Space,Str "unequalled.\"",Space,Str "Its",SoftBreak,Str "\"water-dripping",Space,Str "song\"",Space,Str "is",Space,Str "justly",Space,Str "celebrated."]]]- ,Div ("",[],[])- [Plain [Str "Drip",Space,Str "drop",Space,Str "drip",Space,Str "drop",Space,Str "drop",Space,Str "drop",Space,Str "drop"]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "there",Space,Str "is",Space,Str "no",Space,Str "water"]]]]- ,Div ("",["linegroup"],[])- [Div ("wasteland-content.xhtml#ln360",[],[])- [Plain [Str "Who",Space,Str "is",Space,Str "the",Space,Str "third",Space,Str "who",Space,Str "walks",Space,Str "always",Space,Str "beside",Space,Str "you?",Note [Para [Link ("",[],[]) [Str "360."] ("#wasteland-content.xhtml#ln360",""),Space,Str "The",Space,Str "following",Space,Str "lines",Space,Str "were",Space,Str "stimulated",Space,Str "by",Space,Str "the",Space,Str "account",Space,Str "of",Space,Str "one",Space,Str "of",Space,Str "the",SoftBreak,Str "Antarctic",Space,Str "expeditions",Space,Str "(I",Space,Str "forget",Space,Str "which,",Space,Str "but",Space,Str "I",Space,Str "think",Space,Str "one",Space,Str "of",Space,Str "Shackleton's):",SoftBreak,Str "it",Space,Str "was",Space,Str "related",Space,Str "that",Space,Str "the",Space,Str "party",Space,Str "of",Space,Str "explorers,",Space,Str "at",Space,Str "the",Space,Str "extremity",Space,Str "of",Space,Str "their",SoftBreak,Str "strength,",Space,Str "had",Space,Str "the",Space,Str "constant",Space,Str "delusion",Space,Str "that",Space,Str "there",Space,Str "was",Space,Str "one",Space,Str "more",Space,Str "member",Space,Str "than",SoftBreak,Str "could",Space,Str "actually",Space,Str "be",Space,Str "counted."]]]- ,Div ("",[],[])- [Plain [Str "When",Space,Str "I",Space,Str "count,",Space,Str "there",Space,Str "are",Space,Str "only",Space,Str "you",Space,Str "and",Space,Str "I",Space,Str "together"]]- ,Div ("",[],[])- [Plain [Str "But",Space,Str "when",Space,Str "I",Space,Str "look",Space,Str "ahead",Space,Str "up",Space,Str "the",Space,Str "white",Space,Str "road"]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "is",Space,Str "always",Space,Str "another",Space,Str "one",Space,Str "walking",Space,Str "beside",Space,Str "you"]]- ,Div ("",[],[])- [Plain [Str "Gliding",Space,Str "wrapt",Space,Str "in",Space,Str "a",Space,Str "brown",Space,Str "mantle,",Space,Str "hooded"]]- ,Div ("",[],[])- [Plain [Str "I",Space,Str "do",Space,Str "not",Space,Str "know",Space,Str "whether",Space,Str "a",Space,Str "man",Space,Str "or",Space,Str "a",Space,Str "woman"]]- ,Div ("wasteland-content.xhtml#ln367",[],[])- [Plain [Str "\8213But",Space,Str "who",Space,Str "is",Space,Str "that",Space,Str "on",Space,Str "the",Space,Str "other",Space,Str "side",Space,Str "of",Space,Str "you?",Note [Para [Link ("",[],[]) [Str "367-77."] ("#wasteland-content.xhtml#ln367",""),Space,Str "Cf.",Space,Str "Hermann",Space,Str "Hesse,",Space,Str "Blick",Space,Str "ins",Space,Str "Chaos:"],BlockQuote [Para [Str "\"Schon",Space,Str "ist",Space,Str "halb",Space,Str "Europa,",Space,Str "schon",Space,Str "ist",Space,Str "zumindest",Space,Str "der",Space,Str "halbe",Space,Str "Osten",Space,Str "Europas",SoftBreak,Str "auf",Space,Str "dem",LineBreak,Str "Wege",Space,Str "zum",Space,Str "Chaos,",Space,Str "fhrt",Space,Str "betrunken",Space,Str "im",Space,Str "heiligem",Space,Str "Wahn",Space,Str "am",SoftBreak,Str "Abgrund",Space,Str "entlang",LineBreak,Str "und",Space,Str "singt",Space,Str "dazu,",Space,Str "singt",Space,Str "betrunken",Space,Str "und",Space,Str "hymnisch",SoftBreak,Str "wie",Space,Str "Dmitri",Space,Str "Karamasoff",Space,Str "sang.",LineBreak,Str "Ueber",Space,Str "diese",Space,Str "Lieder",Space,Str "lacht",Space,Str "der",SoftBreak,Str "Bsrger",Space,Str "beleidigt,",Space,Str "der",Space,Str "Heilige",LineBreak,Str "und",Space,Str "Seher",Space,Str "hrt",Space,Str "sie",Space,Str "mit",SoftBreak,Str "Trvnen.\""]]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "What",Space,Str "is",Space,Str "that",Space,Str "sound",Space,Str "high",Space,Str "in",Space,Str "the",Space,Str "air"]]- ,Div ("",[],[])- [Plain [Str "Murmur",Space,Str "of",Space,Str "maternal",Space,Str "lamentation"]]- ,Div ("",[],[])- [Plain [Str "Who",Space,Str "are",Space,Str "those",Space,Str "hooded",Space,Str "hordes",Space,Str "swarming"]]- ,Div ("",[],[])- [Plain [Str "Over",Space,Str "endless",Space,Str "plains,",Space,Str "stumbling",Space,Str "in",Space,Str "cracked",Space,Str "earth",Span ("",["lnum"],[]) [Str "370"]]]- ,Div ("",[],[])- [Plain [Str "Ringed",Space,Str "by",Space,Str "the",Space,Str "flat",Space,Str "horizon",Space,Str "only"]]- ,Div ("",[],[])- [Plain [Str "What",Space,Str "is",Space,Str "the",Space,Str "city",Space,Str "over",Space,Str "the",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "Cracks",Space,Str "and",Space,Str "reforms",Space,Str "and",Space,Str "bursts",Space,Str "in",Space,Str "the",Space,Str "violet",Space,Str "air"]]- ,Div ("",[],[])- [Plain [Str "Falling",Space,Str "towers"]]- ,Div ("",[],[])- [Plain [Str "Jerusalem",Space,Str "Athens",Space,Str "Alexandria"]]- ,Div ("",[],[])- [Plain [Str "Vienna",Space,Str "London"]]- ,Div ("",[],[])- [Plain [Str "Unreal"]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "A",Space,Str "woman",Space,Str "drew",Space,Str "her",Space,Str "long",Space,Str "black",Space,Str "hair",Space,Str "out",Space,Str "tight"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "fiddled",Space,Str "whisper",Space,Str "music",Space,Str "on",Space,Str "those",Space,Str "strings"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "bats",Space,Str "with",Space,Str "baby",Space,Str "faces",Space,Str "in",Space,Str "the",Space,Str "violet",Space,Str "light",Span ("",["lnum"],[]) [Str "380"]]]- ,Div ("",[],[])- [Plain [Str "Whistled,",Space,Str "and",Space,Str "beat",Space,Str "their",Space,Str "wings"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "crawled",Space,Str "head",Space,Str "downward",Space,Str "down",Space,Str "a",Space,Str "blackened",Space,Str "wall"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "upside",Space,Str "down",Space,Str "in",Space,Str "air",Space,Str "were",Space,Str "towers"]]- ,Div ("",[],[])- [Plain [Str "Tolling",Space,Str "reminiscent",Space,Str "bells,",Space,Str "that",Space,Str "kept",Space,Str "the",Space,Str "hours"]]- ,Div ("",[],[])- [Plain [Str "And",Space,Str "voices",Space,Str "singing",Space,Str "out",Space,Str "of",Space,Str "empty",Space,Str "cisterns",Space,Str "and",Space,Str "exhausted",SoftBreak,Str "wells."]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "In",Space,Str "this",Space,Str "decayed",Space,Str "hole",Space,Str "among",Space,Str "the",Space,Str "mountains"]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "the",Space,Str "faint",Space,Str "moonlight,",Space,Str "the",Space,Str "grass",Space,Str "is",Space,Str "singing"]]- ,Div ("",[],[])- [Plain [Str "Over",Space,Str "the",Space,Str "tumbled",Space,Str "graves,",Space,Str "about",Space,Str "the",Space,Str "chapel"]]- ,Div ("",[],[])- [Plain [Str "There",Space,Str "is",Space,Str "the",Space,Str "empty",Space,Str "chapel,",Space,Str "only",Space,Str "the",Space,Str "wind's",Space,Str "home."]]- ,Div ("",[],[])- [Plain [Str "It",Space,Str "has",Space,Str "no",Space,Str "windows,",Space,Str "and",Space,Str "the",Space,Str "door",Space,Str "swings,",Span ("",["lnum"],[]) [Str "390"]]]- ,Div ("",[],[])- [Plain [Str "Dry",Space,Str "bones",Space,Str "can",Space,Str "harm",Space,Str "no",Space,Str "one."]]- ,Div ("",[],[])- [Plain [Str "Only",Space,Str "a",Space,Str "cock",Space,Str "stood",Space,Str "on",Space,Str "the",Space,Str "rooftree"]]- ,Div ("",[],[])- [Plain [Str "Co",Space,Str "co",Space,Str "rico",Space,Str "co",Space,Str "co",Space,Str "rico"]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "a",Space,Str "flash",Space,Str "of",Space,Str "lightning.",Space,Str "Then",Space,Str "a",Space,Str "damp",Space,Str "gust"]]- ,Div ("",[],[])- [Plain [Str "Bringing",Space,Str "rain"]]]- ,Div ("",["linegroup"],[])- [Div ("",[],[])- [Plain [Str "Ganga",Space,Str "was",Space,Str "sunken,",Space,Str "and",Space,Str "the",Space,Str "limp",Space,Str "leaves"]]- ,Div ("",[],[])- [Plain [Str "Waited",Space,Str "for",Space,Str "rain,",Space,Str "while",Space,Str "the",Space,Str "black",Space,Str "clouds"]]- ,Div ("",[],[])- [Plain [Str "Gathered",Space,Str "far",Space,Str "distant,",Space,Str "over",Space,Str "Himavant."]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "jungle",Space,Str "crouched,",Space,Str "humped",Space,Str "in",Space,Str "silence."]]- ,Div ("",[],[])- [Plain [Str "Then",Space,Str "spoke",Space,Str "the",Space,Str "thunder",Span ("",["lnum"],[]) [Str "400"]]]- ,Div ("",[],[])- [Plain [Str "DA"]]- ,Div ("wasteland-content.xhtml#ln402",[],[])- [Plain [Span ("",[],[("lang","sa")]) [Str "Datta"],Str ":",Space,Str "what",Space,Str "have",Space,Str "we",Space,Str "given?",Note [Para [Link ("",[],[]) [Str "402."] ("#wasteland-content.xhtml#ln402",""),Space,Quoted DoubleQuote [Str "\"Datta,",Space,Str "dayadhvam,",Space,Str "damyata\""],Space,Str "(Give,",Space,Str "sympathize,",SoftBreak,Str "control).",Space,Str "The",Space,Str "fable",Space,Str "of",Space,Str "the",Space,Str "meaning",Space,Str "of",Space,Str "the",Space,Str "Thunder",Space,Str "is",Space,Str "found",Space,Str "in",Space,Str "the",SoftBreak,Str "Brihadaranyaka-Upanishad,",Space,Str "5,",Space,Str "1.",Space,Str "A",Space,Str "translation",Space,Str "is",Space,Str "found",Space,Str "in",Space,Str "Deussen's",SoftBreak,Str "Sechzig",Space,Str "Upanishads",Space,Str "des",Space,Str "Veda,",Space,Str "p.",Space,Str "489."]]]- ,Div ("",[],[])- [Plain [Str "My",Space,Str "friend,",Space,Str "blood",Space,Str "shaking",Space,Str "my",Space,Str "heart"]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "awful",Space,Str "daring",Space,Str "of",Space,Str "a",Space,Str "moment's",Space,Str "surrender"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "an",Space,Str "age",Space,Str "of",Space,Str "prudence",Space,Str "can",Space,Str "never",Space,Str "retract"]]- ,Div ("",[],[])- [Plain [Str "By",Space,Str "this,",Space,Str "and",Space,Str "this",Space,Str "only,",Space,Str "we",Space,Str "have",Space,Str "existed"]]- ,Div ("",[],[])- [Plain [Str "Which",Space,Str "is",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "found",Space,Str "in",Space,Str "our",Space,Str "obituaries"]]- ,Div ("wasteland-content.xhtml#ln408",[],[])- [Plain [Str "Or",Space,Str "in",Space,Str "memories",Space,Str "draped",Space,Str "by",Space,Str "the",Space,Str "beneficent",Space,Str "spider",Note [Para [Link ("",[],[]) [Str "408."] ("#wasteland-content.xhtml#ln408",""),Space,Str "Cf.",Space,Str "Webster,",Space,Str "The",Space,Str "White",Space,Str "Devil,",Space,Str "v.",Space,Str "vi:"],BlockQuote [Para [Str "\".",Space,Str ".",Space,Str ".",Space,Str "they'll",Space,Str "remarry",LineBreak,Str "Ere",Space,Str "the",Space,Str "worm",Space,Str "pierce",Space,Str "your",Space,Str "winding-sheet,",SoftBreak,Str "ere",Space,Str "the",Space,Str "spider",LineBreak,Str "Make",Space,Str "a",Space,Str "thin",Space,Str "curtain",Space,Str "for",Space,Str "your",Space,Str "epitaphs.\""]]]]- ,Div ("",[],[])- [Plain [Str "Or",Space,Str "under",Space,Str "seals",Space,Str "broken",Space,Str "by",Space,Str "the",Space,Str "lean",Space,Str "solicitor"]]- ,Div ("",[],[])- [Plain [Str "In",Space,Str "our",Space,Str "empty",Space,Str "rooms",Span ("",["lnum"],[]) [Str "410"]]]- ,Div ("",[],[])- [Plain [Str "DA"]]- ,Div ("wasteland-content.xhtml#ln412",[],[])- [Plain [Span ("",[],[("lang","sa")]) [Str "Dayadhvam"],Str ":",Space,Str "I",Space,Str "have",Space,Str "heard",Space,Str "the",Space,Str "key",Note [Para [Link ("",[],[]) [Str "412."] ("#wasteland-content.xhtml#ln412",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "xxxiii.",Space,Str "46:"],BlockQuote [Para [Str "\"ed",Space,Str "io",Space,Str "sentii",Space,Str "chiavar",Space,Str "l'uscio",Space,Str "di",Space,Str "sotto",LineBreak,Str "all'orribile",Space,Str "torre.\""]],Para [Str "Also",Space,Str "F.",Space,Str "H.",Space,Str "Bradley,",Space,Str "Appearance",Space,Str "and",Space,Str "Reality,",Space,Str "p.",Space,Str "346:"],BlockQuote [Para [Str "\"My",Space,Str "external",Space,Str "sensations",Space,Str "are",Space,Str "no",Space,Str "less",Space,Str "private",Space,Str "to",Space,Str "myself",Space,Str "than",Space,Str "are",Space,Str "my",SoftBreak,Str "thoughts",Space,Str "or",Space,Str "my",Space,Str "feelings.",Space,Str "In",Space,Str "either",Space,Str "case",Space,Str "my",Space,Str "experience",Space,Str "falls",Space,Str "within",SoftBreak,Str "my",Space,Str "own",Space,Str "circle,",Space,Str "a",Space,Str "circle",Space,Str "closed",Space,Str "on",Space,Str "the",Space,Str "outside;",Space,Str "and,",Space,Str "with",Space,Str "all",Space,Str "its",SoftBreak,Str "elements",Space,Str "alike,",Space,Str "every",Space,Str "sphere",Space,Str "is",Space,Str "opaque",Space,Str "to",Space,Str "the",Space,Str "others",Space,Str "which",Space,Str "surround",SoftBreak,Str "it.",Space,Str ".",Space,Str ".",Space,Str ".",Space,Str "In",Space,Str "brief,",Space,Str "regarded",Space,Str "as",Space,Str "an",Space,Str "existence",Space,Str "which",Space,Str "appears",Space,Str "in",Space,Str "a",SoftBreak,Str "soul,",Space,Str "the",Space,Str "whole",Space,Str "world",Space,Str "for",Space,Str "each",Space,Str "is",Space,Str "peculiar",Space,Str "and",Space,Str "private",Space,Str "to",Space,Str "that",SoftBreak,Str "soul.\""]]]]- ,Div ("",[],[])- [Plain [Str "Turn",Space,Str "in",Space,Str "the",Space,Str "door",Space,Str "once",Space,Str "and",Space,Str "turn",Space,Str "once",Space,Str "only"]]- ,Div ("",[],[])- [Plain [Str "We",Space,Str "think",Space,Str "of",Space,Str "the",Space,Str "key,",Space,Str "each",Space,Str "in",Space,Str "his",Space,Str "prison"]]- ,Div ("",[],[])- [Plain [Str "Thinking",Space,Str "of",Space,Str "the",Space,Str "key,",Space,Str "each",Space,Str "confirms",Space,Str "a",Space,Str "prison"]]- ,Div ("",[],[])- [Plain [Str "Only",Space,Str "at",Space,Str "nightfall,",Space,Str "aetherial",Space,Str "rumours"]]- ,Div ("",[],[])- [Plain [Str "Revive",Space,Str "for",Space,Str "a",Space,Str "moment",Space,Str "a",Space,Str "broken",Space,Str "Coriolanus"]]- ,Div ("",[],[])- [Plain [Str "DA"]]- ,Div ("",[],[])- [Plain [Span ("",[],[("lang","sa")]) [Str "Damyata"],Str ":",Space,Str "The",Space,Str "boat",Space,Str "responded"]]- ,Div ("",[],[])- [Plain [Str "Gaily,",Space,Str "to",Space,Str "the",Space,Str "hand",Space,Str "expert",Space,Str "with",Space,Str "sail",Space,Str "and",Space,Str "oar",Span ("",["lnum"],[]) [Str "420"]]]- ,Div ("",[],[])- [Plain [Str "The",Space,Str "sea",Space,Str "was",Space,Str "calm,",Space,Str "your",Space,Str "heart",Space,Str "would",Space,Str "have",Space,Str "responded"]]- ,Div ("",[],[])- [Plain [Str "Gaily,",Space,Str "when",Space,Str "invited,",Space,Str "beating",Space,Str "obedient"]]- ,Div ("",[],[])- [Plain [Str "To",Space,Str "controlling",Space,Str "hands"]]]- ,Div ("",["linegroup"],[])- [Div ("",["indent"],[])- [Plain [Str "I",Space,Str "sat",Space,Str "upon",Space,Str "the",Space,Str "shore"]]- ,Div ("wasteland-content.xhtml#ln425",[],[])- [Plain [Str "Fishing,",Space,Str "with",Space,Str "the",Space,Str "arid",Space,Str "plain",Space,Str "behind",Space,Str "me",Note [Para [Link ("",[],[]) [Str "425."] ("#wasteland-content.xhtml#ln425",""),Space,Str "V.",Space,Str "Weston,",Space,Str "From",Space,Str "Ritual",Space,Str "to",Space,Str "Romance;",Space,Str "chapter",Space,Str "on",Space,Str "the",Space,Str "Fisher",Space,Str "King."]]]- ,Div ("",[],[])- [Plain [Str "Shall",Space,Str "I",Space,Str "at",Space,Str "least",Space,Str "set",Space,Str "my",Space,Str "lands",Space,Str "in",Space,Str "order?"]]- ,Div ("",[],[])- [Plain [Str "London",Space,Str "Bridge",Space,Str "is",Space,Str "falling",Space,Str "down",Space,Str "falling",Space,Str "down",Space,Str "falling",Space,Str "down"]]- ,Div ("wasteland-content.xhtml#ln428",[],[("lang","it")])- [Plain [Emph [Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina"],SoftBreak,Note [Para [Link ("",[],[]) [Str "428."] ("#wasteland-content.xhtml#ln428",""),Space,Str "V.",Space,Str "Purgatorio,",Space,Str "xxvi.",Space,Str "148."],BlockQuote [Para [Str "\"'Ara",Space,Str "vos",Space,Str "prec",Space,Str "per",Space,Str "aquella",Space,Str "valor",LineBreak,Str "'que",Space,Str "vos",Space,Str "guida",Space,Str "al",Space,Str "som",Space,Str "de",SoftBreak,Str "l'escalina,",LineBreak,Str "'sovegna",Space,Str "vos",Space,Str "a",Space,Str "temps",Space,Str "de",Space,Str "ma",Space,Str "dolor.'",LineBreak,Str "Poi",SoftBreak,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina.\""]]]]- ,Div ("wasteland-content.xhtml#ln429",[],[])- [Plain [Span ("",[],[("lang","it")]) [SoftBreak,Emph [Str "Quando",Space,Str "fiam",Space,Str "ceu",Space,Str "chelidon"],SoftBreak],Space,Str "-",Space,Str "O",Space,Str "swallow",Space,Str "swallow",Note [Para [Link ("",[],[]) [Str "429."] ("#wasteland-content.xhtml#ln429",""),Space,Str "V.",Space,Str "Pervigilium",Space,Str "Veneris.",Space,Str "Cf.",Space,Str "Philomela",Space,Str "in",Space,Str "Parts",Space,Str "II",Space,Str "and",Space,Str "III."]]]- ,Div ("wasteland-content.xhtml#ln430",[],[("lang","fr")])- [Plain [Emph [Str "Le",Space,Str "Prince",Space,Str "d'Aquitaine",Space,Str "a",Space,Str "la",Space,Str "tour",Space,Str "abolie"],SoftBreak,Note [Para [Link ("",[],[]) [Str "430."] ("#wasteland-content.xhtml#ln430",""),Space,Str "V.",Space,Str "Gerard",Space,Str "de",Space,Str "Nerval,",Space,Str "Sonnet",Space,Str "El",Space,Str "Desdichado."]]]- ,Div ("",[],[])- [Plain [Str "These",Space,Str "fragments",Space,Str "I",Space,Str "have",Space,Str "shored",Space,Str "against",Space,Str "my",Space,Str "ruins"]]- ,Div ("wasteland-content.xhtml#ln432",[],[])- [Plain [Str "Why",Space,Str "then",Space,Str "Ile",Space,Str "fit",Space,Str "you.",Space,Str "Hieronymo's",Space,Str "mad",Space,Str "againe.",Note [Para [Link ("",[],[]) [Str "432."] ("#wasteland-content.xhtml#ln432",""),Space,Str "V.",Space,Str "Kyd's",Space,Str "Spanish",Space,Str "Tragedy."]]]- ,Div ("",[],[("lang","sa")])- [Plain [Str "Datta.",Space,Str "Dayadhvam.",Space,Str "Damyata."]]- ,Div ("wasteland-content.xhtml#ln434",["linegroup","indent"],[])- [Plain [Span ("",[],[("lang","sa")]) [Str "Shantih",Space,Str "shantih",Space,Str "shantih",Note [Para [Link ("",[],[]) [Str "434."] ("#wasteland-content.xhtml#ln434",""),Space,Str "Shantih.",Space,Str "Repeated",Space,Str "as",Space,Str "here,",Space,Str "a",Space,Str "formal",Space,Str "ending",Space,Str "to",Space,Str "an",Space,Str "Upanishad.",Space,Str "'The",SoftBreak,Str "Peace",Space,Str "which",Space,Str "passeth",Space,Str "understanding'",Space,Str "is",Space,Str "a",Space,Str "feeble",Space,Str "translation",Space,Str "of",Space,Str "the",SoftBreak,Str "content",Space,Str "of",Space,Str "this",Space,Str "word."]]]]- ,Div ("wasteland-content.xhtml#backmatter",["section"],[("type","backmatter")])- [Div ("wasteland-content.xhtml#rearnotes",["section"],[("type","rearnotes")])- [Header 2 ("",[],[]) [Str "NOTES",Space,Str "ON",Space,Str "\"THE",Space,Str "WASTE",Space,Str "LAND\""]- ,Para [Str "Not",Space,Str "only",Space,Str "the",Space,Str "title,",Space,Str "but",Space,Str "the",Space,Str "plan",Space,Str "and",Space,Str "a",Space,Str "good",Space,Str "deal",Space,Str "of",Space,Str "the",Space,Str "incidental",Space,Str "symbolism",Space,Str "of",SoftBreak,Str "the",Space,Str "poem",Space,Str "were",Space,Str "suggested",Space,Str "by",Space,Str "Miss",Space,Str "Jessie",Space,Str "L.",Space,Str "Weston's",Space,Str "book",Space,Str "on",Space,Str "the",Space,Str "Grail",Space,Str "legend:",SoftBreak,Str "From",Space,Str "Ritual",Space,Str "to",Space,Str "Romance"]- ,Para [Str "Indeed,",Space,Str "so",Space,Str "deeply",Space,Str "am",Space,Str "I",Space,Str "indebted,",Space,Str "Miss",Space,Str "Weston's",Space,Str "book",Space,Str "will",Space,Str "elucidate",Space,Str "the",SoftBreak,Str "difficulties",Space,Str "of",Space,Str "the",Space,Str "poem",Space,Str "much",Space,Str "better",Space,Str "than",Space,Str "my",Space,Str "notes",Space,Str "can",Space,Str "do;",Space,Str "and",Space,Str "I",Space,Str "recommend",Space,Str "it",SoftBreak,Str "(apart",Space,Str "from",Space,Str "the",Space,Str "great",Space,Str "interest",Space,Str "of",Space,Str "the",Space,Str "book",Space,Str "itself)",Space,Str "to",Space,Str "any",Space,Str "who",Space,Str "think",Space,Str "such",SoftBreak,Str "elucidation",Space,Str "of",Space,Str "the",Space,Str "poem",Space,Str "worth",Space,Str "the",Space,Str "trouble.",Space,Str "To",Space,Str "another",Space,Str "work",Space,Str "of",Space,Str "anthropology",Space,Str "I",Space,Str "am",SoftBreak,Str "indebted",Space,Str "in",Space,Str "general,",Space,Str "one",Space,Str "which",Space,Str "has",Space,Str "influenced",Space,Str "our",Space,Str "generation",Space,Str "profoundly;",Space,Str "I",Space,Str "mean",SoftBreak,Str "The",Space,Str "Golden",Space,Str "Bough;",Space,Str "I",Space,Str "have",Space,Str "used",Space,Str "especially",Space,Str "the",Space,Str "two",Space,Str "volumes",Space,Str "Adonis,",Space,Str "Attis,",Space,Str "Osiris.",SoftBreak,Str "Anyone",Space,Str "who",Space,Str "is",Space,Str "acquainted",Space,Str "with",Space,Str "these",Space,Str "works",Space,Str "will",Space,Str "immediately",Space,Str "recognise",Space,Str "in",Space,Str "the",Space,Str "poem",SoftBreak,Str "certain",Space,Str "references",Space,Str "to",Space,Str "vegetation",Space,Str "ceremonies."]- ,Div ("",["section"],[])- [Header 3 ("",[],[]) [Str "I.",Space,Str "THE",Space,Str "BURIAL",Space,Str "OF",Space,Str "THE",Space,Str "DEAD"]]- ,Div ("",["section"],[])- [Header 3 ("",[],[]) [Str "II.",Space,Str "A",Space,Str "GAME",Space,Str "OF",Space,Str "CHESS"]]- ,Div ("",["section"],[])- [Header 3 ("",[],[]) [Str "III.",Space,Str "THE",Space,Str "FIRE",Space,Str "SERMON"]]- ,Div ("",["section"],[])- [Header 3 ("",[],[]) [Str "V.",Space,Str "WHAT",Space,Str "THE",Space,Str "THUNDER",Space,Str "SAID"]- ,Para [Str "In",Space,Str "the",Space,Str "first",Space,Str "part",Space,Str "of",Space,Str "Part",Space,Str "V",Space,Str "three",Space,Str "themes",Space,Str "are",Space,Str "employed:",Space,Str "the",Space,Str "journey",Space,Str "to",Space,Str "Emmaus,",SoftBreak,Str "the",Space,Str "approach",Space,Str "to",Space,Str "the",Space,Str "Chapel",Space,Str "Perilous",Space,Str "(see",Space,Str "Miss",Space,Str "Weston's",Space,Str "book)",Space,Str "and",Space,Str "the",Space,Str "present",SoftBreak,Str "decay",Space,Str "of",Space,Str "eastern",Space,Str "Europe."]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]+ [Plain [Str "Out",Space,Str "of",Space,Str "this",Space,Str "stony",Space,Str "rubbish?",Space,Str "Son",Space,Str "of",Space,Str "man,",Note [Para [Link ("",[],[]) [Str "Line",Space,Str "20."] ("#wasteland-content.xhtml#ln20",""),Space,Str "Cf.",Space,Str "Ezekiel",Space,Str "2:1."]],Span ("",["lnum"],[]) [Str "20"]]]+ ,Div ("",[],[])+ [Plain [Str "You",Space,Str "cannot",Space,Str "say,",Space,Str "or",Space,Str "guess,",Space,Str "for",Space,Str "you",Space,Str "know",Space,Str "only"]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "heap",Space,Str "of",Space,Str "broken",Space,Str "images,",Space,Str "where",Space,Str "the",Space,Str "sun",Space,Str "beats,"]]+ ,Div ("wasteland-content.xhtml#ln23",[],[])+ [Plain [Str "And",Space,Str "the",Space,Str "dead",Space,Str "tree",Space,Str "gives",Space,Str "no",Space,Str "shelter,",Space,Str "the",Space,Str "cricket",Space,Str "no",Space,Str "relief,",Note [Para [Link ("",[],[]) [Str "23."] ("#wasteland-content.xhtml#ln23",""),Space,Str "Cf.",Space,Str "Ecclesiastes",Space,Str "12:5."]]]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "the",Space,Str "dry",Space,Str "stone",Space,Str "no",Space,Str "sound",Space,Str "of",Space,Str "water.",Space,Str "Only"]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "is",Space,Str "shadow",Space,Str "under",Space,Str "this",Space,Str "red",Space,Str "rock,"]]+ ,Div ("",[],[])+ [Plain [Str "(Come",Space,Str "in",Space,Str "under",Space,Str "the",Space,Str "shadow",Space,Str "of",Space,Str "this",Space,Str "red",Space,Str "rock),"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "I",Space,Str "will",Space,Str "show",Space,Str "you",Space,Str "something",Space,Str "different",Space,Str "from",Space,Str "either"]]+ ,Div ("",[],[])+ [Plain [Str "Your",Space,Str "shadow",Space,Str "at",Space,Str "morning",Space,Str "striding",Space,Str "behind",Space,Str "you"]]+ ,Div ("",[],[])+ [Plain [Str "Or",Space,Str "your",Space,Str "shadow",Space,Str "at",Space,Str "evening",Space,Str "rising",Space,Str "to",Space,Str "meet",Space,Str "you;"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "will",Space,Str "show",Space,Str "you",Space,Str "fear",Space,Str "in",Space,Str "a",Space,Str "handful",Space,Str "of",Space,Str "dust.",Span ("",["lnum"],[]) [Str "30"]]]+ ,BlockQuote+ [Div ("",[],[])+ [Div ("wasteland-content.xhtml#ln31",[],[])+ [Plain [Str "Frisch",Space,Str "weht",Space,Str "der",Space,Str "Wind",Note [Para [Link ("",[],[]) [Str "31."] ("#wasteland-content.xhtml#ln31",""),Space,Str "V.",Space,Str "Tristan",Space,Str "und",Space,Str "Isolde,",Space,Str "i,",Space,Str "verses",Space,Str "5-8."]]]]+ ,Div ("",[],[])+ [Plain [Str "Der",Space,Str "Heimat",Space,Str "zu"]]+ ,Div ("",[],[])+ [Plain [Str "Mein",Space,Str "Irisch",Space,Str "Kind,"]]+ ,Div ("",[],[])+ [Plain [Str "Wo",Space,Str "weilest",Space,Str "du?"]]]]+ ,Div ("",[],[])+ [Plain [Str "\"You",Space,Str "gave",Space,Str "me",Space,Str "hyacinths",Space,Str "first",Space,Str "a",Space,Str "year",Space,Str "ago;"]]+ ,Div ("",[],[])+ [Plain [Str "\"They",Space,Str "called",Space,Str "me",Space,Str "the",Space,Str "hyacinth",Space,Str "girl.\""]]+ ,Div ("",[],[])+ [Plain [Str "\8213Yet",Space,Str "when",Space,Str "we",Space,Str "came",Space,Str "back,",Space,Str "late,",Space,Str "from",Space,Str "the",Space,Str "Hyacinth",SoftBreak,Str "garden,"]]+ ,Div ("",[],[])+ [Plain [Str "Your",Space,Str "arms",Space,Str "full,",Space,Str "and",Space,Str "your",Space,Str "hair",Space,Str "wet,",Space,Str "I",Space,Str "could",Space,Str "not"]]+ ,Div ("",[],[])+ [Plain [Str "Speak,",Space,Str "and",Space,Str "my",Space,Str "eyes",Space,Str "failed,",Space,Str "I",Space,Str "was",Space,Str "neither"]]+ ,Div ("",[],[])+ [Plain [Str "Living",Space,Str "nor",Space,Str "dead,",Space,Str "and",Space,Str "I",Space,Str "knew",Space,Str "nothing,",Span ("",["lnum"],[]) [Str "40"]]]+ ,Div ("",[],[])+ [Plain [Str "Looking",Space,Str "into",Space,Str "the",Space,Str "heart",Space,Str "of",Space,Str "light,",Space,Str "the",Space,Str "silence."]]+ ,Div ("wasteland-content.xhtml#ln42",[],[("lang","de")])+ [Plain [Emph [Str "Od'",Space,Str "und",Space,Str "leer",Space,Str "das",Space,Str "Meer"],Str ".",Note [Para [Link ("",[],[]) [Str "42."] ("#wasteland-content.xhtml#ln42",""),Space,Str "Id.",Space,Str "iii,",Space,Str "verse",Space,Str "24."]]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Madame",Space,Str "Sosostris,",Space,Str "famous",Space,Str "clairvoyante,"]]+ ,Div ("",[],[])+ [Plain [Str "Had",Space,Str "a",Space,Str "bad",Space,Str "cold,",Space,Str "nevertheless"]]+ ,Div ("",[],[])+ [Plain [Str "Is",Space,Str "known",Space,Str "to",Space,Str "be",Space,Str "the",Space,Str "wisest",Space,Str "woman",Space,Str "in",Space,Str "Europe,"]]+ ,Div ("wasteland-content.xhtml#ln46",[],[])+ [Plain [Str "With",Space,Str "a",Space,Str "wicked",Space,Str "pack",Space,Str "of",Space,Str "cards.",Space,Str "Here,",Space,Str "said",Space,Str "she,",Note [Para [Link ("",[],[]) [Str "46."] ("#wasteland-content.xhtml#ln46",""),Space,Str "I",Space,Str "am",Space,Str "not",Space,Str "familiar",Space,Str "with",Space,Str "the",Space,Str "exact",Space,Str "constitution",Space,Str "of",Space,Str "the",Space,Str "Tarot",Space,Str "pack",Space,Str "of",SoftBreak,Str "cards,",Space,Str "from",Space,Str "which",Space,Str "I",Space,Str "have",Space,Str "obviously",Space,Str "departed",Space,Str "to",Space,Str "suit",Space,Str "my",Space,Str "own",Space,Str "convenience.",SoftBreak,Str "The",Space,Str "Hanged",Space,Str "Man,",Space,Str "a",Space,Str "member",Space,Str "of",Space,Str "the",Space,Str "traditional",Space,Str "pack,",Space,Str "fits",Space,Str "my",Space,Str "purpose",Space,Str "in",Space,Str "two",SoftBreak,Str "ways:",Space,Str "because",Space,Str "he",Space,Str "is",Space,Str "associated",Space,Str "in",Space,Str "my",Space,Str "mind",Space,Str "with",Space,Str "the",Space,Str "Hanged",Space,Str "God",Space,Str "of",Space,Str "Frazer,",SoftBreak,Str "and",Space,Str "because",Space,Str "I",Space,Str "associate",Space,Str "him",Space,Str "with",Space,Str "the",Space,Str "hooded",Space,Str "figure",Space,Str "in",Space,Str "the",Space,Str "passage",Space,Str "of",Space,Str "the",SoftBreak,Str "disciples",Space,Str "to",Space,Str "Emmaus",Space,Str "in",Space,Str "Part",Space,Str "V.",Space,Str "The",Space,Str "Phoenician",Space,Str "Sailor",Space,Str "and",Space,Str "the",Space,Str "Merchant",SoftBreak,Str "appear",Space,Str "later;",Space,Str "also",Space,Str "the",Space,Str "\"crowds",Space,Str "of",Space,Str "people,\"",Space,Str "and",Space,Str "Death",Space,Str "by",Space,Str "Water",Space,Str "is",SoftBreak,Str "executed",Space,Str "in",Space,Str "Part",Space,Str "IV.",Space,Str "The",Space,Str "Man",Space,Str "with",Space,Str "Three",Space,Str "Staves",Space,Str "(an",Space,Str "authentic",Space,Str "member",Space,Str "of",SoftBreak,Str "the",Space,Str "Tarot",Space,Str "pack)",Space,Str "I",Space,Str "associate,",Space,Str "quite",Space,Str "arbitrarily,",Space,Str "with",Space,Str "the",Space,Str "Fisher",Space,Str "King",SoftBreak,Str "himself."]]]]+ ,Div ("",[],[])+ [Plain [Str "Is",Space,Str "your",Space,Str "card,",Space,Str "the",Space,Str "drowned",Space,Str "Phoenician",Space,Str "Sailor,"]]+ ,Div ("",[],[])+ [Plain [Str "(Those",Space,Str "are",Space,Str "pearls",Space,Str "that",Space,Str "were",Space,Str "his",Space,Str "eyes.",Space,Str "Look!)"]]+ ,Div ("",[],[])+ [Plain [Str "Here",Space,Str "is",Space,Str "Belladonna,",Space,Str "the",Space,Str "Lady",Space,Str "of",Space,Str "the",Space,Str "Rocks,"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "lady",Space,Str "of",Space,Str "situations.",Span ("",["lnum"],[]) [Str "50"]]]+ ,Div ("",[],[])+ [Plain [Str "Here",Space,Str "is",Space,Str "the",Space,Str "man",Space,Str "with",Space,Str "three",Space,Str "staves,",Space,Str "and",Space,Str "here",Space,Str "the",Space,Str "Wheel,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "here",Space,Str "is",Space,Str "the",Space,Str "one-eyed",Space,Str "merchant,",Space,Str "and",Space,Str "this",Space,Str "card,"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "is",Space,Str "blank,",Space,Str "is",Space,Str "something",Space,Str "he",Space,Str "carries",Space,Str "on",Space,Str "his",Space,Str "back,"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "I",Space,Str "am",Space,Str "forbidden",Space,Str "to",Space,Str "see.",Space,Str "I",Space,Str "do",Space,Str "not",Space,Str "find"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "Hanged",Space,Str "Man.",Space,Str "Fear",Space,Str "death",Space,Str "by",Space,Str "water."]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "see",Space,Str "crowds",Space,Str "of",Space,Str "people,",Space,Str "walking",Space,Str "round",Space,Str "in",Space,Str "a",Space,Str "ring."]]+ ,Div ("",[],[])+ [Plain [Str "Thank",Space,Str "you.",Space,Str "If",Space,Str "you",Space,Str "see",Space,Str "dear",Space,Str "Mrs.",Space,Str "Equitone,"]]+ ,Div ("",[],[])+ [Plain [Str "Tell",Space,Str "her",Space,Str "I",Space,Str "bring",Space,Str "the",Space,Str "horoscope",Space,Str "myself:"]]+ ,Div ("",[],[])+ [Plain [Str "One",Space,Str "must",Space,Str "be",Space,Str "so",Space,Str "careful",Space,Str "these",Space,Str "days."]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln60",[],[])+ [Plain [Str "Unreal",Space,Str "City,",Note [Para [Link ("",[],[]) [Str "60."] ("#wasteland-content.xhtml#ln60",""),Space,Str "Cf.",Space,Str "Baudelaire:"],BlockQuote [Para [Str "\"Fourmillante",Space,Str "cite;,",Space,Str "cite;",Space,Str "pleine",Space,Str "de",Space,Str "reves,",LineBreak,Str "Ou",Space,Str "le",Space,Str "spectre",Space,Str "en",SoftBreak,Str "plein",Space,Str "jour",Space,Str "raccroche",Space,Str "le",Space,Str "passant.\""]]],Span ("",["lnum"],[]) [Str "60"]]]+ ,Div ("",[],[])+ [Plain [Str "Under",Space,Str "the",Space,Str "brown",Space,Str "fog",Space,Str "of",Space,Str "a",Space,Str "winter",Space,Str "dawn,"]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "crowd",Space,Str "flowed",Space,Str "over",Space,Str "London",Space,Str "Bridge,",Space,Str "so",Space,Str "many,"]]+ ,Div ("wasteland-content.xhtml#ln63",[],[])+ [Plain [Str "I",Space,Str "had",Space,Str "not",Space,Str "thought",Space,Str "death",Space,Str "had",Space,Str "undone",Space,Str "so",Space,Str "many.",Note [Para [Link ("",[],[]) [Str "63."] ("#wasteland-content.xhtml#ln63",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "iii.",Space,Str "55-7."],BlockQuote [Para [Str "\"si",Space,Str "lunga",Space,Str "tratta",LineBreak,Str "di",Space,Str "gente,",Space,Str "ch'io",Space,Str "non",Space,Str "avrei",Space,Str "mai",Space,Str "creduto",LineBreak,Str "che",SoftBreak,Str "morte",Space,Str "tanta",Space,Str "n'avesse",Space,Str "disfatta.\""]]]]]+ ,Div ("wasteland-content.xhtml#ln64",[],[])+ [Plain [Str "Sighs,",Space,Str "short",Space,Str "and",Space,Str "infrequent,",Space,Str "were",Space,Str "exhaled,",Note [Para [Link ("",[],[]) [Str "64."] ("#wasteland-content.xhtml#ln64",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "iv.",Space,Str "25-7:"],BlockQuote [Para [Str "\"Quivi,",Space,Str "secondo",Space,Str "che",Space,Str "per",Space,Str "ascoltahre,",LineBreak,Str "\"non",Space,Str "avea",Space,Str "pianto,",Space,Str "ma'",Space,Str "che",Space,Str "di",SoftBreak,Str "sospiri,",LineBreak,Str "\"che",Space,Str "l'aura",Space,Str "eterna",Space,Str "facevan",Space,Str "tremare.\""]]]]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "each",Space,Str "man",Space,Str "fixed",Space,Str "his",Space,Str "eyes",Space,Str "before",Space,Str "his",Space,Str "feet."]]+ ,Div ("",[],[])+ [Plain [Str "Flowed",Space,Str "up",Space,Str "the",Space,Str "hill",Space,Str "and",Space,Str "down",Space,Str "King",Space,Str "William",Space,Str "Street,"]]+ ,Div ("",[],[])+ [Plain [Str "To",Space,Str "where",Space,Str "Saint",Space,Str "Mary",Space,Str "Woolnoth",Space,Str "kept",Space,Str "the",Space,Str "hours"]]+ ,Div ("wasteland-content.xhtml#ln68",[],[])+ [Plain [Str "With",Space,Str "a",Space,Str "dead",Space,Str "sound",Space,Str "on",Space,Str "the",Space,Str "final",Space,Str "stroke",Space,Str "of",Space,Str "nine.",Note [Para [Link ("",[],[]) [Str "68."] ("#wasteland-content.xhtml#ln68",""),Space,Str "A",Space,Str "phenomenon",Space,Str "which",Space,Str "I",Space,Str "have",Space,Str "often",Space,Str "noticed."]]]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "I",Space,Str "saw",Space,Str "one",Space,Str "I",Space,Str "knew,",Space,Str "and",Space,Str "stopped",Space,Str "him,",Space,Str "crying",SoftBreak,Str "\"Stetson!"]]+ ,Div ("",[],[])+ [Plain [Str "\"You",Space,Str "who",Space,Str "were",Space,Str "with",Space,Str "me",Space,Str "in",Space,Str "the",Space,Str "ships",Space,Str "at",Space,Str "Mylae!",Span ("",["lnum"],[]) [Str "70"]]]+ ,Div ("",[],[])+ [Plain [Str "\"That",Space,Str "corpse",Space,Str "you",Space,Str "planted",Space,Str "last",Space,Str "year",Space,Str "in",Space,Str "your",Space,Str "garden,"]]+ ,Div ("",[],[])+ [Plain [Str "\"Has",Space,Str "it",Space,Str "begun",Space,Str "to",Space,Str "sprout?",Space,Str "Will",Space,Str "it",Space,Str "bloom",Space,Str "this",Space,Str "year?"]]+ ,Div ("",[],[])+ [Plain [Str "\"Or",Space,Str "has",Space,Str "the",Space,Str "sudden",Space,Str "frost",Space,Str "disturbed",Space,Str "its",Space,Str "bed?"]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln74",[],[])+ [Plain [Str "\"Oh",Space,Str "keep",Space,Str "the",Space,Str "Dog",Space,Str "far",Space,Str "hence,",Space,Str "that's",Space,Str "friend",Space,Str "to",Space,Str "men,",Note [Para [Link ("",[],[]) [Str "74."] ("#wasteland-content.xhtml#ln74",""),Space,Str "Cf.",Space,Str "the",Space,Str "Dirge",Space,Str "in",Space,Str "Webster's",Space,Str "White",Space,Str "Devil",Space,Str "."]]]]+ ,Div ("",[],[])+ [Plain [Str "\"Or",Space,Str "with",Space,Str "his",Space,Str "nails",Space,Str "he'll",Space,Str "dig",Space,Str "it",Space,Str "up",Space,Str "again!"]]+ ,Div ("wasteland-content.xhtml#ln76",[],[])+ [Plain [Str "\"You!",Space,Span ("",[],[("lang","fr")]) [Str "hypocrite",Space,Str "lecteur!",Space,Str "-",Space,Str "mon",Space,Str "semblable,",Space,Str "-",SoftBreak,Str "mon",Space,Str "frere"],Space,Str "!\"",Note [Para [Link ("",[],[]) [Str "76."] ("#wasteland-content.xhtml#ln76",""),Space,Str "V.",Space,Str "Baudelaire,",Space,Str "Preface",Space,Str "to",Space,Str "Fleurs",Space,Str "du",Space,Str "Mal."]]]]]]+ ,Div ("wasteland-content.xhtml#ch2",["section"],[])+ [Header 2 ("",[],[]) [Str "II.",Space,Str "A",Space,Str "GAME",Space,Str "OF",Space,Str "CHESS"]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln77",[],[])+ [Plain [Str "The",Space,Str "Chair",Space,Str "she",Space,Str "sat",Space,Str "in,",Space,Str "like",Space,Str "a",Space,Str "burnished",Space,Str "throne,",Note [Para [Link ("",[],[]) [Str "77."] ("#wasteland-content.xhtml#ln77",""),Space,Str "Cf.",Space,Str "Antony",Space,Str "and",Space,Str "Cleopatra,",Space,Str "II.",Space,Str "ii.,",Space,Str "l.",Space,Str "190."]]]]+ ,Div ("",[],[])+ [Plain [Str "Glowed",Space,Str "on",Space,Str "the",Space,Str "marble,",Space,Str "where",Space,Str "the",Space,Str "glass"]]+ ,Div ("",[],[])+ [Plain [Str "Held",Space,Str "up",Space,Str "by",Space,Str "standards",Space,Str "wrought",Space,Str "with",Space,Str "fruited",Space,Str "vines"]]+ ,Div ("",[],[])+ [Plain [Str "From",Space,Str "which",Space,Str "a",Space,Str "golden",Space,Str "Cupidon",Space,Str "peeped",Space,Str "out",Span ("",["lnum"],[]) [Str "80"]]]+ ,Div ("",[],[])+ [Plain [Str "(Another",Space,Str "hid",Space,Str "his",Space,Str "eyes",Space,Str "behind",Space,Str "his",Space,Str "wing)"]]+ ,Div ("",[],[])+ [Plain [Str "Doubled",Space,Str "the",Space,Str "flames",Space,Str "of",Space,Str "sevenbranched",Space,Str "candelabra"]]+ ,Div ("",[],[])+ [Plain [Str "Reflecting",Space,Str "light",Space,Str "upon",Space,Str "the",Space,Str "table",Space,Str "as"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "glitter",Space,Str "of",Space,Str "her",Space,Str "jewels",Space,Str "rose",Space,Str "to",Space,Str "meet",Space,Str "it,"]]+ ,Div ("",[],[])+ [Plain [Str "From",Space,Str "satin",Space,Str "cases",Space,Str "poured",Space,Str "in",Space,Str "rich",Space,Str "profusion;"]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "vials",Space,Str "of",Space,Str "ivory",Space,Str "and",Space,Str "coloured",Space,Str "glass"]]+ ,Div ("",[],[])+ [Plain [Str "Unstoppered,",Space,Str "lurked",Space,Str "her",Space,Str "strange",Space,Str "synthetic",Space,Str "perfumes,"]]+ ,Div ("",[],[])+ [Plain [Str "Unguent,",Space,Str "powdered,",Space,Str "or",Space,Str "liquid",Space,Str "-",Space,Str "troubled,",Space,Str "confused"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "drowned",Space,Str "the",Space,Str "sense",Space,Str "in",Space,Str "odours;",Space,Str "stirred",Space,Str "by",Space,Str "the",Space,Str "air"]]+ ,Div ("",[],[])+ [Plain [Str "That",Space,Str "freshened",Space,Str "from",Space,Str "the",Space,Str "window,",Space,Str "these",Space,Str "ascended",Span ("",["lnum"],[]) [Str "90"]]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "fattening",Space,Str "the",Space,Str "prolonged",Space,Str "candle-flames,"]]+ ,Div ("wasteland-content.xhtml#ln92",[],[])+ [Plain [Str "Flung",Space,Str "their",Space,Str "smoke",Space,Str "into",Space,Str "the",Space,Str "laquearia,",Note [Para [Link ("",[],[]) [Str "92."] ("#wasteland-content.xhtml#ln92",""),Space,Str "Laquearia.",Space,Str "V.",Space,Str "Aeneid,",Space,Str "I.",Space,Str "726:"],BlockQuote [Para [Str "dependent",Space,Str "lychni",Space,Str "laquearibus",Space,Str "aureis",Space,Str "incensi,",Space,Str "et",Space,Str "noctem",SoftBreak,Str "flammis",LineBreak,Str "funalia",Space,Str "vincunt."]]]]]+ ,Div ("",[],[])+ [Plain [Str "Stirring",Space,Str "the",Space,Str "pattern",Space,Str "on",Space,Str "the",Space,Str "coffered",Space,Str "ceiling."]]+ ,Div ("",[],[])+ [Plain [Str "Huge",Space,Str "sea-wood",Space,Str "fed",Space,Str "with",Space,Str "copper"]]+ ,Div ("",[],[])+ [Plain [Str "Burned",Space,Str "green",Space,Str "and",Space,Str "orange,",Space,Str "framed",Space,Str "by",Space,Str "the",Space,Str "coloured",Space,Str "stone,"]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "which",Space,Str "sad",Space,Str "light",Space,Str "a",Space,Str "carved",Space,Str "dolphin",Space,Str "swam."]]+ ,Div ("",[],[])+ [Plain [Str "Above",Space,Str "the",Space,Str "antique",Space,Str "mantel",Space,Str "was",Space,Str "displayed"]]+ ,Div ("wasteland-content.xhtml#ln98",[],[])+ [Plain [Str "As",Space,Str "though",Space,Str "a",Space,Str "window",Space,Str "gave",Space,Str "upon",Space,Str "the",Space,Str "sylvan",Space,Str "scene",Note [Para [Link ("",[],[]) [Str "98."] ("#wasteland-content.xhtml#ln98",""),Space,Str "Sylvan",Space,Str "scene.",Space,Str "V.",Space,Str "Milton,",Space,Str "Paradise",Space,Str "Lost,",Space,Str "iv.",Space,Str "140."]]]]+ ,Div ("wasteland-content.xhtml#ln99",[],[])+ [Plain [Str "The",Space,Str "change",Space,Str "of",Space,Str "Philomel,",Space,Str "by",Space,Str "the",Space,Str "barbarous",Space,Str "king",Note [Para [Link ("",[],[]) [Str "99."] ("#wasteland-content.xhtml#ln99",""),Space,Str "V.",Space,Str "Ovid,",Space,Str "Metamorphoses,",Space,Str "vi,",Space,Str "Philomela."]]]]+ ,Div ("wasteland-content.xhtml#ln100",[],[])+ [Plain [Str "So",Space,Str "rudely",Space,Str "forced;",Space,Str "yet",Space,Str "there",Space,Str "the",Space,Str "nightingale",Note [Para [Link ("",[],[]) [Str "100."] ("#wasteland-content.xhtml#ln100",""),Space,Str "Cf.",Space,Str "Part",Space,Str "III,",Space,Str "l.",Space,Str "204."]],SoftBreak,Span ("",["lnum"],[]) [Str "100"]]]+ ,Div ("",[],[])+ [Plain [Str "Filled",Space,Str "all",Space,Str "the",Space,Str "desert",Space,Str "with",Space,Str "inviolable",Space,Str "voice"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "still",Space,Str "she",Space,Str "cried,",Space,Str "and",Space,Str "still",Space,Str "the",Space,Str "world",Space,Str "pursues,"]]+ ,Div ("",[],[])+ [Plain [Str "\"Jug",Space,Str "Jug\"",Space,Str "to",Space,Str "dirty",Space,Str "ears."]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "other",Space,Str "withered",Space,Str "stumps",Space,Str "of",Space,Str "time"]]+ ,Div ("",[],[])+ [Plain [Str "Were",Space,Str "told",Space,Str "upon",Space,Str "the",Space,Str "walls;",Space,Str "staring",Space,Str "forms"]]+ ,Div ("",[],[])+ [Plain [Str "Leaned",Space,Str "out,",Space,Str "leaning,",Space,Str "hushing",Space,Str "the",Space,Str "room",Space,Str "enclosed."]]+ ,Div ("",[],[])+ [Plain [Str "Footsteps",Space,Str "shuffled",Space,Str "on",Space,Str "the",Space,Str "stair."]]+ ,Div ("",[],[])+ [Plain [Str "Under",Space,Str "the",Space,Str "firelight,",Space,Str "under",Space,Str "the",Space,Str "brush,",Space,Str "her",Space,Str "hair"]]+ ,Div ("",[],[])+ [Plain [Str "Spread",Space,Str "out",Space,Str "in",Space,Str "fiery",Space,Str "points"]]+ ,Div ("",[],[])+ [Plain [Str "Glowed",Space,Str "into",Space,Str "words,",Space,Str "then",Space,Str "would",Space,Str "be",Space,Str "savagely",Space,Str "still.",Span ("",["lnum"],[]) [Str "110"]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "\"My",Space,Str "nerves",Space,Str "are",Space,Str "bad",Space,Str "to-night.",Space,Str "Yes,",Space,Str "bad.",Space,Str "Stay",Space,Str "with",Space,Str "me."]]+ ,Div ("",[],[])+ [Plain [Str "\"Speak",Space,Str "to",Space,Str "me.",Space,Str "Why",Space,Str "do",Space,Str "you",Space,Str "never",Space,Str "speak.",Space,Str "Speak."]]+ ,Div ("",[],[])+ [Plain [Str "\"What",Space,Str "are",Space,Str "you",Space,Str "thinking",Space,Str "of?",Space,Str "What",Space,Str "thinking?",Space,Str "What?"]]+ ,Div ("",[],[])+ [Plain [Str "\"I",Space,Str "never",Space,Str "know",Space,Str "what",Space,Str "you",Space,Str "are",Space,Str "thinking.",Space,Str "Think.\""]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln115",[],[])+ [Plain [Str "I",Space,Str "think",Space,Str "we",Space,Str "are",Space,Str "in",Space,Str "rats'",Space,Str "alley",Note [Para [Link ("",[],[]) [Str "115."] ("#wasteland-content.xhtml#ln115",""),Space,Str "Cf.",Space,Str "Part",Space,Str "III,",Space,Str "l.",Space,Str "195."]]]]+ ,Div ("",[],[])+ [Plain [Str "Where",Space,Str "the",Space,Str "dead",Space,Str "men",Space,Str "lost",Space,Str "their",Space,Str "bones."]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "\"What",Space,Str "is",Space,Str "that",Space,Str "noise?\""]]+ ,Div ("wasteland-content.xhtml#ln118",["indent"],[])+ [Plain [Str "The",Space,Str "wind",Space,Str "under",Space,Str "the",Space,Str "door.",Note [Para [Link ("",[],[]) [Str "118."] ("#wasteland-content.xhtml#ln118",""),Space,Str "Cf.",Space,Str "Webster:"],BlockQuote [Para [Str "\"Is",Space,Str "the",Space,Str "wind",Space,Str "in",Space,Str "that",Space,Str "door",Space,Str "still?\""]]]]]+ ,Div ("",[],[])+ [Plain [Str "\"What",Space,Str "is",Space,Str "that",Space,Str "noise",Space,Str "now?",Space,Str "What",Space,Str "is",Space,Str "the",Space,Str "wind",Space,Str "doing?\""]]+ ,Div ("",["indent"],[])+ [Plain [Str "Nothing",Space,Str "again",Space,Str "nothing.",Span ("",["lnum"],[]) [Str "120"]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "\"Do"]]+ ,Div ("",[],[])+ [Plain [Str "\"You",Space,Str "know",Space,Str "nothing?",Space,Str "Do",Space,Str "you",Space,Str "see",Space,Str "nothing?",Space,Str "Do",Space,Str "you",Space,Str "remember"]]+ ,Div ("",[],[])+ [Plain [Str "\"Nothing?\""]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "I",Space,Str "remember"]]+ ,Div ("",[],[])+ [Plain [Str "Those",Space,Str "are",Space,Str "pearls",Space,Str "that",Space,Str "were",Space,Str "his",Space,Str "eyes."]]+ ,Div ("wasteland-content.xhtml#ln126",[],[])+ [Plain [Str "\"Are",Space,Str "you",Space,Str "alive,",Space,Str "or",Space,Str "not?",Space,Str "Is",Space,Str "there",Space,Str "nothing",Space,Str "in",Space,Str "your",Space,Str "head?\"",Note [Para [Link ("",[],[]) [Str "126."] ("#wasteland-content.xhtml#ln126",""),Space,Str "Cf.",Space,Str "Part",Space,Str "I,",Space,Str "l.",Space,Str "37,",Space,Str "48."]]]]+ ,Div ("",[],[])+ [Plain [Str "But"]]+ ,Div ("",[],[])+ [Plain [Str "O",Space,Str "O",Space,Str "O",Space,Str "O",Space,Str "that",Space,Str "Shakespeherian",Space,Str "Rag\8213"]]+ ,Div ("",[],[])+ [Plain [Str "It's",Space,Str "so",Space,Str "elegant"]]+ ,Div ("",[],[])+ [Plain [Str "So",Space,Str "intelligent",Span ("",["lnum"],[]) [Str "130"]]]+ ,Div ("",[],[])+ [Plain [Str "\"What",Space,Str "shall",Space,Str "I",Space,Str "do",Space,Str "now?",Space,Str "What",Space,Str "shall",Space,Str "I",Space,Str "do?\""]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "shall",Space,Str "rush",Space,Str "out",Space,Str "as",Space,Str "I",Space,Str "am,",Space,Str "and",Space,Str "walk",Space,Str "the",Space,Str "street"]]+ ,Div ("",[],[])+ [Plain [Str "\"With",Space,Str "my",Space,Str "hair",Space,Str "down,",Space,Str "so.",Space,Str "What",Space,Str "shall",Space,Str "we",Space,Str "do",Space,Str "to-morrow?"]]+ ,Div ("",[],[])+ [Plain [Str "\"What",Space,Str "shall",Space,Str "we",Space,Str "ever",Space,Str "do?\""]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "hot",Space,Str "water",Space,Str "at",Space,Str "ten."]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "if",Space,Str "it",Space,Str "rains,",Space,Str "a",Space,Str "closed",Space,Str "car",Space,Str "at",Space,Str "four."]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "we",Space,Str "shall",Space,Str "play",Space,Str "a",Space,Str "game",Space,Str "of",Space,Str "chess,"]]+ ,Div ("wasteland-content.xhtml#ln138",[],[])+ [Plain [Str "Pressing",Space,Str "lidless",Space,Str "eyes",Space,Str "and",Space,Str "waiting",Space,Str "for",Space,Str "a",Space,Str "knock",Space,Str "upon",Space,Str "the",Space,Str "door.",Note [Para [Link ("",[],[]) [Str "138."] ("#wasteland-content.xhtml#ln138",""),Space,Str "Cf.",Space,Str "the",Space,Str "game",Space,Str "of",Space,Str "chess",Space,Str "in",Space,Str "Middleton's",Space,Str "Women",Space,Str "beware",Space,Str "Women."]]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "When",Space,Str "Lil's",Space,Str "husband",Space,Str "got",Space,Str "demobbed,",Space,Str "I",Space,Str "said",Space,Str "-"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "didn't",Space,Str "mince",Space,Str "my",Space,Str "words,",Space,Str "I",Space,Str "said",Space,Str "to",Space,Str "her",Space,Str "myself,",Span ("",["lnum"],[]) [Str "140"]]]+ ,Div ("",[],[])+ [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]+ ,Div ("",[],[])+ [Plain [Str "Now",Space,Str "Albert's",Space,Str "coming",Space,Str "back,",Space,Str "make",Space,Str "yourself",Space,Str "a",Space,Str "bit",Space,Str "smart."]]+ ,Div ("",[],[])+ [Plain [Str "He'll",Space,Str "want",Space,Str "to",Space,Str "know",Space,Str "what",Space,Str "you",Space,Str "done",Space,Str "with",Space,Str "that",Space,Str "money",Space,Str "he",Space,Str "gave",SoftBreak,Str "you"]]+ ,Div ("",[],[])+ [Plain [Str "To",Space,Str "get",Space,Str "yourself",Space,Str "some",Space,Str "teeth.",Space,Str "He",Space,Str "did,",Space,Str "I",Space,Str "was",Space,Str "there."]]+ ,Div ("",[],[])+ [Plain [Str "You",Space,Str "have",Space,Str "them",Space,Str "all",Space,Str "out,",Space,Str "Lil,",Space,Str "and",Space,Str "get",Space,Str "a",Space,Str "nice",Space,Str "set,"]]+ ,Div ("",[],[])+ [Plain [Str "He",Space,Str "said,",Space,Str "I",Space,Str "swear,",Space,Str "I",Space,Str "can't",Space,Str "bear",Space,Str "to",Space,Str "look",Space,Str "at",Space,Str "you."]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "no",Space,Str "more",Space,Str "can't",Space,Str "I,",Space,Str "I",Space,Str "said,",Space,Str "and",Space,Str "think",Space,Str "of",Space,Str "poor",Space,Str "Albert,"]]+ ,Div ("",[],[])+ [Plain [Str "He's",Space,Str "been",Space,Str "in",Space,Str "the",Space,Str "army",Space,Str "four",Space,Str "years,",Space,Str "he",Space,Str "wants",Space,Str "a",Space,Str "good",Space,Str "time,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "if",Space,Str "you",Space,Str "don't",Space,Str "give",Space,Str "it",Space,Str "him,",Space,Str "there's",Space,Str "others",Space,Str "will,",Space,Str "I",SoftBreak,Str "said."]]+ ,Div ("",[],[])+ [Plain [Str "Oh",Space,Str "is",Space,Str "there,",Space,Str "she",Space,Str "said.",Space,Str "Something",Space,Str "o'",Space,Str "that,",Space,Str "I",Space,Str "said.",Span ("",["lnum"],[]) [Str "150"]]]+ ,Div ("",[],[])+ [Plain [Str "Then",Space,Str "I'll",Space,Str "know",Space,Str "who",Space,Str "to",Space,Str "thank,",Space,Str "she",Space,Str "said,",Space,Str "and",Space,Str "give",Space,Str "me",Space,Str "a",Space,Str "straight",SoftBreak,Str "look."]]+ ,Div ("",[],[])+ [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]+ ,Div ("",[],[])+ [Plain [Str "If",Space,Str "you",Space,Str "don't",Space,Str "like",Space,Str "it",Space,Str "you",Space,Str "can",Space,Str "get",Space,Str "on",Space,Str "with",Space,Str "it,",Space,Str "I",Space,Str "said."]]+ ,Div ("",[],[])+ [Plain [Str "Others",Space,Str "can",Space,Str "pick",Space,Str "and",Space,Str "choose",Space,Str "if",Space,Str "you",Space,Str "can't."]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "if",Space,Str "Albert",Space,Str "makes",Space,Str "off,",Space,Str "it",Space,Str "won't",Space,Str "be",Space,Str "for",Space,Str "lack",Space,Str "of",SoftBreak,Str "telling."]]+ ,Div ("",[],[])+ [Plain [Str "You",Space,Str "ought",Space,Str "to",Space,Str "be",Space,Str "ashamed,",Space,Str "I",Space,Str "said,",Space,Str "to",Space,Str "look",Space,Str "so",Space,Str "antique."]]+ ,Div ("",[],[])+ [Plain [Str "(And",Space,Str "her",Space,Str "only",Space,Str "thirty-one.)"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "can't",Space,Str "help",Space,Str "it,",Space,Str "she",Space,Str "said,",Space,Str "pulling",Space,Str "a",Space,Str "long",Space,Str "face,"]]+ ,Div ("",[],[])+ [Plain [Str "It's",Space,Str "them",Space,Str "pills",Space,Str "I",Space,Str "took,",Space,Str "to",Space,Str "bring",Space,Str "it",Space,Str "off,",Space,Str "she",Space,Str "said."]]+ ,Div ("",[],[])+ [Plain [Str "(She's",Space,Str "had",Space,Str "five",Space,Str "already,",Space,Str "and",Space,Str "nearly",Space,Str "died",Space,Str "of",Space,Str "young",Space,Str "George.)",Span ("",["lnum"],[]) [Str "160"]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "chemist",Space,Str "said",Space,Str "it",Space,Str "would",Space,Str "be",Space,Str "all",Space,Str "right,",Space,Str "but",Space,Str "I've",Space,Str "never",Space,Str "been",Space,Str "the",SoftBreak,Str "same."]]+ ,Div ("",[],[])+ [Plain [Str "You",Space,Emph [Str "are"],Space,Str "a",Space,Str "proper",Space,Str "fool,",Space,Str "I",Space,Str "said."]]+ ,Div ("",[],[])+ [Plain [Str "Well,",Space,Str "if",Space,Str "Albert",Space,Str "won't",Space,Str "leave",Space,Str "you",Space,Str "alone,",Space,Str "there",Space,Str "it",Space,Str "is,",Space,Str "I",SoftBreak,Str "said,"]]+ ,Div ("",[],[])+ [Plain [Str "What",Space,Str "you",Space,Str "get",Space,Str "married",Space,Str "for",Space,Str "if",Space,Str "you",Space,Str "don't",Space,Str "want",Space,Str "children?"]]+ ,Div ("",[],[])+ [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]+ ,Div ("",[],[])+ [Plain [Str "Well,",Space,Str "that",Space,Str "Sunday",Space,Str "Albert",Space,Str "was",Space,Str "home,",Space,Str "they",Space,Str "had",Space,Str "a",Space,Str "hot",SoftBreak,Str "gammon,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "they",Space,Str "asked",Space,Str "me",Space,Str "in",Space,Str "to",Space,Str "dinner,",Space,Str "to",Space,Str "get",Space,Str "the",Space,Str "beauty",Space,Str "of",Space,Str "it",SoftBreak,Str "hot\8213"]]+ ,Div ("",[],[])+ [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]+ ,Div ("",[],[])+ [Plain [Str "HURRY",Space,Str "UP",Space,Str "PLEASE",Space,Str "ITS",Space,Str "TIME"]]+ ,Div ("",[],[])+ [Plain [Str "Goonight",Space,Str "Bill.",Space,Str "Goonight",Space,Str "Lou.",Space,Str "Goonight",Space,Str "May.",Space,Str "Goonight.",Span ("",["lnum"],[]) [Str "170"]]]+ ,Div ("",[],[])+ [Plain [Str "Ta",Space,Str "ta.",Space,Str "Goonight.",Space,Str "Goonight."]]+ ,Div ("",[],[])+ [Plain [Str "Good",Space,Str "night,",Space,Str "ladies,",Space,Str "good",Space,Str "night,",Space,Str "sweet",Space,Str "ladies,",Space,Str "good",Space,Str "night,",Space,Str "good",SoftBreak,Str "night."]]]]+ ,Div ("wasteland-content.xhtml#ch3",["section"],[])+ [Header 2 ("",[],[]) [Str "III.",Space,Str "THE",Space,Str "FIRE",Space,Str "SERMON"]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "The",Space,Str "river's",Space,Str "tent",Space,Str "is",Space,Str "broken:",Space,Str "the",Space,Str "last",Space,Str "fingers",Space,Str "of",Space,Str "leaf"]]+ ,Div ("",[],[])+ [Plain [Str "Clutch",Space,Str "and",Space,Str "sink",Space,Str "into",Space,Str "the",Space,Str "wet",Space,Str "bank.",Space,Str "The",Space,Str "wind"]]+ ,Div ("",[],[])+ [Plain [Str "Crosses",Space,Str "the",Space,Str "brown",Space,Str "land,",Space,Str "unheard.",Space,Str "The",Space,Str "nymphs",Space,Str "are",SoftBreak,Str "departed."]]+ ,Div ("wasteland-content.xhtml#ln176",[],[])+ [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly,",Space,Str "till",Space,Str "I",Space,Str "end",Space,Str "my",Space,Str "song.",Note [Para [Link ("",[],[]) [Str "176."] ("#wasteland-content.xhtml#ln176",""),Space,Str "V.",Space,Str "Spenser,",Space,Str "Prothalamion."]]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "river",Space,Str "bears",Space,Str "no",Space,Str "empty",Space,Str "bottles,",Space,Str "sandwich",Space,Str "papers,"]]+ ,Div ("",[],[])+ [Plain [Str "Silk",Space,Str "handkerchiefs,",Space,Str "cardboard",Space,Str "boxes,",Space,Str "cigarette",Space,Str "ends"]]+ ,Div ("",[],[])+ [Plain [Str "Or",Space,Str "other",Space,Str "testimony",Space,Str "of",Space,Str "summer",Space,Str "nights.",Space,Str "The",Space,Str "nymphs",Space,Str "are",SoftBreak,Str "departed."]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "their",Space,Str "friends,",Space,Str "the",Space,Str "loitering",Space,Str "heirs",Space,Str "of",Space,Str "city",Space,Str "directors;",Span ("",["lnum"],[]) [Str "180"]]]+ ,Div ("",[],[])+ [Plain [Str "Departed,",Space,Str "have",Space,Str "left",Space,Str "no",Space,Str "addresses."]]+ ,Div ("",[],[])+ [Plain [Str "By",Space,Str "the",Space,Str "waters",Space,Str "of",Space,Str "Leman",Space,Str "I",Space,Str "sat",Space,Str "down",Space,Str "and",Space,Str "wept",Space,Str ".",Space,Str ".",Space,Str "."]]+ ,Div ("",[],[])+ [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly",Space,Str "till",Space,Str "I",Space,Str "end",Space,Str "my",Space,Str "song,"]]+ ,Div ("",[],[])+ [Plain [Str "Sweet",Space,Str "Thames,",Space,Str "run",Space,Str "softly,",Space,Str "for",Space,Str "I",Space,Str "speak",Space,Str "not",Space,Str "loud",Space,Str "or",Space,Str "long."]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "at",Space,Str "my",Space,Str "back",Space,Str "in",Space,Str "a",Space,Str "cold",Space,Str "blast",Space,Str "I",Space,Str "hear"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "rattle",Space,Str "of",Space,Str "the",Space,Str "bones,",Space,Str "and",Space,Str "chuckle",Space,Str "spread",Space,Str "from",Space,Str "ear",Space,Str "to",SoftBreak,Str "ear."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "A",Space,Str "rat",Space,Str "crept",Space,Str "softly",Space,Str "through",Space,Str "the",Space,Str "vegetation"]]+ ,Div ("",[],[])+ [Plain [Str "Dragging",Space,Str "its",Space,Str "slimy",Space,Str "belly",Space,Str "on",Space,Str "the",Space,Str "bank"]]+ ,Div ("",[],[])+ [Plain [Str "While",Space,Str "I",Space,Str "was",Space,Str "fishing",Space,Str "in",Space,Str "the",Space,Str "dull",Space,Str "canal"]]+ ,Div ("",[],[])+ [Plain [Str "On",Space,Str "a",Space,Str "winter",Space,Str "evening",Space,Str "round",Space,Str "behind",Space,Str "the",Space,Str "gashouse",Span ("",["lnum"],[]) [Str "190"]]]+ ,Div ("",[],[])+ [Plain [Str "Musing",Space,Str "upon",Space,Str "the",Space,Str "king",Space,Str "my",Space,Str "brother's",Space,Str "wreck"]]+ ,Div ("wasteland-content.xhtml#ln192",[],[])+ [Plain [Str "And",Space,Str "on",Space,Str "the",Space,Str "king",Space,Str "my",Space,Str "father's",Space,Str "death",Space,Str "before",Space,Str "him.",Note [Para [Link ("",[],[]) [Str "192."] ("#wasteland-content.xhtml#ln192",""),Space,Str "Cf.",Space,Str "The",Space,Str "Tempest,",Space,Str "I.",Space,Str "ii."]]]]+ ,Div ("",[],[])+ [Plain [Str "White",Space,Str "bodies",Space,Str "naked",Space,Str "on",Space,Str "the",Space,Str "low",Space,Str "damp",Space,Str "ground"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "bones",Space,Str "cast",Space,Str "in",Space,Str "a",Space,Str "little",Space,Str "low",Space,Str "dry",Space,Str "garret,"]]+ ,Div ("",[],[])+ [Plain [Str "Rattled",Space,Str "by",Space,Str "the",Space,Str "rat's",Space,Str "foot",Space,Str "only,",Space,Str "year",Space,Str "to",Space,Str "year."]]+ ,Div ("wasteland-content.xhtml#ln196",[],[])+ [Plain [Str "But",Space,Str "at",Space,Str "my",Space,Str "back",Space,Str "from",Space,Str "time",Space,Str "to",Space,Str "time",Space,Str "I",Space,Str "hear",Note [Para [Link ("",[],[]) [Str "196."] ("#wasteland-content.xhtml#ln196",""),Space,Str "Cf.",Space,Str "Marvell,",Space,Str "To",Space,Str "His",Space,Str "Coy",Space,Str "Mistress."]]]]+ ,Div ("wasteland-content.xhtml#ln197",[],[])+ [Plain [Str "The",Space,Str "sound",Space,Str "of",Space,Str "horns",Space,Str "and",Space,Str "motors,",Space,Str "which",Space,Str "shall",Space,Str "bring",Note [Para [Link ("",[],[]) [Str "197."] ("#wasteland-content.xhtml#ln197",""),Space,Str "Cf.",Space,Str "Day,",Space,Str "Parliament",Space,Str "of",Space,Str "Bees:"],BlockQuote [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "\"When",Space,Str "of",Space,Str "the",Space,Str "sudden,",Space,Str "listening,",Space,Str "you",Space,Str "shall",SoftBreak,Str "hear,"]],Div ("",[],[]) [Plain [Str "\"A",Space,Str "noise",Space,Str "of",Space,Str "horns",Space,Str "and",Space,Str "hunting,",Space,Str "which",Space,Str "shall",SoftBreak,Str "bring"]],Div ("",[],[]) [Plain [Str "\"Actaeon",Space,Str "to",Space,Str "Diana",Space,Str "in",Space,Str "the",Space,Str "spring,"]],Div ("",[],[]) [Plain [Str "\"Where",Space,Str "all",Space,Str "shall",Space,Str "see",Space,Str "her",Space,Str "naked",Space,Str "skin",Space,Str ".",Space,Str ".",Space,Str ".\""]]]]]]]+ ,Div ("",[],[])+ [Plain [Str "Sweeney",Space,Str "to",Space,Str "Mrs.",Space,Str "Porter",Space,Str "in",Space,Str "the",Space,Str "spring."]]+ ,Div ("wasteland-content.xhtml#ln199",[],[])+ [Plain [Str "O",Space,Str "the",Space,Str "moon",Space,Str "shone",Space,Str "bright",Space,Str "on",Space,Str "Mrs.",Space,Str "Porter",Note [Para [Link ("",[],[]) [Str "199."] ("#wasteland-content.xhtml#ln199",""),Space,Str "I",Space,Str "do",Space,Str "not",Space,Str "know",Space,Str "the",Space,Str "origin",Space,Str "of",Space,Str "the",Space,Str "ballad",Space,Str "from",Space,Str "which",Space,Str "these",Space,Str "lines",Space,Str "are",SoftBreak,Str "taken:",Space,Str "it",Space,Str "was",Space,Str "reported",Space,Str "to",Space,Str "me",Space,Str "from",Space,Str "Sydney,",Space,Str "Australia."]]]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "on",Space,Str "her",Space,Str "daughter",Span ("",["lnum"],[]) [Str "200"]]]+ ,Div ("",[],[])+ [Plain [Str "They",Space,Str "wash",Space,Str "their",Space,Str "feet",Space,Str "in",Space,Str "soda",Space,Str "water"]]+ ,Div ("wasteland-content.xhtml#ln202",[],[("lang","fr")])+ [Plain [Emph [Str "Et",Space,Str "O",Space,Str "ces",Space,Str "voix",Space,Str "d'enfants,",Space,Str "chantant",Space,Str "dans",Space,Str "la",Space,Str "coupole"],Str "!",Note [Para [Link ("",[],[]) [Str "202."] ("#wasteland-content.xhtml#ln202",""),Space,Str "V.",Space,Str "Verlaine,",Space,Str "Parsifal."]]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Twit",Space,Str "twit",Space,Str "twit"]]+ ,Div ("",[],[])+ [Plain [Str "Jug",Space,Str "jug",Space,Str "jug",Space,Str "jug",Space,Str "jug",Space,Str "jug"]]+ ,Div ("",[],[])+ [Plain [Str "So",Space,Str "rudely",Space,Str "forc'd."]]+ ,Div ("",[],[])+ [Plain [Str "Tereu"]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Unreal",Space,Str "City"]]+ ,Div ("",[],[])+ [Plain [Str "Under",Space,Str "the",Space,Str "brown",Space,Str "fog",Space,Str "of",Space,Str "a",Space,Str "winter",Space,Str "noon"]]+ ,Div ("",[],[])+ [Plain [Str "Mr.",Space,Str "Eugenides,",Space,Str "the",Space,Str "Smyrna",Space,Str "merchant"]]+ ,Div ("wasteland-content.xhtml#ln210",[],[])+ [Plain [Str "Unshaven,",Space,Str "with",Space,Str "a",Space,Str "pocket",Space,Str "full",Space,Str "of",Space,Str "currants",Note [Para [Link ("",[],[]) [Str "210."] ("#wasteland-content.xhtml#ln210",""),Space,Str "The",Space,Str "currants",Space,Str "were",Space,Str "quoted",Space,Str "at",Space,Str "a",Space,Str "price",Space,Str "\"cost",Space,Str "insurance",Space,Str "and",Space,Str "freight",Space,Str "to",SoftBreak,Str "London\";",Space,Str "and",Space,Str "the",Space,Str "Bill",Space,Str "of",Space,Str "Lading",Space,Str "etc.",Space,Str "were",Space,Str "to",Space,Str "be",Space,Str "handed",Space,Str "to",Space,Str "the",Space,Str "buyer",Space,Str "upon",SoftBreak,Str "payment",Space,Str "of",Space,Str "the",Space,Str "sight",Space,Str "draft."]],SoftBreak,Span ("",["lnum"],[]) [Str "210"]]]+ ,Div ("",[],[])+ [Plain [Str "C.i.f.",Space,Str "London:",Space,Str "documents",Space,Str "at",Space,Str "sight,"]]+ ,Div ("",[],[])+ [Plain [Str "Asked",Space,Str "me",Space,Str "in",Space,Str "demotic",Space,Str "French"]]+ ,Div ("",[],[])+ [Plain [Str "To",Space,Str "luncheon",Space,Str "at",Space,Str "the",Space,Str "Cannon",Space,Str "Street",Space,Str "Hotel"]]+ ,Div ("",[],[])+ [Plain [Str "Followed",Space,Str "by",Space,Str "a",Space,Str "weekend",Space,Str "at",Space,Str "the",Space,Str "Metropole."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "At",Space,Str "the",Space,Str "violet",Space,Str "hour,",Space,Str "when",Space,Str "the",Space,Str "eyes",Space,Str "and",Space,Str "back"]]+ ,Div ("",[],[])+ [Plain [Str "Turn",Space,Str "upward",Space,Str "from",Space,Str "the",Space,Str "desk,",Space,Str "when",Space,Str "the",Space,Str "human",Space,Str "engine",Space,Str "waits"]]+ ,Div ("",[],[])+ [Plain [Str "Like",Space,Str "a",Space,Str "taxi",Space,Str "throbbing",Space,Str "waiting,"]]+ ,Div ("wasteland-content.xhtml#ln218",[],[])+ [Plain [Str "I",Space,Str "Tiresias,",Space,Str "though",Space,Str "blind,",Space,Str "throbbing",Space,Str "between",Space,Str "two",Space,Str "lives,",Note [Para [Link ("",[],[]) [Str "218."] ("#wasteland-content.xhtml#ln218",""),Space,Str "Tiresias,",Space,Str "although",Space,Str "a",Space,Str "mere",Space,Str "spectator",Space,Str "and",Space,Str "not",Space,Str "indeed",Space,Str "a",Space,Str "\"character,\"",Space,Str "is",SoftBreak,Str "yet",Space,Str "the",Space,Str "most",Space,Str "important",Space,Str "personage",Space,Str "in",Space,Str "the",Space,Str "poem,",Space,Str "uniting",Space,Str "all",Space,Str "the",Space,Str "rest.",Space,Str "Just",SoftBreak,Str "as",Space,Str "the",Space,Str "one-eyed",Space,Str "merchant,",Space,Str "seller",Space,Str "of",Space,Str "currants,",Space,Str "melts",Space,Str "into",Space,Str "the",Space,Str "Phoenician",SoftBreak,Str "Sailor,",Space,Str "and",Space,Str "the",Space,Str "latter",Space,Str "is",Space,Str "not",Space,Str "wholly",Space,Str "distinct",Space,Str "from",Space,Str "Ferdinand",Space,Str "Prince",Space,Str "of",SoftBreak,Str "Naples,",Space,Str "so",Space,Str "all",Space,Str "the",Space,Str "women",Space,Str "are",Space,Str "one",Space,Str "woman,",Space,Str "and",Space,Str "the",Space,Str "two",Space,Str "sexes",Space,Str "meet",Space,Str "in",SoftBreak,Str "Tiresias.",Space,Str "What",Space,Str "Tiresias",Space,Str "sees,",Space,Str "in",Space,Str "fact,",Space,Str "is",Space,Str "the",Space,Str "substance",Space,Str "of",Space,Str "the",Space,Str "poem.",Space,Str "The",SoftBreak,Str "whole",Space,Str "passage",Space,Str "from",Space,Str "Ovid",Space,Str "is",Space,Str "of",Space,Str "great",Space,Str "anthropological",Space,Str "interest:"],BlockQuote [Para [Str "'.",Space,Str ".",Space,Str ".",Space,Str "Cum",Space,Str "Iunone",Space,Str "iocos",Space,Str "et",Space,Str "maior",Space,Str "vestra",Space,Str "profecto",Space,Str "est",LineBreak,Str "Quam,",Space,Str "quae",SoftBreak,Str "contingit",Space,Str "maribus,'",Space,Str "dixisse,",Space,Str "'voluptas.'",LineBreak,Str "Illa",Space,Str "negat;",Space,Str "placuit",SoftBreak,Str "quae",Space,Str "sit",Space,Str "sententia",Space,Str "docti",LineBreak,Str "Quaerere",Space,Str "Tiresiae:",Space,Str "venus",Space,Str "huic",Space,Str "erat",SoftBreak,Str "utraque",Space,Str "nota.",LineBreak,Str "Nam",Space,Str "duo",Space,Str "magnorum",Space,Str "viridi",Space,Str "coeuntia",Space,Str "silva",LineBreak,Str "Corpora",Space,Str "serpentum",Space,Str "baculi",Space,Str "violaverat",Space,Str "ictu",LineBreak,Str "Deque",Space,Str "viro",Space,Str "factus,",SoftBreak,Str "mirabile,",Space,Str "femina",Space,Str "septem",LineBreak,Str "Egerat",Space,Str "autumnos;",Space,Str "octavo",Space,Str "rursus",SoftBreak,Str "eosdem",LineBreak,Str "Vidit",Space,Str "et",Space,Str "'est",Space,Str "vestrae",Space,Str "si",Space,Str "tanta",Space,Str "potentia",Space,Str "plagae,'",LineBreak,Str "Dixit",Space,Str "'ut",Space,Str "auctoris",Space,Str "sortem",Space,Str "in",Space,Str "contraria",Space,Str "mutet,",LineBreak,Str "Nunc",Space,Str "quoque",Space,Str "vos",SoftBreak,Str "feriam!'",Space,Str "percussis",Space,Str "anguibus",Space,Str "isdem",LineBreak,Str "Forma",Space,Str "prior",Space,Str "rediit",SoftBreak,Str "genetivaque",Space,Str "venit",Space,Str "imago.",LineBreak,Str "Arbiter",Space,Str "hic",Space,Str "igitur",Space,Str "sumptus",Space,Str "de",Space,Str "lite",SoftBreak,Str "iocosa",LineBreak,Str "Dicta",Space,Str "Iovis",Space,Str "firmat;",Space,Str "gravius",Space,Str "Saturnia",Space,Str "iusto",LineBreak,Str "Nec",SoftBreak,Str "pro",Space,Str "materia",Space,Str "fertur",Space,Str "doluisse",Space,Str "suique",LineBreak,Str "Iudicis",Space,Str "aeterna",Space,Str "damnavit",SoftBreak,Str "lumina",Space,Str "nocte,",LineBreak,Str "At",Space,Str "pater",Space,Str "omnipotens",Space,Str "(neque",Space,Str "enim",Space,Str "licet",Space,Str "inrita",SoftBreak,Str "cuiquam",LineBreak,Str "Facta",Space,Str "dei",Space,Str "fecisse",Space,Str "deo)",Space,Str "pro",Space,Str "lumine",Space,Str "adempto",LineBreak,Str "Scire",SoftBreak,Str "futura",Space,Str "dedit",Space,Str "poenamque",Space,Str "levavit",Space,Str "honore.",LineBreak]]]]]+ ,Div ("",[],[])+ [Plain [Str "Old",Space,Str "man",Space,Str "with",Space,Str "wrinkled",Space,Str "female",Space,Str "breasts,",Space,Str "can",Space,Str "see"]]+ ,Div ("",[],[])+ [Plain [Str "At",Space,Str "the",Space,Str "violet",Space,Str "hour,",Space,Str "the",Space,Str "evening",Space,Str "hour",Space,Str "that",Space,Str "strives",Span ("",["lnum"],[]) [Str "220"]]]+ ,Div ("wasteland-content.xhtml#ln221",[],[])+ [Plain [Str "Homeward,",Space,Str "and",Space,Str "brings",Space,Str "the",Space,Str "sailor",Space,Str "home",Space,Str "from",Space,Str "sea,",Note [Para [Link ("",[],[]) [Str "221."] ("#wasteland-content.xhtml#ln221",""),Space,Str "This",Space,Str "may",Space,Str "not",Space,Str "appear",Space,Str "as",Space,Str "exact",Space,Str "as",Space,Str "Sappho's",Space,Str "lines,",Space,Str "but",Space,Str "I",Space,Str "had",Space,Str "in",Space,Str "mind",SoftBreak,Str "the",Space,Str "\"longshore\"",Space,Str "or",Space,Str "\"dory\"",Space,Str "fisherman,",Space,Str "who",Space,Str "returns",Space,Str "at",Space,Str "nightfall."]]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "typist",Space,Str "home",Space,Str "at",Space,Str "teatime,",Space,Str "clears",Space,Str "her",Space,Str "breakfast,",Space,Str "lights"]]+ ,Div ("",[],[])+ [Plain [Str "Her",Space,Str "stove,",Space,Str "and",Space,Str "lays",Space,Str "out",Space,Str "food",Space,Str "in",Space,Str "tins."]]+ ,Div ("",[],[])+ [Plain [Str "Out",Space,Str "of",Space,Str "the",Space,Str "window",Space,Str "perilously",Space,Str "spread"]]+ ,Div ("",[],[])+ [Plain [Str "Her",Space,Str "drying",Space,Str "combinations",Space,Str "touched",Space,Str "by",Space,Str "the",Space,Str "sun's",Space,Str "last",Space,Str "rays,"]]+ ,Div ("",[],[])+ [Plain [Str "On",Space,Str "the",Space,Str "divan",Space,Str "are",Space,Str "piled",Space,Str "(at",Space,Str "night",Space,Str "her",Space,Str "bed)"]]+ ,Div ("",[],[])+ [Plain [Str "Stockings,",Space,Str "slippers,",Space,Str "camisoles,",Space,Str "and",Space,Str "stays."]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "Tiresias,",Space,Str "old",Space,Str "man",Space,Str "with",Space,Str "wrinkled",Space,Str "dugs"]]+ ,Div ("",[],[])+ [Plain [Str "Perceived",Space,Str "the",Space,Str "scene,",Space,Str "and",Space,Str "foretold",Space,Str "the",Space,Str "rest",Space,Str "-"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "too",Space,Str "awaited",Space,Str "the",Space,Str "expected",Space,Str "guest.",Span ("",["lnum"],[]) [Str "230"]]]+ ,Div ("",[],[])+ [Plain [Str "He,",Space,Str "the",Space,Str "young",Space,Str "man",Space,Str "carbuncular,",Space,Str "arrives,"]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "small",Space,Str "house",Space,Str "agent's",Space,Str "clerk,",Space,Str "with",Space,Str "one",Space,Str "bold",Space,Str "stare,"]]+ ,Div ("",[],[])+ [Plain [Str "One",Space,Str "of",Space,Str "the",Space,Str "low",Space,Str "on",Space,Str "whom",Space,Str "assurance",Space,Str "sits"]]+ ,Div ("",[],[])+ [Plain [Str "As",Space,Str "a",Space,Str "silk",Space,Str "hat",Space,Str "on",Space,Str "a",Space,Str "Bradford",Space,Str "millionaire."]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "time",Space,Str "is",Space,Str "now",Space,Str "propitious,",Space,Str "as",Space,Str "he",Space,Str "guesses,"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "meal",Space,Str "is",Space,Str "ended,",Space,Str "she",Space,Str "is",Space,Str "bored",Space,Str "and",Space,Str "tired,"]]+ ,Div ("",[],[])+ [Plain [Str "Endeavours",Space,Str "to",Space,Str "engage",Space,Str "her",Space,Str "in",Space,Str "caresses"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "still",Space,Str "are",Space,Str "unreproved,",Space,Str "if",Space,Str "undesired."]]+ ,Div ("",[],[])+ [Plain [Str "Flushed",Space,Str "and",Space,Str "decided,",Space,Str "he",Space,Str "assaults",Space,Str "at",Space,Str "once;"]]+ ,Div ("",[],[])+ [Plain [Str "Exploring",Space,Str "hands",Space,Str "encounter",Space,Str "no",Space,Str "defence;",Span ("",["lnum"],[]) [Str "240"]]]+ ,Div ("",[],[])+ [Plain [Str "His",Space,Str "vanity",Space,Str "requires",Space,Str "no",Space,Str "response,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "makes",Space,Str "a",Space,Str "welcome",Space,Str "of",Space,Str "indifference."]]+ ,Div ("",[],[])+ [Plain [Str "(And",Space,Str "I",Space,Str "Tiresias",Space,Str "have",Space,Str "foresuffered",Space,Str "all"]]+ ,Div ("",[],[])+ [Plain [Str "Enacted",Space,Str "on",Space,Str "this",Space,Str "same",Space,Str "divan",Space,Str "or",Space,Str "bed;"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "who",Space,Str "have",Space,Str "sat",Space,Str "by",Space,Str "Thebes",Space,Str "below",Space,Str "the",Space,Str "wall"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "walked",Space,Str "among",Space,Str "the",Space,Str "lowest",Space,Str "of",Space,Str "the",Space,Str "dead.)"]]+ ,Div ("",[],[])+ [Plain [Str "Bestows",Space,Str "one",Space,Str "final",Space,Str "patronising",Space,Str "kiss,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "gropes",Space,Str "his",Space,Str "way,",Space,Str "finding",Space,Str "the",Space,Str "stairs",Space,Str "unlit",Space,Str ".",Space,Str ".",Space,Str "."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "She",Space,Str "turns",Space,Str "and",Space,Str "looks",Space,Str "a",Space,Str "moment",Space,Str "in",Space,Str "the",Space,Str "glass,"]]+ ,Div ("",[],[])+ [Plain [Str "Hardly",Space,Str "aware",Space,Str "of",Space,Str "her",Space,Str "departed",Space,Str "lover;",Span ("",["lnum"],[]) [Str "250"]]]+ ,Div ("",[],[])+ [Plain [Str "Her",Space,Str "brain",Space,Str "allows",Space,Str "one",Space,Str "half-formed",Space,Str "thought",Space,Str "to",Space,Str "pass:"]]+ ,Div ("",[],[])+ [Plain [Str "\"Well",Space,Str "now",Space,Str "that's",Space,Str "done:",Space,Str "and",Space,Str "I'm",Space,Str "glad",Space,Str "it's",Space,Str "over.\""]]+ ,Div ("wasteland-content.xhtml#ln253",[],[])+ [Plain [Str "When",Space,Str "lovely",Space,Str "woman",Space,Str "stoops",Space,Str "to",Space,Str "folly",Space,Str "and",Note [Para [Link ("",[],[]) [Str "253."] ("#wasteland-content.xhtml#ln253",""),Space,Str "V.",Space,Str "Goldsmith,",Space,Str "the",Space,Str "song",Space,Str "in",Space,Str "The",Space,Str "Vicar",Space,Str "of",Space,Str "Wakefield."]]]]+ ,Div ("",[],[])+ [Plain [Str "Paces",Space,Str "about",Space,Str "her",Space,Str "room",Space,Str "again,",Space,Str "alone,"]]+ ,Div ("",[],[])+ [Plain [Str "She",Space,Str "smoothes",Space,Str "her",Space,Str "hair",Space,Str "with",Space,Str "automatic",Space,Str "hand,"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "puts",Space,Str "a",Space,Str "record",Space,Str "on",Space,Str "the",Space,Str "gramophone."]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln257",[],[])+ [Plain [Str "\"This",Space,Str "music",Space,Str "crept",Space,Str "by",Space,Str "me",Space,Str "upon",Space,Str "the",Space,Str "waters\"",Note [Para [Link ("",[],[]) [Str "257."] ("#wasteland-content.xhtml#ln257",""),Space,Str "V.",Space,Str "The",Space,Str "Tempest,",Space,Str "as",Space,Str "above."]]]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "along",Space,Str "the",Space,Str "Strand,",Space,Str "up",Space,Str "Queen",Space,Str "Victoria",Space,Str "Street."]]+ ,Div ("",[],[])+ [Plain [Str "O",Space,Str "City",Space,Str "city,",Space,Str "I",Space,Str "can",Space,Str "sometimes",Space,Str "hear"]]+ ,Div ("",[],[])+ [Plain [Str "Beside",Space,Str "a",Space,Str "public",Space,Str "bar",Space,Str "in",Space,Str "Lower",Space,Str "Thames",Space,Str "Street,",Span ("",["lnum"],[]) [Str "260"]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "pleasant",Space,Str "whining",Space,Str "of",Space,Str "a",Space,Str "mandoline"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "a",Space,Str "clatter",Space,Str "and",Space,Str "a",Space,Str "chatter",Space,Str "from",Space,Str "within"]]+ ,Div ("",[],[])+ [Plain [Str "Where",Space,Str "fishmen",Space,Str "lounge",Space,Str "at",Space,Str "noon:",Space,Str "where",Space,Str "the",Space,Str "walls"]]+ ,Div ("wasteland-content.xhtml#ln264",[],[])+ [Plain [Str "Of",Space,Str "Magnus",Space,Str "Martyr",Space,Str "hold",Note [Para [Link ("",[],[]) [Str "264."] ("#wasteland-content.xhtml#ln264",""),Space,Str "The",Space,Str "interior",Space,Str "of",Space,Str "St.",Space,Str "Magnus",Space,Str "Martyr",Space,Str "is",Space,Str "to",Space,Str "my",Space,Str "mind",Space,Str "one",Space,Str "of",Space,Str "the",Space,Str "finest",SoftBreak,Str "among",Space,Str "Wren's",Space,Str "interiors.",Space,Str "See",Space,Str "The",Space,Str "Proposed",Space,Str "Demolition",Space,Str "of",Space,Str "Nineteen",Space,Str "City",SoftBreak,Str "Churches",Space,Str "(P.",Space,Str "S.",Space,Str "King",Space,Str "&",Space,Str "Son,",Space,Str "Ltd.)."]]]]+ ,Div ("",[],[])+ [Plain [Str "Inexplicable",Space,Str "splendour",Space,Str "of",Space,Str "Ionian",Space,Str "white",Space,Str "and",Space,Str "gold."]]]+ ,Div ("",["linegroup","indent"],[])+ [Div ("wasteland-content.xhtml#ln266",[],[])+ [Plain [Str "The",Space,Str "river",Space,Str "sweats",Note [Para [Link ("",[],[]) [Str "266."] ("#wasteland-content.xhtml#ln266",""),Space,Str "The",Space,Str "Song",Space,Str "of",Space,Str "the",Space,Str "(three)",Space,Str "Thames-daughters",Space,Str "begins",Space,Str "here.",Space,Str "From",Space,Str "line",Space,Str "292",SoftBreak,Str "to",Space,Str "306",Space,Str "inclusive",Space,Str "they",Space,Str "speak",Space,Str "in",Space,Str "turn.",Space,Str "V.",Space,Str "Gutterdsammerung,",Space,Str "III.",Space,Str "i:",Space,Str "the",SoftBreak,Str "Rhine-daughters."]]]]+ ,Div ("",[],[])+ [Plain [Str "Oil",Space,Str "and",Space,Str "tar"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "barges",Space,Str "drift"]]+ ,Div ("",[],[])+ [Plain [Str "With",Space,Str "the",Space,Str "turning",Space,Str "tide"]]+ ,Div ("",[],[])+ [Plain [Str "Red",Space,Str "sails",Span ("",["lnum"],[]) [Str "270"]]]+ ,Div ("",[],[])+ [Plain [Str "Wide"]]+ ,Div ("",[],[])+ [Plain [Str "To",Space,Str "leeward,",Space,Str "swing",Space,Str "on",Space,Str "the",Space,Str "heavy",Space,Str "spar."]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "barges",Space,Str "wash"]]+ ,Div ("",[],[])+ [Plain [Str "Drifting",Space,Str "logs"]]+ ,Div ("",[],[])+ [Plain [Str "Down",Space,Str "Greenwich",Space,Str "reach"]]+ ,Div ("",[],[])+ [Plain [Str "Past",Space,Str "the",Space,Str "Isle",Space,Str "of",Space,Str "Dogs."]]+ ,Div ("",["indent"],[])+ [Plain [Str "Weialala",Space,Str "leia"]]+ ,Div ("",["indent"],[])+ [Plain [Str "Wallala",Space,Str "leialala"]]]+ ,Div ("",["linegroup","indent"],[])+ [Div ("wasteland-content.xhtml#ln279",[],[])+ [Plain [Str "Elizabeth",Space,Str "and",Space,Str "Leicester",Note [Para [Link ("",[],[]) [Str "279."] ("#wasteland-content.xhtml#ln279",""),Space,Str "V.",Space,Str "Froude,",Space,Str "Elizabeth,",Space,Str "Vol.",Space,Str "I,",Space,Str "ch.",Space,Str "iv,",Space,Str "letter",Space,Str "of",Space,Str "De",Space,Str "Quadra",Space,Str "to",Space,Str "Philip",SoftBreak,Str "of",Space,Str "Spain:"],BlockQuote [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "\"In",Space,Str "the",Space,Str "afternoon",Space,Str "we",Space,Str "were",Space,Str "in",Space,Str "a",Space,Str "barge,",Space,Str "watching",Space,Str "the",SoftBreak,Str "games",Space,Str "on",Space,Str "the",Space,Str "river."]],Div ("",[],[]) [Plain [Str "(The",Space,Str "queen)",Space,Str "was",Space,Str "alone",Space,Str "with",Space,Str "Lord",Space,Str "Robert",Space,Str "and",Space,Str "myself",SoftBreak,Str "on",Space,Str "the",Space,Str "poop,"]],Div ("",[],[]) [Plain [Str "when",Space,Str "they",Space,Str "began",Space,Str "to",Space,Str "talk",Space,Str "nonsense,",Space,Str "and",Space,Str "went",Space,Str "so",Space,Str "far",SoftBreak,Str "that",Space,Str "Lord",Space,Str "Robert"]],Div ("",[],[]) [Plain [Str "at",Space,Str "last",Space,Str "said,",Space,Str "as",Space,Str "I",Space,Str "was",Space,Str "on",Space,Str "the",Space,Str "spot",Space,Str "there",Space,Str "was",Space,Str "no",SoftBreak,Str "reason",Space,Str "why",Space,Str "they"]],Div ("",[],[]) [Plain [Str "should",Space,Str "not",Space,Str "be",Space,Str "married",Space,Str "if",Space,Str "the",Space,Str "queen",Space,Str "pleased.\""]]]]]]]+ ,Div ("",[],[])+ [Plain [Str "Beating",Space,Str "oars",Span ("",["lnum"],[]) [Str "280"]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "stern",Space,Str "was",Space,Str "formed"]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "gilded",Space,Str "shell"]]+ ,Div ("",[],[])+ [Plain [Str "Red",Space,Str "and",Space,Str "gold"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "brisk",Space,Str "swell"]]+ ,Div ("",[],[])+ [Plain [Str "Rippled",Space,Str "both",Space,Str "shores"]]+ ,Div ("",[],[])+ [Plain [Str "Southwest",Space,Str "wind"]]+ ,Div ("",[],[])+ [Plain [Str "Carried",Space,Str "down",Space,Str "stream"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "peal",Space,Str "of",Space,Str "bells"]]+ ,Div ("",[],[])+ [Plain [Str "White",Space,Str "towers"]]+ ,Div ("",["indent"],[])+ [Plain [Str "Weialala",Space,Str "leia",Span ("",["lnum"],[]) [Str "290"]]]+ ,Div ("",["indent"],[])+ [Plain [Str "Wallala",Space,Str "leialala"]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "\"Trams",Space,Str "and",Space,Str "dusty",Space,Str "trees."]]+ ,Div ("wasteland-content.xhtml#ln293",[],[])+ [Plain [Str "Highbury",Space,Str "bore",Space,Str "me.",Space,Str "Richmond",Space,Str "and",Space,Str "Kew",Note [Para [Link ("",[],[]) [Str "293."] ("#wasteland-content.xhtml#ln293",""),Space,Str "Cf.",Space,Str "Purgatorio,",Space,Str "v.",Space,Str "133:"],BlockQuote [Para [Str "\"Ricorditi",Space,Str "di",Space,Str "me,",Space,Str "che",Space,Str "son",Space,Str "la",Space,Str "Pia;",LineBreak,Str "Siena",Space,Str "mi",Space,Str "fe',",Space,Str "disfecemi",SoftBreak,Str "Maremma.\""]]]]]+ ,Div ("",[],[])+ [Plain [Str "Undid",Space,Str "me.",Space,Str "By",Space,Str "Richmond",Space,Str "I",Space,Str "raised",Space,Str "my",Space,Str "knees"]]+ ,Div ("",[],[])+ [Plain [Str "Supine",Space,Str "on",Space,Str "the",Space,Str "floor",Space,Str "of",Space,Str "a",Space,Str "narrow",Space,Str "canoe.\""]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "\"My",Space,Str "feet",Space,Str "are",Space,Str "at",Space,Str "Moorgate,",Space,Str "and",Space,Str "my",Space,Str "heart"]]+ ,Div ("",[],[])+ [Plain [Str "Under",Space,Str "my",Space,Str "feet.",Space,Str "After",Space,Str "the",Space,Str "event"]]+ ,Div ("",[],[])+ [Plain [Str "He",Space,Str "wept.",Space,Str "He",Space,Str "promised",Space,Str "'a",Space,Str "new",Space,Str "start'."]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "made",Space,Str "no",Space,Str "comment.",Space,Str "What",Space,Str "should",Space,Str "I",Space,Str "resent?\""]]+ ,Div ("",[],[])+ [Plain [Str "\"On",Space,Str "Margate",Space,Str "Sands.",Span ("",["lnum"],[]) [Str "300"]]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "can",Space,Str "connect"]]+ ,Div ("",[],[])+ [Plain [Str "Nothing",Space,Str "with",Space,Str "nothing."]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "broken",Space,Str "fingernails",Space,Str "of",Space,Str "dirty",Space,Str "hands."]]+ ,Div ("",[],[])+ [Plain [Str "My",Space,Str "people",Space,Str "humble",Space,Str "people",Space,Str "who",Space,Str "expect"]]+ ,Div ("",[],[])+ [Plain [Str "Nothing.\""]]+ ,Div ("",["indent"],[])+ [Plain [Str "la",Space,Str "la"]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln307",[],[])+ [Plain [Str "To",Space,Str "Carthage",Space,Str "then",Space,Str "I",Space,Str "came",Note [Para [Link ("",[],[]) [Str "307."] ("#wasteland-content.xhtml#ln307",""),Space,Str "V.",Space,Str "St.",Space,Str "Augustine's",Space,Str "Confessions:",Space,Str "\"to",Space,Str "Carthage",Space,Str "then",Space,Str "I",Space,Str "came,",Space,Str "where",Space,Str "a",SoftBreak,Str "cauldron",Space,Str "of",Space,Str "unholy",Space,Str "loves",Space,Str "sang",Space,Str "all",Space,Str "about",Space,Str "mine",Space,Str "ears.\""]]]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln308",[],[])+ [Plain [Str "Burning",Space,Str "burning",Space,Str "burning",Space,Str "burning",Note [Para [Link ("",[],[]) [Str "308."] ("#wasteland-content.xhtml#ln308",""),Space,Str "The",Space,Str "complete",Space,Str "text",Space,Str "of",Space,Str "the",Space,Str "Buddha's",Space,Str "Fire",Space,Str "Sermon",Space,Str "(which",Space,Str "corresponds",Space,Str "in",SoftBreak,Str "importance",Space,Str "to",Space,Str "the",Space,Str "Sermon",Space,Str "on",Space,Str "the",Space,Str "Mount)",Space,Str "from",Space,Str "which",Space,Str "these",Space,Str "words",Space,Str "are",Space,Str "taken,",SoftBreak,Str "will",Space,Str "be",Space,Str "found",Space,Str "translated",Space,Str "in",Space,Str "the",Space,Str "late",Space,Str "Henry",Space,Str "Clarke",Space,Str "Warren's",Space,Str "Buddhism",Space,Str "in",SoftBreak,Str "Translation",Space,Str "(Harvard",Space,Str "Oriental",Space,Str "Series).",Space,Str "Mr.",Space,Str "Warren",Space,Str "was",Space,Str "one",Space,Str "of",Space,Str "the",Space,Str "great",SoftBreak,Str "pioneers",Space,Str "of",Space,Str "Buddhist",Space,Str "studies",Space,Str "in",Space,Str "the",Space,Str "Occident."]]]]+ ,Div ("wasteland-content.xhtml#ln309",[],[])+ [Plain [Str "O",Space,Str "Lord",Space,Str "Thou",Space,Str "pluckest",Space,Str "me",Space,Str "out",Note [Para [Link ("",[],[]) [Str "309."] ("#wasteland-content.xhtml#ln309",""),Space,Str "From",Space,Str "St.",Space,Str "Augustine's",Space,Str "Confessions",Space,Str "again.",Space,Str "The",Space,Str "collocation",Space,Str "of",Space,Str "these",Space,Str "two",SoftBreak,Str "representatives",Space,Str "of",Space,Str "eastern",Space,Str "and",Space,Str "western",Space,Str "asceticism,",Space,Str "as",Space,Str "the",Space,Str "culmination",Space,Str "of",SoftBreak,Str "this",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "poem,",Space,Str "is",Space,Str "not",Space,Str "an",Space,Str "accident."]]]]+ ,Div ("",[],[])+ [Plain [Str "O",Space,Str "Lord",Space,Str "Thou",Space,Str "pluckest",Span ("",["lnum"],[]) [Str "310"]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "burning"]]]]+ ,Div ("wasteland-content.xhtml#ch4",["section"],[])+ [Header 2 ("",[],[]) [Str "IV.",Space,Str "DEATH",Space,Str "BY",Space,Str "WATER"]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Phlebas",Space,Str "the",Space,Str "Phoenician,",Space,Str "a",Space,Str "fortnight",Space,Str "dead,"]]+ ,Div ("",[],[])+ [Plain [Str "Forgot",Space,Str "the",Space,Str "cry",Space,Str "of",Space,Str "gulls,",Space,Str "and",Space,Str "the",Space,Str "deep",Space,Str "sea",Space,Str "swell"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "the",Space,Str "profit",Space,Str "and",Space,Str "loss."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",["indent2"],[])+ [Plain [Str "A",Space,Str "current",Space,Str "under",Space,Str "sea"]]+ ,Div ("",[],[])+ [Plain [Str "Picked",Space,Str "his",Space,Str "bones",Space,Str "in",Space,Str "whispers.",Space,Str "As",Space,Str "he",Space,Str "rose",Space,Str "and",Space,Str "fell"]]+ ,Div ("",[],[])+ [Plain [Str "He",Space,Str "passed",Space,Str "the",Space,Str "stages",Space,Str "of",Space,Str "his",Space,Str "age",Space,Str "and",Space,Str "youth"]]+ ,Div ("",[],[])+ [Plain [Str "Entering",Space,Str "the",Space,Str "whirlpool."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",["indent2"],[])+ [Plain [Str "Gentile",Space,Str "or",Space,Str "Jew"]]+ ,Div ("",[],[])+ [Plain [Str "O",Space,Str "you",Space,Str "who",Space,Str "turn",Space,Str "the",Space,Str "wheel",Space,Str "and",Space,Str "look",Space,Str "to",Space,Str "windward,",Span ("",["lnum"],[]) [Str "320"]]]+ ,Div ("",[],[])+ [Plain [Str "Consider",Space,Str "Phlebas,",Space,Str "who",Space,Str "was",Space,Str "once",Space,Str "handsome",Space,Str "and",Space,Str "tall",Space,Str "as",Space,Str "you."]]]]+ ,Div ("wasteland-content.xhtml#ch5",["section"],[])+ [Header 2 ("",[],[]) [Str "V.",Space,Str "WHAT",Space,Str "THE",Space,Str "THUNDER",Space,Str "SAID"]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "After",Space,Str "the",Space,Str "torchlight",Space,Str "red",Space,Str "on",Space,Str "sweaty",Space,Str "faces"]]+ ,Div ("",[],[])+ [Plain [Str "After",Space,Str "the",Space,Str "frosty",Space,Str "silence",Space,Str "in",Space,Str "the",Space,Str "gardens"]]+ ,Div ("",[],[])+ [Plain [Str "After",Space,Str "the",Space,Str "agony",Space,Str "in",Space,Str "stony",Space,Str "places"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "shouting",Space,Str "and",Space,Str "the",Space,Str "crying"]]+ ,Div ("",[],[])+ [Plain [Str "Prison",Space,Str "and",Space,Str "palace",Space,Str "and",Space,Str "reverberation"]]+ ,Div ("",[],[])+ [Plain [Str "Of",Space,Str "thunder",Space,Str "of",Space,Str "spring",Space,Str "over",Space,Str "distant",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "He",Space,Str "who",Space,Str "was",Space,Str "living",Space,Str "is",Space,Str "now",Space,Str "dead"]]+ ,Div ("",[],[])+ [Plain [Str "We",Space,Str "who",Space,Str "were",Space,Str "living",Space,Str "are",Space,Str "now",Space,Str "dying"]]+ ,Div ("",[],[])+ [Plain [Str "With",Space,Str "a",Space,Str "little",Space,Str "patience",Span ("",["lnum"],[]) [Str "330"]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Here",Space,Str "is",Space,Str "no",Space,Str "water",Space,Str "but",Space,Str "only",Space,Str "rock"]]+ ,Div ("",[],[])+ [Plain [Str "Rock",Space,Str "and",Space,Str "no",Space,Str "water",Space,Str "and",Space,Str "the",Space,Str "sandy",Space,Str "road"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "road",Space,Str "winding",Space,Str "above",Space,Str "among",Space,Str "the",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "are",Space,Str "mountains",Space,Str "of",Space,Str "rock",Space,Str "without",Space,Str "water"]]+ ,Div ("",[],[])+ [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "water",Space,Str "we",Space,Str "should",Space,Str "stop",Space,Str "and",Space,Str "drink"]]+ ,Div ("",[],[])+ [Plain [Str "Amongst",Space,Str "the",Space,Str "rock",Space,Str "one",Space,Str "cannot",Space,Str "stop",Space,Str "or",Space,Str "think"]]+ ,Div ("",[],[])+ [Plain [Str "Sweat",Space,Str "is",Space,Str "dry",Space,Str "and",Space,Str "feet",Space,Str "are",Space,Str "in",Space,Str "the",Space,Str "sand"]]+ ,Div ("",[],[])+ [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "only",Space,Str "water",Space,Str "amongst",Space,Str "the",Space,Str "rock"]]+ ,Div ("",[],[])+ [Plain [Str "Dead",Space,Str "mountain",Space,Str "mouth",Space,Str "of",Space,Str "carious",Space,Str "teeth",Space,Str "that",Space,Str "cannot",Space,Str "spit"]]+ ,Div ("",[],[])+ [Plain [Str "Here",Space,Str "one",Space,Str "can",Space,Str "neither",Space,Str "stand",Space,Str "nor",Space,Str "lie",Space,Str "nor",Space,Str "sit",Span ("",["lnum"],[]) [Str "340"]]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "is",Space,Str "not",Space,Str "even",Space,Str "silence",Space,Str "in",Space,Str "the",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "dry",Space,Str "sterile",Space,Str "thunder",Space,Str "without",Space,Str "rain"]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "is",Space,Str "not",Space,Str "even",Space,Str "solitude",Space,Str "in",Space,Str "the",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "red",Space,Str "sullen",Space,Str "faces",Space,Str "sneer",Space,Str "and",Space,Str "snarl"]]+ ,Div ("",[],[])+ [Plain [Str "From",Space,Str "doors",Space,Str "of",Space,Str "mudcracked",Space,Str "houses"]]+ ,Div ("",["linegroup"],[])+ [Div ("",["indent2"],[])+ [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "water"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "no",Space,Str "rock"]]+ ,Div ("",[],[])+ [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "rock"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "also",Space,Str "water"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "water",Span ("",["lnum"],[]) [Str "350"]]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "spring"]]+ ,Div ("",[],[])+ [Plain [Str "A",Space,Str "pool",Space,Str "among",Space,Str "the",Space,Str "rock"]]+ ,Div ("",[],[])+ [Plain [Str "If",Space,Str "there",Space,Str "were",Space,Str "the",Space,Str "sound",Space,Str "of",Space,Str "water",Space,Str "only"]]+ ,Div ("",[],[])+ [Plain [Str "Not",Space,Str "the",Space,Str "cicada"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "dry",Space,Str "grass",Space,Str "singing"]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "sound",Space,Str "of",Space,Str "water",Space,Str "over",Space,Str "a",Space,Str "rock"]]+ ,Div ("wasteland-content.xhtml#ln357",[],[])+ [Plain [Str "Where",Space,Str "the",Space,Str "hermit-thrush",Space,Str "sings",Space,Str "in",Space,Str "the",Space,Str "pine",Space,Str "trees",Note [Para [Link ("",[],[]) [Str "357."] ("#wasteland-content.xhtml#ln357",""),Space,Str "This",Space,Str "is",Space,Str "Turdus",Space,Str "aonalaschkae",Space,Str "pallasii,",Space,Str "the",Space,Str "hermit-thrush",Space,Str "which",Space,Str "I",Space,Str "have",SoftBreak,Str "heard",Space,Str "in",Space,Str "Quebec",Space,Str "County.",Space,Str "Chapman",Space,Str "says",Space,Str "(Handbook",Space,Str "of",Space,Str "Birds",Space,Str "of",Space,Str "Eastern",Space,Str "North",SoftBreak,Str "America)",Space,Str "\"it",Space,Str "is",Space,Str "most",Space,Str "at",Space,Str "home",Space,Str "in",Space,Str "secluded",Space,Str "woodland",Space,Str "and",Space,Str "thickety",Space,Str "retreats.",SoftBreak,Str ".",Space,Str ".",Space,Str ".",Space,Str "Its",Space,Str "notes",Space,Str "are",Space,Str "not",Space,Str "remarkable",Space,Str "for",Space,Str "variety",Space,Str "or",Space,Str "volume,",Space,Str "but",Space,Str "in",Space,Str "purity",SoftBreak,Str "and",Space,Str "sweetness",Space,Str "of",Space,Str "tone",Space,Str "and",Space,Str "exquisite",Space,Str "modulation",Space,Str "they",Space,Str "are",Space,Str "unequalled.\"",Space,Str "Its",SoftBreak,Str "\"water-dripping",Space,Str "song\"",Space,Str "is",Space,Str "justly",Space,Str "celebrated."]]]]+ ,Div ("",[],[])+ [Plain [Str "Drip",Space,Str "drop",Space,Str "drip",Space,Str "drop",Space,Str "drop",Space,Str "drop",Space,Str "drop"]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "there",Space,Str "is",Space,Str "no",Space,Str "water"]]]]+ ,Div ("",["linegroup"],[])+ [Div ("wasteland-content.xhtml#ln360",[],[])+ [Plain [Str "Who",Space,Str "is",Space,Str "the",Space,Str "third",Space,Str "who",Space,Str "walks",Space,Str "always",Space,Str "beside",Space,Str "you?",Note [Para [Link ("",[],[]) [Str "360."] ("#wasteland-content.xhtml#ln360",""),Space,Str "The",Space,Str "following",Space,Str "lines",Space,Str "were",Space,Str "stimulated",Space,Str "by",Space,Str "the",Space,Str "account",Space,Str "of",Space,Str "one",Space,Str "of",Space,Str "the",SoftBreak,Str "Antarctic",Space,Str "expeditions",Space,Str "(I",Space,Str "forget",Space,Str "which,",Space,Str "but",Space,Str "I",Space,Str "think",Space,Str "one",Space,Str "of",Space,Str "Shackleton's):",SoftBreak,Str "it",Space,Str "was",Space,Str "related",Space,Str "that",Space,Str "the",Space,Str "party",Space,Str "of",Space,Str "explorers,",Space,Str "at",Space,Str "the",Space,Str "extremity",Space,Str "of",Space,Str "their",SoftBreak,Str "strength,",Space,Str "had",Space,Str "the",Space,Str "constant",Space,Str "delusion",Space,Str "that",Space,Str "there",Space,Str "was",Space,Str "one",Space,Str "more",Space,Str "member",Space,Str "than",SoftBreak,Str "could",Space,Str "actually",Space,Str "be",Space,Str "counted."]],SoftBreak,Span ("",["lnum"],[]) [Str "360"]]]+ ,Div ("",[],[])+ [Plain [Str "When",Space,Str "I",Space,Str "count,",Space,Str "there",Space,Str "are",Space,Str "only",Space,Str "you",Space,Str "and",Space,Str "I",Space,Str "together"]]+ ,Div ("",[],[])+ [Plain [Str "But",Space,Str "when",Space,Str "I",Space,Str "look",Space,Str "ahead",Space,Str "up",Space,Str "the",Space,Str "white",Space,Str "road"]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "is",Space,Str "always",Space,Str "another",Space,Str "one",Space,Str "walking",Space,Str "beside",Space,Str "you"]]+ ,Div ("",[],[])+ [Plain [Str "Gliding",Space,Str "wrapt",Space,Str "in",Space,Str "a",Space,Str "brown",Space,Str "mantle,",Space,Str "hooded"]]+ ,Div ("",[],[])+ [Plain [Str "I",Space,Str "do",Space,Str "not",Space,Str "know",Space,Str "whether",Space,Str "a",Space,Str "man",Space,Str "or",Space,Str "a",Space,Str "woman"]]+ ,Div ("wasteland-content.xhtml#ln367",[],[])+ [Plain [Str "\8213But",Space,Str "who",Space,Str "is",Space,Str "that",Space,Str "on",Space,Str "the",Space,Str "other",Space,Str "side",Space,Str "of",Space,Str "you?",Note [Para [Link ("",[],[]) [Str "367-77."] ("#wasteland-content.xhtml#ln367",""),Space,Str "Cf.",Space,Str "Hermann",Space,Str "Hesse,",Space,Str "Blick",Space,Str "ins",Space,Str "Chaos:"],BlockQuote [Para [Str "\"Schon",Space,Str "ist",Space,Str "halb",Space,Str "Europa,",Space,Str "schon",Space,Str "ist",Space,Str "zumindest",Space,Str "der",Space,Str "halbe",Space,Str "Osten",Space,Str "Europas",SoftBreak,Str "auf",Space,Str "dem",LineBreak,Str "Wege",Space,Str "zum",Space,Str "Chaos,",Space,Str "fhrt",Space,Str "betrunken",Space,Str "im",Space,Str "heiligem",Space,Str "Wahn",Space,Str "am",SoftBreak,Str "Abgrund",Space,Str "entlang",LineBreak,Str "und",Space,Str "singt",Space,Str "dazu,",Space,Str "singt",Space,Str "betrunken",Space,Str "und",Space,Str "hymnisch",SoftBreak,Str "wie",Space,Str "Dmitri",Space,Str "Karamasoff",Space,Str "sang.",LineBreak,Str "Ueber",Space,Str "diese",Space,Str "Lieder",Space,Str "lacht",Space,Str "der",SoftBreak,Str "Bsrger",Space,Str "beleidigt,",Space,Str "der",Space,Str "Heilige",LineBreak,Str "und",Space,Str "Seher",Space,Str "hrt",Space,Str "sie",Space,Str "mit",SoftBreak,Str "Trvnen.\""]]]]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "What",Space,Str "is",Space,Str "that",Space,Str "sound",Space,Str "high",Space,Str "in",Space,Str "the",Space,Str "air"]]+ ,Div ("",[],[])+ [Plain [Str "Murmur",Space,Str "of",Space,Str "maternal",Space,Str "lamentation"]]+ ,Div ("",[],[])+ [Plain [Str "Who",Space,Str "are",Space,Str "those",Space,Str "hooded",Space,Str "hordes",Space,Str "swarming"]]+ ,Div ("",[],[])+ [Plain [Str "Over",Space,Str "endless",Space,Str "plains,",Space,Str "stumbling",Space,Str "in",Space,Str "cracked",Space,Str "earth",Span ("",["lnum"],[]) [Str "370"]]]+ ,Div ("",[],[])+ [Plain [Str "Ringed",Space,Str "by",Space,Str "the",Space,Str "flat",Space,Str "horizon",Space,Str "only"]]+ ,Div ("",[],[])+ [Plain [Str "What",Space,Str "is",Space,Str "the",Space,Str "city",Space,Str "over",Space,Str "the",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "Cracks",Space,Str "and",Space,Str "reforms",Space,Str "and",Space,Str "bursts",Space,Str "in",Space,Str "the",Space,Str "violet",Space,Str "air"]]+ ,Div ("",[],[])+ [Plain [Str "Falling",Space,Str "towers"]]+ ,Div ("",[],[])+ [Plain [Str "Jerusalem",Space,Str "Athens",Space,Str "Alexandria"]]+ ,Div ("",[],[])+ [Plain [Str "Vienna",Space,Str "London"]]+ ,Div ("",[],[])+ [Plain [Str "Unreal"]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "A",Space,Str "woman",Space,Str "drew",Space,Str "her",Space,Str "long",Space,Str "black",Space,Str "hair",Space,Str "out",Space,Str "tight"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "fiddled",Space,Str "whisper",Space,Str "music",Space,Str "on",Space,Str "those",Space,Str "strings"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "bats",Space,Str "with",Space,Str "baby",Space,Str "faces",Space,Str "in",Space,Str "the",Space,Str "violet",Space,Str "light",Span ("",["lnum"],[]) [Str "380"]]]+ ,Div ("",[],[])+ [Plain [Str "Whistled,",Space,Str "and",Space,Str "beat",Space,Str "their",Space,Str "wings"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "crawled",Space,Str "head",Space,Str "downward",Space,Str "down",Space,Str "a",Space,Str "blackened",Space,Str "wall"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "upside",Space,Str "down",Space,Str "in",Space,Str "air",Space,Str "were",Space,Str "towers"]]+ ,Div ("",[],[])+ [Plain [Str "Tolling",Space,Str "reminiscent",Space,Str "bells,",Space,Str "that",Space,Str "kept",Space,Str "the",Space,Str "hours"]]+ ,Div ("",[],[])+ [Plain [Str "And",Space,Str "voices",Space,Str "singing",Space,Str "out",Space,Str "of",Space,Str "empty",Space,Str "cisterns",Space,Str "and",Space,Str "exhausted",SoftBreak,Str "wells."]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "In",Space,Str "this",Space,Str "decayed",Space,Str "hole",Space,Str "among",Space,Str "the",Space,Str "mountains"]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "the",Space,Str "faint",Space,Str "moonlight,",Space,Str "the",Space,Str "grass",Space,Str "is",Space,Str "singing"]]+ ,Div ("",[],[])+ [Plain [Str "Over",Space,Str "the",Space,Str "tumbled",Space,Str "graves,",Space,Str "about",Space,Str "the",Space,Str "chapel"]]+ ,Div ("",[],[])+ [Plain [Str "There",Space,Str "is",Space,Str "the",Space,Str "empty",Space,Str "chapel,",Space,Str "only",Space,Str "the",Space,Str "wind's",Space,Str "home."]]+ ,Div ("",[],[])+ [Plain [Str "It",Space,Str "has",Space,Str "no",Space,Str "windows,",Space,Str "and",Space,Str "the",Space,Str "door",Space,Str "swings,",Span ("",["lnum"],[]) [Str "390"]]]+ ,Div ("",[],[])+ [Plain [Str "Dry",Space,Str "bones",Space,Str "can",Space,Str "harm",Space,Str "no",Space,Str "one."]]+ ,Div ("",[],[])+ [Plain [Str "Only",Space,Str "a",Space,Str "cock",Space,Str "stood",Space,Str "on",Space,Str "the",Space,Str "rooftree"]]+ ,Div ("",[],[])+ [Plain [Str "Co",Space,Str "co",Space,Str "rico",Space,Str "co",Space,Str "co",Space,Str "rico"]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "a",Space,Str "flash",Space,Str "of",Space,Str "lightning.",Space,Str "Then",Space,Str "a",Space,Str "damp",Space,Str "gust"]]+ ,Div ("",[],[])+ [Plain [Str "Bringing",Space,Str "rain"]]]+ ,Div ("",["linegroup"],[])+ [Div ("",[],[])+ [Plain [Str "Ganga",Space,Str "was",Space,Str "sunken,",Space,Str "and",Space,Str "the",Space,Str "limp",Space,Str "leaves"]]+ ,Div ("",[],[])+ [Plain [Str "Waited",Space,Str "for",Space,Str "rain,",Space,Str "while",Space,Str "the",Space,Str "black",Space,Str "clouds"]]+ ,Div ("",[],[])+ [Plain [Str "Gathered",Space,Str "far",Space,Str "distant,",Space,Str "over",Space,Str "Himavant."]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "jungle",Space,Str "crouched,",Space,Str "humped",Space,Str "in",Space,Str "silence."]]+ ,Div ("",[],[])+ [Plain [Str "Then",Space,Str "spoke",Space,Str "the",Space,Str "thunder",Span ("",["lnum"],[]) [Str "400"]]]+ ,Div ("",[],[])+ [Plain [Str "DA"]]+ ,Div ("wasteland-content.xhtml#ln402",[],[])+ [Plain [Span ("",[],[("lang","sa")]) [Str "Datta"],Str ":",Space,Str "what",Space,Str "have",Space,Str "we",Space,Str "given?",Note [Para [Link ("",[],[]) [Str "402."] ("#wasteland-content.xhtml#ln402",""),Space,Quoted DoubleQuote [Str "\"Datta,",Space,Str "dayadhvam,",Space,Str "damyata\""],Space,Str "(Give,",Space,Str "sympathize,",SoftBreak,Str "control).",Space,Str "The",Space,Str "fable",Space,Str "of",Space,Str "the",Space,Str "meaning",Space,Str "of",Space,Str "the",Space,Str "Thunder",Space,Str "is",Space,Str "found",Space,Str "in",Space,Str "the",SoftBreak,Str "Brihadaranyaka-Upanishad,",Space,Str "5,",Space,Str "1.",Space,Str "A",Space,Str "translation",Space,Str "is",Space,Str "found",Space,Str "in",Space,Str "Deussen's",SoftBreak,Str "Sechzig",Space,Str "Upanishads",Space,Str "des",Space,Str "Veda,",Space,Str "p.",Space,Str "489."]]]]+ ,Div ("",[],[])+ [Plain [Str "My",Space,Str "friend,",Space,Str "blood",Space,Str "shaking",Space,Str "my",Space,Str "heart"]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "awful",Space,Str "daring",Space,Str "of",Space,Str "a",Space,Str "moment's",Space,Str "surrender"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "an",Space,Str "age",Space,Str "of",Space,Str "prudence",Space,Str "can",Space,Str "never",Space,Str "retract"]]+ ,Div ("",[],[])+ [Plain [Str "By",Space,Str "this,",Space,Str "and",Space,Str "this",Space,Str "only,",Space,Str "we",Space,Str "have",Space,Str "existed"]]+ ,Div ("",[],[])+ [Plain [Str "Which",Space,Str "is",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "found",Space,Str "in",Space,Str "our",Space,Str "obituaries"]]+ ,Div ("wasteland-content.xhtml#ln408",[],[])+ [Plain [Str "Or",Space,Str "in",Space,Str "memories",Space,Str "draped",Space,Str "by",Space,Str "the",Space,Str "beneficent",Space,Str "spider",Note [Para [Link ("",[],[]) [Str "408."] ("#wasteland-content.xhtml#ln408",""),Space,Str "Cf.",Space,Str "Webster,",Space,Str "The",Space,Str "White",Space,Str "Devil,",Space,Str "v.",Space,Str "vi:"],BlockQuote [Para [Str "\".",Space,Str ".",Space,Str ".",Space,Str "they'll",Space,Str "remarry",LineBreak,Str "Ere",Space,Str "the",Space,Str "worm",Space,Str "pierce",Space,Str "your",Space,Str "winding-sheet,",SoftBreak,Str "ere",Space,Str "the",Space,Str "spider",LineBreak,Str "Make",Space,Str "a",Space,Str "thin",Space,Str "curtain",Space,Str "for",Space,Str "your",Space,Str "epitaphs.\""]]]]]+ ,Div ("",[],[])+ [Plain [Str "Or",Space,Str "under",Space,Str "seals",Space,Str "broken",Space,Str "by",Space,Str "the",Space,Str "lean",Space,Str "solicitor"]]+ ,Div ("",[],[])+ [Plain [Str "In",Space,Str "our",Space,Str "empty",Space,Str "rooms",Span ("",["lnum"],[]) [Str "410"]]]+ ,Div ("",[],[])+ [Plain [Str "DA"]]+ ,Div ("wasteland-content.xhtml#ln412",[],[])+ [Plain [Span ("",[],[("lang","sa")]) [Str "Dayadhvam"],Str ":",Space,Str "I",Space,Str "have",Space,Str "heard",Space,Str "the",Space,Str "key",Note [Para [Link ("",[],[]) [Str "412."] ("#wasteland-content.xhtml#ln412",""),Space,Str "Cf.",Space,Str "Inferno,",Space,Str "xxxiii.",Space,Str "46:"],BlockQuote [Para [Str "\"ed",Space,Str "io",Space,Str "sentii",Space,Str "chiavar",Space,Str "l'uscio",Space,Str "di",Space,Str "sotto",LineBreak,Str "all'orribile",Space,Str "torre.\""]],Para [Str "Also",Space,Str "F.",Space,Str "H.",Space,Str "Bradley,",Space,Str "Appearance",Space,Str "and",Space,Str "Reality,",Space,Str "p.",Space,Str "346:"],BlockQuote [Para [Str "\"My",Space,Str "external",Space,Str "sensations",Space,Str "are",Space,Str "no",Space,Str "less",Space,Str "private",Space,Str "to",Space,Str "myself",Space,Str "than",Space,Str "are",Space,Str "my",SoftBreak,Str "thoughts",Space,Str "or",Space,Str "my",Space,Str "feelings.",Space,Str "In",Space,Str "either",Space,Str "case",Space,Str "my",Space,Str "experience",Space,Str "falls",Space,Str "within",SoftBreak,Str "my",Space,Str "own",Space,Str "circle,",Space,Str "a",Space,Str "circle",Space,Str "closed",Space,Str "on",Space,Str "the",Space,Str "outside;",Space,Str "and,",Space,Str "with",Space,Str "all",Space,Str "its",SoftBreak,Str "elements",Space,Str "alike,",Space,Str "every",Space,Str "sphere",Space,Str "is",Space,Str "opaque",Space,Str "to",Space,Str "the",Space,Str "others",Space,Str "which",Space,Str "surround",SoftBreak,Str "it.",Space,Str ".",Space,Str ".",Space,Str ".",Space,Str "In",Space,Str "brief,",Space,Str "regarded",Space,Str "as",Space,Str "an",Space,Str "existence",Space,Str "which",Space,Str "appears",Space,Str "in",Space,Str "a",SoftBreak,Str "soul,",Space,Str "the",Space,Str "whole",Space,Str "world",Space,Str "for",Space,Str "each",Space,Str "is",Space,Str "peculiar",Space,Str "and",Space,Str "private",Space,Str "to",Space,Str "that",SoftBreak,Str "soul.\""]]]]]+ ,Div ("",[],[])+ [Plain [Str "Turn",Space,Str "in",Space,Str "the",Space,Str "door",Space,Str "once",Space,Str "and",Space,Str "turn",Space,Str "once",Space,Str "only"]]+ ,Div ("",[],[])+ [Plain [Str "We",Space,Str "think",Space,Str "of",Space,Str "the",Space,Str "key,",Space,Str "each",Space,Str "in",Space,Str "his",Space,Str "prison"]]+ ,Div ("",[],[])+ [Plain [Str "Thinking",Space,Str "of",Space,Str "the",Space,Str "key,",Space,Str "each",Space,Str "confirms",Space,Str "a",Space,Str "prison"]]+ ,Div ("",[],[])+ [Plain [Str "Only",Space,Str "at",Space,Str "nightfall,",Space,Str "aetherial",Space,Str "rumours"]]+ ,Div ("",[],[])+ [Plain [Str "Revive",Space,Str "for",Space,Str "a",Space,Str "moment",Space,Str "a",Space,Str "broken",Space,Str "Coriolanus"]]+ ,Div ("",[],[])+ [Plain [Str "DA"]]+ ,Div ("",[],[])+ [Plain [Span ("",[],[("lang","sa")]) [Str "Damyata"],Str ":",Space,Str "The",Space,Str "boat",Space,Str "responded"]]+ ,Div ("",[],[])+ [Plain [Str "Gaily,",Space,Str "to",Space,Str "the",Space,Str "hand",Space,Str "expert",Space,Str "with",Space,Str "sail",Space,Str "and",Space,Str "oar",Span ("",["lnum"],[]) [Str "420"]]]+ ,Div ("",[],[])+ [Plain [Str "The",Space,Str "sea",Space,Str "was",Space,Str "calm,",Space,Str "your",Space,Str "heart",Space,Str "would",Space,Str "have",Space,Str "responded"]]+ ,Div ("",[],[])+ [Plain [Str "Gaily,",Space,Str "when",Space,Str "invited,",Space,Str "beating",Space,Str "obedient"]]+ ,Div ("",[],[])+ [Plain [Str "To",Space,Str "controlling",Space,Str "hands"]]]+ ,Div ("",["linegroup"],[])+ [Div ("",["indent"],[])+ [Plain [Str "I",Space,Str "sat",Space,Str "upon",Space,Str "the",Space,Str "shore"]]+ ,Div ("wasteland-content.xhtml#ln425",[],[])+ [Plain [Str "Fishing,",Space,Str "with",Space,Str "the",Space,Str "arid",Space,Str "plain",Space,Str "behind",Space,Str "me",Note [Para [Link ("",[],[]) [Str "425."] ("#wasteland-content.xhtml#ln425",""),Space,Str "V.",Space,Str "Weston,",Space,Str "From",Space,Str "Ritual",Space,Str "to",Space,Str "Romance;",Space,Str "chapter",Space,Str "on",Space,Str "the",Space,Str "Fisher",Space,Str "King."]]]]+ ,Div ("",[],[])+ [Plain [Str "Shall",Space,Str "I",Space,Str "at",Space,Str "least",Space,Str "set",Space,Str "my",Space,Str "lands",Space,Str "in",Space,Str "order?"]]+ ,Div ("",[],[])+ [Plain [Str "London",Space,Str "Bridge",Space,Str "is",Space,Str "falling",Space,Str "down",Space,Str "falling",Space,Str "down",Space,Str "falling",Space,Str "down"]]+ ,Div ("wasteland-content.xhtml#ln428",[],[("lang","it")])+ [Plain [Emph [Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina"],SoftBreak,Note [Para [Link ("",[],[]) [Str "428."] ("#wasteland-content.xhtml#ln428",""),Space,Str "V.",Space,Str "Purgatorio,",Space,Str "xxvi.",Space,Str "148."],BlockQuote [Para [Str "\"'Ara",Space,Str "vos",Space,Str "prec",Space,Str "per",Space,Str "aquella",Space,Str "valor",LineBreak,Str "'que",Space,Str "vos",Space,Str "guida",Space,Str "al",Space,Str "som",Space,Str "de",SoftBreak,Str "l'escalina,",LineBreak,Str "'sovegna",Space,Str "vos",Space,Str "a",Space,Str "temps",Space,Str "de",Space,Str "ma",Space,Str "dolor.'",LineBreak,Str "Poi",SoftBreak,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina.\""]]]]]+ ,Div ("wasteland-content.xhtml#ln429",[],[])+ [Plain [Span ("",[],[("lang","it")]) [SoftBreak,Emph [Str "Quando",Space,Str "fiam",Space,Str "ceu",Space,Str "chelidon"],SoftBreak],Space,Str "-",Space,Str "O",Space,Str "swallow",Space,Str "swallow",Note [Para [Link ("",[],[]) [Str "429."] ("#wasteland-content.xhtml#ln429",""),Space,Str "V.",Space,Str "Pervigilium",Space,Str "Veneris.",Space,Str "Cf.",Space,Str "Philomela",Space,Str "in",Space,Str "Parts",Space,Str "II",Space,Str "and",Space,Str "III."]]]]+ ,Div ("wasteland-content.xhtml#ln430",[],[("lang","fr")])+ [Plain [Emph [Str "Le",Space,Str "Prince",Space,Str "d'Aquitaine",Space,Str "a",Space,Str "la",Space,Str "tour",Space,Str "abolie"],SoftBreak,Note [Para [Link ("",[],[]) [Str "430."] ("#wasteland-content.xhtml#ln430",""),Space,Str "V.",Space,Str "Gerard",Space,Str "de",Space,Str "Nerval,",Space,Str "Sonnet",Space,Str "El",Space,Str "Desdichado."]],SoftBreak,Span ("",["lnum"],[]) [Str "430"]]]+ ,Div ("",[],[])+ [Plain [Str "These",Space,Str "fragments",Space,Str "I",Space,Str "have",Space,Str "shored",Space,Str "against",Space,Str "my",Space,Str "ruins"]]+ ,Div ("wasteland-content.xhtml#ln432",[],[])+ [Plain [Str "Why",Space,Str "then",Space,Str "Ile",Space,Str "fit",Space,Str "you.",Space,Str "Hieronymo's",Space,Str "mad",Space,Str "againe.",Note [Para [Link ("",[],[]) [Str "432."] ("#wasteland-content.xhtml#ln432",""),Space,Str "V.",Space,Str "Kyd's",Space,Str "Spanish",Space,Str "Tragedy."]]]]+ ,Div ("",[],[("lang","sa")])+ [Plain [Str "Datta.",Space,Str "Dayadhvam.",Space,Str "Damyata."]]+ ,Div ("wasteland-content.xhtml#ln434",["linegroup","indent"],[])+ [Plain [Span ("",[],[("lang","sa")]) [Str "Shantih",Space,Str "shantih",Space,Str "shantih",Note [Para [Link ("",[],[]) [Str "434."] ("#wasteland-content.xhtml#ln434",""),Space,Str "Shantih.",Space,Str "Repeated",Space,Str "as",Space,Str "here,",Space,Str "a",Space,Str "formal",Space,Str "ending",Space,Str "to",Space,Str "an",Space,Str "Upanishad.",Space,Str "'The",SoftBreak,Str "Peace",Space,Str "which",Space,Str "passeth",Space,Str "understanding'",Space,Str "is",Space,Str "a",Space,Str "feeble",Space,Str "translation",Space,Str "of",Space,Str "the",SoftBreak,Str "content",Space,Str "of",Space,Str "this",Space,Str "word."]],SoftBreak]]]]]]+,Div ("wasteland-content.xhtml#backmatter",["section"],[("type","backmatter")])+ [Div ("wasteland-content.xhtml#rearnotes",["section"],[("type","rearnotes")])+ [Header 2 ("",[],[]) [Str "NOTES",Space,Str "ON",Space,Str "\"THE",Space,Str "WASTE",Space,Str "LAND\""]+ ,Para [Str "Not",Space,Str "only",Space,Str "the",Space,Str "title,",Space,Str "but",Space,Str "the",Space,Str "plan",Space,Str "and",Space,Str "a",Space,Str "good",Space,Str "deal",Space,Str "of",Space,Str "the",Space,Str "incidental",Space,Str "symbolism",Space,Str "of",SoftBreak,Str "the",Space,Str "poem",Space,Str "were",Space,Str "suggested",Space,Str "by",Space,Str "Miss",Space,Str "Jessie",Space,Str "L.",Space,Str "Weston's",Space,Str "book",Space,Str "on",Space,Str "the",Space,Str "Grail",Space,Str "legend:",SoftBreak,Str "From",Space,Str "Ritual",Space,Str "to",Space,Str "Romance"]+ ,Para [Str "Indeed,",Space,Str "so",Space,Str "deeply",Space,Str "am",Space,Str "I",Space,Str "indebted,",Space,Str "Miss",Space,Str "Weston's",Space,Str "book",Space,Str "will",Space,Str "elucidate",Space,Str "the",SoftBreak,Str "difficulties",Space,Str "of",Space,Str "the",Space,Str "poem",Space,Str "much",Space,Str "better",Space,Str "than",Space,Str "my",Space,Str "notes",Space,Str "can",Space,Str "do;",Space,Str "and",Space,Str "I",Space,Str "recommend",Space,Str "it",SoftBreak,Str "(apart",Space,Str "from",Space,Str "the",Space,Str "great",Space,Str "interest",Space,Str "of",Space,Str "the",Space,Str "book",Space,Str "itself)",Space,Str "to",Space,Str "any",Space,Str "who",Space,Str "think",Space,Str "such",SoftBreak,Str "elucidation",Space,Str "of",Space,Str "the",Space,Str "poem",Space,Str "worth",Space,Str "the",Space,Str "trouble.",Space,Str "To",Space,Str "another",Space,Str "work",Space,Str "of",Space,Str "anthropology",Space,Str "I",Space,Str "am",SoftBreak,Str "indebted",Space,Str "in",Space,Str "general,",Space,Str "one",Space,Str "which",Space,Str "has",Space,Str "influenced",Space,Str "our",Space,Str "generation",Space,Str "profoundly;",Space,Str "I",Space,Str "mean",SoftBreak,Str "The",Space,Str "Golden",Space,Str "Bough;",Space,Str "I",Space,Str "have",Space,Str "used",Space,Str "especially",Space,Str "the",Space,Str "two",Space,Str "volumes",Space,Str "Adonis,",Space,Str "Attis,",Space,Str "Osiris.",SoftBreak,Str "Anyone",Space,Str "who",Space,Str "is",Space,Str "acquainted",Space,Str "with",Space,Str "these",Space,Str "works",Space,Str "will",Space,Str "immediately",Space,Str "recognise",Space,Str "in",Space,Str "the",Space,Str "poem",SoftBreak,Str "certain",Space,Str "references",Space,Str "to",Space,Str "vegetation",Space,Str "ceremonies."]+ ,Div ("",["section"],[])+ [Header 3 ("",[],[]) [Str "I.",Space,Str "THE",Space,Str "BURIAL",Space,Str "OF",Space,Str "THE",Space,Str "DEAD"]]+ ,Div ("",["section"],[])+ [Header 3 ("",[],[]) [Str "II.",Space,Str "A",Space,Str "GAME",Space,Str "OF",Space,Str "CHESS"]]+ ,Div ("",["section"],[])+ [Header 3 ("",[],[]) [Str "III.",Space,Str "THE",Space,Str "FIRE",Space,Str "SERMON"]]+ ,Div ("",["section"],[])+ [Header 3 ("",[],[]) [Str "V.",Space,Str "WHAT",Space,Str "THE",Space,Str "THUNDER",Space,Str "SAID"]+ ,Para [Str "In",Space,Str "the",Space,Str "first",Space,Str "part",Space,Str "of",Space,Str "Part",Space,Str "V",Space,Str "three",Space,Str "themes",Space,Str "are",Space,Str "employed:",Space,Str "the",Space,Str "journey",Space,Str "to",Space,Str "Emmaus,",SoftBreak,Str "the",Space,Str "approach",Space,Str "to",Space,Str "the",Space,Str "Chapel",Space,Str "Perilous",Space,Str "(see",Space,Str "Miss",Space,Str "Weston's",Space,Str "book)",Space,Str "and",Space,Str "the",Space,Str "present",SoftBreak,Str "decay",Space,Str "of",Space,Str "eastern",Space,Str "Europe."]]]]]
test/fb2/basic.fb2 view
@@ -55,9 +55,7 @@ <empty-line /> <p> <strikethrough>Strikeout</strikethrough> is Pandoc’s extension.-Superscript and subscripts too: H<sub>2</sub>O is a liquid<a l:href="#n1" type="note">-<sup>[1]</sup>-</a>.+Superscript and subscripts too: H<sub>2</sub>O is a liquid<a l:href="#n1" type="note">[1]</a>. 2<sup>10</sup> is 1024.</p> <p>Math is another Pandoc extension: <code>E = m c^2</code>.</p> </section>
+ test/fb2/reader/notes.fb2 view
@@ -0,0 +1,19 @@+<?xml version="1.0" encoding="UTF-8"?>+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">+ <body>+ <section>+ <p>Note <a l:href="#n1" type="note">1</a>.</p>+ <p>Second note <a l:href="#n2" type="note">2</a>.</p>+ </section>+ </body>+ <body name="notes">+ <section id="n1">+ <title><p>1</p></title>+ <p>Note contents</p>+ </section>+ <section id="n2">+ <title><p>2</p></title>+ <p>Second note contents.</p>+ </section>+ </body>+</FictionBook>
+ test/fb2/reader/notes.native view
@@ -0,0 +1,4 @@+Pandoc (Meta {unMeta = fromList []})+[Div ("",["section"],[])+ [Para [Str "Note",Space,Note [Para [Str "Note",Space,Str "contents"]],Str "."]+ ,Para [Str "Second",Space,Str "note",Space,Note [Para [Str "Second",Space,Str "note",Space,Str "contents."]],Str "."]]]
test/html-reader.native view
@@ -415,7 +415,7 @@ ,[Plain [Str "5"]] ,[Plain [Str "6"]]]] ,HorizontalRule-,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.3333333333333333,0.3333333333333333,0.3333333333333333]+,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0] [[Plain [Str "X"]] ,[Plain [Str "Y"]] ,[Plain [Str "Z"]]]
test/lhs-test.html view
@@ -12,9 +12,9 @@ div.column{display: inline-block; vertical-align: top; width: 50%;} </style> <style>-a.sourceLine { display: inline-block; line-height: 1.25; }-a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }-a.sourceLine:empty { height: 1.2em; }+code.sourceCode > span { display: inline-block; line-height: 1.25; }+code.sourceCode > span { color: inherit; text-decoration: inherit; }+code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode { white-space: pre; position: relative; } div.sourceCode { margin: 1em 0; }@@ -24,14 +24,16 @@ } @media print { code.sourceCode { white-space: pre-wrap; }-a.sourceLine { text-indent: -1em; padding-left: 1em; }+code.sourceCode > span { text-indent: -5em; padding-left: 5em; } }-pre.numberSource a.sourceLine- { position: relative; left: -4em; }-pre.numberSource a.sourceLine::before- { content: attr(title);+pre.numberSource code+ { counter-reset: source-line 0; }+pre.numberSource code > span+ { position: relative; left: -4em; counter-increment: source-line; }+pre.numberSource code > span > a:first-child::before+ { content: counter(source-line); position: relative; left: -1em; text-align: right; vertical-align: baseline;- border: none; pointer-events: all; display: inline-block;+ border: none; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;@@ -40,9 +42,9 @@ } pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } div.sourceCode- { }+ { } @media screen {-a.sourceLine::before { text-decoration: underline; }+code.sourceCode > span > a:first-child::before { text-decoration: underline; } } code span.al { color: #ff0000; font-weight: bold; } /* Alert */ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */@@ -82,9 +84,9 @@ <h1 id="lhs-test">lhs test</h1> <p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>-<div class="sourceCode" id="cb1"><pre class="sourceCode haskell literate"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" title="1"><span class="ot">unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=></span> (b <span class="ot">-></span> c <span class="ot">-></span> d) <span class="ot">-></span> a (b, c) d</a>-<a class="sourceLine" id="cb1-2" title="2">unsplit <span class="ot">=</span> arr <span class="op">.</span> <span class="fu">uncurry</span></a>-<a class="sourceLine" id="cb1-3" title="3"> <span class="co">-- arr (\op (x,y) -> x `op` y)</span></a></code></pre></div>+<div class="sourceCode" id="cb1"><pre class="sourceCode haskell literate"><code class="sourceCode haskell"><span id="cb1-1"><a href="#cb1-1"></a><span class="ot">unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=></span> (b <span class="ot">-></span> c <span class="ot">-></span> d) <span class="ot">-></span> a (b, c) d</span>+<span id="cb1-2"><a href="#cb1-2"></a>unsplit <span class="ot">=</span> arr <span class="op">.</span> <span class="fu">uncurry</span></span>+<span id="cb1-3"><a href="#cb1-3"></a> <span class="co">-- arr (\op (x,y) -> x `op` y)</span></span></code></pre></div> <p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>
test/lhs-test.html+lhs view
@@ -12,9 +12,9 @@ div.column{display: inline-block; vertical-align: top; width: 50%;} </style> <style>-a.sourceLine { display: inline-block; line-height: 1.25; }-a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }-a.sourceLine:empty { height: 1.2em; }+code.sourceCode > span { display: inline-block; line-height: 1.25; }+code.sourceCode > span { color: inherit; text-decoration: inherit; }+code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode { white-space: pre; position: relative; } div.sourceCode { margin: 1em 0; }@@ -24,14 +24,16 @@ } @media print { code.sourceCode { white-space: pre-wrap; }-a.sourceLine { text-indent: -1em; padding-left: 1em; }+code.sourceCode > span { text-indent: -5em; padding-left: 5em; } }-pre.numberSource a.sourceLine- { position: relative; left: -4em; }-pre.numberSource a.sourceLine::before- { content: attr(title);+pre.numberSource code+ { counter-reset: source-line 0; }+pre.numberSource code > span+ { position: relative; left: -4em; counter-increment: source-line; }+pre.numberSource code > span > a:first-child::before+ { content: counter(source-line); position: relative; left: -1em; text-align: right; vertical-align: baseline;- border: none; pointer-events: all; display: inline-block;+ border: none; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;@@ -40,9 +42,9 @@ } pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } div.sourceCode- { }+ { } @media screen {-a.sourceLine::before { text-decoration: underline; }+code.sourceCode > span > a:first-child::before { text-decoration: underline; } } code span.al { color: #ff0000; font-weight: bold; } /* Alert */ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */@@ -82,9 +84,9 @@ <h1 id="lhs-test">lhs test</h1> <p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>-<div class="sourceCode" id="cb1"><pre class="sourceCode literatehaskell literate"><code class="sourceCode literatehaskell"><a class="sourceLine" id="cb1-1" title="1"><span class="ot">> unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=></span> (b <span class="ot">-></span> c <span class="ot">-></span> d) <span class="ot">-></span> a (b, c) d</a>-<a class="sourceLine" id="cb1-2" title="2"><span class="ot">></span> unsplit <span class="ot">=</span> arr <span class="op">.</span> <span class="fu">uncurry</span></a>-<a class="sourceLine" id="cb1-3" title="3"><span class="ot">></span> <span class="co">-- arr (\op (x,y) -> x `op` y)</span></a></code></pre></div>+<div class="sourceCode" id="cb1"><pre class="sourceCode literatehaskell literate"><code class="sourceCode literatehaskell"><span id="cb1-1"><a href="#cb1-1"></a><span class="ot">> unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=></span> (b <span class="ot">-></span> c <span class="ot">-></span> d) <span class="ot">-></span> a (b, c) d</span>+<span id="cb1-2"><a href="#cb1-2"></a><span class="ot">></span> unsplit <span class="ot">=</span> arr <span class="op">.</span> <span class="fu">uncurry</span></span>+<span id="cb1-3"><a href="#cb1-3"></a><span class="ot">></span> <span class="co">-- arr (\op (x,y) -> x `op` y)</span></span></code></pre></div> <p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>
+ test/lua/module/pandoc-mediabag.lua view
@@ -0,0 +1,72 @@+local tasty = require 'tasty'++local test = tasty.test_case+local group = tasty.test_group+local assert = tasty.assert++local mediabag = require 'pandoc.mediabag'++return {+ group 'insert' {+ test('insert adds an item to the mediabag', function ()+ local fp = "media/hello.txt"+ local mt = "text/plain"+ local contents = "Hello, World!"+ assert.are_same(mediabag.list(), {})+ mediabag.insert(fp, mt, contents)+ assert.are_same(+ mediabag.list(),+ {{['path'] = fp, ['type'] = mt, ['length'] = 13}}+ )+ mediabag.empty() -- clean up+ end),+ test('is idempotent', function ()+ local fp = "media/hello.txt"+ local mt = "text/plain"+ local contents = "Hello, World!"+ mediabag.insert(fp, mt, contents)+ mediabag.insert(fp, mt, contents)+ assert.are_same(+ mediabag.list(),+ {{['path'] = fp, ['type'] = mt, ['length'] = 13}}+ )+ mediabag.empty() -- clean up+ end),+ },++ group 'delete' {+ test('removes an item', function ()+ assert.are_same(mediabag.list(), {})+ mediabag.insert('test.html', 'text/html', '<aside>Who cares?</aside>')+ mediabag.insert('test.css', 'text/plain', 'aside { color: red; }')+ assert.are_equal(#mediabag.list(), 2)+ mediabag.delete('test.html')+ assert.are_same(+ mediabag.list(),+ {{['path'] = 'test.css', ['type'] = 'text/plain', ['length'] = 21}}+ )+ mediabag.empty() -- clean up+ end),+ },++ group 'items' {+ test('iterates over all items', function ()+ local input_items = {+ ['test.html'] = {'text/html', '<aside>Really?</aside>'},+ ['test.css'] = {'text/plain', 'aside { color: red; }'},+ ['test.js'] = {'application/javascript', 'alert("HI MOM!")'}+ }+ -- fill mediabag+ for name, v in pairs(input_items) do+ mediabag.insert(name, v[1], v[2])+ end++ local seen_items = {}+ for fp, mt, c in mediabag.items() do+ seen_items[fp] = {mt, c}+ end+ assert.are_same(seen_items, input_items)+ mediabag.empty() -- clean up+ end)+ }+}
+ test/lua/module/pandoc-types.lua view
@@ -0,0 +1,112 @@+local tasty = require 'tasty'+local types = require 'pandoc.types'+local Version = types.Version++local assert = tasty.assert+local test = tasty.test_case+local group = tasty.test_group++return {+ group 'Version' {++ group 'constructor' {+ test('has type `userdata`', function ()+ assert.are_same(type(Version {2}), 'userdata')+ end),+ test('accepts list of integers', function ()+ assert.are_same(type(Version {2, 7, 3}), 'userdata')+ end),+ test('accepts a single integer', function ()+ assert.are_same(Version(5), Version {5})+ end),+ test('accepts version as string', function ()+ assert.are_same(+ Version '4.45.1',+ Version {4, 45, 1}+ )+ end),+ test('non-version string is rejected', function ()+ assert.error_matches(+ function () Version '11friends' end,+ '11friends'+ )+ end)+ },++ group 'comparison' {+ test('smaller (equal) than', function ()+ assert.is_truthy(Version {2, 58, 3} < Version {2, 58, 4})+ assert.is_falsy(Version {2, 60, 1} < Version {2, 59, 2})+ assert.is_truthy(Version {0, 14, 3} < Version {0, 14, 3, 1})+ assert.is_truthy(Version {3, 58, 3} <= Version {4})+ assert.is_truthy(Version {0, 14, 3} <= Version {0, 14, 3, 1})+ end),+ test('larger (equal) than', function ()+ assert.is_truthy(Version{2,58,3} > Version {2, 57, 4})+ assert.is_truthy(Version{2,58,3} > Version {2, 58, 2})+ assert.is_truthy(Version {0, 8} >= Version {0, 8})+ assert.is_falsy(Version {0, 8} >= Version {0, 8, 2})+ end),+ test('equality', function ()+ assert.is_truthy(Version '8.8', Version {8, 8})+ end),+ test('second argument can be a version string', function ()+ assert.is_truthy(Version '8' < '9.1')+ assert.is_falsy(Version '8.8' < '8.7')+ end),+ },++ group 'list-like behavior' {+ test('can access version component numbers', function ()+ local version = Version '2.7.3'+ assert.is_nil(version[0])+ assert.are_equal(version[1], 2)+ assert.are_equal(version[2], 7)+ assert.are_equal(version[3], 3)+ end),+ test('can be iterated over', function ()+ local version_list = {2, 7, 3}+ local final_index = 0+ for i, v in pairs(Version(version_list)) do+ assert.are_equal(v, version_list[i])+ final_index = i+ end+ assert.are_equal(final_index, 3)+ end),+ test('length is the number of components', function ()+ assert.are_equal(#(Version '0'), 1)+ assert.are_equal(#(Version '1.6'), 2)+ assert.are_equal(#(Version '8.7.5'), 3)+ assert.are_equal(#(Version '2.9.1.5'), 4)+ end)+ },++ group 'conversion to string' {+ test('converting from and to string is a noop', function ()+ local version_string = '1.19.4'+ assert.are_equal(tostring(Version(version_string)), version_string)+ end)+ },++ group 'convenience functions' {+ test('throws error if version is too old', function ()+ local actual = Version {2, 8}+ local expected = Version {2, 9}+ assert.error_matches(+ function () actual:must_be_at_least(expected) end,+ 'expected version 2.9 or newer, got 2.8'+ )+ end),+ test('does nothing if expected version is older than actual', function ()+ local actual = Version '2.9'+ local expected = Version '2.8'+ actual:must_be_at_least(expected)+ end),+ test('does nothing if expected version equals to actual', function ()+ local actual = Version '2.8'+ local expected = Version '2.8'+ actual:must_be_at_least(expected)+ end)+ }+ }+}
+ test/lua/module/pandoc-utils.lua view
@@ -0,0 +1,96 @@+local tasty = require 'tasty'+local utils = require 'pandoc.utils'++local assert = tasty.assert+local test = tasty.test_case+local group = tasty.test_group++return {+ group 'blocks_to_inlines' {+ test('default separator', function ()+ local blocks = {+ pandoc.Para { pandoc.Str 'Paragraph1' },+ pandoc.Para { pandoc.Emph { pandoc.Str 'Paragraph2' } }+ }+ local expected = {+ pandoc.Str 'Paragraph1',+ pandoc.Space(), pandoc.Str '¶', pandoc.Space(),+ pandoc.Emph { pandoc.Str 'Paragraph2' }+ }+ assert.are_same(+ expected,+ utils.blocks_to_inlines(blocks)+ )+ end),+ test('custom separator', function ()+ local blocks = {+ pandoc.Para{ pandoc.Str 'Paragraph1' },+ pandoc.Para{ pandoc.Emph 'Paragraph2' }+ }+ local expected = {+ pandoc.Str 'Paragraph1',+ pandoc.LineBreak(),+ pandoc.Emph { pandoc.Str 'Paragraph2' }+ }+ assert.are_same(+ expected,+ utils.blocks_to_inlines(blocks, { pandoc.LineBreak() })+ )+ end)+ },++ group 'hierarchicalize' {+ test('sanity check', function ()+ local blks = {+ pandoc.Header(1, {pandoc.Str 'First'}),+ pandoc.Header(2, {pandoc.Str 'Second'}),+ pandoc.Header(2, {pandoc.Str 'Third'}),+ }+ local hblks = utils.hierarchicalize(blks)+ -- cannot create Elements directly; performing only an approximate+ -- sanity checking instead of a full equality comparison.+ assert.are_equal('Sec', hblks[1].t)+ assert.are_equal('Sec', hblks[1].contents[1].t)+ assert.are_equal(1, hblks[1].contents[2].numbering[1])+ assert.are_equal(2, hblks[1].contents[2].numbering[2])+ end)+ },++ group 'normalize_date' {+ test('09 Nov 1989', function ()+ assert.are_equal('1989-11-09', utils.normalize_date '09 Nov 1989')+ end),+ test('12/31/2017', function ()+ assert.are_equal('2017-12-31', utils.normalize_date '12/31/2017')+ end),+ },++ group 'sha1' {+ test('hashing', function ()+ local ref_hash = '0a0a9f2a6772942557ab5355d76af442f8f65e01'+ assert.are_equal(ref_hash, utils.sha1 'Hello, World!')+ end)+ },++ group 'stringify' {+ test('inlines', function ()+ local inline = pandoc.Emph{+ pandoc.Str 'Cogito',+ pandoc.Space(),+ pandoc.Str 'ergo',+ pandoc.Space(),+ pandoc.Str 'sum.',+ }+ assert.are_equal('Cogito ergo sum.', utils.stringify(inline))+ end)+ },++ group 'to_roman_numeral' {+ test('convertes number', function ()+ assert.are_equal('MDCCCLXXXVIII', utils.to_roman_numeral(1888))+ end),+ test('fails on non-convertible argument', function ()+ assert.is_falsy(pcall(utils.to_roman_numeral, 'not a number'))+ end)+ },+}
+ test/lua/module/pandoc.lua view
@@ -0,0 +1,136 @@+local tasty = require 'tasty'++local test = tasty.test_case+local group = tasty.test_group+local assert = tasty.assert++function os_is_windows ()+ return package.config:sub(1,1) == '\\'+end++return {+ group 'Attr' {+ group 'Constructor' {+ test('returns null-Attr if no arguments are given', function ()+ local attr = pandoc.Attr()+ assert.are_equal(attr.identifier, '')+ assert.are_same(attr.classes, {})+ assert.are_same(attr.attributes, {})+ end),+ test(+ 'accepts string-indexed table or list of pairs as attributes',+ function ()+ local attributes_list = pandoc.List:new {{'one', '1'}, {'two', '2'}}+ local attr_from_list = pandoc.Attr('', {}, attributes_list:clone())++ assert.are_same(+ pandoc.List:new(attr_from_list.attributes),+ attributes_list+ )++ local attributes_table = {one = '1', two = '2'}+ local attr_from_table = pandoc.Attr('', {}, attributes_table)++ local assoc_list_from_table =+ pandoc.List:new(attr_from_table.attributes)+ -- won't work in general, but does in this special case+ table.sort(assoc_list_from_table, function(x, y) return x[1]<y[1] end)+ assert.are_same(+ assoc_list_from_table,+ attributes_list+ )+ end+ )+ },+ group 'AttributeList' {+ test('allows access via fields', function ()+ local attributes = pandoc.Attr('', {}, {{'a', '1'}, {'b', '2'}}).attributes+ assert.are_equal(attributes.a, '1')+ assert.are_equal(attributes.b, '2')+ end),+ test('allows access to pairs via numerical indexing', function ()+ local attributes = pandoc.Attr('', {}, {{'a', '1'}, {'b', '2'}}).attributes+ assert.are_same(attributes[1], {'a', '1'})+ assert.are_same(attributes[2], {'b', '2'})+ end),+ test('adds entries by field name', function ()+ local attributes = pandoc.Attr('',{}, {{'c', '1'}, {'d', '2'}}).attributes+ attributes.e = '3'+ assert.are_same(+ -- checking the full AttributeList would "duplicate" entries+ setmetatable(attributes, nil),+ {{'c', '1'}, {'d', '2'}, {'e', '3'}}+ )+ end),+ test('deletes entries by field name', function ()+ local attributes = pandoc.Attr('',{}, {a = '1', b = '2'}).attributes+ attributes.a = nil+ assert.is_nil(attributes.a)+ local assoc_list = setmetatable(attributes, nil)+ assert.are_same(assoc_list, {{'b', '2'}})+ end),+ test('remains unchanged if deleted key did not exist', function ()+ local assoc_list = pandoc.List:new {{'alpha', 'x'}, {'beta', 'y'}}+ local attributes = pandoc.Attr('', {}, assoc_list:clone()).attributes+ attributes.a = nil+ assert.are_same(pandoc.List:new(attributes), assoc_list)+ end),+ test('gives key-value pairs when iterated-over', function ()+ local attributes = {width = '11', height = '22', name = 'test'}+ local attr = pandoc.Attr('', {}, attributes)+ local count = 0+ for k, v in pairs(attr.attributes) do+ assert.are_equal(attributes[k], v)+ count = count + 1+ end+ assert.are_equal(count, 3)+ end)+ },+ },+ group 'pipe' {+ test('external string processing', function ()+ if os_is_windows() then+ local pipe_result = pandoc.pipe('find', {'hi'}, 'hi')+ assert.are_equal('hi', pipe_result:match '%a+')+ else+ local pipe_result = pandoc.pipe('tr', {'a', 'b'}, 'abc')+ assert.are_equal('bbc', pipe_result:match '%a+')+ end+ end),+ test('failing pipe', function ()+ if os_is_windows() then+ local success, err = pcall(pandoc.pipe, 'find', {'/a'}, 'hi')+ assert.is_falsy(success)+ assert.are_equal('find', err.command)+ assert.is_truthy(err.error_code ~= 0)+ else+ local success, err = pcall(pandoc.pipe, 'false', {}, 'abc')+ assert.is_falsy(success)+ assert.are_equal('false', err.command)+ assert.are_equal(1, err.error_code)+ assert.are_equal('', err.output)+ end+ end)+ },++ group 'read' {+ test('Markdown', function ()+ local valid_markdown = '*Hello*, World!\n'+ local expected = pandoc.Pandoc({+ pandoc.Para {+ pandoc.Emph { pandoc.Str 'Hello' },+ pandoc.Str ',',+ pandoc.Space(),+ pandoc.Str 'World!'+ }+ })+ assert.are_same(expected, pandoc.read(valid_markdown))+ end),+ test('failing read', function ()+ assert.error_matches(+ function () pandoc.read('foo', 'nosuchreader') end,+ 'Unknown reader: nosuchreader'+ )+ end)+ },+}
− test/lua/test-pandoc-utils.lua
@@ -1,138 +0,0 @@-utils = require 'pandoc.utils'---- Squash blocks to inlines--------------------------------------------------------------------------function test_blocks_to_inlines ()- local blocks = {- pandoc.Para{ pandoc.Str 'Paragraph1' },- pandoc.Para{ pandoc.Emph 'Paragraph2' }- }- local inlines = utils.blocks_to_inlines(blocks, {pandoc.LineBreak()})- return #inlines == 3- and inlines[1].text == "Paragraph1"- and inlines[2].t == 'LineBreak'- and inlines[3].content[1].text == "Paragraph2"-end---- hierarchicalize--------------------------------------------------------------------------function test_hierarchicalize ()- local blks = {- pandoc.Header(1, {pandoc.Str 'First'}),- pandoc.Header(2, {pandoc.Str 'Second'}),- pandoc.Header(2, {pandoc.Str 'Third'}),- }- local hblks = utils.hierarchicalize(blks)- return hblks[1].t == "Sec"- and hblks[1].contents[1].t == "Sec"- and hblks[1].contents[2].numbering[1] == 1- and hblks[1].contents[2].numbering[2] == 2-end---- SHA1--------------------------------------------------------------------------function test_sha1 ()- local ref_hash = '0a0a9f2a6772942557ab5355d76af442f8f65e01'- local hash = utils.sha1 'Hello, World!'- return hash == ref_hash-end---- Pipe--------------------------------------------------------------------------function file_exists (filename)- local fh = io.open(filename, 'r')- return fh ~= nil and (fh:close() or true)-end--function warn (...) io.stderr:write(...) end--function os_is_windows ()- return package.config:sub(1,1) == '\\'-end--function test_pipe ()- if os_is_windows() then- local pipe_result = pandoc.pipe('find', {'hi'}, 'hi')- return pipe_result:match("%a+") == 'hi'- else- local pipe_result = pandoc.pipe('tr', {'a', 'b'}, 'abc')- return pipe_result:match("%a+") == 'bbc'- end-end--function test_failing_pipe ()- if os_is_windows() then- local res, err = pcall(pandoc.pipe, 'find', {'/a'}, 'hi')- return not res and- err.command == 'find' and- err.error_code ~= 0- else- local res, err = pcall(pandoc.pipe, 'false', {}, 'abc')- return not res and- err.command == 'false' and- err.error_code == 1 and- err.output == ''- end-end---- Read--------------------------------------------------------------------------function test_read ()- local valid_markdown = '*Hello*, World!\n'- local res = pandoc.read(valid_markdown).blocks[1].content- return res[1].t == 'Emph' and res[3].t == 'Space' and res[4].t == 'Str'-end--function test_failing_read ()- local res, err = pcall(pandoc.read, 'foo', 'nosuchreader')- return not res and err:match 'Unknown reader: nosuchreader'-end---- Stringify--------------------------------------------------------------------------function test_stringify ()- local inline = pandoc.Emph{- pandoc.Str 'Cogito',- pandoc.Space(),- pandoc.Str 'ergo',- pandoc.Space(),- pandoc.Str 'sum.',- }- return utils.stringify(inline) == 'Cogito ergo sum.'-end---- to_roman_numeral--------------------------------------------------------------------------function test_to_roman_numeral ()- return utils.to_roman_numeral(1888) == 'MDCCCLXXXVIII'- -- calling with a string fails- and not pcall(utils.to_roman_numeral, 'not a number')-end---- normalize_date--------------------------------------------------------------------------function test_normalize_date ()- return utils.normalize_date("12/31/2017") == '2017-12-31'- and utils.normalize_date("pandoc") == nil-end---- Return result--------------------------------------------------------------------------function run(fn)- return fn() and "OK" or "FAIL"-end--function Para (el)- return {- pandoc.Plain{pandoc.Str("blocks_to_inlines: " .. run(test_blocks_to_inlines))},- pandoc.Plain{pandoc.Str("hierarchicalize: " .. run(test_hierarchicalize))},- pandoc.Plain{pandoc.Str("normalize_date: " .. run(test_normalize_date))},- pandoc.Plain{pandoc.Str("pipe: " .. run(test_pipe))},- pandoc.Plain{pandoc.Str("failing pipe: " .. run(test_failing_pipe))},- pandoc.Plain{pandoc.Str("read: " .. run(test_read))},- pandoc.Plain{pandoc.Str("failing read: " .. run(test_failing_read))},- pandoc.Plain{pandoc.Str("sha1: " .. run(test_sha1))},- pandoc.Plain{pandoc.Str("stringify: " .. run(test_stringify))},- pandoc.Plain{pandoc.Str("to_roman_numeral: " .. run(test_to_roman_numeral))},- }-end
+ test/tables.jira view
@@ -0,0 +1,44 @@+Simple table with caption:++||Right||Left||Center||Default||+|12|12|12|12|+|123|123|123|123|+|1|1|1|1|++Simple table without caption:++||Right||Left||Center||Default||+|12|12|12|12|+|123|123|123|123|+|1|1|1|1|++Simple table indented two spaces:++||Right||Left||Center||Default||+|12|12|12|12|+|123|123|123|123|+|1|1|1|1|++Multiline table with caption:++||Centered Header||Left Aligned||Right Aligned||Default aligned||+|First|row|12.0|Example of a row that spans multiple lines.|+|Second|row|5.0|Here's another one. Note the blank line between rows.|++Multiline table without caption:++||Centered Header||Left Aligned||Right Aligned||Default aligned||+|First|row|12.0|Example of a row that spans multiple lines.|+|Second|row|5.0|Here's another one. Note the blank line between rows.|++Table without column headers:++|12|12|12|12|+|123|123|123|123|+|1|1|1|1|++Multiline table without column headers:++|First|row|12.0|Example of a row that spans multiple lines.|+|Second|row|5.0|Here's another one. Note the blank line between rows.|+
test/tables.opendocument view
@@ -63,8 +63,8 @@ </table:table-cell> </table:table-row> </table:table>-<text:p text:style-name="Table">Table <text:sequence text:ref-name="refTable0" text:name="Table" text:formula="ooow:Table+1" style:num-format="1">1</text:sequence>: Demonstration-of simple table syntax.</text:p>+<text:p text:style-name="TableCaption">Demonstration of simple table+syntax.</text:p> <text:p text:style-name="First_20_paragraph">Simple table without caption:</text:p> <table:table table:name="Table2" table:style-name="Table2">@@ -197,8 +197,8 @@ </table:table-cell> </table:table-row> </table:table>-<text:p text:style-name="Table">Table <text:sequence text:ref-name="refTable1" text:name="Table" text:formula="ooow:Table+1" style:num-format="1">2</text:sequence>: Demonstration-of simple table syntax.</text:p>+<text:p text:style-name="TableCaption">Demonstration of simple table+syntax.</text:p> <text:p text:style-name="First_20_paragraph">Multiline table with caption:</text:p> <table:table table:name="Table4" table:style-name="Table4">@@ -253,8 +253,8 @@ </table:table-cell> </table:table-row> </table:table>-<text:p text:style-name="Table">Table <text:sequence text:ref-name="refTable2" text:name="Table" text:formula="ooow:Table+1" style:num-format="1">3</text:sequence>: Here’s-the caption. It may span multiple lines.</text:p>+<text:p text:style-name="TableCaption">Here’s the caption. It may span+multiple lines.</text:p> <text:p text:style-name="First_20_paragraph">Multiline table without caption:</text:p> <table:table table:name="Table5" table:style-name="Table5">
+ test/tables.xwiki view
@@ -0,0 +1,46 @@+Simple table with caption:++|=Right |=Left |=Center |=Default+|12 |12 |12 |12+|123 |123 |123 |123+|1 |1 |1 |1++Simple table without caption:++|=Right |=Left |=Center |=Default+|12 |12 |12 |12+|123 |123 |123 |123+|1 |1 |1 |1++Simple table indented two spaces:++|=Right |=Left |=Center |=Default+|12 |12 |12 |12+|123 |123 |123 |123+|1 |1 |1 |1++Multiline table with caption:++|=Centered Header |=Left Aligned |=Right Aligned |=Default aligned+|First |row |12.0 |Example of a row that spans multiple lines.+|Second |row |5.0 |Here’s another one. Note the blank line between rows.++Multiline table without caption:++|=Centered Header |=Left Aligned |=Right Aligned |=Default aligned+|First |row |12.0 |Example of a row that spans multiple lines.+|Second |row |5.0 |Here’s another one. Note the blank line between rows.++Table without column headers:++|= |= |= |=+|12 |12 |12 |12+|123 |123 |123 |123+|1 |1 |1 |1++Multiline table without column headers:++|= |= |= |=+|First |row |12.0 |Example of a row that spans multiple lines.+|Second |row |5.0 |Here’s another one. Note the blank line between rows.+
test/test-pandoc.hs view
@@ -8,6 +8,7 @@ import Test.Tasty import qualified Tests.Command import qualified Tests.Lua+import qualified Tests.Lua.Module import qualified Tests.Old import qualified Tests.Readers.Creole import qualified Tests.Readers.Docx@@ -84,7 +85,10 @@ , testGroup "FB2" Tests.Readers.FB2.tests , testGroup "DokuWiki" Tests.Readers.DokuWiki.tests ]- , testGroup "Lua filters" Tests.Lua.tests+ , testGroup "Lua"+ [ testGroup "Lua filters" Tests.Lua.tests+ , testGroup "Lua modules" Tests.Lua.Module.tests+ ] ] main :: IO ()
test/writer.asciidoc view
@@ -423,7 +423,7 @@ So is *_this_* word. -This is code: `>`, `$`, `\`, `\$`, `<html>`.+This is code: `+>+`, `+$+`, `+\+`, `+\$+`, `+<html>+`. [line-through]*This is _strikeout_.* @@ -446,7 +446,7 @@ `He said, ``I want to go.''' Were you alive in the 70’s? -Here is some quoted ``code`' and a ``http://example.com/?foo=1&bar=2[quoted+Here is some quoted ``+code+`' and a ``http://example.com/?foo=1&bar=2[quoted link]''. Some dashes: one—two — three—four — five.@@ -476,11 +476,11 @@ These shouldn’t be math: -* To get the famous equation, write `$e = mc^2$`.+* To get the famous equation, write `+$e = mc^2$+`. * $22,000 is a _lot_ of money. So is $34,000. (It worked if ``lot'' is emphasized.) * Shoes ($20) and socks ($5).-* Escaped `$`: $73 _this should be emphasized_ 23$.+* Escaped `+$+`: $73 _this should be emphasized_ 23$. Here’s a LaTeX table: @@ -610,7 +610,7 @@ Blockquoted: http://example.com/ ____ -Auto-links should not occur here: `<http://example.com/>`+Auto-links should not occur here: `+<http://example.com/>+` .... or here: <http://example.com/>@@ -635,7 +635,7 @@ document.] and another.[multiblock footnote omitted] This should _not_ be a footnote reference, because it contains a space.[^my note] Here is an inline note.footnote:[This is _easier_ to type. Inline notes may contain-http://google.com[links] and `]` verbatim characters, as well as [bracketed+http://google.com[links] and `+]+` verbatim characters, as well as [bracketed text].] ____
test/writer.fb2 view
@@ -696,25 +696,15 @@ <title> <p>Footnotes</p> </title>-<p>Here is a footnote reference,<a l:href="#n1" type="note">-<sup>[1]</sup>-</a> and another.<a l:href="#n2" type="note">-<sup>[2]</sup>-</a>+<p>Here is a footnote reference,<a l:href="#n1" type="note">[1]</a> and another.<a l:href="#n2" type="note">[2]</a> This should <emphasis>not</emphasis> be a footnote reference, because it-contains a space.[^my note] Here is an inline note.<a l:href="#n3" type="note">-<sup>[3]</sup>-</a>+contains a space.[^my note] Here is an inline note.<a l:href="#n3" type="note">[3]</a> </p> <cite>-<p>Notes can go in quotes.<a l:href="#n4" type="note">-<sup>[4]</sup>-</a>+<p>Notes can go in quotes.<a l:href="#n4" type="note">[4]</a> </p> </cite>-<p>1. And in list items.<a l:href="#n5" type="note">-<sup>[5]</sup>-</a>+<p>1. And in list items.<a l:href="#n5" type="note">[5]</a> </p> <p>This paragraph should not be part of the note, as it is not indented.</p> </section>
test/writer.html4 view
@@ -518,7 +518,7 @@ <h1 id="images">Images</h1> <p>From “Voyage dans la Lune” by Georges Melies (1902):</p> <div class="figure">-<img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune" />+<img src="lalune.jpg" title="Voyage dans la Lune" alt="" /> <p class="caption">lalune</p> </div> <p>Here is a movie <img src="movie.jpg" alt="movie" /> icon.</p>@@ -535,14 +535,14 @@ <div class="footnotes"> <hr /> <ol>-<li id="fn1"><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.<a href="#fnref1" class="footnote-back">↩</a></p></li>+<li id="fn1"><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.<a href="#fnref1" class="footnote-back">↩︎</a></p></li> <li id="fn2"><p>Here’s the long note. This one contains multiple blocks.</p> <p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p> <pre><code> { <code> }</code></pre>-<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.<a href="#fnref2" class="footnote-back">↩</a></p></li>-<li id="fn3"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters, as well as [bracketed text].<a href="#fnref3" class="footnote-back">↩</a></p></li>-<li id="fn4"><p>In quote.<a href="#fnref4" class="footnote-back">↩</a></p></li>-<li id="fn5"><p>In list.<a href="#fnref5" class="footnote-back">↩</a></p></li>+<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.<a href="#fnref2" class="footnote-back">↩︎</a></p></li>+<li id="fn3"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters, as well as [bracketed text].<a href="#fnref3" class="footnote-back">↩︎</a></p></li>+<li id="fn4"><p>In quote.<a href="#fnref4" class="footnote-back">↩︎</a></p></li>+<li id="fn5"><p>In list.<a href="#fnref5" class="footnote-back">↩︎</a></p></li> </ol> </div> </body>
test/writer.html5 view
@@ -521,7 +521,7 @@ <h1 id="images">Images</h1> <p>From “Voyage dans la Lune” by Georges Melies (1902):</p> <figure>-<img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune" /><figcaption>lalune</figcaption>+<img src="lalune.jpg" title="Voyage dans la Lune" alt="" /><figcaption>lalune</figcaption> </figure> <p>Here is a movie <img src="movie.jpg" alt="movie" /> icon.</p> <hr />@@ -537,14 +537,14 @@ <section class="footnotes" role="doc-endnotes"> <hr /> <ol>-<li id="fn1" role="doc-endnote"><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.<a href="#fnref1" class="footnote-back" role="doc-backlink">↩</a></p></li>+<li id="fn1" role="doc-endnote"><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.<a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li> <li id="fn2" role="doc-endnote"><p>Here’s the long note. This one contains multiple blocks.</p> <p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p> <pre><code> { <code> }</code></pre>-<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.<a href="#fnref2" class="footnote-back" role="doc-backlink">↩</a></p></li>-<li id="fn3" role="doc-endnote"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters, as well as [bracketed text].<a href="#fnref3" class="footnote-back" role="doc-backlink">↩</a></p></li>-<li id="fn4" role="doc-endnote"><p>In quote.<a href="#fnref4" class="footnote-back" role="doc-backlink">↩</a></p></li>-<li id="fn5" role="doc-endnote"><p>In list.<a href="#fnref5" class="footnote-back" role="doc-backlink">↩</a></p></li>+<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.<a href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></p></li>+<li id="fn3" role="doc-endnote"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters, as well as [bracketed text].<a href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li>+<li id="fn4" role="doc-endnote"><p>In quote.<a href="#fnref4" class="footnote-back" role="doc-backlink">↩︎</a></p></li>+<li id="fn5" role="doc-endnote"><p>In list.<a href="#fnref5" class="footnote-back" role="doc-backlink">↩︎</a></p></li> </ol> </section> </body>
test/writer.jats view
@@ -16,18 +16,16 @@ </title-group> <contrib-group> <contrib contrib-type="author">-<name> <string-name>John MacFarlane</string-name>-</name> </contrib> <contrib contrib-type="author">-<name> <string-name>Anonymous</string-name>-</name> </contrib> </contrib-group>-<pub-date pub-type="epub">-<string-date>July 17, 2006</string-date>+<pub-date pub-type="epub" iso-8601-date="2006-07-17">+<day>17</day>+<month>7</month>+<year>2006</year> </pub-date> </article-meta> </front>@@ -72,7 +70,8 @@ item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p> <p>Here’s one with a bullet. * criminey.</p>- <p>There should be a hard line break<break />here.</p>+ <p>There should be a hard line break+ here.</p> </sec> <sec id="block-quotes"> <title>Block Quotes</title>@@ -498,10 +497,14 @@ <term><italic>orange</italic></term> <def> <p>orange fruit</p>- <preformat>{ orange code block }</preformat>- <disp-quote>- <p>orange block quote</p>- </disp-quote>+ <p specific-use="wrapper">+ <preformat>{ orange code block }</preformat>+ </p>+ <p specific-use="wrapper">+ <disp-quote>+ <p>orange block quote</p>+ </disp-quote>+ </p> </def> </def-item> </def-list>@@ -552,14 +555,16 @@ <term>orange</term> <def> <p>orange fruit</p>- <list list-type="order">- <list-item>- <p>sublist</p>- </list-item>- <list-item>- <p>sublist</p>- </list-item>- </list>+ <p specific-use="wrapper">+ <list list-type="order">+ <list-item>+ <p>sublist</p>+ </list-item>+ <list-item>+ <p>sublist</p>+ </list-item>+ </list>+ </p> </def> </def-item> </def-list>@@ -844,38 +849,50 @@ </sec> <sec id="footnotes"> <title>Footnotes</title>- <p>Here is a footnote reference,<fn>+ <p>Here is a footnote reference,<xref ref-type="fn" rid="fn1">1</xref> and+ another.<xref ref-type="fn" rid="fn2">2</xref> This should+ <italic>not</italic> be a footnote reference, because it contains a+ space.[^my note] Here is an inline+ note.<xref ref-type="fn" rid="fn3">3</xref></p>+ <disp-quote>+ <p>Notes can go in quotes.<xref ref-type="fn" rid="fn4">4</xref></p>+ </disp-quote>+ <list list-type="order">+ <list-item>+ <p>And in list items.<xref ref-type="fn" rid="fn5">5</xref></p>+ </list-item>+ </list>+ <p>This paragraph should not be part of the note, as it is not indented.</p>+</sec>+</body>+<back>+<fn-group>+ <fn id="fn1"> <p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p>- </fn> and another.<fn>+ </fn>+ <fn id="fn2"> <p>Here’s the long note. This one contains multiple blocks.</p> <p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p>- <preformat> { <code> }</preformat>+ <p specific-use="wrapper">+ <preformat> { <code> }</preformat>+ </p> <p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p>- </fn> This should <italic>not</italic> be a footnote reference, because it- contains a space.[^my note] Here is an inline note.<fn>+ </fn>+ <fn id="fn3"> <p>This is <italic>easier</italic> to type. Inline notes may contain <ext-link ext-link-type="uri" xlink:href="http://google.com">links</ext-link> and <monospace>]</monospace> verbatim characters, as well as [bracketed text].</p>- </fn></p>- <disp-quote>- <p>Notes can go in quotes.<fn>- <p>In quote.</p>- </fn></p>- </disp-quote>- <list list-type="order">- <list-item>- <p>And in list items.<fn>- <p>In list.</p>- </fn></p>- </list-item>- </list>- <p>This paragraph should not be part of the note, as it is not indented.</p>-</sec>-</body>-<back>+ </fn>+ <fn id="fn4">+ <p>In quote.</p>+ </fn>+ <fn id="fn5">+ <p>In list.</p>+ </fn>+</fn-group> </back> </article>
+ test/writer.jira view
@@ -0,0 +1,630 @@+This is a set of tests for pandoc. Most of them are adapted from John Gruber's markdown test suite.++----++h1. {anchor:headers}Headers++h2. {anchor:level-2-with-an-embedded-link}Level 2 with an [embedded link|/url]++h3. {anchor:level-3-with-emphasis}Level 3 with _emphasis_++h4. {anchor:level-4}Level 4++h5. {anchor:level-5}Level 5++h1. {anchor:level-1}Level 1++h2. {anchor:level-2-with-emphasis}Level 2 with _emphasis_++h3. {anchor:level-3}Level 3++with no blank line++h2. {anchor:level-2}Level 2++with no blank line++----++h1. {anchor:paragraphs}Paragraphs++Here's a regular paragraph.++In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard‐wrapped line in the middle of a paragraph looked like a list item.++Here's one with a bullet. * criminey.++There should be a hard line break+here.++----++h1. {anchor:block-quotes}Block Quotes++E‐mail style:++bq. This is a block quote. It is pretty short.+++{quote}+Code in a block quote:++{code}+sub status \{+ print "working";+}+{code}++A list:++# item one+# item two++Nested block quotes:++bq. nested+++bq. nested+++{quote}++This should not be a block quote: 2 > 1.++And a following paragraph.++----++h1. {anchor:code-blocks}Code Blocks++Code:++{code}+‐‐‐‐ (should be four hyphens)++sub status \{+ print "working";+}++this code block is indented by one tab+{code}++And:++{code}+ this code block is indented by two tabs++These should not be escaped: \$ \\ \> \[ \\{+{code}++----++h1. {anchor:lists}Lists++h2. {anchor:unordered}Unordered++Asterisks tight:++* asterisk 1+* asterisk 2+* asterisk 3++Asterisks loose:++* asterisk 1+* asterisk 2+* asterisk 3++Pluses tight:++* Plus 1+* Plus 2+* Plus 3++Pluses loose:++* Plus 1+* Plus 2+* Plus 3++Minuses tight:++* Minus 1+* Minus 2+* Minus 3++Minuses loose:++* Minus 1+* Minus 2+* Minus 3++h2. {anchor:ordered}Ordered++Tight:++# First+# Second+# Third++and:++# One+# Two+# Three++Loose using tabs:++# First+# Second+# Third++and using spaces:++# One+# Two+# Three++Multiple paragraphs:++# Item 1, graf one.+Item 1. graf two. The quick brown fox jumped over the lazy dog's back.+# Item 2.+# Item 3.++h2. {anchor:nested}Nested++* Tab+** Tab+*** Tab++Here's another:++# First+# Second:+#* Fee+#* Fie+#* Foe+# Third++Same thing but with paragraphs:++# First+# Second:+#* Fee+#* Fie+#* Foe+# Third++h2. {anchor:tabs-and-spaces}Tabs and spaces++* this is a list item indented with tabs+* this is a list item indented with spaces+** this is an example list item indented with tabs+** this is an example list item indented with spaces++h2. {anchor:fancy-list-markers}Fancy list markers++# begins with 2+# and now 3+with a continuation+## sublist with roman numerals, starting with 4+## more items+### a subsublist+### a subsublist++Nesting:++# Upper Alpha+## Upper Roman.+### Decimal start with 6+#### Lower alpha with paren++Autonumbering:++# Autonumber.+# More.+## Nested.++Should not be a list item:++M.A. 2007++B. Williams++----++h1. {anchor:definition-lists}Definition Lists++Tight using spaces:++* *apple*+red fruit+* *orange*+orange fruit+* *banana*+yellow fruit++Tight using tabs:++* *apple*+red fruit+* *orange*+orange fruit+* *banana*+yellow fruit++Loose:++* *apple*+red fruit+* *orange*+orange fruit+* *banana*+yellow fruit++Multiple blocks with italics:++* *_apple_*+red fruit+contains seeds, crisp, pleasant to taste+* *_orange_*+orange fruit+{code}+\{ orange code block }+{code}+bq. orange block quote++Multiple definitions, tight:++* *apple*+red fruit+computer+* *orange*+orange fruit+bank++Multiple definitions, loose:++* *apple*+red fruit+computer+* *orange*+orange fruit+bank++Blank line after term, indented marker, alternate markers:++* *apple*+red fruit+computer+* *orange*+orange fruit+*# sublist+*# sublist++h1. {anchor:html-blocks}HTML Blocks++Simple block on one line:++foo+And nested without indentation:++foo++bar+Interpreted markdown in a table:+++++This is _emphasized_+++And this is *strong*+++++Here's a simple block:++foo++This should be a code block, though:++{code}+<div>+ foo+</div>+{code}++As should this:++{code}+<div>foo</div>+{code}++Now, nested:++foo+This should just be an HTML comment:+++Multiline:++++Code block:++{code}+<!‐‐ Comment ‐‐>+{code}++Just plain comment, with trailing spaces on the line:+++Code:++{code}+<hr />+{code}++Hr's:+++++++++++----++h1. {anchor:inline-markup}Inline Markup++This is _emphasized_, and so _is this_.++This is *strong*, and so *is this*.++An _[emphasized link|/url]_.++*_This is strong and em._*++So is *_this_* word.++*_This is strong and em._*++So is *_this_* word.++This is code: {{>}}, {{$}}, {{\}}, {{\$}}, {{<html>}}.++-This is _strikeout_.-++Superscripts: a{^bc^}d a{^_hello_^} a{^hello there^}.++Subscripts: H{~2~}O, H{~23~}O, H{~many of them~}O.++These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.++----++h1. {anchor:smart-quotes-ellipses-dashes}Smart quotes, ellipses, dashes++"Hello," said the spider. "'Shelob' is my name."++'A', 'B', and 'C' are letters.++'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.'++'He said, "I want to go."' Were you alive in the 70's?++Here is some quoted '{{code}}' and a "[quoted link|http://example.com/?foo=1&bar=2]".++Some dashes: one -- two -- three -- four -- five.++Dashes between numbers: 5 - 7, 255 - 66, 1987 - 1999.++Ellipses...and...and....++----++h1. {anchor:latex}LaTeX++* +* 2 + 2 = 4+* _x_ ∈ _y_+* _α_ ∧ _ω_+* 223+* _p_‐Tree+* Here's some display math: \\$$\frac\{d}\{dx}f(x)=\lim_\{h\to 0}\frac\{f(x+h)‐f(x)}\{h}$$\\+* Here's one that has a line break in it: _α_ + _ω_ × _x_{^2^}.++These shouldn't be math:++* To get the famous equation, write {{$e = mc^2$}}.+* $22,000 is a _lot_ of money. So is $34,000. (It worked if "lot" is emphasized.)+* Shoes ($20) and socks ($5).+* Escaped {{$}}: $73 _this should be emphasized_ 23$.++Here's a LaTeX table:+++----++h1. {anchor:special-characters}Special Characters++Here is some unicode:++* I hat: Î+* o umlaut: ö+* section: §+* set membership: ∈+* copyright: ©++AT&T has an ampersand in their name.++AT&T is another way to write it.++This & that.++4 < 5.++6 > 5.++Backslash: \++Backtick: `++Asterisk: *++Underscore: _++Left brace: \{++Right brace: }++Left bracket: [++Right bracket: ]++Left paren: (++Right paren: )++Greater‐than: >++Hash: #++Period: .++Bang: !++Plus: +++Minus: ‐++----++h1. {anchor:links}Links++h2. {anchor:explicit}Explicit++Just a [URL|/url/].++[URL and title|/url/].++[URL and title|/url/].++[URL and title|/url/].++[URL and title|/url/]++[URL and title|/url/]++[with_underscore|/url/with_underscore]++[Email link|mailto:nobody@nowhere.net]++[Empty|].++h2. {anchor:reference}Reference++Foo [bar|/url/].++With [embedded [brackets]|/url/].++[b|/url/] by itself should be a link.++Indented [once|/url].++Indented [twice|/url].++Indented [thrice|/url].++This should [not][] be a link.++{code}+[not]: /url+{code}++Foo [bar|/url/].++Foo [biz|/url/].++h2. {anchor:with-ampersands}With ampersands++Here's a [link with an ampersand in the URL|http://example.com/?foo=1&bar=2].++Here's a link with an amersand in the link text: [AT&T|http://att.com/].++Here's an [inline link|/script?foo=1&bar=2].++Here's an [inline link in pointy braces|/script?foo=1&bar=2].++h2. {anchor:autolinks}Autolinks++With an ampersand: [http://example.com/?foo=1&bar=2|http://example.com/?foo=1&bar=2]++* In a list?+* [http://example.com/|http://example.com/]+* It should.++An e‐mail address: [nobody@nowhere.net|mailto:nobody@nowhere.net]++bq. Blockquoted: [http://example.com/|http://example.com/]+++Auto‐links should not occur here: {{<http://example.com/>}}++{code}+or here: <http://example.com/>+{code}++----++h1. {anchor:images}Images++From "Voyage dans la Lune" by Georges Melies (1902):++!lalune.jpg!++Here is a movie !movie.jpg! icon.++----++h1. {anchor:footnotes}Footnotes++Here is a footnote reference,[1] and another.[2] This should _not_ be a footnote reference, because it contains a space.[^my note] Here is an inline note.[3]++bq. Notes can go in quotes.[4]+++# And in list items.[5]++This paragraph should not be part of the note, as it is not indented.+++[1] Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.+++[2] Here's the long note. This one contains multiple blocks.++Subsequent blocks are indented to show that they belong to the footnote (as with list items).++{code}+ \{ <code> }+{code}++If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.+++[3] This is _easier_ to type. Inline notes may contain [links|http://google.com] and {{]}} verbatim characters, as well as [bracketed text].+++[4] In quote.+++[5] In list.
test/writer.opendocument view
@@ -1879,7 +1879,7 @@ <text:p text:style-name="First_20_paragraph">From “Voyage dans la Lune” by Georges Melies (1902):</text:p> <text:p text:style-name="FigureWithCaption"><draw:frame draw:name="img1"><draw:image xlink:href="lalune.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad" /></draw:frame></text:p>-<text:p text:style-name="FigureCaption">Figure <text:sequence text:ref-name="refIllustration0" text:name="Illustration" text:formula="ooow:Illustration+1" style:num-format="1">1</text:sequence>: lalune</text:p>+<text:p text:style-name="FigureCaption">lalune</text:p> <text:p text:style-name="Text_20_body">Here is a movie <draw:frame draw:name="img2"><draw:image xlink:href="movie.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad" /></draw:frame> icon.</text:p>
test/writer.org view
@@ -92,9 +92,9 @@ Code in a block quote: #+BEGIN_EXAMPLE- sub status {- print "working";- }+ sub status {+ print "working";+ } #+END_EXAMPLE A list:@@ -127,21 +127,21 @@ Code: #+BEGIN_EXAMPLE- ---- (should be four hyphens)+ ---- (should be four hyphens) - sub status {- print "working";- }+ sub status {+ print "working";+ } - this code block is indented by one tab+ this code block is indented by one tab #+END_EXAMPLE And: #+BEGIN_EXAMPLE- this code block is indented by two tabs+ this code block is indented by two tabs - These should not be escaped: \$ \\ \> \[ \{+ These should not be escaped: \$ \\ \> \[ \{ #+END_EXAMPLE --------------@@ -364,7 +364,7 @@ - /orange/ :: orange fruit #+BEGIN_EXAMPLE- { orange code block }+ { orange code block } #+END_EXAMPLE #+BEGIN_QUOTE@@ -463,15 +463,15 @@ This should be a code block, though: #+BEGIN_EXAMPLE- <div>- foo- </div>+ <div>+ foo+ </div> #+END_EXAMPLE As should this: #+BEGIN_EXAMPLE- <div>foo</div>+ <div>foo</div> #+END_EXAMPLE Now, nested:@@ -502,7 +502,7 @@ Code block: #+BEGIN_EXAMPLE- <!-- Comment -->+ <!-- Comment --> #+END_EXAMPLE Just plain comment, with trailing spaces on the line:@@ -514,7 +514,7 @@ Code: #+BEGIN_EXAMPLE- <hr />+ <hr /> #+END_EXAMPLE Hr's:@@ -751,7 +751,7 @@ This should [not][] be a link. #+BEGIN_EXAMPLE- [not]: /url+ [not]: /url #+END_EXAMPLE Foo [[/url/][bar]].@@ -792,7 +792,7 @@ Auto-links should not occur here: =<http://example.com/>= #+BEGIN_EXAMPLE- or here: <http://example.com/>+ or here: <http://example.com/> #+END_EXAMPLE --------------@@ -837,7 +837,7 @@ (as with list items). #+BEGIN_EXAMPLE- { <code> }+ { <code> } #+END_EXAMPLE If you want, you can indent every line, but you can also be lazy and
test/writer.textile view
@@ -523,13 +523,13 @@ h1(#latex). LaTeX * -* <span class="math">2+2=4</math>-* <span class="math">x \in y</math>-* <span class="math">\alpha \wedge \omega</math>-* <span class="math">223</math>-* <span class="math">p</math>-Tree-* Here's some display math: <span class="math">\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</math>-* Here's one that has a line break in it: <span class="math">\alpha + \omega \times x^2</math>.+* <span class="math">2+2=4</span>+* <span class="math">x \in y</span>+* <span class="math">\alpha \wedge \omega</span>+* <span class="math">223</span>+* <span class="math">p</span>-Tree+* Here's some display math: <span class="math">\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</span>+* Here's one that has a line break in it: <span class="math">\alpha + \omega \times x^2</span>. These shouldn't be math:
test/writers-lang-and-dir.latex view
@@ -37,6 +37,7 @@ \IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available \IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} \hypersetup{+ pdflang={en}, hidelinks, pdfcreator={LaTeX via pandoc}} \urlstyle{same} % disable monospaced font for URLs
trypandoc/index.html view
@@ -137,6 +137,7 @@ <option value="html5" selected>HTML 5</option> <option value="icml">ICML</option> <option value="jats">JATS</option>+ <option value="jira">Jira</option> <option value="json">JSON</option> <option value="ipynb">Jupyter Notebook (ipynb)</option> <option value="latex">LaTeX</option>