git.iko.soy/typeable/pandoc
on master help sign in
Merge branch 'new-image-attributes' of https://github.com/mb21/pandoc into mb21-new-image-attributes

* Bumped version to 1.16. * Added Attr field to Link and Image. * Added `common_link_attributes` extension. * Updated readers for link attributes. * Updated writers for link attributes. * Updated tests * Updated stack.yaml to build against unreleased versions of pandoc-types and texmath. * Fixed various compiler warnings. Closes #261. TODO: * Relative (percentage) image widths in docx writer. * ODT/OpenDocument writer (untested, same issue about percentage widths). * Update pandoc-citeproc.

commit244cd5644b44f43722530379138bd7bb9cbace9b authorJohn MacFarlane <jgm@berkeley.edu> dateThu 19 Nov 2015, 22:41 (11 years ago) parent1ad296d08243d5
81 files changed+1181−748
README+62−5 pandoc.cabal+4−4 pandoc.hs+16−2 src/Text/Pandoc.hs+1−1 src/Text/Pandoc/ImageSize.hs+138−15 src/Text/Pandoc/Options.hs+5 src/Text/Pandoc/PDF.hs+6−6 src/Text/Pandoc/Parsing.hs+14−2 src/Text/Pandoc/Pretty.hs+1−1 src/Text/Pandoc/Readers/CommonMark.hs+2−2 src/Text/Pandoc/Readers/DocBook.hs+17−7 src/Text/Pandoc/Readers/Docx.hs+2−2 src/Text/Pandoc/Readers/EPUB.hs+6−6 src/Text/Pandoc/Readers/HTML.hs+11−15 src/Text/Pandoc/Readers/LaTeX.hs+19−10 src/Text/Pandoc/Readers/Markdown.hs+31−26 src/Text/Pandoc/Readers/MediaWiki.hs+19−11 src/Text/Pandoc/Readers/RST.hs+10−8 src/Text/Pandoc/Shared.hs+4−4 src/Text/Pandoc/Writers/AsciiDoc.hs+18−6 src/Text/Pandoc/Writers/CommonMark.hs+2−2 src/Text/Pandoc/Writers/ConTeXt.hs+32−9 src/Text/Pandoc/Writers/Custom.hs+3−3 src/Text/Pandoc/Writers/Docbook.hs+28−7 src/Text/Pandoc/Writers/Docx.hs+11−13 src/Text/Pandoc/Writers/DokuWiki.hs+18−6 src/Text/Pandoc/Writers/EPUB.hs+6−6 src/Text/Pandoc/Writers/FB2.hs+8−8 src/Text/Pandoc/Writers/HTML.hs+47−20 src/Text/Pandoc/Writers/Haddock.hs+5−5 src/Text/Pandoc/Writers/ICML.hs+54−41 src/Text/Pandoc/Writers/LaTeX.hs+35−12 src/Text/Pandoc/Writers/Man.hs+3−3 src/Text/Pandoc/Writers/Markdown.hs+30−21 src/Text/Pandoc/Writers/MediaWiki.hs+27−6 src/Text/Pandoc/Writers/ODT.hs+9−8 src/Text/Pandoc/Writers/OpenDocument.hs+8−8 src/Text/Pandoc/Writers/Org.hs+4−4 src/Text/Pandoc/Writers/RST.hs+48−20 src/Text/Pandoc/Writers/RTF.hs+7−7 src/Text/Pandoc/Writers/Texinfo.hs+17−8 src/Text/Pandoc/Writers/Textile.hs+23−6 stack.yaml+8 tests/Tests/Arbitrary.hs+6−4 tests/Tests/Writers/LaTeX.hs+1−1 tests/docbook-reader.native+33−33 tests/docbook-xref.native+5−5 tests/docx/already_auto_ident.native+1−1 tests/docx/image_no_embed.native+1−1 tests/docx/image_no_embed_writer.native+1−1 tests/docx/image_vml.native+1−1 tests/docx/inline_images.native+2−2 tests/docx/inline_images_writer.native+2−2 tests/docx/link_in_notes.native+1−1 tests/docx/links.native+4−4 tests/docx/links_writer.native+4−4 tests/dokuwiki_external_images.native+1−1 tests/dokuwiki_multiblock_table.native+1−1 tests/epub/features.native+3−3 tests/epub/formatting.native+4−4 tests/epub/wasteland.native+51−51 tests/haddock-reader.native+4−4 tests/html-reader.native+32−32 tests/latex-reader.latex−27 tests/latex-reader.native+34−43 tests/markdown-reader-more.native+25−25 tests/mediawiki-reader.native+19−17 tests/mediawiki-reader.wiki+4 tests/odt/native/referenceToChapter.native+1−1 tests/odt/native/referenceToListItem.native+1−1 tests/odt/native/referenceToText.native+1−1 tests/opml-reader.native+1−1 tests/rst-reader.native+10−10 tests/tables.icml+1−1 tests/testsuite.native+33−33 tests/textile-reader.native+8−8 tests/twiki-reader.native+4−4 tests/txt2tags.native+13−13 tests/writer.icml+14−16 tests/writer.native+33−33 tests/writer.rtf+2−2
README+62−5
@@ -517,14 +517,22 @@ General writer options
517517: Print a system default data file. Files in the user data directory
518518 are ignored.
519519
520+`--dpi`=*NUMBER*
521+: Specify the dpi (dots per inch) value for conversion from pixels
522+ to inch/centimeters and vice versa. The default is 96dpi.
523+ Technically, the correct term would be ppi (pixels per inch).
524+
520525`--no-wrap`
521526
522527: Disable text wrapping in output. By default, text is wrapped
523− appropriately for the output format.
528+ appropriately for the output format. This affects only the
529+ generated source code, not the layout on the rendered page.
524530
525531`--columns=`*NUMBER*
526532
527533: Specify length of lines in characters (for text wrapping).
534+ This affects only the generated source code, not the layout on
535+ the rendered page.
528536
529537`--toc`, `--table-of-contents`
530538
@@ -2909,6 +2917,49 @@ nonbreaking space after the image:
29092917
29102918 ![This image won't be a figure](/url/of/image.png)\
29112919
2920+#### Extension: `common_link_attributes` ####
2921+
2922+Attributes can be set on links and images:
2923+
2924+ An inline ![image](foo.jpg){#id .class width=30 height=20px}
2925+ and a reference ![image][ref] with attributes.
2926+
2927+ [ref]: foo.jpg "optional title" {#id .class key=val key2="val 2"}
2928+
2929+(This syntax is compatible with [PHP Markdown Extra] when only `#id`
2930+and `.class` are used.)
2931+
2932+For HTML and EPUB, all attributes except `width` and `height` (but
2933+including `srcset` and `sizes`) are passed through as is. The other
2934+writers ignore attributes that are not supported by their output
2935+format.
2936+
2937+The `width` and `height` attributes on images are treated specially. When
2938+used without a unit, the unit is assumed to be pixels. However, any of
2939+the following unit identifiers can be used: `px`, `cm`, `mm`, `in`, `inch`
2940+and `%`. There must not be any spaces between the number and the unit.
2941+For example:
2942+
2943+```
2944+![](file.jpg){ width=50% }
2945+```
2946+
2947+- Dimensions are converted to inches for output in page-based formats like
2948+ LaTeX. Dimensions are converted to pixels for output in HTML-like
2949+ formats. Use the `--dpi` option to specify the number of pixels per
2950+ inch. The default is 96dpi.
2951+- The `%` unit is generally relative to some available space.
2952+ For example the above example will render to
2953+ `<img href="file.jpg" style="width: 50%;" />` (HTML),
2954+ `\includegraphics[width=0.5\textwidth]{file.jpg}` (LaTeX), or
2955+ `\externalfigure[file.jpg][width=0.5\textwidth]` (ConTeXt).
2956+- Some output formats have a notion of a class
2957+ ([ConTeXt](http://wiki.contextgarden.net/Using_Graphics#Multiple_Image_Settings))
2958+ or a unique identifier (LaTeX `\caption`), or both (HTML).
2959+- When no `width` or `height` attributes are specified, the fallback
2960+ is to look at the image resolution and the dpi metadata embedded in
2961+ the image file.
2962+
29122963
29132964Footnotes
29142965---------
@@ -3221,9 +3272,14 @@ letters are omitted.
32213272
32223273#### Extension: `link_attributes` ####
32233274
3224−Parses multimarkdown style key-value attributes on link and image references.
3225−Note that pandoc's internal document model provides nowhere to put
3226−these, so they are presently just ignored.
3275+Parses multimarkdown style key-value attributes on link
3276+and image references. This extension should not be confused with the
3277+[`common_link_attributes`](#extension-common_link_attributes) extension.
3278+
3279+ This is a reference ![image][ref] with multimarkdown attributes.
3280+
3281+ [ref]: http://path.to/image "Image title" width=20px height=30px
3282+ id=myId class="myClass1 myClass2"
32273283
32283284#### Extension: `mmd_header_identifiers` ####
32293285
@@ -3266,7 +3322,8 @@ variants are supported:
32663322`markdown_phpextra` (PHP Markdown Extra)
32673323: `footnotes`, `pipe_tables`, `raw_html`, `markdown_attribute`,
32683324 `fenced_code_blocks`, `definition_lists`, `intraword_underscores`,
3269− `header_attributes`, `abbreviations`, `shortcut_reference_links`.
3325+ `header_attributes`, `common_link_attributes`, `abbreviations`,
3326+ `shortcut_reference_links`.
32703327
32713328`markdown_github` (GitHub-Flavored Markdown)
32723329: `pipe_tables`, `raw_html`, `tex_math_single_backslash`,
pandoc.cabal+4−4
@@ -1,5 +1,5 @@
11Name: pandoc
2−Version: 1.15.2.1
2+Version: 1.16
33Cabal-Version: >= 1.10
44Build-Type: Custom
55License: GPL
@@ -264,7 +264,7 @@ Library
264264 xml >= 1.3.12 && < 1.4,
265265 random >= 1 && < 1.2,
266266 extensible-exceptions >= 0.1 && < 0.2,
267− pandoc-types >= 1.12.4 && < 1.13,
267+ pandoc-types >= 1.16 && < 1.17,
268268 aeson >= 0.7 && < 0.11,
269269 tagsoup >= 0.13.1 && < 0.14,
270270 base64-bytestring >= 0.1 && < 1.1,
@@ -412,7 +412,7 @@ Library
412412
413413Executable pandoc
414414 Build-Depends: pandoc,
415− pandoc-types >= 1.12.4 && < 1.13,
415+ pandoc-types >= 1.16 && < 1.17,
416416 base >= 4.2 && <5,
417417 directory >= 1 && < 1.3,
418418 filepath >= 1.1 && < 1.5,
@@ -469,7 +469,7 @@ Test-Suite test-pandoc
469469 Build-Depends: base >= 4.2 && < 5,
470470 syb >= 0.1 && < 0.7,
471471 pandoc,
472− pandoc-types >= 1.12.4 && < 1.13,
472+ pandoc-types >= 1.16 && < 1.17,
473473 bytestring >= 0.9 && < 0.11,
474474 text >= 0.11 && < 1.3,
475475 directory >= 1 && < 1.3,
pandoc.hs+16−2
@@ -196,6 +196,7 @@ data Opt = Opt
196196 , optIgnoreArgs :: Bool -- ^ Ignore command-line arguments
197197 , optVerbose :: Bool -- ^ Verbose diagnostic output
198198 , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst
199+ , optDpi :: Int -- ^ Dpi
199200 , optWrapText :: Bool -- ^ Wrap text
200201 , optColumns :: Int -- ^ Line length in characters
201202 , optFilters :: [FilePath] -- ^ Filters to apply
@@ -258,6 +259,7 @@ defaultOpts = Opt
258259 , optIgnoreArgs = False
259260 , optVerbose = False
260261 , optReferenceLinks = False
262+ , optDpi = 96
261263 , optWrapText = True
262264 , optColumns = 72
263265 , optFilters = []
@@ -454,6 +456,16 @@ options =
454456 "FILE")
455457 "" -- "Print default data file"
456458
459+ , Option "" ["dpi"]
460+ (ReqArg
461+ (\arg opt ->
462+ case safeRead arg of
463+ Just t | t > 0 -> return opt { optDpi = t }
464+ _ -> err 31
465+ "dpi must be a number greater than 0")
466+ "NUMBER")
467+ "" -- "Dpi (default 96)"
468+
457469 , Option "" ["no-wrap"]
458470 (NoArg
459471 (\opt -> return opt { optWrapText = False }))
@@ -1029,8 +1041,8 @@ extractMedia media dir d =
10291041 return $ walk (adjustImagePath dir fps) d
10301042
10311043adjustImagePath :: FilePath -> [FilePath] -> Inline -> Inline
1032−adjustImagePath dir paths (Image lab (src, tit))
1033− | src `elem` paths = Image lab (dir ++ "/" ++ src, tit)
1044+adjustImagePath dir paths (Image attr lab (src, tit))
1045+ | src `elem` paths = Image attr lab (dir ++ "/" ++ src, tit)
10341046adjustImagePath _ _ x = x
10351047
10361048adjustMetadata :: M.Map String MetaValue -> Pandoc -> IO Pandoc
@@ -1104,6 +1116,7 @@ main = do
11041116 , optIgnoreArgs = ignoreArgs
11051117 , optVerbose = verbose
11061118 , optReferenceLinks = referenceLinks
1119+ , optDpi = dpi
11071120 , optWrapText = wrap
11081121 , optColumns = columns
11091122 , optFilters = filters
@@ -1327,6 +1340,7 @@ main = do
13271340 writerNumberOffset = numberFrom,
13281341 writerSectionDivs = sectionDivs,
13291342 writerReferenceLinks = referenceLinks,
1343+ writerDpi = dpi,
13301344 writerWrapText = wrap,
13311345 writerColumns = columns,
13321346 writerEmailObfuscation = obfuscationMethod,
src/Text/Pandoc.hs+1−1
@@ -266,7 +266,7 @@ writers = [
266266 ,("html" , PureStringWriter writeHtmlString)
267267 ,("html5" , PureStringWriter $ \o ->
268268 writeHtmlString o{ writerHtml5 = True })
269− ,("icml" , PureStringWriter writeICML)
269+ ,("icml" , IOStringWriter writeICML)
270270 ,("s5" , PureStringWriter $ \o ->
271271 writeHtmlString o{ writerSlideVariant = S5Slides
272272 , writerTableOfContents = False })
src/Text/Pandoc/ImageSize.hs+138−15
@@ -29,16 +29,36 @@ Portability : portable
2929
3030Functions for determining the size of a PNG, JPEG, or GIF image.
3131-}
32−module Text.Pandoc.ImageSize ( ImageType(..), imageType, imageSize,
33− sizeInPixels, sizeInPoints ) where
32+module Text.Pandoc.ImageSize ( ImageType(..)
33+ , imageType
34+ , imageSize
35+ , sizeInPixels
36+ , sizeInPoints
37+ , desiredSizeInPoints
38+ , Dimension(..)
39+ , Direction(..)
40+ , dimension
41+ , inInch
42+ , inPoints
43+ , numUnit
44+ , showInInch
45+ , showInPixel
46+ , showFl
47+ ) where
3448import Data.ByteString (ByteString, unpack)
3549import qualified Data.ByteString.Char8 as B
3650import qualified Data.ByteString.Lazy as BL
51+import Data.Char (isDigit)
3752import Control.Monad
3853import Data.Bits
3954import Data.Binary
4055import Data.Binary.Get
4156import Text.Pandoc.Shared (safeRead, hush)
57+import Data.Default (Default)
58+import Numeric (showFFloat)
59+import Text.Read (readMaybe)
60+import Text.Pandoc.Definition
61+import Text.Pandoc.Options
4262import qualified Data.Map as M
4363import Text.Pandoc.Compat.Except
4464import Control.Monad.Trans
@@ -48,6 +68,20 @@ import Data.Maybe (fromMaybe)
4868-- algorithms borrowed from wwwis.pl
4969
5070data ImageType = Png | Gif | Jpeg | Pdf | Eps deriving Show
71+data Direction = Width | Height
72+instance Show Direction where
73+ show Width = "width"
74+ show Height = "height"
75+
76+data Dimension = Pixel Integer
77+ | Centimeter Double
78+ | Inch Double
79+ | Percent Double
80+instance Show Dimension where
81+ show (Pixel a) = show a ++ "px"
82+ show (Centimeter a) = showFl a ++ "cm"
83+ show (Inch a) = showFl a ++ "in"
84+ show (Percent a) = show a ++ "%"
5185
5286data ImageSize = ImageSize{
5387 pxX :: Integer
@@ -55,7 +89,11 @@ data ImageSize = ImageSize{
5589 , dpiX :: Integer
5690 , dpiY :: Integer
5791 } deriving (Read, Show, Eq)
92+instance Default ImageSize where
93+ def = ImageSize 300 200 72 72
5894
95+showFl :: (RealFloat a) => a -> String
96+showFl a = showFFloat (Just 5) a ""
5997
6098imageType :: ByteString -> Maybe ImageType
6199imageType img = case B.take 4 img of
@@ -87,8 +125,93 @@ defaultSize = (72, 72)
87125sizeInPixels :: ImageSize -> (Integer, Integer)
88126sizeInPixels s = (pxX s, pxY s)
89127
90−sizeInPoints :: ImageSize -> (Integer, Integer)
91−sizeInPoints s = (pxX s * 72 `div` dpiX s, pxY s * 72 `div` dpiY s)
128+-- | Calculate (height, width) in points using the image file's dpi metadata,
129+-- using 72 Points == 1 Inch.
130+sizeInPoints :: ImageSize -> (Double, Double)
131+sizeInPoints s = (pxXf * 72 / dpiXf, pxYf * 72 / dpiYf)
132+ where
133+ pxXf = fromIntegral $ pxX s
134+ pxYf = fromIntegral $ pxY s
135+ dpiXf = fromIntegral $ dpiX s
136+ dpiYf = fromIntegral $ dpiY s
137+
138+-- | Calculate (height, width) in points, considering the desired dimensions in the
139+-- attribute, while falling back on the image file's dpi metadata if no dimensions
140+-- are specified in the attribute (or only dimensions in percentages).
141+desiredSizeInPoints :: WriterOptions -> Attr -> ImageSize -> (Double, Double)
142+desiredSizeInPoints opts attr s =
143+ case (getDim Width, getDim Height) of
144+ (Just w, Just h) -> (w, h)
145+ (Just w, Nothing) -> (w, w / ratio)
146+ (Nothing, Just h) -> (h * ratio, h)
147+ (Nothing, Nothing) -> sizeInPoints s
148+ where
149+ ratio = fromIntegral (pxX s) / fromIntegral (pxY s)
150+ getDim dir = case (dimension dir attr) of
151+ Just (Percent _) -> Nothing
152+ Just dim -> Just $ inPoints opts dim
153+ Nothing -> Nothing
154+
155+inPoints :: WriterOptions -> Dimension -> Double
156+inPoints opts dim = 72 * inInch opts dim
157+
158+inInch :: WriterOptions -> Dimension -> Double
159+inInch opts dim =
160+ case dim of
161+ (Pixel a) -> fromIntegral a / (fromIntegral $ writerDpi opts)
162+ (Centimeter a) -> a * 0.3937007874
163+ (Inch a) -> a
164+ (Percent _) -> 0
165+
166+-- | Convert a Dimension to a String denoting its equivalent in inches, for example "2.00000".
167+-- Note: Dimensions in percentages are converted to the empty string.
168+showInInch :: WriterOptions -> Dimension -> String
169+showInInch _ (Percent _) = ""
170+showInInch opts dim = showFl $ inInch opts dim
171+
172+-- | Convert a Dimension to a String denoting its equivalent in pixels, for example "600".
173+-- Note: Dimensions in percentages are converted to the empty string.
174+showInPixel :: WriterOptions -> Dimension -> String
175+showInPixel opts dim =
176+ case dim of
177+ (Pixel a) -> show a
178+ (Centimeter a) -> show (floor $ dpi * a * 0.3937007874 :: Int)
179+ (Inch a) -> show (floor $ dpi * a :: Int)
180+ (Percent _) -> ""
181+ where
182+ dpi = fromIntegral $ writerDpi opts
183+
184+-- | Maybe split a string into a leading number and trailing unit, e.g. "3cm" to Just (3.0, "cm")
185+numUnit :: String -> Maybe (Double, String)
186+numUnit s =
187+ let (nums, unit) = span (\c -> isDigit c || ('.'==c)) s
188+ in case readMaybe nums of
189+ Just n -> Just (n, unit)
190+ Nothing -> Nothing
191+
192+-- | Read a Dimension from an Attr attribute.
193+-- `dimension Width attr` might return `Just (Pixel 3)` or for example `Just (Centimeter 2.0)`, etc.
194+dimension :: Direction -> Attr -> Maybe Dimension
195+dimension dir (_, _, kvs) =
196+ case dir of
197+ Width -> extractDim "width"
198+ Height -> extractDim "height"
199+ where
200+ extractDim key =
201+ case lookup key kvs of
202+ Just str ->
203+ case numUnit str of
204+ Just (num, unit) -> toDim num unit
205+ Nothing -> Nothing
206+ Nothing -> Nothing
207+ toDim a "cm" = Just $ Centimeter a
208+ toDim a "mm" = Just $ Centimeter (a / 10)
209+ toDim a "in" = Just $ Inch a
210+ toDim a "inch" = Just $ Inch a
211+ toDim a "%" = Just $ Percent a
212+ toDim a "px" = Just $ Pixel (floor a::Integer)
213+ toDim a "" = Just $ Pixel (floor a::Integer)
214+ toDim _ _ = Nothing
92215
93216epsSize :: ByteString -> Maybe ImageSize
94217epsSize img = do
@@ -278,21 +401,21 @@ exifHeader hdr = do
278401 return (tag, payload)
279402 entries <- sequence $ replicate (fromIntegral numentries) ifdEntry
280403 subentries <- case lookup ExifOffset entries of
281− Just (UnsignedLong offset) -> do
404+ Just (UnsignedLong offset') -> do
282405 pos <- lift bytesRead
283− lift $ skip (fromIntegral offset - (fromIntegral pos - 8))
406+ lift $ skip (fromIntegral offset' - (fromIntegral pos - 8))
284407 numsubentries <- lift getWord16
285408 sequence $
286409 replicate (fromIntegral numsubentries) ifdEntry
287410 _ -> return []
288411 let allentries = entries ++ subentries
289− (width, height) <- case (lookup ExifImageWidth allentries,
290− lookup ExifImageHeight allentries) of
291− (Just (UnsignedLong w), Just (UnsignedLong h)) ->
292− return (fromIntegral w, fromIntegral h)
293− _ -> return defaultSize
294− -- we return a default width and height when
295− -- the exif header doesn't contain these
412+ (wdth, hght) <- case (lookup ExifImageWidth allentries,
413+ lookup ExifImageHeight allentries) of
414+ (Just (UnsignedLong w), Just (UnsignedLong h)) ->
415+ return (fromIntegral w, fromIntegral h)
416+ _ -> return defaultSize
417+ -- we return a default width and height when
418+ -- the exif header doesn't contain these
296419 let resfactor = case lookup ResolutionUnit allentries of
297420 Just (UnsignedShort 1) -> (100 / 254)
298421 _ -> 1
@@ -301,8 +424,8 @@ exifHeader hdr = do
301424 let yres = maybe 72 (\(UnsignedRational x) -> floor $ x * resfactor)
302425 $ lookup YResolution allentries
303426 return $ ImageSize{
304− pxX = width
305− , pxY = height
427+ pxX = wdth
428+ , pxY = hght
306429 , dpiX = xres
307430 , dpiY = yres }
308431
src/Text/Pandoc/Options.hs+5
@@ -86,6 +86,7 @@ data Extension =
8686 | Ext_markdown_attribute -- ^ Interpret text inside HTML as markdown
8787 -- iff container has attribute 'markdown'
8888 | Ext_escaped_line_breaks -- ^ Treat a backslash at EOL as linebreak
89+ | Ext_common_link_attributes -- ^ link and image attributes
8990 | Ext_link_attributes -- ^ MMD style reference link attributes
9091 | Ext_autolink_bare_uris -- ^ Make all absolute URIs into links
9192 | Ext_fancy_lists -- ^ Enable fancy list numbers and delimiters
@@ -155,6 +156,7 @@ pandocExtensions = Set.fromList
155156 , Ext_subscript
156157 , Ext_auto_identifiers
157158 , Ext_header_attributes
159+ , Ext_common_link_attributes
158160 , Ext_implicit_header_references
159161 , Ext_line_blocks
160162 , Ext_shortcut_reference_links
@@ -188,6 +190,7 @@ phpMarkdownExtraExtensions = Set.fromList
188190 , Ext_definition_lists
189191 , Ext_intraword_underscores
190192 , Ext_header_attributes
193+ , Ext_common_link_attributes
191194 , Ext_abbreviations
192195 , Ext_shortcut_reference_links
193196 ]
@@ -335,6 +338,7 @@ data WriterOptions = WriterOptions
335338 , writerSectionDivs :: Bool -- ^ Put sections in div tags in HTML
336339 , writerExtensions :: Set Extension -- ^ Markdown extensions that can be used
337340 , writerReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst
341+ , writerDpi :: Int -- ^ Dpi for pixel to/from inch/cm conversions
338342 , writerWrapText :: Bool -- ^ Wrap text to line length
339343 , writerColumns :: Int -- ^ Characters in a line (for text wrapping)
340344 , writerEmailObfuscation :: ObfuscationMethod -- ^ How to obfuscate emails
@@ -381,6 +385,7 @@ instance Default WriterOptions where
381385 , writerSectionDivs = False
382386 , writerExtensions = pandocExtensions
383387 , writerReferenceLinks = False
388+ , writerDpi = 96
384389 , writerWrapText = True
385390 , writerColumns = 72
386391 , writerEmailObfuscation = JavascriptObfuscation
src/Text/Pandoc/PDF.hs+6−6
@@ -86,10 +86,10 @@ handleImage' :: WriterOptions
8686 -> FilePath
8787 -> Inline
8888 -> IO Inline
89−handleImage' opts tmpdir (Image ils (src,tit)) = do
89+handleImage' opts tmpdir (Image attr ils (src,tit)) = do
9090 exists <- doesFileExist src
9191 if exists
92− then return $ Image ils (src,tit)
92+ then return $ Image attr ils (src,tit)
9393 else do
9494 res <- fetchItem' (writerMediaBag opts) (writerSourceURL opts) src
9595 case res of
@@ -99,20 +99,20 @@ handleImage' opts tmpdir (Image ils (src,tit)) = do
9999 let basename = showDigest $ sha1 $ BL.fromChunks [contents]
100100 let fname = tmpdir </> basename <.> ext
101101 BS.writeFile fname contents
102− return $ Image ils (fname,tit)
102+ return $ Image attr ils (fname,tit)
103103 _ -> do
104104 warn $ "Could not find image `" ++ src ++ "', skipping..."
105− return $ Image ils (src,tit)
105+ return $ Image attr ils (src,tit)
106106handleImage' _ _ x = return x
107107
108108convertImages :: FilePath -> Inline -> IO Inline
109−convertImages tmpdir (Image ils (src, tit)) = do
109+convertImages tmpdir (Image attr ils (src, tit)) = do
110110 img <- convertImage tmpdir src
111111 newPath <-
112112 case img of
113113 Left e -> src <$ warn e
114114 Right fp -> return fp
115− return (Image ils (newPath, tit))
115+ return (Image attr ils (newPath, tit))
116116convertImages _ x = return x
117117
118118-- Convert formats which do not work well in pdf to png
src/Text/Pandoc/Parsing.hs+14−2
@@ -164,7 +164,8 @@ module Text.Pandoc.Parsing ( anyLine,
164164 setSourceLine,
165165 newPos,
166166 addWarning,
167− (<+?>)
167+ (<+?>),
168+ extractIdClass
168169 )
169170where
170171
@@ -1066,7 +1067,7 @@ toKey = Key . map toLower . unwords . words . unbracket
10661067 where unbracket ('[':xs) | "]" `isSuffixOf` xs = take (length xs - 1) xs
10671068 unbracket xs = xs
10681069
1069−type KeyTable = M.Map Key Target
1070+type KeyTable = M.Map Key (Target, Attr)
10701071
10711072type SubstTable = M.Map Key Inlines
10721073
@@ -1264,3 +1265,14 @@ addWarning mbpos msg =
12641265infixr 5 <+?>
12651266(<+?>) :: (Monoid a, Monad m) => ParserT s st m a -> ParserT s st m a -> ParserT s st m a
12661267a <+?> b = a >>= flip fmap (try b <|> return mempty) . (<>)
1268+
1269+extractIdClass :: Attr -> Attr
1270+extractIdClass (ident, cls, kvs) = (ident', cls', kvs')
1271+ where
1272+ ident' = case (lookup "id" kvs) of
1273+ Just v -> v
1274+ Nothing -> ident
1275+ cls' = case (lookup "class" kvs) of
1276+ Just cl -> words cl
1277+ Nothing -> cls
1278+ kvs' = filter (\(k,_) -> k /= "id" || k /= "class") kvs
src/Text/Pandoc/Pretty.hs+1−1
@@ -171,7 +171,7 @@ infixr 5 $$
171171 else x <> cr <> y
172172
173173infixr 5 $+$
174−-- | @a $$ b@ puts @a@ above @b@, with a blank line between.
174+-- | @a $+$ b@ puts @a@ above @b@, with a blank line between.
175175($+$) :: Doc -> Doc -> Doc
176176($+$) x y = if isEmpty x
177177 then y
src/Text/Pandoc/Readers/CommonMark.hs+2−2
@@ -113,7 +113,7 @@ addInline (Node _ EMPH nodes) =
113113addInline (Node _ STRONG nodes) =
114114 (Strong (addInlines nodes) :)
115115addInline (Node _ (LINK url title) nodes) =
116− (Link (addInlines nodes) (unpack url, unpack title) :)
116+ (Link nullAttr (addInlines nodes) (unpack url, unpack title) :)
117117addInline (Node _ (IMAGE url title) nodes) =
118− (Image (addInlines nodes) (unpack url, unpack title) :)
118+ (Image nullAttr (addInlines nodes) (unpack url, unpack title) :)
119119addInline _ = id
src/Text/Pandoc/Readers/DocBook.hs+17−7
@@ -635,11 +635,20 @@ addToStart toadd bs =
635635-- A DocBook mediaobject is a wrapper around a set of alternative presentations
636636getMediaobject :: Element -> DB Inlines
637637getMediaobject e = do
638− imageUrl <- case filterChild (named "imageobject") e of
639− Nothing -> return mempty
640− Just z -> case filterChild (named "imagedata") z of
641− Nothing -> return mempty
642− Just i -> return $ attrValue "fileref" i
638+ (imageUrl, attr) <-
639+ case filterChild (named "imageobject") e of
640+ Nothing -> return (mempty, nullAttr)
641+ Just z -> case filterChild (named "imagedata") z of
642+ Nothing -> return (mempty, nullAttr)
643+ Just i -> let atVal a = attrValue a i
644+ w = case atVal "width" of
645+ "" -> []
646+ d -> [("width", d)]
647+ h = case atVal "depth" of
648+ "" -> []
649+ d -> [("height", d)]
650+ atr = (atVal "id", words $ atVal "role", w ++ h)
651+ in return (atVal "fileref", atr)
643652 let getCaption el = case filterChild (\x -> named "caption" x
644653 || named "textobject" x
645654 || named "alt" x) el of
@@ -649,7 +658,7 @@ getMediaobject e = do
649658 let (caption, title) = if isNull figTitle
650659 then (getCaption e, "")
651660 else (return figTitle, "fig:")
652− liftM (image imageUrl title) caption
661+ liftM (imageWith attr imageUrl title) caption
653662
654663getBlocks :: Element -> DB Blocks
655664getBlocks e = mconcat <$> (mapM parseBlock $ elContent e)
@@ -968,7 +977,8 @@ parseInline (Elem e) =
968977 Just h -> h
969978 _ -> ('#' : attrValue "linkend" e)
970979 let ils' = if ils == mempty then str href else ils
971− return $ link href "" ils'
980+ let attr = (attrValue "id" e, words $ attrValue "role" e, [])
981+ return $ linkWith attr href "" ils'
972982 "foreignphrase" -> emph <$> innerInlines
973983 "emphasis" -> case attrValue "role" e of
974984 "bold" -> strong <$> innerInlines
src/Text/Pandoc/Readers/Docx.hs+2−2
@@ -539,10 +539,10 @@ bodyPartToBlocks (OMathPara e) = do
539539
540540-- replace targets with generated anchors.
541541rewriteLink' :: Inline -> DocxContext Inline
542−rewriteLink' l@(Link ils ('#':target, title)) = do
542+rewriteLink' l@(Link attr ils ('#':target, title)) = do
543543 anchorMap <- gets docxAnchorMap
544544 return $ case M.lookup target anchorMap of
545− Just newTarget -> (Link ils ('#':newTarget, title))
545+ Just newTarget -> (Link attr ils ('#':newTarget, title))
546546 Nothing -> l
547547rewriteLink' il = return il
548548
src/Text/Pandoc/Readers/EPUB.hs+6−6
@@ -100,12 +100,12 @@ fetchImages mimes root arc (query iq -> links) =
100100 <$> findEntryByPath abslink arc
101101
102102iq :: Inline -> [FilePath]
103−iq (Image _ (url, _)) = [url]
103+iq (Image _ _ (url, _)) = [url]
104104iq _ = []
105105
106106-- Remove relative paths
107107renameImages :: FilePath -> Inline -> Inline
108−renameImages root (Image a (url, b)) = Image a (collapseFilePath (root </> url), b)
108+renameImages root (Image attr a (url, b)) = Image attr a (collapseFilePath (root </> url), b)
109109renameImages _ x = x
110110
111111imageToPandoc :: FilePath -> Pandoc
@@ -190,14 +190,14 @@ fixInlineIRs s (Span as v) =
190190 Span (fixAttrs s as) v
191191fixInlineIRs s (Code as code) =
192192 Code (fixAttrs s as) code
193−fixInlineIRs s (Link t ('#':url, tit)) =
194− Link t (addHash s url, tit)
193+fixInlineIRs s (Link attr t ('#':url, tit)) =
194+ Link attr t (addHash s url, tit)
195195fixInlineIRs _ v = v
196196
197197prependHash :: [String] -> Inline -> Inline
198−prependHash ps l@(Link is (url, tit))
198+prependHash ps l@(Link attr is (url, tit))
199199 | or [s `isPrefixOf` url | s <- ps] =
200− Link is ('#':url, tit)
200+ Link attr is ('#':url, tit)
201201 | otherwise = l
202202prependHash _ i = i
203203
src/Text/Pandoc/Readers/HTML.hs+11−15
@@ -601,16 +601,8 @@ pLineBreak = do
601601 return B.linebreak
602602
603603pLink :: TagParser Inlines
604−pLink = pRelLink <|> pAnchor
605−
606−pAnchor :: TagParser Inlines
607−pAnchor = try $ do
608− tag <- pSatisfy (tagOpenLit "a" (isJust . lookup "id"))
609− return $ B.spanWith (fromAttrib "id" tag , [], []) mempty
610−
611−pRelLink :: TagParser Inlines
612−pRelLink = try $ do
613− tag <- pSatisfy (tagOpenLit "a" (isJust . lookup "href"))
604+pLink = try $ do
605+ tag <- pSatisfy $ tagOpenLit "a" (const True)
614606 mbBaseHref <- baseHref <$> getState
615607 let url' = fromAttrib "href" tag
616608 let url = case (isURI url', mbBaseHref) of
@@ -618,11 +610,9 @@ pRelLink = try $ do
618610 _ -> url'
619611 let title = fromAttrib "title" tag
620612 let uid = fromAttrib "id" tag
621− let spanC = case uid of
622− [] -> id
623− s -> B.spanWith (s, [], [])
613+ let cls = words $ fromAttrib "class" tag
624614 lab <- trimInlines . mconcat <$> manyTill inline (pCloses "a")
625− return $ spanC $ B.link (escapeURI url) title lab
615+ return $ B.linkWith (uid, cls, []) (escapeURI url) title lab
626616
627617pImage :: TagParser Inlines
628618pImage = do
@@ -634,7 +624,13 @@ pImage = do
634624 _ -> url'
635625 let title = fromAttrib "title" tag
636626 let alt = fromAttrib "alt" tag
637− return $ B.image (escapeURI url) title (B.text alt)
627+ let uid = fromAttrib "id" tag
628+ let cls = words $ fromAttrib "class" tag
629+ let getAtt k = case fromAttrib k tag of
630+ "" -> []
631+ v -> [(k, v)]
632+ let kvs = concat $ map getAtt ["width", "height", "sizes", "srcset"]
633+ return $ B.imageWith (uid, cls, kvs) (escapeURI url) title (B.text alt)
638634
639635pCode :: TagParser Inlines
640636pCode = try $ do
src/Text/Pandoc/Readers/LaTeX.hs+19−10
@@ -54,6 +54,7 @@ import Data.List (intercalate)
5454import qualified Data.Map as M
5555import qualified Control.Exception as E
5656import Text.Pandoc.Highlighting (fromListingsLanguage)
57+import Text.Pandoc.ImageSize (numUnit, showFl)
5758import Text.Pandoc.Error
5859
5960-- | Parse LaTeX from string and return 'Pandoc' document.
@@ -398,7 +399,8 @@ inlineCommand = try $ do
398399 star <- option "" (string "*")
399400 let name' = name ++ star
400401 let raw = do
401− rawcommand <- getRawCommand name'
402+ rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced)
403+ let rawcommand = '\\' : name ++ star ++ snd rawargs
402404 transformed <- applyMacros' rawcommand
403405 if transformed /= rawcommand
404406 then parseFromString inlines transformed
@@ -528,7 +530,9 @@ inlineCommands = M.fromList $
528530 , ("href", (unescapeURL <$> braced <* optional sp) >>= \url ->
529531 tok >>= \lab ->
530532 pure (link url "" lab))
531− , ("includegraphics", skipopts *> (unescapeURL <$> braced) >>= mkImage)
533+ , ("includegraphics", do options <- option [] keyvals
534+ src <- unescapeURL <$> braced
535+ mkImage options src)
532536 , ("enquote", enquote)
533537 , ("cite", citation "cite" AuthorInText False)
534538 , ("Cite", citation "cite" AuthorInText False)
@@ -590,14 +594,19 @@ inlineCommands = M.fromList $
590594 -- in which case they will appear as raw latex blocks:
591595 [ "index" ]
592596
593−mkImage :: String -> LP Inlines
594−mkImage src = do
597+mkImage :: [(String, String)] -> String -> LP Inlines
598+mkImage options src = do
599+ let replaceTextwidth (k,v) = case numUnit v of
600+ Just (num, "\\textwidth") -> (k, showFl (num * 100) ++ "%")
601+ _ -> (k, v)
602+ let kvs = map replaceTextwidth $ filter (\(k,_) -> k `elem` ["width", "height"]) options
603+ let attr = ("",[], kvs)
595604 let alt = str "image"
596605 case takeExtension src of
597606 "" -> do
598607 defaultExt <- getOption readerDefaultImageExtension
599− return $ image (addExtension src defaultExt) "" alt
600− _ -> return $ image src "" alt
608+ return $ imageWith attr (addExtension src defaultExt) "" alt
609+ _ -> return $ imageWith attr src "" alt
601610
602611inNote :: Inlines -> Inlines
603612inNote ils =
@@ -978,7 +987,7 @@ readFileFromDirs (d:ds) f =
978987keyval :: LP (String, String)
979988keyval = try $ do
980989 key <- many1 alphaNum
981− val <- option "" $ char '=' >> many1 alphaNum
990+ val <- option "" $ char '=' >> many1 (alphaNum <|> char '.' <|> char '\\')
982991 skipMany spaceChar
983992 optional (char ',')
984993 skipMany spaceChar
@@ -1005,11 +1014,11 @@ rawLaTeXInline = do
10051014
10061015addImageCaption :: Blocks -> LP Blocks
10071016addImageCaption = walkM go
1008− where go (Image alt (src,tit)) = do
1017+ where go (Image attr alt (src,tit)) = do
10091018 mbcapt <- stateCaption <$> getState
10101019 return $ case mbcapt of
1011− Just ils -> Image (toList ils) (src, "fig:")
1012− Nothing -> Image alt (src,tit)
1020+ Just ils -> Image attr (toList ils) (src, "fig:")
1021+ Nothing -> Image attr alt (src,tit)
10131022 go x = return x
10141023
10151024addTableCaption :: Blocks -> LP Blocks
src/Text/Pandoc/Readers/Markdown.hs+31−26
@@ -368,23 +368,26 @@ referenceKey = try $ do
368368 let sourceURL = liftM unwords $ many $ try $ do
369369 skipMany spaceChar
370370 notFollowedBy' referenceTitle
371+ notFollowedBy' $ guardEnabled Ext_common_link_attributes >> attributes
371372 notFollowedBy' (() <$ reference)
372373 many1 $ notFollowedBy space >> litChar
373374 let betweenAngles = try $ char '<' >> manyTill litChar (char '>')
374375 src <- try betweenAngles <|> sourceURL
375376 tit <- option "" referenceTitle
376− -- currently we just ignore MMD-style link/image attributes
377− _kvs <- option [] $ guardEnabled Ext_link_attributes
378− >> many (try $ spnl >> keyValAttr)
377+ attr <- option nullAttr $ try $
378+ guardEnabled Ext_common_link_attributes >> skipSpaces >> attributes
379+ addKvs <- option [] $ guardEnabled Ext_link_attributes
380+ >> many (try $ spnl >> keyValAttr)
379381 blanklines
380− let target = (escapeURI $ trimr src, tit)
382+ let attr' = extractIdClass $ foldl (\x f -> f x) attr addKvs
383+ target = (escapeURI $ trimr src, tit)
381384 st <- getState
382385 let oldkeys = stateKeys st
383386 let key = toKey raw
384387 case M.lookup key oldkeys of
385388 Just _ -> addWarning (Just pos) $ "Duplicate link reference `" ++ raw ++ "'"
386389 Nothing -> return ()
387− updateState $ \s -> s { stateKeys = M.insert key target oldkeys }
390+ updateState $ \s -> s { stateKeys = M.insert key (target, attr') oldkeys }
388391 return $ return mempty
389392
390393referenceTitle :: MarkdownParser String
@@ -517,9 +520,9 @@ atxHeader = try $ do
517520 (text, raw) <- withRaw $
518521 trimInlinesF . mconcat <$> many (notFollowedBy atxClosing >> inline)
519522 attr <- atxClosing
520− attr'@(ident,_,_) <- registerHeader attr (runF text defaultParserState)
523+ attr' <- registerHeader attr (runF text defaultParserState)
521524 guardDisabled Ext_implicit_header_references
522− <|> registerImplicitHeader raw ident
525+ <|> registerImplicitHeader raw attr'
523526 return $ B.headerWith attr' level <$> text
524527
525528atxClosing :: MarkdownParser Attr
@@ -560,16 +563,16 @@ setextHeader = try $ do
560563 many (char underlineChar)
561564 blanklines
562565 let level = (fromMaybe 0 $ findIndex (== underlineChar) setextHChars) + 1
563− attr'@(ident,_,_) <- registerHeader attr (runF text defaultParserState)
566+ attr' <- registerHeader attr (runF text defaultParserState)
564567 guardDisabled Ext_implicit_header_references
565− <|> registerImplicitHeader raw ident
568+ <|> registerImplicitHeader raw attr'
566569 return $ B.headerWith attr' level <$> text
567570
568−registerImplicitHeader :: String -> String -> MarkdownParser ()
569−registerImplicitHeader raw ident = do
571+registerImplicitHeader :: String -> Attr -> MarkdownParser ()
572+registerImplicitHeader raw attr@(ident, _, _) = do
570573 let key = toKey $ "[" ++ raw ++ "]"
571574 updateState (\s -> s { stateHeaderKeys =
572− M.insert key ('#':ident,"") (stateHeaderKeys s) })
575+ M.insert key (('#':ident,""), attr) (stateHeaderKeys s) })
573576
574577--
575578-- hrule block
@@ -980,11 +983,11 @@ para = try $ do
980983 return $ do
981984 result' <- result
982985 case B.toList result' of
983− [Image alt (src,tit)]
986+ [Image attr alt (src,tit)]
984987 | Ext_implicit_figures `Set.member` exts ->
985988 -- the fig: at beginning of title indicates a figure
986989 return $ B.para $ B.singleton
987− $ Image alt (src,'f':'i':'g':':':tit)
990+ $ Image attr alt (src,'f':'i':'g':':':tit)
988991 _ -> return $ B.para result'
989992
990993plain :: MarkdownParser (F Blocks)
@@ -1719,16 +1722,18 @@ link = try $ do
17191722 setState $ st{ stateAllowLinks = False }
17201723 (lab,raw) <- reference
17211724 setState $ st{ stateAllowLinks = True }
1722− regLink B.link lab <|> referenceLink B.link (lab,raw)
1725+ regLink B.linkWith lab <|> referenceLink B.linkWith (lab,raw)
17231726
1724−regLink :: (String -> String -> Inlines -> Inlines)
1727+regLink :: (Attr -> String -> String -> Inlines -> Inlines)
17251728 -> F Inlines -> MarkdownParser (F Inlines)
17261729regLink constructor lab = try $ do
17271730 (src, tit) <- source
1728− return $ constructor src tit <$> lab
1731+ attr <- option nullAttr $
1732+ guardEnabled Ext_common_link_attributes >> attributes
1733+ return $ constructor attr src tit <$> lab
17291734
17301735-- a link like [this][ref] or [this][] or [this]
1731−referenceLink :: (String -> String -> Inlines -> Inlines)
1736+referenceLink :: (Attr -> String -> String -> Inlines -> Inlines)
17321737 -> (F Inlines, String) -> MarkdownParser (F Inlines)
17331738referenceLink constructor (lab, raw) = do
17341739 sp <- (True <$ lookAhead (char ' ')) <|> return False
@@ -1740,7 +1745,7 @@ referenceLink constructor (lab, raw) = do
17401745 let labIsRef = raw' == "" || raw' == "[]"
17411746 let key = toKey $ if labIsRef then raw else raw'
17421747 parsedRaw <- parseFromString (mconcat <$> many inline) raw'
1743− fallback <- parseFromString (mconcat <$> many inline) $ dropBrackets raw
1748+ fallback <- parseFromString (mconcat <$> many inline) $ dropBrackets raw
17441749 implicitHeaderRefs <- option False $
17451750 True <$ guardEnabled Ext_implicit_header_references
17461751 let makeFallback = do
@@ -1757,10 +1762,10 @@ referenceLink constructor (lab, raw) = do
17571762 then do
17581763 headerKeys <- asksF stateHeaderKeys
17591764 case M.lookup key headerKeys of
1760− Just (src, tit) -> constructor src tit <$> lab
1761− Nothing -> makeFallback
1765+ Just ((src, tit), _) -> constructor nullAttr src tit <$> lab
1766+ Nothing -> makeFallback
17621767 else makeFallback
1763− Just (src,tit) -> constructor src tit <$> lab
1768+ Just ((src,tit), attr) -> constructor attr src tit <$> lab
17641769
17651770dropBrackets :: String -> String
17661771dropBrackets = reverse . dropRB . reverse . dropLB
@@ -1794,9 +1799,9 @@ image = try $ do
17941799 char '!'
17951800 (lab,raw) <- reference
17961801 defaultExt <- getOption readerDefaultImageExtension
1797− let constructor src = case takeExtension src of
1798− "" -> B.image (addExtension src defaultExt)
1799− _ -> B.image src
1802+ let constructor attr' src = case takeExtension src of
1803+ "" -> B.imageWith attr' (addExtension src defaultExt)
1804+ _ -> B.imageWith attr' src
18001805 regLink constructor lab <|> referenceLink constructor (lab,raw)
18011806
18021807note :: MarkdownParser (F Inlines)
@@ -1947,7 +1952,7 @@ textualCite = try $ do
19471952 spc | null spaces' = mempty
19481953 | otherwise = B.space
19491954 lab <- parseFromString (mconcat <$> many inline) $ dropBrackets raw'
1950− fallback <- referenceLink B.link (lab,raw')
1955+ fallback <- referenceLink B.linkWith (lab,raw')
19511956 return $ do
19521957 fallback' <- fallback
19531958 cs' <- cs
src/Text/Pandoc/Readers/MediaWiki.hs+19−11
@@ -576,21 +576,29 @@ image = try $ do
576576 sym "[["
577577 choice imageIdentifiers
578578 fname <- many1 (noneOf "|]")
579− _ <- many (try $ char '|' *> imageOption)
579+ _ <- many imageOption
580+ dims <- try (char '|' *> (sepBy (many digit) (char 'x')) <* string "px")
581+ <|> return []
582+ _ <- many imageOption
583+ let kvs = case dims of
584+ w:[] -> [("width", w)]
585+ w:(h:[]) -> [("width", w), ("height", h)]
586+ _ -> []
587+ let attr = ("", [], kvs)
580588 caption <- (B.str fname <$ sym "]]")
581589 <|> try (char '|' *> (mconcat <$> manyTill inline (sym "]]")))
582− return $ B.image fname ("fig:" ++ stringify caption) caption
590+ return $ B.imageWith attr fname ("fig:" ++ stringify caption) caption
583591
584592imageOption :: MWParser String
585−imageOption =
586− try (oneOfStrings [ "border", "thumbnail", "frameless"
587− , "thumb", "upright", "left", "right"
588− , "center", "none", "baseline", "sub"
589− , "super", "top", "text-top", "middle"
590− , "bottom", "text-bottom" ])
591− <|> try (string "frame")
592− <|> try (many1 (oneOf "x0123456789") <* string "px")
593− <|> try (oneOfStrings ["link=","alt=","page=","class="] <* many (noneOf "|]"))
593+imageOption = try $ char '|' *> opt
594+ where
595+ opt = try (oneOfStrings [ "border", "thumbnail", "frameless"
596+ , "thumb", "upright", "left", "right"
597+ , "center", "none", "baseline", "sub"
598+ , "super", "top", "text-top", "middle"
599+ , "bottom", "text-bottom" ])
600+ <|> try (string "frame")
601+ <|> try (oneOfStrings ["link=","alt=","page=","class="] <* many (noneOf "|]"))
594602
595603collapseUnderscores :: String -> String
596604collapseUnderscores [] = []
src/Text/Pandoc/Readers/RST.hs+10−8
@@ -812,9 +812,9 @@ substKey = try $ do
812812 res <- B.toList <$> directive'
813813 il <- case res of
814814 -- use alt unless :alt: attribute on image:
815− [Para [Image [Str "image"] (src,tit)]] ->
815+ [Para [Image _ [Str "image"] (src,tit)]] ->
816816 return $ B.image src tit alt
817− [Para [Link [Image [Str "image"] (src,tit)] (src',tit')]] ->
817+ [Para [Link _ [Image _ [Str "image"] (src,tit)] (src',tit')]] ->
818818 return $ B.link src' tit' (B.image src tit alt)
819819 [Para ils] -> return $ B.fromList ils
820820 _ -> mzero
@@ -827,7 +827,8 @@ anonymousKey = try $ do
827827 src <- targetURI
828828 pos <- getPosition
829829 let key = toKey $ "_" ++ printf "%09d" (sourceLine pos)
830− updateState $ \s -> s { stateKeys = M.insert key (src,"") $ stateKeys s }
830+ --TODO: parse width, height, class and name attributes
831+ updateState $ \s -> s { stateKeys = M.insert key ((src,""), nullAttr) $ stateKeys s }
831832
832833stripTicks :: String -> String
833834stripTicks = reverse . stripTick . reverse . stripTick
@@ -841,7 +842,8 @@ regularKey = try $ do
841842 char ':'
842843 src <- targetURI
843844 let key = toKey $ stripTicks ref
844− updateState $ \s -> s { stateKeys = M.insert key (src,"") $ stateKeys s }
845+ --TODO: parse width, height, class and name attributes
846+ updateState $ \s -> s { stateKeys = M.insert key ((src,""), nullAttr) $ stateKeys s }
845847
846848--
847849-- tables
@@ -1131,12 +1133,12 @@ referenceLink = try $ do
11311133 if null anonKeys
11321134 then mzero
11331135 else return (head anonKeys)
1134− (src,tit) <- case M.lookup key keyTable of
1135− Nothing -> fail "no corresponding key"
1136− Just target -> return target
1136+ ((src,tit), attr) <- case M.lookup key keyTable of
1137+ Nothing -> fail "no corresponding key"
1138+ Just val -> return val
11371139 -- if anonymous link, remove key so it won't be used again
11381140 when (isAnonKey key) $ updateState $ \s -> s{ stateKeys = M.delete key keyTable }
1139− return $ B.link src tit label'
1141+ return $ B.linkWith attr src tit label'
11401142
11411143autoURI :: RSTParser Inlines
11421144autoURI = do
src/Text/Pandoc/Shared.hs+4−4
@@ -523,10 +523,10 @@ normalizeInlines (Note bs : ys) = Note (normalizeBlocks bs) :
523523 normalizeInlines ys
524524normalizeInlines (Quoted qt ils : ys) =
525525 Quoted qt (normalizeInlines ils) : normalizeInlines ys
526−normalizeInlines (Link ils t : ys) =
527− Link (normalizeInlines ils) t : normalizeInlines ys
528−normalizeInlines (Image ils t : ys) =
529− Image (normalizeInlines ils) t : normalizeInlines ys
526+normalizeInlines (Link attr ils t : ys) =
527+ Link attr (normalizeInlines ils) t : normalizeInlines ys
528+normalizeInlines (Image attr ils t : ys) =
529+ Image attr (normalizeInlines ils) t : normalizeInlines ys
530530normalizeInlines (Cite cs ils : ys) =
531531 Cite cs (normalizeInlines ils) : normalizeInlines ys
532532normalizeInlines (x : xs) = x : normalizeInlines xs
src/Text/Pandoc/Writers/AsciiDoc.hs+18−6
@@ -46,6 +46,7 @@ import Text.Pandoc.Parsing hiding (blankline, space)
4646import Data.Maybe (fromMaybe)
4747import Data.List ( stripPrefix, intersperse, intercalate )
4848import Text.Pandoc.Pretty
49+import Text.Pandoc.ImageSize
4950import Control.Monad.State
5051import qualified Data.Map as M
5152import Data.Aeson (Value(String), fromJSON, toJSON, Result(..))
@@ -126,8 +127,8 @@ blockToAsciiDoc _ Null = return empty
126127blockToAsciiDoc opts (Plain inlines) = do
127128 contents <- inlineListToAsciiDoc opts inlines
128129 return $ contents <> blankline
129−blockToAsciiDoc opts (Para [Image alt (src,'f':'i':'g':':':tit)]) = do
130− blockToAsciiDoc opts (Para [Image alt (src,tit)])
130+blockToAsciiDoc opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) = do
131+ blockToAsciiDoc opts (Para [Image attr alt (src,tit)])
131132blockToAsciiDoc opts (Para inlines) = do
132133 contents <- inlineListToAsciiDoc opts inlines
133134 -- escape if para starts with ordered list marker
@@ -392,7 +393,7 @@ inlineToAsciiDoc _ (RawInline f s)
392393inlineToAsciiDoc _ (LineBreak) = return $ " +" <> cr
393394inlineToAsciiDoc _ Space = return space
394395inlineToAsciiDoc opts (Cite _ lst) = inlineListToAsciiDoc opts lst
395−inlineToAsciiDoc opts (Link txt (src, _tit)) = do
396+inlineToAsciiDoc opts (Link _ txt (src, _tit)) = do
396397-- relative: link:downloads/foo.zip[download foo.zip]
397398-- abs: http://google.cod[Google]
398399-- or my@email.com[email john]
@@ -408,7 +409,7 @@ inlineToAsciiDoc opts (Link txt (src, _tit)) = do
408409 return $ if useAuto
409410 then text srcSuffix
410411 else prefix <> text src <> "[" <> linktext <> "]"
411−inlineToAsciiDoc opts (Image alternate (src, tit)) = do
412+inlineToAsciiDoc opts (Image attr alternate (src, tit)) = do
412413-- image:images/logo.png[Company logo, title="blah"]
413414 let txt = if (null alternate) || (alternate == [Str ""])
414415 then [Str "image"]
@@ -416,8 +417,19 @@ inlineToAsciiDoc opts (Image alternate (src, tit)) = do
416417 linktext <- inlineListToAsciiDoc opts txt
417418 let linktitle = if null tit
418419 then empty
419− else text $ ",title=\"" ++ tit ++ "\""
420− return $ "image:" <> text src <> "[" <> linktext <> linktitle <> "]"
420+ else ",title=\"" <> text tit <> "\""
421+ showDim dir = case (dimension dir attr) of
422+ Just (Percent a) ->
423+ ["scaledwidth=" <> text (show (Percent a))]
424+ Just dim ->
425+ [text (show dir) <> "=" <> text (showInPixel opts dim)]
426+ Nothing ->
427+ []
428+ dimList = showDim Width ++ showDim Height
429+ dims = if null dimList
430+ then empty
431+ else "," <> cat (intersperse "," dimList)
432+ return $ "image:" <> text src <> "[" <> linktext <> linktitle <> dims <> "]"
421433inlineToAsciiDoc opts (Note [Para inlines]) =
422434 inlineToAsciiDoc opts (Note [Plain inlines])
423435inlineToAsciiDoc opts (Note [Plain inlines]) = do
src/Text/Pandoc/Writers/CommonMark.hs+2−2
@@ -153,9 +153,9 @@ inlineToNodes (SmallCaps xs) =
153153 ((node (INLINE_HTML (T.pack "<span style=\"font-variant:small-caps;\">")) []
154154 : inlinesToNodes xs ++
155155 [node (INLINE_HTML (T.pack "</span>")) []]) ++ )
156−inlineToNodes (Link ils (url,tit)) =
156+inlineToNodes (Link _ ils (url,tit)) =
157157 (node (LINK (T.pack url) (T.pack tit)) (inlinesToNodes ils) :)
158−inlineToNodes (Image ils (url,tit)) =
158+inlineToNodes (Image _ ils (url,tit)) =
159159 (node (IMAGE (T.pack url) (T.pack tit)) (inlinesToNodes ils) :)
160160inlineToNodes (RawInline fmt xs)
161161 | fmt == Format "html" = (node (INLINE_HTML (T.pack xs)) [] :)
src/Text/Pandoc/Writers/ConTeXt.hs+32−9
@@ -35,10 +35,11 @@ import Text.Pandoc.Writers.Shared
3535import Text.Pandoc.Options
3636import Text.Pandoc.Walk (query)
3737import Text.Printf ( printf )
38−import Data.List ( intercalate )
38+import Data.List ( intercalate, intersperse )
3939import Data.Char ( ord )
4040import Control.Monad.State
4141import Text.Pandoc.Pretty
42+import Text.Pandoc.ImageSize
4243import Text.Pandoc.Templates ( renderTemplate' )
4344import Network.URI ( isURI, unEscapeString )
4445
@@ -141,10 +142,14 @@ blockToConTeXt :: Block
141142blockToConTeXt Null = return empty
142143blockToConTeXt (Plain lst) = inlineListToConTeXt lst
143144-- title beginning with fig: indicates that the image is a figure
144−blockToConTeXt (Para [Image txt (src,'f':'i':'g':':':_)]) = do
145+blockToConTeXt (Para [Image attr txt (src,'f':'i':'g':':':_)]) = do
145146 capt <- inlineListToConTeXt txt
146− return $ blankline $$ "\\placefigure" <> braces capt <>
147− braces ("\\externalfigure" <> brackets (text src)) <> blankline
147+ img <- inlineToConTeXt (Image attr txt (src, ""))
148+ let (ident, _, _) = attr
149+ label = if null ident
150+ then empty
151+ else "[]" <> brackets (text $ toLabel ident)
152+ return $ blankline $$ "\\placefigure" <> label <> braces capt <> img <> blankline
148153blockToConTeXt (Para lst) = do
149154 contents <- inlineListToConTeXt lst
150155 return $ contents <> blankline
@@ -312,7 +317,7 @@ inlineToConTeXt (RawInline _ _) = return empty
312317inlineToConTeXt (LineBreak) = return $ text "\\crlf" <> cr
313318inlineToConTeXt Space = return space
314319-- Handle HTML-like internal document references to sections
315−inlineToConTeXt (Link txt (('#' : ref), _)) = do
320+inlineToConTeXt (Link _ txt (('#' : ref), _)) = do
316321 opts <- gets stOptions
317322 contents <- inlineListToConTeXt txt
318323 let ref' = toLabel $ stringToConTeXt opts ref
@@ -320,7 +325,7 @@ inlineToConTeXt (Link txt (('#' : ref), _)) = do
320325 <> braces contents
321326 <> brackets (text ref')
322327
323−inlineToConTeXt (Link txt (src, _)) = do
328+inlineToConTeXt (Link _ txt (src, _)) = do
324329 let isAutolink = txt == [Str (unEscapeString src)]
325330 st <- get
326331 let next = stNextRef st
@@ -335,11 +340,29 @@ inlineToConTeXt (Link txt (src, _)) = do
335340 else brackets empty <> brackets contents)
336341 <> "\\from"
337342 <> brackets (text ref)
338−inlineToConTeXt (Image _ (src, _)) = do
339− let src' = if isURI src
343+inlineToConTeXt (Image attr@(_,cls,_) _ (src, _)) = do
344+ opts <- gets stOptions
345+ let showDim dir = let d = text (show dir) <> "="
346+ in case (dimension dir attr) of
347+ Just (Pixel a) ->
348+ [d <> text (showInInch opts (Pixel a)) <> "in"]
349+ Just (Percent a) ->
350+ [d <> text (showFl (a / 100)) <> "\\textwidth"]
351+ Just dim ->
352+ [d <> text (show dim)]
353+ Nothing ->
354+ []
355+ dimList = showDim Width ++ showDim Height
356+ dims = if null dimList
357+ then empty
358+ else brackets $ cat (intersperse "," dimList)
359+ clas = if null cls
360+ then empty
361+ else brackets $ text $ toLabel $ head cls
362+ src' = if isURI src
340363 then src
341364 else unEscapeString src
342− return $ braces $ "\\externalfigure" <> brackets (text src')
365+ return $ braces $ "\\externalfigure" <> brackets (text src') <> dims <> clas
343366inlineToConTeXt (Note contents) = do
344367 contents' <- blockListToConTeXt contents
345368 let codeBlock x@(CodeBlock _ _) = [x]
src/Text/Pandoc/Writers/Custom.hs+3−3
@@ -222,7 +222,7 @@ blockToCustom _ Null = return ""
222222
223223blockToCustom lua (Plain inlines) = callfunc lua "Plain" inlines
224224
225−blockToCustom lua (Para [Image txt (src,tit)]) =
225+blockToCustom lua (Para [Image _ txt (src,tit)]) =
226226 callfunc lua "CaptionedImage" src tit txt
227227
228228blockToCustom lua (Para inlines) = callfunc lua "Para" inlines
@@ -308,10 +308,10 @@ inlineToCustom lua (RawInline format str) =
308308
309309inlineToCustom lua (LineBreak) = callfunc lua "LineBreak"
310310
311−inlineToCustom lua (Link txt (src,tit)) =
311+inlineToCustom lua (Link _ txt (src,tit)) =
312312 callfunc lua "Link" txt src tit
313313
314−inlineToCustom lua (Image alt (src,tit)) =
314+inlineToCustom lua (Image _ alt (src,tit)) =
315315 callfunc lua "Image" alt src tit
316316
317317inlineToCustom lua (Note contents) = callfunc lua "Note" contents
src/Text/Pandoc/Writers/Docbook.hs+28−7
@@ -42,6 +42,7 @@ import Data.Char ( toLower )
4242import Data.Monoid ( Any(..) )
4343import Text.Pandoc.Highlighting ( languages, languagesByExtension )
4444import Text.Pandoc.Pretty
45+import Text.Pandoc.ImageSize
4546import qualified Text.Pandoc.Builder as B
4647import Text.TeXMath
4748import qualified Text.XML.Light as Xml
@@ -150,6 +151,15 @@ listItemToDocbook :: WriterOptions -> [Block] -> Doc
150151listItemToDocbook opts item =
151152 inTagsIndented "listitem" $ blocksToDocbook opts $ map plainToPara item
152153
154+imageToDocbook :: WriterOptions -> Attr -> String -> Doc
155+imageToDocbook _ attr src = selfClosingTag "imagedata" $
156+ ("fileref", src) : idAndRole attr ++ dims
157+ where
158+ dims = go Width "width" ++ go Height "depth"
159+ go dir dstr = case (dimension dir attr) of
160+ Just a -> [(dstr, show a)]
161+ Nothing -> []
162+
153163-- | Convert a Pandoc block element to Docbook.
154164blockToDocbook :: WriterOptions -> Block -> Doc
155165blockToDocbook _ Null = empty
@@ -165,7 +175,7 @@ blockToDocbook opts (Div _ bs) = blocksToDocbook opts $ map plainToPara bs
165175blockToDocbook _ (Header _ _ _) = empty -- should not occur after hierarchicalize
166176blockToDocbook opts (Plain lst) = inlinesToDocbook opts lst
167177-- title beginning with fig: indicates that the image is a figure
168−blockToDocbook opts (Para [Image txt (src,'f':'i':'g':':':_)]) =
178+blockToDocbook opts (Para [Image attr txt (src,'f':'i':'g':':':_)]) =
169179 let alt = inlinesToDocbook opts txt
170180 capt = if null txt
171181 then empty
@@ -174,7 +184,7 @@ blockToDocbook opts (Para [Image txt (src,'f':'i':'g':':':_)]) =
174184 capt $$
175185 (inTagsIndented "mediaobject" $
176186 (inTagsIndented "imageobject"
177− (selfClosingTag "imagedata" [("fileref",src)])) $$
187+ (imageToDocbook opts attr src)) $$
178188 inTagsSimple "textobject" (inTagsSimple "phrase" alt))
179189blockToDocbook opts (Para lst)
180190 | hasLineBreaks lst = flush $ nowrap $ inTagsSimple "literallayout" $ inlinesToDocbook opts lst
@@ -321,7 +331,7 @@ inlineToDocbook _ (RawInline f x) | f == "html" || f == "docbook" = text x
321331 | otherwise = empty
322332inlineToDocbook _ LineBreak = text "\n"
323333inlineToDocbook _ Space = space
324−inlineToDocbook opts (Link txt (src, _))
334+inlineToDocbook opts (Link attr txt (src, _))
325335 | Just email <- stripPrefix "mailto:" src =
326336 let emailLink = inTagsSimple "email" $ text $
327337 escapeStringForXML $ email
@@ -331,19 +341,30 @@ inlineToDocbook opts (Link txt (src, _))
331341 char '(' <> emailLink <> char ')'
332342 | otherwise =
333343 (if isPrefixOf "#" src
334− then inTags False "link" [("linkend", drop 1 src)]
335− else inTags False "ulink" [("url", src)]) $
344+ then inTags False "link" $ ("linkend", drop 1 src) : idAndRole attr
345+ else inTags False "ulink" $ ("url", src) : idAndRole attr ) $
336346 inlinesToDocbook opts txt
337−inlineToDocbook _ (Image _ (src, tit)) =
347+inlineToDocbook opts (Image attr _ (src, tit)) =
338348 let titleDoc = if null tit
339349 then empty
340350 else inTagsIndented "objectinfo" $
341351 inTagsIndented "title" (text $ escapeStringForXML tit)
342352 in inTagsIndented "inlinemediaobject" $ inTagsIndented "imageobject" $
343− titleDoc $$ selfClosingTag "imagedata" [("fileref", src)]
353+ titleDoc $$ imageToDocbook opts attr src
344354inlineToDocbook opts (Note contents) =
345355 inTagsIndented "footnote" $ blocksToDocbook opts contents
346356
347357isMathML :: HTMLMathMethod -> Bool
348358isMathML (MathML _) = True
349359isMathML _ = False
360+
361+idAndRole :: Attr -> [(String, String)]
362+idAndRole (id',cls,_) = ident ++ role
363+ where
364+ ident = if null id'
365+ then []
366+ else [("id", id')]
367+ role = if null cls
368+ then []
369+ else [("role", unwords cls)]
370+
src/Text/Pandoc/Writers/Docx.hs+11−13
@@ -536,7 +536,6 @@ styleToOpenXml sm style =
536536 , mknode "w:link" [("w:val","VerbatimChar")] ()
537537 , mknode "w:pPr" []
538538 $ mknode "w:wordWrap" [("w:val","off")] ()
539− : mknode "w:noProof" [] ()
540539 : ( maybe [] (\col -> [mknode "w:shd" [("w:val","clear"),("w:fill",drop 1 $ fromColor col)] ()])
541540 $ backgroundColor style )
542541 ]
@@ -752,7 +751,7 @@ blockToOpenXML opts (Header lev (ident,_,_) lst) = do
752751blockToOpenXML opts (Plain lst) = withParaProp (pCustomStyle "Compact")
753752 $ blockToOpenXML opts (Para lst)
754753-- title beginning with fig: indicates that the image is a figure
755−blockToOpenXML opts (Para [Image alt (src,'f':'i':'g':':':tit)]) = do
754+blockToOpenXML opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) = do
756755 setFirstPara
757756 pushParaProp $ pCustomStyle $
758757 if null alt
@@ -760,7 +759,7 @@ blockToOpenXML opts (Para [Image alt (src,'f':'i':'g':':':tit)]) = do
760759 else "FigureWithCaption"
761760 paraProps <- getParaProps False
762761 popParaProp
763− contents <- inlinesToOpenXML opts [Image alt (src,tit)]
762+ contents <- inlinesToOpenXML opts [Image attr alt (src,tit)]
764763 captionNode <- withParaProp (pCustomStyle "ImageCaption")
765764 $ blockToOpenXML opts (Para alt)
766765 return $ mknode "w:p" [] (paraProps ++ contents) : captionNode
@@ -1087,11 +1086,11 @@ inlineToOpenXML opts (Note bs) = do
10871086 [ mknode "w:rPr" [] footnoteStyle
10881087 , mknode "w:footnoteReference" [("w:id", notenum)] () ] ]
10891088-- internal link:
1090−inlineToOpenXML opts (Link txt ('#':xs,_)) = do
1089+inlineToOpenXML opts (Link _ txt ('#':xs,_)) = do
10911090 contents <- withTextPropM (rStyleM "Hyperlink") $ inlinesToOpenXML opts txt
10921091 return [ mknode "w:hyperlink" [("w:anchor",xs)] contents ]
10931092-- external link:
1094−inlineToOpenXML opts (Link txt (src,_)) = do
1093+inlineToOpenXML opts (Link _ txt (src,_)) = do
10951094 contents <- withTextPropM (rStyleM "Hyperlink") $ inlinesToOpenXML opts txt
10961095 extlinks <- gets stExternalLinks
10971096 id' <- case M.lookup src extlinks of
@@ -1102,7 +1101,7 @@ inlineToOpenXML opts (Link txt (src,_)) = do
11021101 M.insert src i extlinks }
11031102 return i
11041103 return [ mknode "w:hyperlink" [("r:id",id')] contents ]
1105−inlineToOpenXML opts (Image alt (src, tit)) = do
1104+inlineToOpenXML opts (Image attr alt (src, tit)) = do
11061105 -- first, check to see if we've already done this image
11071106 pageWidth <- gets stPrintWidth
11081107 imgs <- gets stImages
@@ -1119,7 +1118,8 @@ inlineToOpenXML opts (Image alt (src, tit)) = do
11191118 Right (img, mt) -> do
11201119 ident <- ("rId"++) `fmap` getUniqueId
11211120 (xpt,ypt) <- case imageSize img of
1122− Right size -> return $ sizeInPoints size
1121+ Right size -> return $
1122+ desiredSizeInPoints opts attr size
11231123 Left msg -> do
11241124 liftIO $ warn $
11251125 "Could not determine image size in `" ++
@@ -1211,11 +1211,9 @@ parseXml refArchive distArchive relpath =
12111211
12121212-- | Scales the image to fit the page
12131213-- sizes are passed in emu
1214−fitToPage :: (Integer, Integer) -> Integer -> (Integer, Integer)
1214+fitToPage :: (Double, Double) -> Integer -> (Integer, Integer)
12151215fitToPage (x, y) pageWidth
12161216 -- Fixes width to the page width and scales the height
1217− | x > pageWidth =
1218− (pageWidth, round $
1219− ((fromIntegral pageWidth) / ((fromIntegral :: Integer -> Double) x)) * (fromIntegral y))
1220− | otherwise = (x, y)
1221−
1217+ | x > fromIntegral pageWidth =
1218+ (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)
1219+ | otherwise = (floor x, floor y)
src/Text/Pandoc/Writers/DokuWiki.hs+18−6
@@ -47,6 +47,7 @@ import Text.Pandoc.Options ( WriterOptions(
4747import Text.Pandoc.Shared ( escapeURI, removeFormatting, camelCaseToHyphenated
4848 , trimr, normalize, substitute )
4949import Text.Pandoc.Writers.Shared ( defField, metaToJSON )
50+import Text.Pandoc.ImageSize
5051import Text.Pandoc.Templates ( renderTemplate' )
5152import Data.List ( intersect, intercalate, isPrefixOf, transpose )
5253import Data.Default (Default(..))
@@ -126,7 +127,7 @@ blockToDokuWiki opts (Plain inlines) =
126127
127128-- title beginning with fig: indicates that the image is a figure
128129-- dokuwiki doesn't support captions - so combine together alt and caption into alt
129−blockToDokuWiki opts (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
130+blockToDokuWiki opts (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
130131 capt <- if null txt
131132 then return ""
132133 else (" " ++) `fmap` inlineListToDokuWiki opts txt
@@ -135,7 +136,7 @@ blockToDokuWiki opts (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
135136 else "|" ++ if null tit then capt else tit ++ capt
136137 -- Relative links fail isURI and receive a colon
137138 prefix = if isURI src then "" else ":"
138− return $ "{{" ++ prefix ++ src ++ opt ++ "}}\n"
139+ return $ "{{" ++ prefix ++ src ++ imageDims opts attr ++ opt ++ "}}\n"
139140
140141blockToDokuWiki opts (Para inlines) = do
141142 indent <- stIndent <$> ask
@@ -462,18 +463,18 @@ inlineToDokuWiki _ (LineBreak) = return "\\\\\n"
462463
463464inlineToDokuWiki _ Space = return " "
464465
465−inlineToDokuWiki opts (Link txt (src, _)) = do
466+inlineToDokuWiki opts (Link _ txt (src, _)) = do
466467 label <- inlineListToDokuWiki opts txt
467468 case txt of
468469 [Str s] | "mailto:" `isPrefixOf` src -> return $ "<" ++ s ++ ">"
469470 | escapeURI s == src -> return src
470471 _ -> if isURI src
471− then return $ "[[" ++ src ++ "|" ++ label ++ "]]"
472+ then return $ "[[" ++ src ++ "|" ++ label ++ "]]"
472473 else return $ "[[" ++ src' ++ "|" ++ label ++ "]]"
473474 where src' = case src of
474475 '/':xs -> xs -- with leading / it's a
475476 _ -> src -- link to a help page
476−inlineToDokuWiki opts (Image alt (source, tit)) = do
477+inlineToDokuWiki opts (Image attr alt (source, tit)) = do
477478 alt' <- inlineListToDokuWiki opts alt
478479 let txt = case (tit, alt) of
479480 ("", []) -> ""
@@ -481,10 +482,21 @@ inlineToDokuWiki opts (Image alt (source, tit)) = do
481482 (_ , _ ) -> "|" ++ tit
482483 -- Relative links fail isURI and receive a colon
483484 prefix = if isURI source then "" else ":"
484− return $ "{{" ++ prefix ++ source ++ txt ++ "}}"
485+ return $ "{{" ++ prefix ++ source ++ imageDims opts attr ++ txt ++ "}}"
485486
486487inlineToDokuWiki opts (Note contents) = do
487488 contents' <- blockListToDokuWiki opts contents
488489 modify (\s -> s { stNotes = True })
489490 return $ "((" ++ contents' ++ "))"
490491 -- note - may not work for notes with multiple blocks
492+
493+imageDims :: WriterOptions -> Attr -> String
494+imageDims opts attr = go (toPx $ dimension Width attr) (toPx $ dimension Height attr)
495+ where
496+ toPx = fmap (showInPixel opts) . checkPct
497+ checkPct (Just (Percent _)) = Nothing
498+ checkPct maybeDim = maybeDim
499+ go (Just w) Nothing = "?" ++ w
500+ go (Just w) (Just h) = "?" ++ w ++ "x" ++ h
501+ go Nothing (Just h) = "?0x" ++ h
502+ go Nothing Nothing = ""
src/Text/Pandoc/Writers/EPUB.hs+6−6
@@ -455,10 +455,10 @@ writeEPUB opts doc@(Pandoc meta _) = do
455455 chapters' [1..]
456456
457457 let fixInternalReferences :: Inline -> Inline
458− fixInternalReferences (Link lab ('#':xs, tit)) =
458+ fixInternalReferences (Link attr lab ('#':xs, tit)) =
459459 case lookup xs reftable of
460− Just ys -> Link lab (ys, tit)
461− Nothing -> Link lab ('#':xs, tit)
460+ Just ys -> Link attr lab (ys, tit)
461+ Nothing -> Link attr lab ('#':xs, tit)
462462 fixInternalReferences x = x
463463
464464 -- internal reference IDs change when we chunk the file,
@@ -870,14 +870,14 @@ transformInline :: WriterOptions
870870 -> IORef [(FilePath, (FilePath, Maybe Entry))] -- ^ (oldpath, newpath) media
871871 -> Inline
872872 -> IO Inline
873−transformInline opts mediaRef (Image lab (src,tit)) = do
873+transformInline opts mediaRef (Image attr lab (src,tit)) = do
874874 newsrc <- modifyMediaRef opts mediaRef src
875− return $ Image lab (newsrc, tit)
875+ return $ Image attr lab (newsrc, tit)
876876transformInline opts mediaRef (x@(Math t m))
877877 | WebTeX url <- writerHTMLMathMethod opts = do
878878 newsrc <- modifyMediaRef opts mediaRef (url ++ urlEncode m)
879879 let mathclass = if t == DisplayMath then "display" else "inline"
880− return $ Span ("",["math",mathclass],[]) [Image [x] (newsrc, "")]
880+ return $ Span ("",["math",mathclass],[]) [Image nullAttr [x] (newsrc, "")]
881881transformInline opts mediaRef (RawInline fmt raw)
882882 | fmt == Format "html" = do
883883 let tags = parseTags raw
src/Text/Pandoc/Writers/FB2.hs+8−8
@@ -314,8 +314,8 @@ blockToXml :: Block -> FBM [Content]
314314blockToXml (Plain ss) = cMapM toXml ss -- FIXME: can lead to malformed FB2
315315blockToXml (Para [Math DisplayMath formula]) = insertMath NormalImage formula
316316-- title beginning with fig: indicates that the image is a figure
317−blockToXml (Para [Image alt (src,'f':'i':'g':':':tit)]) =
318− insertImage NormalImage (Image alt (src,tit))
317+blockToXml (Para [Image atr alt (src,'f':'i':'g':':':tit)]) =
318+ insertImage NormalImage (Image atr alt (src,tit))
319319blockToXml (Para ss) = liftM (list . el "p") $ cMapM toXml ss
320320blockToXml (CodeBlock _ s) = return . spaceBeforeAfter .
321321 map (el "p" . el "code") . lines $ s
@@ -442,7 +442,7 @@ toXml Space = return [txt " "]
442442toXml LineBreak = return [el "empty-line" ()]
443443toXml (Math _ formula) = insertMath InlineImage formula
444444toXml (RawInline _ _) = return [] -- raw TeX and raw HTML are suppressed
445−toXml (Link text (url,ttl)) = do
445+toXml (Link _ text (url,ttl)) = do
446446 fns <- footnotes `liftM` get
447447 let n = 1 + length fns
448448 let ln_id = linkID n
@@ -459,7 +459,7 @@ toXml (Link text (url,ttl)) = do
459459 ( [ attr ("l","href") ('#':ln_id)
460460 , uattr "type" "note" ]
461461 , ln_ref) ]
462−toXml img@(Image _ _) = insertImage InlineImage img
462+toXml img@(Image _ _ _) = insertImage InlineImage img
463463toXml (Note bs) = do
464464 fns <- footnotes `liftM` get
465465 let n = 1 + length fns
@@ -478,12 +478,12 @@ insertMath immode formula = do
478478 WebTeX url -> do
479479 let alt = [Code nullAttr formula]
480480 let imgurl = url ++ urlEncode formula
481− let img = Image alt (imgurl, "")
481+ let img = Image nullAttr alt (imgurl, "")
482482 insertImage immode img
483483 _ -> return [el "code" formula]
484484
485485insertImage :: ImageMode -> Inline -> FBM [Content]
486−insertImage immode (Image alt (url,ttl)) = do
486+insertImage immode (Image _ alt (url,ttl)) = do
487487 images <- imagesToFetch `liftM` get
488488 let n = 1 + length images
489489 let fname = "image" ++ show n
@@ -572,8 +572,8 @@ plain Space = " "
572572plain LineBreak = "\n"
573573plain (Math _ s) = s
574574plain (RawInline _ s) = s
575−plain (Link text (url,_)) = concat (map plain text ++ [" <", url, ">"])
576−plain (Image alt _) = concat (map plain alt)
575+plain (Link _ text (url,_)) = concat (map plain text ++ [" <", url, ">"])
576+plain (Image _ alt _) = concat (map plain alt)
577577plain (Note _) = "" -- FIXME
578578
579579-- | Create an XML element.
src/Text/Pandoc/Writers/HTML.hs+47−20
@@ -35,6 +35,7 @@ import Text.Pandoc.Compat.Monoid ((<>))
3535import Text.Pandoc.Shared
3636import Text.Pandoc.Writers.Shared
3737import Text.Pandoc.Options
38+import Text.Pandoc.ImageSize
3839import Text.Pandoc.Templates
3940import Text.Pandoc.Readers.TeXMath
4041import Text.Pandoc.Slides
@@ -356,10 +357,10 @@ parseMailto s = do
356357 _ -> fail "not a mailto: URL"
357358
358359-- | Obfuscate a "mailto:" link.
359−obfuscateLink :: WriterOptions -> Html -> String -> Html
360−obfuscateLink opts txt s | writerEmailObfuscation opts == NoObfuscation =
361− H.a ! A.href (toValue s) $ txt
362−obfuscateLink opts (renderHtml -> txt) s =
360+obfuscateLink :: WriterOptions -> Attr -> Html -> String -> Html
361+obfuscateLink opts attr txt s | writerEmailObfuscation opts == NoObfuscation =
362+ addAttrs opts attr $ H.a ! A.href (toValue s) $ txt
363+obfuscateLink opts attr (renderHtml -> txt) s =
363364 let meth = writerEmailObfuscation opts
364365 s' = map toLower (take 7 s) ++ drop 7 s
365366 in case parseMailto s' of
@@ -385,7 +386,7 @@ obfuscateLink opts (renderHtml -> txt) s =
385386 linkText ++ "+'<\\/'+'a'+'>');\n// -->\n")) >>
386387 H.noscript (preEscapedString $ obfuscateString altText)
387388 _ -> error $ "Unknown obfuscation method: " ++ show meth
388− _ -> H.a ! A.href (toValue s) $ toHtml txt -- malformed email
389+ _ -> addAttrs opts attr $ H.a ! A.href (toValue s) $ toHtml txt -- malformed email
389390
390391-- | Obfuscate character as entity.
391392obfuscateChar :: Char -> String
@@ -401,11 +402,33 @@ obfuscateString = concatMap obfuscateChar . fromEntities
401402addAttrs :: WriterOptions -> Attr -> Html -> Html
402403addAttrs opts attr h = foldl (!) h (attrsToHtml opts attr)
403404
405+toAttrs :: [(String, String)] -> [Attribute]
406+toAttrs kvs = map (\(x,y) -> customAttribute (fromString x) (toValue y)) kvs
407+
404408attrsToHtml :: WriterOptions -> Attr -> [Attribute]
405409attrsToHtml opts (id',classes',keyvals) =
406410 [prefixedId opts id' | not (null id')] ++
407− [A.class_ (toValue $ unwords classes') | not (null classes')] ++
408− map (\(x,y) -> customAttribute (fromString x) (toValue y)) keyvals
411+ [A.class_ (toValue $ unwords classes') | not (null classes')] ++ toAttrs keyvals
412+
413+imgAttrsToHtml :: WriterOptions -> Attr -> [Attribute]
414+imgAttrsToHtml opts attr =
415+ attrsToHtml opts (ident,cls,kvs') ++
416+ toAttrs (dimensionsToAttrList opts attr)
417+ where
418+ (ident,cls,kvs) = attr
419+ kvs' = filter isNotDim kvs
420+ isNotDim ("width", _) = False
421+ isNotDim ("height", _) = False
422+ isNotDim _ = True
423+
424+dimensionsToAttrList :: WriterOptions -> Attr -> [(String, String)]
425+dimensionsToAttrList opts attr = (go Width) ++ (go Height)
426+ where
427+ go dir = case (dimension dir attr) of
428+ (Just (Percent a)) -> [("style", show dir ++ ":" ++ show (Percent a))]
429+ (Just dim) -> [(show dir, showInPixel opts dim)]
430+ _ -> []
431+
409432
410433imageExts :: [String]
411434imageExts = [ "art", "bmp", "cdr", "cdt", "cpt", "cr2", "crw", "djvu", "erf",
@@ -426,8 +449,8 @@ blockToHtml :: WriterOptions -> Block -> State WriterState Html
426449blockToHtml _ Null = return mempty
427450blockToHtml opts (Plain lst) = inlineListToHtml opts lst
428451-- title beginning with fig: indicates that the image is a figure
429−blockToHtml opts (Para [Image txt (s,'f':'i':'g':':':tit)]) = do
430− img <- inlineToHtml opts (Image txt (s,tit))
452+blockToHtml opts (Para [Image attr txt (s,'f':'i':'g':':':tit)]) = do
453+ img <- inlineToHtml opts (Image attr txt (s,tit))
431454 let tocapt = if writerHtml5 opts
432455 then H5.figcaption
433456 else H.p ! A.class_ "caption"
@@ -792,10 +815,10 @@ inlineToHtml opts inline =
792815 _ -> return mempty
793816 | f == Format "html" -> return $ preEscapedString str
794817 | otherwise -> return mempty
795− (Link txt (s,_)) | "mailto:" `isPrefixOf` s -> do
818+ (Link attr txt (s,_)) | "mailto:" `isPrefixOf` s -> do
796819 linkText <- inlineListToHtml opts txt
797− return $ obfuscateLink opts linkText s
798− (Link txt (s,tit)) -> do
820+ return $ obfuscateLink opts attr linkText s
821+ (Link attr txt (s,tit)) -> do
799822 linkText <- inlineListToHtml opts txt
800823 let s' = case s of
801824 '#':xs | writerSlideVariant opts ==
@@ -805,19 +828,23 @@ inlineToHtml opts inline =
805828 let link' = if txt == [Str (unEscapeString s)]
806829 then link ! A.class_ "uri"
807830 else link
831+ let link'' = addAttrs opts attr link'
808832 return $ if null tit
809− then link'
810− else link' ! A.title (toValue tit)
811− (Image txt (s,tit)) | treatAsImage s -> do
833+ then link''
834+ else link'' ! A.title (toValue tit)
835+ (Image attr txt (s,tit)) | treatAsImage s -> do
836+ let alternate' = stringify txt
812837 let attributes = [A.src $ toValue s] ++
813− [A.title $ toValue tit | not $ null tit] ++
814− [A.alt $ toValue $ stringify txt]
838+ [A.title $ toValue tit | not (null tit)] ++
839+ [A.alt $ toValue alternate' | not (null txt)] ++
840+ imgAttrsToHtml opts attr
815841 let tag = if writerHtml5 opts then H5.img else H.img
816842 return $ foldl (!) tag attributes
817843 -- note: null title included, as in Markdown.pl
818− (Image _ (s,tit)) -> do
844+ (Image attr _ (s,tit)) -> do
819845 let attributes = [A.src $ toValue s] ++
820− [A.title $ toValue tit | not $ null tit]
846+ [A.title $ toValue tit | not (null tit)] ++
847+ imgAttrsToHtml opts attr
821848 return $ foldl (!) H5.embed attributes
822849 -- note: null title included, as in Markdown.pl
823850 (Note contents)
@@ -855,7 +882,7 @@ blockListToNote :: WriterOptions -> String -> [Block] -> State WriterState Html
855882blockListToNote opts ref blocks =
856883 -- If last block is Para or Plain, include the backlink at the end of
857884 -- that block. Otherwise, insert a new Plain block with the backlink.
858− let backlink = [Link [Str "↩"] ("#" ++ writerIdentifierPrefix opts ++ "fnref" ++ ref,[])]
885+ let backlink = [Link nullAttr [Str "↩"] ("#" ++ writerIdentifierPrefix opts ++ "fnref" ++ ref,[])]
859886 blocks' = if null blocks
860887 then []
861888 else let lastBlock = last blocks
src/Text/Pandoc/Writers/Haddock.hs+5−5
@@ -103,8 +103,8 @@ blockToHaddock opts (Plain inlines) = do
103103 contents <- inlineListToHaddock opts inlines
104104 return $ contents <> cr
105105-- title beginning with fig: indicates figure
106−blockToHaddock opts (Para [Image alt (src,'f':'i':'g':':':tit)]) =
107− blockToHaddock opts (Para [Image alt (src,tit)])
106+blockToHaddock opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) =
107+ blockToHaddock opts (Para [Image attr alt (src,tit)])
108108blockToHaddock opts (Para inlines) =
109109 -- TODO: if it contains linebreaks, we need to use a @...@ block
110110 (<> blankline) `fmap` blockToHaddock opts (Plain inlines)
@@ -327,7 +327,7 @@ inlineToHaddock _ (RawInline f str)
327327inlineToHaddock _ (LineBreak) = return cr
328328inlineToHaddock _ Space = return space
329329inlineToHaddock opts (Cite _ lst) = inlineListToHaddock opts lst
330−inlineToHaddock _opts (Link txt (src, _)) = do
330+inlineToHaddock _ (Link _ txt (src, _)) = do
331331 let linktext = text $ escapeString $ stringify txt
332332 let useAuto = isURI src &&
333333 case txt of
@@ -335,8 +335,8 @@ inlineToHaddock _opts (Link txt (src, _)) = do
335335 _ -> False
336336 return $ nowrap $ "<" <> text src <>
337337 (if useAuto then empty else space <> linktext) <> ">"
338−inlineToHaddock opts (Image alternate (source, tit)) = do
339− linkhaddock <- inlineToHaddock opts (Link alternate (source, tit))
338+inlineToHaddock opts (Image attr alternate (source, tit)) = do
339+ linkhaddock <- inlineToHaddock opts (Link attr alternate (source, tit))
340340 return $ "<" <> linkhaddock <> ">"
341341-- haddock doesn't have notes, but we can fake it:
342342inlineToHaddock opts (Note contents) = do
src/Text/Pandoc/Writers/ICML.hs+54−41
@@ -18,14 +18,16 @@ import Text.Pandoc.Definition
1818import Text.Pandoc.XML
1919import Text.Pandoc.Readers.TeXMath (texMathToInlines)
2020import Text.Pandoc.Writers.Shared
21−import Text.Pandoc.Shared (splitBy)
21+import Text.Pandoc.Shared (splitBy, fetchItem, warn)
2222import Text.Pandoc.Options
2323import Text.Pandoc.Templates (renderTemplate')
2424import Text.Pandoc.Pretty
25+import Text.Pandoc.ImageSize
2526import Data.List (isPrefixOf, isInfixOf, stripPrefix)
2627import Data.Text as Text (breakOnAll, pack)
2728import Control.Monad.State
2829import Network.URI (isURI)
30+import System.FilePath (pathSeparator)
2931import qualified Data.Set as Set
3032
3133type Style = [String]
@@ -39,7 +41,7 @@ data WriterState = WriterState{
3941 , maxListDepth :: Int
4042 }
4143
42−type WS a = State WriterState a
44+type WS a = StateT WriterState IO a
4345
4446defaultWriterState :: WriterState
4547defaultWriterState = WriterState{
@@ -91,6 +93,7 @@ lowerAlphaName :: String
9193upperAlphaName :: String
9294subListParName :: String
9395footnoteName :: String
96+citeName :: String
9497paragraphName = "Paragraph"
9598codeBlockName = "CodeBlock"
9699blockQuoteName = "Blockquote"
@@ -113,30 +116,31 @@ lowerAlphaName = "lowerAlpha"
113116upperAlphaName = "upperAlpha"
114117subListParName = "subParagraph"
115118footnoteName = "Footnote"
119+citeName = "Cite"
116120
117121
118122-- | Convert Pandoc document to string in ICML format.
119−writeICML :: WriterOptions -> Pandoc -> String
120−writeICML opts (Pandoc meta blocks) =
123+writeICML :: WriterOptions -> Pandoc -> IO String
124+writeICML opts (Pandoc meta blocks) = do
121125 let colwidth = if writerWrapText opts
122126 then Just $ writerColumns opts
123127 else Nothing
124128 render' = render colwidth
125− renderMeta f s = Just $ render' $ fst $ runState (f opts [] s) defaultWriterState
126− Just metadata = metaToJSON opts
127− (renderMeta blocksToICML)
128− (renderMeta inlinesToICML)
129− meta
130− (doc, st) = runState (blocksToICML opts [] blocks) defaultWriterState
131− main = render' doc
129+ renderMeta f s = liftM (render' . fst) $ runStateT (f opts [] s) defaultWriterState
130+ metadata <- metaToJSON opts
131+ (renderMeta blocksToICML)
132+ (renderMeta inlinesToICML)
133+ meta
134+ (doc, st) <- runStateT (blocksToICML opts [] blocks) defaultWriterState
135+ let main = render' doc
132136 context = defField "body" main
133137 $ defField "charStyles" (render' $ charStylesToDoc st)
134138 $ defField "parStyles" (render' $ parStylesToDoc st)
135139 $ defField "hyperlinks" (render' $ hyperlinksToDoc $ links st)
136140 $ metadata
137− in if writerStandalone opts
138− then renderTemplate' (writerTemplate opts) context
139− else main
141+ return $ if writerStandalone opts
142+ then renderTemplate' (writerTemplate opts) context
143+ else main
140144
141145-- | Auxilary functions for parStylesToDoc and charStylesToDoc.
142146contains :: String -> (String, (String, String)) -> [(String, String)]
@@ -407,7 +411,7 @@ inlineToICML opts style (Subscript lst) = inlinesToICML opts (subscriptName:styl
407411inlineToICML opts style (SmallCaps lst) = inlinesToICML opts (smallCapsName:style) lst
408412inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $ [Str "‘"] ++ lst ++ [Str "’"]
409413inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $ [Str "“"] ++ lst ++ [Str "”"]
410−inlineToICML opts style (Cite _ lst) = inlinesToICML opts style lst
414+inlineToICML opts style (Cite _ lst) = inlinesToICML opts (citeName:style) lst
411415inlineToICML _ style (Code _ str) = charStyle (codeName:style) $ text $ escapeStringForXML str
412416inlineToICML _ style Space = charStyle style space
413417inlineToICML _ style LineBreak = charStyle style $ text lineSeparator
@@ -416,7 +420,7 @@ inlineToICML opts style (Math mt str) =
416420inlineToICML _ _ (RawInline f str)
417421 | f == Format "icml" = return $ text str
418422 | otherwise = return empty
419−inlineToICML opts style (Link lst (url, title)) = do
423+inlineToICML opts style (Link _ lst (url, title)) = do
420424 content <- inlinesToICML opts (linkName:style) lst
421425 state $ \st ->
422426 let ident = if null $ links st
@@ -426,7 +430,7 @@ inlineToICML opts style (Link lst (url, title)) = do
426430 cont = inTags True "HyperlinkTextSource"
427431 [("Self","htss-"++show ident), ("Name",title), ("Hidden","false")] content
428432 in (cont, newst)
429−inlineToICML opts style (Image alt target) = imageICML opts style alt target
433+inlineToICML opts style (Image attr alt target) = imageICML opts style attr alt target
430434inlineToICML opts style (Note lst) = footnoteToICML opts style lst
431435inlineToICML opts style (Span _ lst) = inlinesToICML opts style lst
432436
@@ -499,39 +503,48 @@ styleToStrAttr style =
499503 in (stlStr, attrs)
500504
501505-- | Assemble an ICML Image.
502−imageICML :: WriterOptions -> Style -> [Inline] -> Target -> WS Doc
503−imageICML _ style _ (linkURI, _) =
504− let imgWidth = 300::Int --TODO: set width, height dynamically as in Docx.hs
505− imgHeight = 200::Int
506− scaleFact = show (1::Double) --TODO: set scaling factor so image is scaled exactly to imgWidth x imgHeight
507− hw = show $ imgWidth `div` 2
508− hh = show $ imgHeight `div` 2
509− qw = show $ imgWidth `div` 4
510− qh = show $ imgHeight `div` 4
511− uriPrefix = if isURI linkURI then "" else "file:"
506+imageICML :: WriterOptions -> Style -> Attr -> [Inline] -> Target -> WS Doc
507+imageICML opts style attr _ (src, _) = do
508+ res <- liftIO $ fetchItem (writerSourceURL opts) src
509+ imgS <- case res of
510+ Left (_) -> do
511+ liftIO $ warn $ "Could not find image `" ++ src ++ "', skipping..."
512+ return def
513+ Right (img, _) -> do
514+ case imageSize img of
515+ Right size -> return size
516+ Left msg -> do
517+ return $ warn $ "Could not determine image size in `" ++
518+ src ++ "': " ++ msg
519+ return def
520+ let (ow, oh) = sizeInPoints imgS
521+ (imgWidth, imgHeight) = desiredSizeInPoints opts attr imgS
522+ hw = showFl $ ow / 2
523+ hh = showFl $ oh / 2
524+ scale = showFl (imgWidth / ow) ++ " 0 0 " ++ showFl (imgHeight / oh)
525+ src' = if isURI src then src else "file://." ++ pathSeparator : src
512526 (stlStr, attrs) = styleToStrAttr style
513527 props = inTags True "Properties" [] $ inTags True "PathGeometry" []
514528 $ inTags True "GeometryPathType" [("PathOpen","false")]
515529 $ inTags True "PathPointArray" []
516530 $ vcat [
517− selfClosingTag "PathPointType" [("Anchor", "-"++qw++" -"++qh),
518− ("LeftDirection", "-"++qw++" -"++qh), ("RightDirection", "-"++qw++" -"++qh)]
519− , selfClosingTag "PathPointType" [("Anchor", "-"++qw++" "++qh),
520− ("LeftDirection", "-"++qw++" "++qh), ("RightDirection", "-"++qw++" "++qh)]
521− , selfClosingTag "PathPointType" [("Anchor", qw++" "++qh),
522− ("LeftDirection", qw++" "++qh), ("RightDirection", qw++" "++qh)]
523− , selfClosingTag "PathPointType" [("Anchor", qw++" -"++qh),
524− ("LeftDirection", qw++" -"++qh), ("RightDirection", qw++" -"++qh)]
531+ selfClosingTag "PathPointType" [("Anchor", "-"++hw++" -"++hh),
532+ ("LeftDirection", "-"++hw++" -"++hh), ("RightDirection", "-"++hw++" -"++hh)]
533+ , selfClosingTag "PathPointType" [("Anchor", "-"++hw++" "++hh),
534+ ("LeftDirection", "-"++hw++" "++hh), ("RightDirection", "-"++hw++" "++hh)]
535+ , selfClosingTag "PathPointType" [("Anchor", hw++" "++hh),
536+ ("LeftDirection", hw++" "++hh), ("RightDirection", hw++" "++hh)]
537+ , selfClosingTag "PathPointType" [("Anchor", hw++" -"++hh),
538+ ("LeftDirection", hw++" -"++hh), ("RightDirection", hw++" -"++hh)]
525539 ]
526540 image = inTags True "Image"
527− [("Self","ue6"), ("ItemTransform", scaleFact++" 0 0 "++scaleFact++" -"++qw++" -"++qh)]
541+ [("Self","ue6"), ("ItemTransform", scale++" -"++hw++" -"++hh)]
528542 $ vcat [
529543 inTags True "Properties" [] $ inTags True "Profile" [("type","string")] $ text "$ID/Embedded"
530− $$ selfClosingTag "GraphicBounds" [("Left","0"), ("Top","0"), ("Right", hw), ("Bottom", hh)]
531− , selfClosingTag "Link" [("Self", "ueb"), ("LinkResourceURI", uriPrefix++linkURI)]
544+ , selfClosingTag "Link" [("Self", "ueb"), ("LinkResourceURI", src')]
532545 ]
533546 doc = inTags True "CharacterStyleRange" attrs
534− $ inTags True "Rectangle" [("Self","uec"), ("ItemTransform", "1 0 0 1 "++qw++" -"++qh)]
547+ $ inTags True "Rectangle" [("Self","uec"), ("StrokeWeight", "0"),
548+ ("ItemTransform", scale++" "++hw++" -"++hh)]
535549 $ (props $$ image)
536− in do
537− state $ \st -> (doc, st{ inlineStyles = Set.insert stlStr $ inlineStyles st } )
550+ state $ \st -> (doc, st{ inlineStyles = Set.insert stlStr $ inlineStyles st } )
src/Text/Pandoc/Writers/LaTeX.hs+35−12
@@ -47,6 +47,7 @@ import Control.Applicative ((<|>))
4747import Control.Monad.State
4848import qualified Text.Parsec as P
4949import Text.Pandoc.Pretty
50+import Text.Pandoc.ImageSize
5051import Text.Pandoc.Slides
5152import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
5253 formatLaTeXInline, formatLaTeXBlock,
@@ -99,8 +100,8 @@ pandocToLaTeX options (Pandoc meta blocks) = do
99100 _ -> blocks
100101 else blocks
101102 -- see if there are internal links
102− let isInternalLink (Link _ ('#':xs,_)) = [xs]
103− isInternalLink _ = []
103+ let isInternalLink (Link _ _ ('#':xs,_)) = [xs]
104+ isInternalLink _ = []
104105 modify $ \s -> s{ stInternalLinks = query isInternalLink blocks' }
105106 let template = writerTemplate options
106107 -- set stBook depending on documentclass
@@ -395,7 +396,7 @@ blockToLaTeX (Div (identifier,classes,kvs) bs) = do
395396blockToLaTeX (Plain lst) =
396397 inlineListToLaTeX $ dropWhile isLineBreakOrSpace lst
397398-- title beginning with fig: indicates that the image is a figure
398−blockToLaTeX (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
399+blockToLaTeX (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
399400 inNote <- gets stInNote
400401 modify $ \st -> st{ stInMinipage = True, stNotes = [] }
401402 capt <- inlineListToLaTeX txt
@@ -405,7 +406,7 @@ blockToLaTeX (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
405406 captForLof <- if null notes
406407 then return empty
407408 else brackets <$> inlineListToLaTeX (walk deNote txt)
408− img <- inlineToLaTeX (Image txt (src,tit))
409+ img <- inlineToLaTeX (Image attr txt (src,tit))
409410 let footnotes = notesToLaTeX notes
410411 return $ if inNote
411412 -- can't have figures in notes
@@ -684,12 +685,19 @@ listItemToLaTeX lst
684685defListItemToLaTeX :: ([Inline], [[Block]]) -> State WriterState Doc
685686defListItemToLaTeX (term, defs) = do
686687 term' <- inlineListToLaTeX term
688+ -- put braces around term if it contains an internal link,
689+ -- since otherwise we get bad bracket interactions: \item[\hyperref[..]
690+ let isInternalLink (Link _ _ ('#':_,_)) = True
691+ isInternalLink _ = False
692+ let term'' = if any isInternalLink term
693+ then braces term'
694+ else term'
687695 def' <- liftM vsep $ mapM blockListToLaTeX defs
688696 return $ case defs of
689697 (((Header _ _ _) : _) : _) ->
690− "\\item" <> brackets term' <> " ~ " $$ def'
698+ "\\item" <> brackets term'' <> " ~ " $$ def'
691699 _ ->
692− "\\item" <> brackets term' $$ def'
700+ "\\item" <> brackets term'' $$ def'
693701
694702-- | Craft the section header, inserting the secton reference, if supplied.
695703sectionHeader :: Bool -- True for unnumbered
@@ -893,11 +901,11 @@ inlineToLaTeX (RawInline f str)
893901 | otherwise = return empty
894902inlineToLaTeX (LineBreak) = return $ "\\\\" <> cr
895903inlineToLaTeX Space = return space
896−inlineToLaTeX (Link txt ('#':ident, _)) = do
904+inlineToLaTeX (Link _ txt ('#':ident, _)) = do
897905 contents <- inlineListToLaTeX txt
898906 lab <- toLabel ident
899907 return $ text "\\protect\\hyperlink" <> braces (text lab) <> braces contents
900−inlineToLaTeX (Link txt (src, _)) =
908+inlineToLaTeX (Link _ txt (src, _)) =
901909 case txt of
902910 [Str x] | escapeURI x == src -> -- autolink
903911 do modify $ \s -> s{ stUrl = True }
@@ -914,16 +922,31 @@ inlineToLaTeX (Link txt (src, _)) =
914922 src' <- stringToLaTeX URLString (escapeURI src)
915923 return $ text ("\\href{" ++ src' ++ "}{") <>
916924 contents <> char '}'
917−inlineToLaTeX (Image _ (source, _)) = do
925+inlineToLaTeX (Image attr _ (source, _)) = do
918926 modify $ \s -> s{ stGraphics = True }
919− let source' = if isURI source
927+ opts <- gets stOptions
928+ let showDim dir = let d = text (show dir) <> "="
929+ in case (dimension dir attr) of
930+ Just (Pixel a) ->
931+ [d <> text (showInInch opts (Pixel a)) <> "in"]
932+ Just (Percent a) ->
933+ [d <> text (showFl (a / 100)) <> "\\textwidth"]
934+ Just dim ->
935+ [d <> text (show dim)]
936+ Nothing ->
937+ []
938+ dimList = showDim Width ++ showDim Height
939+ dims = if null dimList
940+ then empty
941+ else brackets $ cat (intersperse "," dimList)
942+ source' = if isURI source
920943 then source
921944 else unEscapeString source
922945 source'' <- stringToLaTeX URLString (escapeURI source')
923946 inHeading <- gets stInHeading
924947 return $
925− (if inHeading then "\\protect\\includegraphics" else "\\includegraphics")
926− <> braces (text source'')
948+ (if inHeading then "\\protect\\includegraphics" else "\\includegraphics") <>
949+ dims <> braces (text source'')
927950inlineToLaTeX (Note contents) = do
928951 inMinipage <- gets stInMinipage
929952 modify (\s -> s{stInNote = True})
src/Text/Pandoc/Writers/Man.hs+3−3
@@ -344,7 +344,7 @@ inlineToMan _ (RawInline f str)
344344inlineToMan _ (LineBreak) = return $
345345 cr <> text ".PD 0" $$ text ".P" $$ text ".PD" <> cr
346346inlineToMan _ Space = return space
347−inlineToMan opts (Link txt (src, _)) = do
347+inlineToMan opts (Link _ txt (src, _)) = do
348348 linktext <- inlineListToMan opts txt
349349 let srcSuffix = fromMaybe src (stripPrefix "mailto:" src)
350350 return $ case txt of
@@ -352,12 +352,12 @@ inlineToMan opts (Link txt (src, _)) = do
352352 | escapeURI s == srcSuffix ->
353353 char '<' <> text srcSuffix <> char '>'
354354 _ -> linktext <> text " (" <> text src <> char ')'
355−inlineToMan opts (Image alternate (source, tit)) = do
355+inlineToMan opts (Image attr alternate (source, tit)) = do
356356 let txt = if (null alternate) || (alternate == [Str ""]) ||
357357 (alternate == [Str source]) -- to prevent autolinks
358358 then [Str "image"]
359359 else alternate
360− linkPart <- inlineToMan opts (Link txt (source, tit))
360+ linkPart <- inlineToMan opts (Link attr txt (source, tit))
361361 return $ char '[' <> text "IMAGE: " <> linkPart <> char ']'
362362inlineToMan _ (Note contents) = do
363363 -- add to notes in state
src/Text/Pandoc/Writers/Markdown.hs+30−21
@@ -55,7 +55,8 @@ import qualified Data.Vector as V
5555import qualified Data.Text as T
5656
5757type Notes = [[Block]]
58−type Refs = [([Inline], Target)]
58+type Ref = ([Inline], Target, Attr)
59+type Refs = [Ref]
5960data WriterState = WriterState { stNotes :: Notes
6061 , stRefs :: Refs
6162 , stRefShortcutable :: Bool
@@ -200,15 +201,16 @@ refsToMarkdown opts refs = mapM (keyToMarkdown opts) refs >>= return . vcat
200201
201202-- | Return markdown representation of a reference key.
202203keyToMarkdown :: WriterOptions
203− -> ([Inline], (String, String))
204+ -> Ref
204205 -> State WriterState Doc
205−keyToMarkdown opts (label, (src, tit)) = do
206+keyToMarkdown opts (label, (src, tit), attr) = do
206207 label' <- inlineListToMarkdown opts label
207208 let tit' = if null tit
208209 then empty
209210 else space <> "\"" <> text tit <> "\""
210211 return $ nest 2 $ hang 2
211212 ("[" <> label' <> "]:" <> space) (text src <> tit')
213+ <> linkAttributes opts attr
212214
213215-- | Return markdown representation of notes.
214216notesToMarkdown :: WriterOptions -> [[Block]] -> State WriterState Doc
@@ -264,7 +266,7 @@ elementToListItem opts (Sec lev _nums (ident,_,_) headerText subsecs)
264266 not (null subsecs) && lev < writerTOCDepth opts ]
265267 where headerLink = if null ident
266268 then headerText
267− else [Link headerText ('#':ident, "")]
269+ else [Link nullAttr headerText ('#':ident, "")]
268270elementToListItem _ (Blk _) = []
269271
270272attrsToMarkdown :: Attr -> Doc
@@ -283,6 +285,12 @@ attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
283285 map (\(k,v) -> text k
284286 <> "=\"" <> text v <> "\"") ks
285287
288+linkAttributes :: WriterOptions -> Attr -> Doc
289+linkAttributes opts attr =
290+ if isEnabled Ext_common_link_attributes opts && attr /= nullAttr
291+ then attrsToMarkdown attr
292+ else empty
293+
286294-- | Ordered list start parser for use in Para below.
287295olMarker :: Parser [Char] ParserState Char
288296olMarker = do (start, style', delim) <- anyOrderedListMarker
@@ -328,8 +336,8 @@ blockToMarkdown opts (Plain inlines) = do
328336 else contents
329337 return $ contents' <> cr
330338-- title beginning with fig: indicates figure
331−blockToMarkdown opts (Para [Image alt (src,'f':'i':'g':':':tit)]) =
332− blockToMarkdown opts (Para [Image alt (src,tit)])
339+blockToMarkdown opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) =
340+ blockToMarkdown opts (Para [Image attr alt (src,tit)])
333341blockToMarkdown opts (Para inlines) =
334342 (<> blankline) `fmap` blockToMarkdown opts (Plain inlines)
335343blockToMarkdown opts (RawBlock f str)
@@ -668,21 +676,21 @@ blockListToMarkdown opts blocks =
668676
669677-- | Get reference for target; if none exists, create unique one and return.
670678-- Prefer label if possible; otherwise, generate a unique key.
671−getReference :: [Inline] -> Target -> State WriterState [Inline]
672−getReference label (src, tit) = do
679+getReference :: Attr -> [Inline] -> Target -> State WriterState [Inline]
680+getReference attr label target = do
673681 st <- get
674− case find ((== (src, tit)) . snd) (stRefs st) of
675− Just (ref, _) -> return ref
682+ case find (\(_,t,a) -> t == target && a == attr) (stRefs st) of
683+ Just (ref, _, _) -> return ref
676684 Nothing -> do
677− let label' = case find ((== label) . fst) (stRefs st) of
685+ let label' = case find (\(l,_,_) -> l == label) (stRefs st) of
678686 Just _ -> -- label is used; generate numerical label
679687 case find (\n -> notElem [Str (show n)]
680− (map fst (stRefs st)))
688+ (map (\(l,_,_) -> l) (stRefs st)))
681689 [1..(10000 :: Integer)] of
682690 Just x -> [Str (show x)]
683691 Nothing -> error "no unique label"
684692 Nothing -> label
685− modify (\s -> s{ stRefs = (label', (src,tit)) : stRefs st })
693+ modify (\s -> s{ stRefs = (label', target, attr) : stRefs st })
686694 return label'
687695
688696-- | Convert list of Pandoc inline elements to markdown.
@@ -692,10 +700,10 @@ inlineListToMarkdown opts lst = do
692700 go (if inlist then avoidBadWrapsInList lst else lst)
693701 where go [] = return empty
694702 go (i:is) = case i of
695− (Link _ _) -> case is of
703+ (Link _ _ _) -> case is of
696704 -- If a link is followed by another link or '[' we don't shortcut
697− (Link _ _):_ -> unshortcutable
698− Space:(Link _ _):_ -> unshortcutable
705+ (Link _ _ _):_ -> unshortcutable
706+ Space:(Link _ _ _):_ -> unshortcutable
699707 Space:(Str('[':_)):_ -> unshortcutable
700708 Space:(RawInline _ ('[':_)):_ -> unshortcutable
701709 Space:(Cite _ _):_ -> unshortcutable
@@ -897,7 +905,7 @@ inlineToMarkdown opts (Cite (c:cs) lst)
897905 return $ pdoc <+> r
898906 modekey SuppressAuthor = "-"
899907 modekey _ = ""
900−inlineToMarkdown opts (Link txt (src, tit)) = do
908+inlineToMarkdown opts (Link attr txt (src, tit)) = do
901909 plain <- gets stPlain
902910 linktext <- inlineListToMarkdown opts txt
903911 let linktitle = if null tit
@@ -912,7 +920,7 @@ inlineToMarkdown opts (Link txt (src, tit)) = do
912920 shortcutable <- gets stRefShortcutable
913921 let useShortcutRefLinks = shortcutable &&
914922 isEnabled Ext_shortcut_reference_links opts
915− ref <- if useRefLinks then getReference txt (src, tit) else return []
923+ ref <- if useRefLinks then getReference attr txt (src, tit) else return []
916924 reftext <- inlineListToMarkdown opts ref
917925 return $ if useAuto
918926 then if plain
@@ -929,14 +937,15 @@ inlineToMarkdown opts (Link txt (src, tit)) = do
929937 else if plain
930938 then linktext
931939 else "[" <> linktext <> "](" <>
932− text src <> linktitle <> ")"
933−inlineToMarkdown opts (Image alternate (source, tit)) = do
940+ text src <> linktitle <> ")" <>
941+ linkAttributes opts attr
942+inlineToMarkdown opts (Image attr alternate (source, tit)) = do
934943 plain <- gets stPlain
935944 let txt = if null alternate || alternate == [Str source]
936945 -- to prevent autolinks
937946 then [Str ""]
938947 else alternate
939− linkPart <- inlineToMarkdown opts (Link txt (source, tit))
948+ linkPart <- inlineToMarkdown opts (Link attr txt (source, tit))
940949 return $ if plain
941950 then "[" <> linkPart <> "]"
942951 else "!" <> linkPart
src/Text/Pandoc/Writers/MediaWiki.hs+27−6
@@ -35,6 +35,7 @@ import Text.Pandoc.Options
3535import Text.Pandoc.Shared
3636import Text.Pandoc.Writers.Shared
3737import Text.Pandoc.Pretty (render)
38+import Text.Pandoc.ImageSize
3839import Text.Pandoc.Templates (renderTemplate')
3940import Text.Pandoc.XML ( escapeStringForXML )
4041import Data.List ( intersect, intercalate )
@@ -44,6 +45,7 @@ import Control.Monad.State
4445
4546data WriterState = WriterState {
4647 stNotes :: Bool -- True if there are notes
48+ , stOptions :: WriterOptions -- writer options
4749 }
4850
4951data WriterReader = WriterReader {
@@ -57,7 +59,7 @@ type MediaWikiWriter = ReaderT WriterReader (State WriterState)
5759-- | Convert Pandoc to MediaWiki.
5860writeMediaWiki :: WriterOptions -> Pandoc -> String
5961writeMediaWiki opts document =
60− let initialState = WriterState { stNotes = False }
62+ let initialState = WriterState { stNotes = False, stOptions = opts }
6163 env = WriterReader { options = opts, listLevel = [], useTags = False }
6264 in evalState (runReaderT (pandocToMediaWiki document) env) initialState
6365
@@ -100,14 +102,15 @@ blockToMediaWiki (Plain inlines) =
100102 inlineListToMediaWiki inlines
101103
102104-- title beginning with fig: indicates that the image is a figure
103−blockToMediaWiki (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
105+blockToMediaWiki (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
104106 capt <- if null txt
105107 then return ""
106108 else ("|caption " ++) `fmap` inlineListToMediaWiki txt
109+ img <- imageToMediaWiki attr
107110 let opt = if null txt
108111 then ""
109112 else "|alt=" ++ if null tit then capt else tit ++ capt
110− return $ "[[File:" ++ src ++ "|frame|none" ++ opt ++ "]]\n"
113+ return $ "[[File:" ++ src ++ "|frame|none" ++ img ++ opt ++ "]]\n"
111114
112115blockToMediaWiki (Para inlines) = do
113116 tags <- asks useTags
@@ -312,6 +315,23 @@ alignmentToString alignment = case alignment of
312315 AlignCenter -> "center"
313316 AlignDefault -> "left"
314317
318+imageToMediaWiki :: Attr -> MediaWikiWriter String
319+imageToMediaWiki attr = do
320+ opts <- gets stOptions
321+ let (_, cls, _) = attr
322+ toPx = fmap (showInPixel opts) . checkPct
323+ checkPct (Just (Percent _)) = Nothing
324+ checkPct maybeDim = maybeDim
325+ go (Just w) Nothing = '|':w ++ "px"
326+ go (Just w) (Just h) = '|':w ++ "x" ++ h ++ "px"
327+ go Nothing (Just h) = "|x" ++ h ++ "px"
328+ go Nothing Nothing = ""
329+ dims = go (toPx $ dimension Width attr) (toPx $ dimension Height attr)
330+ classes = if null cls
331+ then ""
332+ else "|class=" ++ unwords cls
333+ return $ dims ++ classes
334+
315335-- | Convert list of Pandoc block elements to MediaWiki.
316336blockListToMediaWiki :: [Block] -- ^ List of block elements
317337 -> MediaWikiWriter String
@@ -379,7 +399,7 @@ inlineToMediaWiki (LineBreak) = return "<br />\n"
379399
380400inlineToMediaWiki Space = return " "
381401
382−inlineToMediaWiki (Link txt (src, _)) = do
402+inlineToMediaWiki (Link _ txt (src, _)) = do
383403 label <- inlineListToMediaWiki txt
384404 case txt of
385405 [Str s] | isURI src && escapeURI s == src -> return src
@@ -390,14 +410,15 @@ inlineToMediaWiki (Link txt (src, _)) = do
390410 '/':xs -> xs -- with leading / it's a
391411 _ -> src -- link to a help page
392412
393−inlineToMediaWiki (Image alt (source, tit)) = do
413+inlineToMediaWiki (Image attr alt (source, tit)) = do
414+ img <- imageToMediaWiki attr
394415 alt' <- inlineListToMediaWiki alt
395416 let txt = if null tit
396417 then if null alt
397418 then ""
398419 else '|' : alt'
399420 else '|' : tit
400− return $ "[[File:" ++ source ++ txt ++ "]]"
421+ return $ "[[File:" ++ source ++ img ++ txt ++ "]]"
401422
402423inlineToMediaWiki (Note contents) = do
403424 contents' <- blockListToMediaWiki contents
src/Text/Pandoc/Writers/ODT.hs+9−8
@@ -40,7 +40,7 @@ import Codec.Archive.Zip
4040import Text.Pandoc.Options ( WriterOptions(..) )
4141import Text.Pandoc.Shared ( stringify, fetchItem', warn,
4242 getDefaultReferenceODT )
43−import Text.Pandoc.ImageSize ( imageSize, sizeInPoints )
43+import Text.Pandoc.ImageSize ( imageSize, desiredSizeInPoints )
4444import Text.Pandoc.MIME ( getMimeType, extensionFromMimeType )
4545import Text.Pandoc.Definition
4646import Text.Pandoc.Walk
@@ -126,7 +126,7 @@ writeODT opts doc@(Pandoc meta _) = do
126126 return $ fromArchive archive''
127127
128128transformPicMath :: WriterOptions -> IORef [Entry] -> Inline -> IO Inline
129−transformPicMath opts entriesRef (Image lab (src,t)) = do
129+transformPicMath opts entriesRef (Image attr lab (src,t)) = do
130130 res <- fetchItem' (writerMediaBag opts) (writerSourceURL opts) src
131131 case res of
132132 Left (_ :: E.SomeException) -> do
@@ -134,11 +134,12 @@ transformPicMath opts entriesRef (Image lab (src,t)) = do
134134 return $ Emph lab
135135 Right (img, mbMimeType) -> do
136136 (w,h) <- case imageSize img of
137− Right size -> return $ sizeInPoints size
138− Left msg -> do
139− warn $ "Could not determine image size in `" ++
140− src ++ "': " ++ msg
141− return (0,0)
137+ Right size -> return $
138+ desiredSizeInPoints opts attr size
139+ Left msg -> do
140+ warn $ "Could not determine image size in `" ++
141+ src ++ "': " ++ msg
142+ return (0,0)
142143 let tit' = show w ++ "x" ++ show h
143144 entries <- readIORef entriesRef
144145 let extension = fromMaybe (takeExtension $ takeWhile (/='?') src)
@@ -150,7 +151,7 @@ transformPicMath opts entriesRef (Image lab (src,t)) = do
150151 modifyIORef entriesRef (entry:)
151152 let fig | "fig:" `isPrefixOf` t = "fig:"
152153 | otherwise = ""
153− return $ Image lab (newsrc, fig++tit')
154+ return $ Image attr lab (newsrc, fig++tit')
154155transformPicMath _ entriesRef (Math t math) = do
155156 entries <- readIORef entriesRef
156157 let dt = if t == InlineMath then DisplayInline else DisplayBlock
src/Text/Pandoc/Writers/OpenDocument.hs+8−8
@@ -286,8 +286,8 @@ blockToOpenDocument o bs
286286 | Plain b <- bs = if null b
287287 then return empty
288288 else inParagraphTags =<< inlinesToOpenDocument o b
289− | Para [Image c (s,'f':'i':'g':':':t)] <- bs
290− = figure c s t
289+ | Para [Image attr c (s,'f':'i':'g':':':t)] <- bs
290+ = figure attr c s t
291291 | Para b <- bs = if null b
292292 then return empty
293293 else inParagraphTags =<< inlinesToOpenDocument o b
@@ -342,10 +342,10 @@ blockToOpenDocument o bs
342342 return $ inTags True "table:table" [ ("table:name" , name)
343343 , ("table:style-name", name)
344344 ] (vcat columns $$ th $$ vcat tr) $$ captionDoc
345− figure caption source title | null caption =
346− withParagraphStyle o "Figure" [Para [Image caption (source,title)]]
345+ figure attr caption source title | null caption =
346+ withParagraphStyle o "Figure" [Para [Image attr caption (source,title)]]
347347 | otherwise = do
348− imageDoc <- withParagraphStyle o "FigureWithCaption" [Para [Image caption (source,title)]]
348+ imageDoc <- withParagraphStyle o "FigureWithCaption" [Para [Image attr caption (source,title)]]
349349 captionDoc <- withParagraphStyle o "FigureCaption" [Para caption]
350350 return $ imageDoc $$ captionDoc
351351
@@ -391,8 +391,8 @@ inlineToOpenDocument o ils
391391 | RawInline f s <- ils = if f == Format "opendocument"
392392 then return $ text s
393393 else return empty
394− | Link l (s,t) <- ils = mkLink s t <$> inlinesToOpenDocument o l
395− | Image _ (s,t) <- ils = mkImg s t
394+ | Link _ l (s,t) <- ils = mkLink s t <$> inlinesToOpenDocument o l
395+ | Image attr _ (s,t) <- ils = mkImg attr s t
396396 | Note l <- ils = mkNote l
397397 | otherwise = return empty
398398 where
@@ -401,7 +401,7 @@ inlineToOpenDocument o ils
401401 , ("xlink:href" , s )
402402 , ("office:name", t )
403403 ] . inSpanTags "Definition"
404− mkImg s t = do
404+ mkImg _ s t = do
405405 id' <- gets stImageId
406406 modify (\st -> st{ stImageId = id' + 1 })
407407 return $ inTags False "draw:frame"
src/Text/Pandoc/Writers/Org.hs+4−4
@@ -116,12 +116,12 @@ blockToOrg (Div attrs bs) = do
116116 nest 2 endTag $$ "#+END_HTML" $$ blankline
117117blockToOrg (Plain inlines) = inlineListToOrg inlines
118118-- title beginning with fig: indicates that the image is a figure
119−blockToOrg (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
119+blockToOrg (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
120120 capt <- if null txt
121121 then return empty
122122 else (\c -> "#+CAPTION: " <> c <> blankline) `fmap`
123123 inlineListToOrg txt
124− img <- inlineToOrg (Image txt (src,tit))
124+ img <- inlineToOrg (Image attr txt (src,tit))
125125 return $ capt <> img
126126blockToOrg (Para inlines) = do
127127 contents <- inlineListToOrg inlines
@@ -275,7 +275,7 @@ inlineToOrg (RawInline f str) | f == "tex" || f == "latex" = return $ text str
275275inlineToOrg (RawInline _ _) = return empty
276276inlineToOrg (LineBreak) = return (text "\\\\" <> cr)
277277inlineToOrg Space = return space
278−inlineToOrg (Link txt (src, _)) = do
278+inlineToOrg (Link _ txt (src, _)) = do
279279 case txt of
280280 [Str x] | escapeURI x == src -> -- autolink
281281 do modify $ \s -> s{ stLinks = True }
@@ -283,7 +283,7 @@ inlineToOrg (Link txt (src, _)) = do
283283 _ -> do contents <- inlineListToOrg txt
284284 modify $ \s -> s{ stLinks = True }
285285 return $ "[[" <> text src <> "][" <> contents <> "]]"
286−inlineToOrg (Image _ (source, _)) = do
286+inlineToOrg (Image _ _ (source, _)) = do
287287 modify $ \s -> s{ stImages = True }
288288 return $ "[[" <> text source <> "]]"
289289inlineToOrg (Note contents) = do
src/Text/Pandoc/Writers/RST.hs+48−20
@@ -35,6 +35,7 @@ import Text.Pandoc.Definition
3535import Text.Pandoc.Options
3636import Text.Pandoc.Shared
3737import Text.Pandoc.Writers.Shared
38+import Text.Pandoc.ImageSize
3839import Text.Pandoc.Templates (renderTemplate')
3940import Text.Pandoc.Builder (deleteMeta)
4041import Data.Maybe (fromMaybe)
@@ -49,7 +50,7 @@ type Refs = [([Inline], Target)]
4950data WriterState =
5051 WriterState { stNotes :: [[Block]]
5152 , stLinks :: Refs
52− , stImages :: [([Inline], (String, String, Maybe String))]
53+ , stImages :: [([Inline], (Attr, String, String, Maybe String))]
5354 , stHasMath :: Bool
5455 , stHasRawTeX :: Bool
5556 , stOptions :: WriterOptions
@@ -138,17 +139,22 @@ noteToRST num note = do
138139 return $ nowrap $ marker $$ nest 3 contents
139140
140141-- | Return RST representation of picture reference table.
141−pictRefsToRST :: [([Inline], (String, String, Maybe String))]
142+pictRefsToRST :: [([Inline], (Attr, String, String, Maybe String))]
142143 -> State WriterState Doc
143144pictRefsToRST refs = mapM pictToRST refs >>= return . vcat
144145
145146-- | Return RST representation of a picture substitution reference.
146−pictToRST :: ([Inline], (String, String,Maybe String))
147+pictToRST :: ([Inline], (Attr, String, String, Maybe String))
147148 -> State WriterState Doc
148−pictToRST (label, (src, _, mbtarget)) = do
149+pictToRST (label, (attr, src, _, mbtarget)) = do
149150 label' <- inlineListToRST label
151+ dims <- imageDimsToRST attr
152+ let (_, cls, _) = attr
153+ classes = if null cls
154+ then empty
155+ else ":class: " <> text (unwords cls)
150156 return $ nowrap
151− $ ".. |" <> label' <> "| image:: " <> text src
157+ $ ".. |" <> label' <> "| image:: " <> text src $$ hang 3 empty (classes $$ dims)
152158 $$ case mbtarget of
153159 Nothing -> empty
154160 Just t -> " :target: " <> text t
@@ -183,11 +189,16 @@ blockToRST (Div attr bs) = do
183189 return $ blankline <> startTag $+$ contents $+$ endTag $$ blankline
184190blockToRST (Plain inlines) = inlineListToRST inlines
185191-- title beginning with fig: indicates that the image is a figure
186−blockToRST (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
192+blockToRST (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
187193 capt <- inlineListToRST txt
194+ dims <- imageDimsToRST attr
188195 let fig = "figure:: " <> text src
189− let alt = ":alt: " <> if null tit then capt else text tit
190− return $ hang 3 ".. " (fig $$ alt $+$ capt) $$ blankline
196+ alt = ":alt: " <> if null tit then capt else text tit
197+ (_,cls,_) = attr
198+ classes = if null cls
199+ then empty
200+ else ":figclass: " <> text (unwords cls)
201+ return $ hang 3 ".. " (fig $$ alt $$ classes $$ dims $+$ capt) $$ blankline
191202blockToRST (Para inlines)
192203 | LineBreak `elem` inlines = do -- use line block if LineBreaks
193204 lns <- mapM inlineListToRST $ splitBy (==LineBreak) inlines
@@ -382,8 +393,8 @@ inlineListToRST lst =
382393 isComplex (Strikeout _) = True
383394 isComplex (Superscript _) = True
384395 isComplex (Subscript _) = True
385− isComplex (Link _ _) = True
386− isComplex (Image _ _) = True
396+ isComplex (Link _ _ _) = True
397+ isComplex (Image _ _ _) = True
387398 isComplex (Code _ _) = True
388399 isComplex (Math _ _) = True
389400 isComplex (Cite _ (x:_)) = isComplex x
@@ -436,17 +447,17 @@ inlineToRST (RawInline f x)
436447inlineToRST (LineBreak) = return cr -- there's no line break in RST (see Para)
437448inlineToRST Space = return space
438449-- autolink
439−inlineToRST (Link [Str str] (src, _))
450+inlineToRST (Link _ [Str str] (src, _))
440451 | isURI src &&
441452 if "mailto:" `isPrefixOf` src
442453 then src == escapeURI ("mailto:" ++ str)
443454 else src == escapeURI str = do
444455 let srcSuffix = fromMaybe src (stripPrefix "mailto:" src)
445456 return $ text srcSuffix
446−inlineToRST (Link [Image alt (imgsrc,imgtit)] (src, _tit)) = do
447− label <- registerImage alt (imgsrc,imgtit) (Just src)
457+inlineToRST (Link _ [Image attr alt (imgsrc,imgtit)] (src, _tit)) = do
458+ label <- registerImage attr alt (imgsrc,imgtit) (Just src)
448459 return $ "|" <> label <> "|"
449−inlineToRST (Link txt (src, tit)) = do
460+inlineToRST (Link _ txt (src, tit)) = do
450461 useReferenceLinks <- get >>= return . writerReferenceLinks . stOptions
451462 linktext <- inlineListToRST $ normalizeSpaces txt
452463 if useReferenceLinks
@@ -461,8 +472,8 @@ inlineToRST (Link txt (src, tit)) = do
461472 modify $ \st -> st { stLinks = (txt,(src,tit)):refs }
462473 return $ "`" <> linktext <> "`_"
463474 else return $ "`" <> linktext <> " <" <> text src <> ">`__"
464−inlineToRST (Image alternate (source, tit)) = do
465− label <- registerImage alternate (source,tit) Nothing
475+inlineToRST (Image attr alternate (source, tit)) = do
476+ label <- registerImage attr alternate (source,tit) Nothing
466477 return $ "|" <> label <> "|"
467478inlineToRST (Note contents) = do
468479 -- add to notes in state
@@ -471,16 +482,33 @@ inlineToRST (Note contents) = do
471482 let ref = show $ (length notes) + 1
472483 return $ " [" <> text ref <> "]_"
473484
474−registerImage :: [Inline] -> Target -> Maybe String -> State WriterState Doc
475−registerImage alt (src,tit) mbtarget = do
485+registerImage :: Attr -> [Inline] -> Target -> Maybe String -> State WriterState Doc
486+registerImage attr alt (src,tit) mbtarget = do
476487 pics <- get >>= return . stImages
477488 txt <- case lookup alt pics of
478− Just (s,t,mbt) | (s,t,mbt) == (src,tit,mbtarget) -> return alt
489+ Just (a,s,t,mbt) | (a,s,t,mbt) == (attr,src,tit,mbtarget)
490+ -> return alt
479491 _ -> do
480492 let alt' = if null alt || alt == [Str ""]
481493 then [Str $ "image" ++ show (length pics)]
482494 else alt
483495 modify $ \st -> st { stImages =
484− (alt', (src,tit, mbtarget)):stImages st }
496+ (alt', (attr,src,tit, mbtarget)):stImages st }
485497 return alt'
486498 inlineListToRST txt
499+
500+imageDimsToRST :: Attr -> State WriterState Doc
501+imageDimsToRST attr = do
502+ let (ident, _, _) = attr
503+ name = if null ident
504+ then empty
505+ else ":name: " <> text ident
506+ showDim dir = let cols d = ":" <> text (show dir) <> ": " <> text (show d)
507+ in case (dimension dir attr) of
508+ Just (Percent a) ->
509+ case dir of
510+ Height -> empty
511+ Width -> cols (Percent a)
512+ Just dim -> cols dim
513+ Nothing -> empty
514+ return $ cr <> name $$ showDim Width $$ showDim Height
src/Text/Pandoc/Writers/RTF.hs+7−7
@@ -46,7 +46,7 @@ import Text.Pandoc.ImageSize
4646-- or a MediaBag, or the internet.
4747-- If file not found or filetype not jpeg or png, leave the inline unchanged.
4848rtfEmbedImage :: WriterOptions -> Inline -> IO Inline
49−rtfEmbedImage opts x@(Image _ (src,_)) = do
49+rtfEmbedImage opts x@(Image attr _ (src,_)) = do
5050 result <- fetchItem' (writerMediaBag opts) (writerSourceURL opts) src
5151 case result of
5252 Right (imgdata, Just mime)
@@ -63,12 +63,12 @@ rtfEmbedImage opts x@(Image _ (src,_)) = do
6363 return ""
6464 Right sz -> return $ "\\picw" ++ show xpx ++
6565 "\\pich" ++ show ypx ++
66− "\\picwgoal" ++ show (xpt * 20)
67− ++ "\\pichgoal" ++ show (ypt * 20)
66+ "\\picwgoal" ++ show (floor (xpt * 20) :: Integer)
67+ ++ "\\pichgoal" ++ show (floor (ypt * 20) :: Integer)
6868 -- twip = 1/1440in = 1/20pt
6969 where (xpx, ypx) = sizeInPixels sz
70− (xpt, ypt) = sizeInPoints sz
71− let raw = "{\\pict" ++ filetype ++ sizeSpec ++ " " ++
70+ (xpt, ypt) = desiredSizeInPoints opts attr sz
71+ let raw = "{\\pict" ++ filetype ++ sizeSpec ++ "\\bin " ++
7272 concat bytes ++ "}"
7373 return $ if B.null imgdata
7474 then x
@@ -350,10 +350,10 @@ inlineToRTF (RawInline f str)
350350 | otherwise = ""
351351inlineToRTF (LineBreak) = "\\line "
352352inlineToRTF Space = " "
353−inlineToRTF (Link text (src, _)) =
353+inlineToRTF (Link _ text (src, _)) =
354354 "{\\field{\\*\\fldinst{HYPERLINK \"" ++ (codeStringToRTF src) ++
355355 "\"}}{\\fldrslt{\\ul\n" ++ (inlineListToRTF text) ++ "\n}}}\n"
356−inlineToRTF (Image _ (source, _)) =
356+inlineToRTF (Image _ _ (source, _)) =
357357 "{\\cf1 [image: " ++ source ++ "]\\cf0}"
358358inlineToRTF (Note contents) =
359359 "{\\super\\chftn}{\\*\\footnote\\chftn\\~\\plain\\pard " ++
src/Text/Pandoc/Writers/Texinfo.hs+17−8
@@ -40,6 +40,7 @@ import Data.Ord ( comparing )
4040import Data.Char ( chr, ord )
4141import Control.Monad.State
4242import Text.Pandoc.Pretty
43+import Text.Pandoc.ImageSize
4344import Network.URI ( isURI, unEscapeString )
4445import System.FilePath
4546
@@ -49,6 +50,7 @@ data WriterState =
4950 , stSubscript :: Bool -- document contains subscript
5051 , stEscapeComma :: Bool -- in a context where we need @comma
5152 , stIdentifiers :: [String] -- header ids used already
53+ , stOptions :: WriterOptions -- writer options
5254 }
5355
5456{- TODO:
@@ -61,7 +63,8 @@ writeTexinfo :: WriterOptions -> Pandoc -> String
6163writeTexinfo options document =
6264 evalState (pandocToTexinfo options $ wrapTop document) $
6365 WriterState { stStrikeout = False, stSuperscript = False,
64− stEscapeComma = False, stSubscript = False, stIdentifiers = [] }
66+ stEscapeComma = False, stSubscript = False,
67+ stIdentifiers = [], stOptions = options}
6568
6669-- | Add a "Top" node around the document, needed by Texinfo.
6770wrapTop :: Pandoc -> Pandoc
@@ -130,12 +133,12 @@ blockToTexinfo (Plain lst) =
130133 inlineListToTexinfo lst
131134
132135-- title beginning with fig: indicates that the image is a figure
133−blockToTexinfo (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
136+blockToTexinfo (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
134137 capt <- if null txt
135138 then return empty
136139 else (\c -> text "@caption" <> braces c) `fmap`
137140 inlineListToTexinfo txt
138− img <- inlineToTexinfo (Image txt (src,tit))
141+ img <- inlineToTexinfo (Image attr txt (src,tit))
139142 return $ text "@float" $$ img $$ capt $$ text "@end float"
140143
141144blockToTexinfo (Para lst) =
@@ -424,11 +427,11 @@ inlineToTexinfo (RawInline f str)
424427inlineToTexinfo (LineBreak) = return $ text "@*" <> cr
425428inlineToTexinfo Space = return space
426429
427−inlineToTexinfo (Link txt (src@('#':_), _)) = do
430+inlineToTexinfo (Link _ txt (src@('#':_), _)) = do
428431 contents <- escapeCommas $ inlineListToTexinfo txt
429432 return $ text "@ref" <>
430433 braces (text (stringToTexinfo src) <> text "," <> contents)
431−inlineToTexinfo (Link txt (src, _)) = do
434+inlineToTexinfo (Link _ txt (src, _)) = do
432435 case txt of
433436 [Str x] | escapeURI x == src -> -- autolink
434437 do return $ text $ "@url{" ++ x ++ "}"
@@ -437,10 +440,16 @@ inlineToTexinfo (Link txt (src, _)) = do
437440 return $ text ("@uref{" ++ src1 ++ ",") <> contents <>
438441 char '}'
439442
440−inlineToTexinfo (Image alternate (source, _)) = do
443+inlineToTexinfo (Image attr alternate (source, _)) = do
441444 content <- escapeCommas $ inlineListToTexinfo alternate
442− return $ text ("@image{" ++ base ++ ",,,") <> content <> text "," <>
443− text (ext ++ "}")
445+ opts <- gets stOptions
446+ let showDim dim = case (dimension dim attr) of
447+ (Just (Pixel a)) -> showInInch opts (Pixel a) ++ "in"
448+ (Just (Percent _)) -> ""
449+ (Just d) -> show d
450+ Nothing -> ""
451+ return $ text ("@image{" ++ base ++ ',':(showDim Width) ++ ',':(showDim Height) ++ ",")
452+ <> content <> text "," <> text (ext ++ "}")
444453 where
445454 ext = drop 1 $ takeExtension source'
446455 base = dropExtension source'
src/Text/Pandoc/Writers/Textile.hs+23−6
@@ -34,6 +34,7 @@ import Text.Pandoc.Definition
3434import Text.Pandoc.Options
3535import Text.Pandoc.Shared
3636import Text.Pandoc.Pretty (render)
37+import Text.Pandoc.ImageSize
3738import Text.Pandoc.Writers.Shared
3839import Text.Pandoc.Templates (renderTemplate')
3940import Text.Pandoc.XML ( escapeStringForXML )
@@ -116,9 +117,9 @@ blockToTextile opts (Plain inlines) =
116117 inlineListToTextile opts inlines
117118
118119-- title beginning with fig: indicates that the image is a figure
119−blockToTextile opts (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
120+blockToTextile opts (Para [Image attr txt (src,'f':'i':'g':':':tit)]) = do
120121 capt <- blockToTextile opts (Para txt)
121− im <- inlineToTextile opts (Image txt (src,tit))
122+ im <- inlineToTextile opts (Image attr txt (src,tit))
122123 return $ im ++ "\n" ++ capt
123124
124125blockToTextile opts (Para inlines) = do
@@ -435,23 +436,39 @@ inlineToTextile _ (LineBreak) = return "\n"
435436
436437inlineToTextile _ Space = return " "
437438
438−inlineToTextile opts (Link txt (src, _)) = do
439+inlineToTextile opts (Link (_, cls, _) txt (src, _)) = do
440+ let classes = if null cls
441+ then ""
442+ else "(" ++ unwords cls ++ ")"
439443 label <- case txt of
440444 [Code _ s]
441445 | s == src -> return "$"
442446 [Str s]
443447 | s == src -> return "$"
444448 _ -> inlineListToTextile opts txt
445− return $ "\"" ++ label ++ "\":" ++ src
449+ return $ "\"" ++ classes ++ label ++ "\":" ++ src
446450
447−inlineToTextile opts (Image alt (source, tit)) = do
451+inlineToTextile opts (Image attr@(_, cls, _) alt (source, tit)) = do
448452 alt' <- inlineListToTextile opts alt
449453 let txt = if null tit
450454 then if null alt'
451455 then ""
452456 else "(" ++ alt' ++ ")"
453457 else "(" ++ tit ++ ")"
454− return $ "!" ++ source ++ txt ++ "!"
458+ classes = if null cls
459+ then ""
460+ else "(" ++ unwords cls ++ ")"
461+ showDim dir = let toCss str = Just $ show dir ++ ":" ++ str ++ ";"
462+ in case (dimension dir attr) of
463+ Just (Percent a) -> toCss $ show (Percent a)
464+ Just dim -> toCss $ showInPixel opts dim ++ "px"
465+ Nothing -> Nothing
466+ styles = case (showDim Width, showDim Height) of
467+ (Just w, Just h) -> "{" ++ w ++ h ++ "}"
468+ (Just w, Nothing) -> "{" ++ w ++ "height:auto;}"
469+ (Nothing, Just h) -> "{" ++ "width:auto;" ++ h ++ "}"
470+ (Nothing, Nothing) -> ""
471+ return $ "!" ++ classes ++ styles ++ source ++ txt ++ "!"
455472
456473inlineToTextile opts (Note contents) = do
457474 curNotes <- liftM stNotes get
stack.yaml+8
@@ -7,5 +7,13 @@ flags:
77 network-uri: true
88packages:
99- '.'
10+- location:
11+ git: 'https://github.com/jgm/pandoc-types'
12+ commit: c64eb383dce64396290aa815351ddb6e43cb6b0f
13+ extra-dep: true
14+- location:
15+ git: 'https://github.com/jgm/texmath'
16+ commit: a716e9b5d8c1634847db2c1119e60836634569bf
17+ extra-dep: true
1018extra-deps: []
1119resolver: lts-3.13
tests/Tests/Arbitrary.hs+6−4
@@ -56,14 +56,16 @@ arbInline n = frequency $ [ (60, liftM Str realString)
5656 , (10, do x1 <- arbitrary
5757 x2 <- realString
5858 return $ Math x1 x2)
59− , (10, do x1 <- arbInlines (n-1)
59+ , (10, do x0 <- arbAttr
60+ x1 <- arbInlines (n-1)
6061 x3 <- realString
6162 x2 <- liftM escapeURI realString
62− return $ Link x1 (x2,x3))
63− , (10, do x1 <- arbInlines (n-1)
63+ return $ Link x0 x1 (x2,x3))
64+ , (10, do x0 <- arbAttr
65+ x1 <- arbInlines (n-1)
6466 x3 <- realString
6567 x2 <- liftM escapeURI realString
66− return $ Image x1 (x2,x3))
68+ return $ Image x0 x1 (x2,x3))
6769 , (2, liftM2 Cite arbitrary (arbInlines 1))
6870 , (2, liftM Note $ resize 3 $ listOf1 $ arbBlock (n-1))
6971 ]
tests/Tests/Writers/LaTeX.hs+1−1
@@ -42,7 +42,7 @@ tests = [ testGroup "code blocks"
4242 , testGroup "definition lists"
4343 [ "with internal link" =: definitionList [(link "#go" "" (str "testing"),
4444 [plain (text "hi there")])] =?>
45− "\\begin{description}\n\\tightlist\n\\item[\\protect\\hyperlink{go}{testing}]\nhi there\n\\end{description}"
45+ "\\begin{description}\n\\tightlist\n\\item[{\\protect\\hyperlink{go}{testing}}]\nhi there\n\\end{description}"
4646 ]
4747 , testGroup "math"
4848 [ "escape |" =: para (math "\\sigma|_{\\{x\\}}") =?>
tests/docbook-reader.native+33−33
@@ -1,7 +1,7 @@
11Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]})
22[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
33,Header 1 ("headers",[],[]) [Str "Headers"]
4−,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
4+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embedded",Space,Str "link"] ("/url","")]
55,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]
66,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]
77,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]
@@ -179,7 +179,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
179179,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
180180,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]
181181,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."]
182−,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
182+,Para [Str "An",Space,Emph [Link ("",[],[]) [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
183183,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
184184,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
185185,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
@@ -230,51 +230,51 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
230230,Para [Str "Minus:",Space,Str "-"]
231231,Header 1 ("links",[],[]) [Str "Links"]
232232,Header 2 ("explicit",[],[]) [Str "Explicit"]
233−,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
234−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
235−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
236−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
237−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
238−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
239−,Para [Link [Str "with_underscore"] ("/url/with_underscore","")]
240−,Para [Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
241−,Para [Link [Str "Empty"] ("",""),Str "."]
233+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
234+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
235+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
236+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
237+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
238+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
239+,Para [Link ("",[],[]) [Str "with_underscore"] ("/url/with_underscore","")]
240+,Para [Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
241+,Para [Link ("",[],[]) [Str "Empty"] ("",""),Str "."]
242242,Header 2 ("reference",[],[]) [Str "Reference"]
243−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
244−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
245−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
246−,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
247−,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
248−,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."]
249−,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."]
250−,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]
243+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
244+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
245+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
246+,Para [Str "With",Space,Link ("",[],[]) [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
247+,Para [Link ("",[],[]) [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
248+,Para [Str "Indented",Space,Link ("",[],[]) [Str "once"] ("/url",""),Str "."]
249+,Para [Str "Indented",Space,Link ("",[],[]) [Str "twice"] ("/url",""),Str "."]
250+,Para [Str "Indented",Space,Link ("",[],[]) [Str "thrice"] ("/url",""),Str "."]
251251,Para [Str "This",Space,Str "should",Space,Str "[not][]",Space,Str "be",Space,Str "a",Space,Str "link."]
252252,CodeBlock ("",[],[]) "[not]: /url"
253−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
254−,Para [Str "Foo",Space,Link [Str "biz"] ("/url/",""),Str "."]
253+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
254+,Para [Str "Foo",Space,Link ("",[],[]) [Str "biz"] ("/url/",""),Str "."]
255255,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"]
256−,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
257−,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/",""),Str "."]
258−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
259−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
256+,Para [Str "Here\8217s",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
257+,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("http://att.com/",""),Str "."]
258+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
259+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
260260,Header 2 ("autolinks",[],[]) [Str "Autolinks"]
261−,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
261+,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
262262,BulletList
263263 [[Para [Str "In",Space,Str "a",Space,Str "list?"]]
264− ,[Para [Link [Str "http://example.com/"] ("http://example.com/","")]]
264+ ,[Para [Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
265265 ,[Para [Str "It",Space,Str "should."]]]
266−,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
266+,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
267267,BlockQuote
268− [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]]
268+ [Para [Str "Blockquoted:",Space,Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
269269,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]
270270,CodeBlock ("",[],[]) "or here: <http://example.com/>"
271271,Header 1 ("images",[],[]) [Str "Images"]
272272,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
273−,Para [Image [Str "lalune",Space,Str "fig",Space,Str "caption"] ("lalune.jpg","fig:")]
274−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [] ("movie.jpg",""),Space,Str "icon.",Space,Str "And",Space,Str "here",Space,Str "a",Space,Str "second",Space,Str "movie",Space,Image [Str "alt",Space,Str "text"] ("movie.jpg",""),Space,Str "icon.",Space,Str "And",Space,Str "here",Space,Str "a",Space,Str "third",Space,Str "movie",Space,Image [Str "alt",Space,Str "text"] ("movie.jpg",""),Space,Str "icon."]
275−,Para [Image [Str "lalune",Space,Str "no",Space,Str "figure",Space,Str "alt",Space,Str "text"] ("lalune.jpg","")]
273+,Para [Image ("",[],[]) [Str "lalune",Space,Str "fig",Space,Str "caption"] ("lalune.jpg","fig:")]
274+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [] ("movie.jpg",""),Space,Str "icon.",Space,Str "And",Space,Str "here",Space,Str "a",Space,Str "second",Space,Str "movie",Space,Image ("",[],[]) [Str "alt",Space,Str "text"] ("movie.jpg",""),Space,Str "icon.",Space,Str "And",Space,Str "here",Space,Str "a",Space,Str "third",Space,Str "movie",Space,Image ("",[],[]) [Str "alt",Space,Str "text"] ("movie.jpg",""),Space,Str "icon."]
275+,Para [Image ("",[],[]) [Str "lalune",Space,Str "no",Space,Str "figure",Space,Str "alt",Space,Str "text"] ("lalune.jpg","")]
276276,Header 1 ("footnotes",[],[]) [Str "Footnotes"]
277−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
277+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link ("",[],[]) [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
278278,BlockQuote
279279 [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]]
280280,OrderedList (1,Decimal,DefaultDelim)
tests/docbook-xref.native+5−5
@@ -2,11 +2,11 @@ Pandoc (Meta {unMeta = fromList []})
22[Header 1 ("ch01",[],[]) [Str "XRef",Space,Str "Samples"]
33,Para [Str "This",Space,Str "paragraph",Space,Str "demonstrates",Space,Str "several",Space,Str "features",Space,Str "of",Space,Str "XRef."]
44,BulletList
5− [[Para [Str "A",Space,Str "straight",Space,Str "link",Space,Str "generates",Space,Str "the",Space,Str "cross-reference",Space,Str "text:",Space,Link [Str "The Second Chapter"] ("#ch02",""),Str "."]]
6− ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "element",Space,Str "with",Space,Str "an",Space,Str "XRefLabel:",Space,Link [Str "Chapter the Third"] ("#ch03",""),Str "."]]
7− ,[Para [Str "A",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "EndTerm:",Space,Link [Str "Chapter 4"] ("#ch04",""),Str "."]]
8− ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "cmdsynopsis",Space,Str "element:",Space,Link [Str "chgrp"] ("#cmd01",""),Str "."]]
9− ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "funcsynopsis",Space,Str "element:",Space,Link [Str "max"] ("#func01",""),Str "."]]]
5+ [[Para [Str "A",Space,Str "straight",Space,Str "link",Space,Str "generates",Space,Str "the",Space,Str "cross-reference",Space,Str "text:",Space,Link ("",[],[]) [Str "The Second Chapter"] ("#ch02",""),Str "."]]
6+ ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "element",Space,Str "with",Space,Str "an",Space,Str "XRefLabel:",Space,Link ("",[],[]) [Str "Chapter the Third"] ("#ch03",""),Str "."]]
7+ ,[Para [Str "A",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "EndTerm:",Space,Link ("",[],[]) [Str "Chapter 4"] ("#ch04",""),Str "."]]
8+ ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "cmdsynopsis",Space,Str "element:",Space,Link ("",[],[]) [Str "chgrp"] ("#cmd01",""),Str "."]]
9+ ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "funcsynopsis",Space,Str "element:",Space,Link ("",[],[]) [Str "max"] ("#func01",""),Str "."]]]
1010,Header 1 ("ch02",[],[]) [Str "The",Space,Str "Second",Space,Str "Chapter"]
1111,Para [Str "Some",Space,Str "content",Space,Str "here"]
1212,Header 1 ("ch03",[],[]) [Str "The",Space,Str "Third",Space,Str "Chapter"]
tests/docx/already_auto_ident.native+1−1
@@ -1,2 +1,2 @@
11[Header 1 ("anchor-header",[],[]) [Str "Anchor",Space,Str "Header"]
2−,Para [Str "A",Space,Link [Str "link"] ("#anchor-header","")]]
2+,Para [Str "A",Space,Link ("",[],[]) [Str "link"] ("#anchor-header","")]]
tests/docx/image_no_embed.native+1−1
@@ -1,2 +1,2 @@
11[Para [Str "An",Space,Str "image:"]
2−,Para [Image [] ("media/image1.jpg","")]]
2+,Para [Image ("",[],[]) [] ("media/image1.jpg","")]]
tests/docx/image_no_embed_writer.native+1−1
@@ -1,2 +1,2 @@
11[Para [Str "An",Space,Str "image:"]
2−,Para [Image [] ("media/rId25.jpg","")]]
2+,Para [Image ("",[],[]) [] ("media/rId25.jpg","")]]
tests/docx/image_vml.native+1−1
@@ -1,4 +1,4 @@
11[Header 1 ("vml-image",[],[]) [Strong [Str "VML",Space,Str "Image"]]
22,BlockQuote
33 [Para [Str "It",Space,Str "should",Space,Str "follow",Space,Str "below:"]
4− ,Para [Image [] ("media/image4.jpeg","")]]]
4+ ,Para [Image ("",[],[]) [] ("media/image4.jpeg","")]]]
tests/docx/inline_images.native+2−2
@@ -1,2 +1,2 @@
1−[Para [Str "This",Space,Str "picture",Space,Image [] ("media/image1.jpg",""),Space,Str "is",Space,Str "an",Space,Str "identicon."]
2−,Para [Str "Here",Space,Str "is",Space,Link [Str "one",Space,Image [] ("media/image2.jpg",""),Space,Str "that"] ("http://www.google.com",""),Space,Str "links."]]
1+[Para [Str "This",Space,Str "picture",Space,Image ("",[],[]) [] ("media/image1.jpg",""),Space,Str "is",Space,Str "an",Space,Str "identicon."]
2+,Para [Str "Here",Space,Str "is",Space,Link ("",[],[]) [Str "one",Space,Image ("",[],[]) [] ("media/image2.jpg",""),Space,Str "that"] ("http://www.google.com",""),Space,Str "links."]]
tests/docx/inline_images_writer.native+2−2
@@ -1,2 +1,2 @@
1−[Para [Str "This",Space,Str "picture",Space,Image [] ("media/rId26.jpg",""),Space,Str "is",Space,Str "an",Space,Str "identicon."]
2−,Para [Str "Here",Space,Str "is",Space,Link [Str "one",Space,Image [] ("media/rId27.jpg",""),Space,Str "that"] ("http://www.google.com",""),Space,Str "links."]]
1+[Para [Str "This",Space,Str "picture",Space,Image ("",[],[]) [] ("media/rId26.jpg",""),Space,Str "is",Space,Str "an",Space,Str "identicon."]
2+,Para [Str "Here",Space,Str "is",Space,Link ("",[],[]) [Str "one",Space,Image ("",[],[]) [] ("media/rId27.jpg",""),Space,Str "that"] ("http://www.google.com",""),Space,Str "links."]]
tests/docx/link_in_notes.native+1−1
@@ -1 +1 @@
1−[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Note [Para [Link [Str "http://wikipedia.org/"] ("http://wikipedia.org/","")]],Str "."]]
1+[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Note [Para [Link ("",[],[]) [Str "http://wikipedia.org/"] ("http://wikipedia.org/","")]],Str "."]]
tests/docx/links.native+4−4
@@ -1,7 +1,7 @@
11[Header 2 ("an-internal-link-and-an-external-link",[],[]) [Str "An",Space,Str "internal",Space,Str "link",Space,Str "and",Space,Str "an",Space,Str "external",Space,Str "link"]
2−,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://google.com",""),Space,Str "to",Space,Str "a",Space,Str "popular",Space,Str "website."]
3−,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://pandoc.org/README.html#synopsis",""),Space,Str "to",Space,Str "a",Space,Str "website",Space,Str "with",Space,Str "an",Space,Str "anchor."]
4−,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#a-section-for-testing-link-targets",""),Space,Str "to",Space,Str "a",Space,Str "section",Space,Str "header."]
5−,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#my_bookmark",""),Space,Str "to",Space,Str "a",Space,Str "bookmark."]
2+,Para [Str "An",Space,Link ("",[],[]) [Str "external",Space,Str "link"] ("http://google.com",""),Space,Str "to",Space,Str "a",Space,Str "popular",Space,Str "website."]
3+,Para [Str "An",Space,Link ("",[],[]) [Str "external",Space,Str "link"] ("http://pandoc.org/README.html#synopsis",""),Space,Str "to",Space,Str "a",Space,Str "website",Space,Str "with",Space,Str "an",Space,Str "anchor."]
4+,Para [Str "An",Space,Link ("",[],[]) [Str "internal",Space,Str "link"] ("#a-section-for-testing-link-targets",""),Space,Str "to",Space,Str "a",Space,Str "section",Space,Str "header."]
5+,Para [Str "An",Space,Link ("",[],[]) [Str "internal",Space,Str "link"] ("#my_bookmark",""),Space,Str "to",Space,Str "a",Space,Str "bookmark."]
66,Header 2 ("a-section-for-testing-link-targets",[],[]) [Str "A",Space,Str "section",Space,Str "for",Space,Str "testing",Space,Str "link",Space,Str "targets"]
77,Para [Str "A",Space,Str "bookmark",Space,Str "right",Space,Span ("my_bookmark",["anchor"],[]) [],Str "here"]]
tests/docx/links_writer.native+4−4
@@ -1,6 +1,6 @@
11[Header 2 ("an-internal-link-and-an-external-link",[],[]) [Str "An",Space,Str "internal",Space,Str "link",Space,Str "and",Space,Str "an",Space,Str "external",Space,Str "link"]
2−,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://google.com",""),Space,Str "to",Space,Str "a",Space,Str "popular",Space,Str "website."]
3−,Para [Str "An",Space,Link [Str "external",Space,Str "link"] ("http://pandoc.org/README.html#synopsis",""),Space,Str "to",Space,Str "a",Space,Str "website",Space,Str "with",Space,Str "an",Space,Str "anchor."]
4−,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#a-section-for-testing-link-targets",""),Space,Str "to",Space,Str "a",Space,Str "section",Space,Str "header."]
5−,Para [Str "An",Space,Link [Str "internal",Space,Str "link"] ("#my_bookmark",""),Space,Str "to",Space,Str "a",Space,Str "bookmark."]
2+,Para [Str "An",Space,Link ("",[],[]) [Str "external",Space,Str "link"] ("http://google.com",""),Space,Str "to",Space,Str "a",Space,Str "popular",Space,Str "website."]
3+,Para [Str "An",Space,Link ("",[],[]) [Str "external",Space,Str "link"] ("http://pandoc.org/README.html#synopsis",""),Space,Str "to",Space,Str "a",Space,Str "website",Space,Str "with",Space,Str "an",Space,Str "anchor."]
4+,Para [Str "An",Space,Link ("",[],[]) [Str "internal",Space,Str "link"] ("#a-section-for-testing-link-targets",""),Space,Str "to",Space,Str "a",Space,Str "section",Space,Str "header."]
5+,Para [Str "An",Space,Link ("",[],[]) [Str "internal",Space,Str "link"] ("#my_bookmark",""),Space,Str "to",Space,Str "a",Space,Str "bookmark."]
66,Header 2 ("a-section-for-testing-link-targets",[],[]) [Str "A",Space,Str "section",Space,Str "for",Space,Str "testing",Space,Str "link",Space,Str "targets"]]
tests/dokuwiki_external_images.native+1−1
@@ -1 +1 @@
1−[Para [Image [Str "HTTPS",Space,Str "image"] ("https://cooluri.com/image.png",""),Space,Image [Str "HTTP",Space,Str "image"] ("http://cooluri.com/image.png",""),Space,Image [Str "FTP",Space,Str "image"] ("ftp://ftp.cooluri.com/image.png",""),Space,Image [Str "Filesystem",Space,Str "image"] ("file:///tmp/coolimage.png",""),Space,Image [Str "Relative",Space,Str "image",Space,Str "1"] ("/image.jpg",""),Space,Image [Str "Relative",Space,Str "image",Space,Str "2"] ("image.jpg","")]]
1+[Para [Image ("",[],[]) [Str "HTTPS",Space,Str "image"] ("https://cooluri.com/image.png",""),Space,Image ("",[],[]) [Str "HTTP",Space,Str "image"] ("http://cooluri.com/image.png",""),Space,Image ("",[],[]) [Str "FTP",Space,Str "image"] ("ftp://ftp.cooluri.com/image.png",""),Space,Image ("",[],[]) [Str "Filesystem",Space,Str "image"] ("file:///tmp/coolimage.png",""),Space,Image ("",[],[]) [Str "Relative",Space,Str "image",Space,Str "1"] ("/image.jpg",""),Space,Image ("",[],[]) [Str "Relative",Space,Str "image",Space,Str "2"] ("image.jpg","")]]
tests/dokuwiki_multiblock_table.native+1−1
@@ -10,4 +10,4 @@
1010 ,[Para [Str "$2.10"]]
1111 ,[BulletList
1212 [[Plain [Str "cures",Space,Str "scurvy"]]
13− ,[Plain [Str "tasty"]]]]]]]
13+ ,[Plain [Str "tasty"]]]]]]]
tests/epub/features.native+3−3
@@ -5,13 +5,13 @@
55 [Header 2 ("",[],[]) [Str "Status",Space,Str "of",Space,Str "this",Space,Str "Document"]
66 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "currently",Space,Str "considered",Space,Span ("",["status"],[]) [Str "[UNDER",Space,Str "DEVELOPMENT]"],Space,Str "by",Space,Str "the",Space,Str "IDPF."]
77 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "part",Space,Str "of",Space,Str "version",Space,Span ("",["version"],[]) [Str "X.X"],Space,Str "of",Space,Str "the",Space,Str "EPUB",Space,Str "3.0",Space,Str "Compliance",Space,Str "Test",Space,Str "Suite",Space,Str "released",Space,Str "on",Space,RawInline (Format "html") "<time class=\"release\">",Str "TBD",RawInline (Format "html") "</time>",Str "."]
8− ,Para [Str "Before",Space,Str "using",Space,Str "this",Space,Str "publication",Space,Str "to",Space,Str "evaluate",Space,Str "reading",Space,Str "systems,",Space,Str "testers",Space,Str "are",Space,Str "strongly",Space,Str "encouraged",Space,Str "to",Space,Str "verify",Space,Str "that",Space,Str "they",Space,Str "have",Space,Str "the",Space,Str "latest",Space,Str "release",Space,Str "by",Space,Str "checking",Space,Str "the",Space,Str "current",Space,Str "release",Space,Str "version",Space,Str "and",Space,Str "date",Space,Str "of",Space,Str "the",Space,Str "test",Space,Str "suite",Space,Str "at",Space,Link [Str "TBD"] ("http://idpf.org/","")]
8+ ,Para [Str "Before",Space,Str "using",Space,Str "this",Space,Str "publication",Space,Str "to",Space,Str "evaluate",Space,Str "reading",Space,Str "systems,",Space,Str "testers",Space,Str "are",Space,Str "strongly",Space,Str "encouraged",Space,Str "to",Space,Str "verify",Space,Str "that",Space,Str "they",Space,Str "have",Space,Str "the",Space,Str "latest",Space,Str "release",Space,Str "by",Space,Str "checking",Space,Str "the",Space,Str "current",Space,Str "release",Space,Str "version",Space,Str "and",Space,Str "date",Space,Str "of",Space,Str "the",Space,Str "test",Space,Str "suite",Space,Str "at",Space,Link ("",[],[]) [Str "TBD"] ("http://idpf.org/","")]
99 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "one",Space,Str "of",Space,Str "several",Space,Str "that",Space,Str "currently",Space,Str "comprise",Space,Str "the",Space,Str "EPUB",Space,Str "3",Space,Str "conformance",Space,Str "test",Space,Str "suite",Space,Str "for",Space,Str "reflowable",Space,Str "content.",Space,Str "The",Space,Str "complete",Space,Str "test",Space,Str "suite",Space,Str "includes",Space,Str "all",Space,Str "of",Space,Str "the",Space,Str "following",Space,Str "publications:"]
1010 ,OrderedList (1,DefaultStyle,DefaultDelim)
1111 [[Plain [Str "."]]]]
1212 ,Div ("",["section"],[])
1313 [Header 2 ("",[],[]) [Str "About",Space,Str "this",Space,Str "Document"]
14− ,Para [Str "This",Space,Str "document",Space,Str "focuses",Space,Str "on",Space,Str "human-evaluated",Space,Str "binary",Space,Str "(pass/fail)",Space,Str "tests",Space,Str "in",Space,Str "a",Space,Str "reflowable",Space,Str "context.",Space,Str "Tests",Space,Str "for",Space,Str "fixed-layout",Space,Str "content",Space,Str "and",Space,Str "other",Space,Str "individual",Space,Str "tests",Space,Str "that",Space,Str "require",Space,Str "a",Space,Str "dedicated",Space,Str "epub",Space,Str "file",Space,Str "are",Space,Str "available",Space,Str "in",Space,Str "additional",Space,Str "sibling",Space,Str "documents;",Space,Str "refer",Space,Str "to",Space,Str "the",Space,Link [Str "test",Space,Str "suite",Space,Str "wiki"] ("https://github.com/mgylling/epub-testsuite/wiki/Overview",""),Space,Str "(",Code ("",[],[]) "https://github.com/mgylling/epub-testsuite/wiki/Overview",Str ")",Space,Str "for",Space,Str "additional",Space,Str "information."]]
14+ ,Para [Str "This",Space,Str "document",Space,Str "focuses",Space,Str "on",Space,Str "human-evaluated",Space,Str "binary",Space,Str "(pass/fail)",Space,Str "tests",Space,Str "in",Space,Str "a",Space,Str "reflowable",Space,Str "context.",Space,Str "Tests",Space,Str "for",Space,Str "fixed-layout",Space,Str "content",Space,Str "and",Space,Str "other",Space,Str "individual",Space,Str "tests",Space,Str "that",Space,Str "require",Space,Str "a",Space,Str "dedicated",Space,Str "epub",Space,Str "file",Space,Str "are",Space,Str "available",Space,Str "in",Space,Str "additional",Space,Str "sibling",Space,Str "documents;",Space,Str "refer",Space,Str "to",Space,Str "the",Space,Link ("",[],[]) [Str "test",Space,Str "suite",Space,Str "wiki"] ("https://github.com/mgylling/epub-testsuite/wiki/Overview",""),Space,Str "(",Code ("",[],[]) "https://github.com/mgylling/epub-testsuite/wiki/Overview",Str ")",Space,Str "for",Space,Str "additional",Space,Str "information."]]
1515 ,Div ("",["section"],[])
1616 [Header 2 ("",[],[]) [Str "Conventions"]
1717 ,Para [Str "The",Space,Str "following",Space,Str "conventions",Space,Str "are",Space,Str "used",Space,Str "throughout",Space,Str "the",Space,Str "document:"]
@@ -66,7 +66,7 @@
6666 [Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-025"],Str "Testing",Space,Code ("",[],[]) "mtable",Space,Str "with",Space,Code ("",[],[]) "colspan",Space,Str "and",Space,Code ("",[],[]) "rowspan",Space,Str "attributes,",Space,Str "Hebrew",Space,Str "and",Space,Str "Script",Space,Str "fonts"]
6767 ,Para [Str "Tests",Space,Str "whether",Space,Code ("",[],[]) "mtable",Space,Str "with",Space,Code ("",[],[]) "colspan",Space,Str "and",Space,Code ("",[],[]) "mspace",Space,Str "attributes",Space,Str "(colum",Space,Str "and",Space,Str "row",Space,Str "spanning)",Space,Str "are",Space,Str "supported;",Space,Str "uses",Space,Str "Hebrew",Space,Str "and",Space,Str "Script",Space,Str "alphabets."]
6868 ,Plain [Math DisplayMath "\\begin{array}{llllllllll}\n & {\\operatorname{cov}\\left( \\mathcal{L} \\right)} & \\longrightarrow & {\\operatorname{non}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cof}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cof}\\left( \\mathcal{L} \\right)} & \\longrightarrow & 2^{\\aleph_{0}} \\\\\n & \\uparrow & & \\uparrow & & \\uparrow & & \\uparrow & & \\\\\n & {\\mathfrak{b}} & \\longrightarrow & {\\mathfrak{d}} & & & & & & \\\\\n & \\uparrow & & \\uparrow & & & & & & \\\\\n\\aleph_{1} & \\longrightarrow & {\\operatorname{add}\\left( \\mathcal{L} \\right)} & \\longrightarrow & {\\operatorname{add}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{cov}\\left( \\mathcal{K} \\right)} & \\longrightarrow & {\\operatorname{non}\\left( \\mathcal{L} \\right)} & \\\\\n\\end{array}"]
69− ,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Link [Str "Cicho\324's",Space,Str "Diagram"] ("http://en.wikipedia.org/wiki/Cicho%C5%84's_diagram",""),Str ":",Space,Str "."]]
69+ ,Para [Str "The",Space,Str "test",Space,Str "passes",Space,Str "if",Space,Str "the",Space,Str "rendering",Space,Str "looks",Space,Str "like",Space,Link ("",[],[]) [Str "Cicho\324's",Space,Str "Diagram"] ("http://en.wikipedia.org/wiki/Cicho%C5%84's_diagram",""),Str ":",Space,Str "."]]
7070 ,Div ("content-mathml-001.xhtml#mathml-026",["section","ctest"],[])
7171 [Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "mathml-026"],Str "BiDi,",Space,Str "RTL",Space,Str "and",Space,Str "Arabic",Space,Str "alphabets"]
7272 ,Para [Str "Tests",Space,Str "whether",Space,Str "right-to-left",Space,Str "and",Space,Str "Arabic",Space,Str "alphabets",Space,Str "are",Space,Str "supported."]
tests/epub/formatting.native+4−4
@@ -5,13 +5,13 @@
55 [Header 2 ("",[],[]) [Str "Status",Space,Str "of",Space,Str "this",Space,Str "Document"]
66 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "currently",Space,Str "considered",Space,Span ("",["status"],[]) [Str "[UNDER",Space,Str "DEVELOPMENT]"],Space,Str "by",Space,Str "the",Space,Str "IDPF."]
77 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "part",Space,Str "of",Space,Str "version",Space,Span ("",["version"],[]) [Str "X.X"],Space,Str "of",Space,Str "the",Space,Str "EPUB",Space,Str "3.0",Space,Str "Compliance",Space,Str "Test",Space,Str "Suite",Space,Str "released",Space,Str "on",Space,RawInline (Format "html") "<time class=\"release\">",Str "TBD",RawInline (Format "html") "</time>",Str "."]
8− ,Para [Str "Before",Space,Str "using",Space,Str "this",Space,Str "publication",Space,Str "to",Space,Str "evaluate",Space,Str "reading",Space,Str "systems,",Space,Str "testers",Space,Str "are",Space,Str "strongly",Space,Str "encouraged",Space,Str "to",Space,Str "verify",Space,Str "that",Space,Str "they",Space,Str "have",Space,Str "the",Space,Str "latest",Space,Str "release",Space,Str "by",Space,Str "checking",Space,Str "the",Space,Str "current",Space,Str "release",Space,Str "version",Space,Str "and",Space,Str "date",Space,Str "of",Space,Str "the",Space,Str "test",Space,Str "suite",Space,Str "at",Space,Link [Str "TBD"] ("http://idpf.org/","")]
8+ ,Para [Str "Before",Space,Str "using",Space,Str "this",Space,Str "publication",Space,Str "to",Space,Str "evaluate",Space,Str "reading",Space,Str "systems,",Space,Str "testers",Space,Str "are",Space,Str "strongly",Space,Str "encouraged",Space,Str "to",Space,Str "verify",Space,Str "that",Space,Str "they",Space,Str "have",Space,Str "the",Space,Str "latest",Space,Str "release",Space,Str "by",Space,Str "checking",Space,Str "the",Space,Str "current",Space,Str "release",Space,Str "version",Space,Str "and",Space,Str "date",Space,Str "of",Space,Str "the",Space,Str "test",Space,Str "suite",Space,Str "at",Space,Link ("",[],[]) [Str "TBD"] ("http://idpf.org/","")]
99 ,Para [Str "This",Space,Str "publication",Space,Str "is",Space,Str "one",Space,Str "of",Space,Str "several",Space,Str "that",Space,Str "currently",Space,Str "comprise",Space,Str "the",Space,Str "EPUB",Space,Str "3",Space,Str "conformance",Space,Str "test",Space,Str "suite",Space,Str "for",Space,Str "reflowable",Space,Str "content.",Space,Str "The",Space,Str "complete",Space,Str "test",Space,Str "suite",Space,Str "includes",Space,Str "all",Space,Str "of",Space,Str "the",Space,Str "following",Space,Str "publications:"]
1010 ,OrderedList (1,DefaultStyle,DefaultDelim)
1111 [[Plain [Str "."]]]]
1212 ,Div ("",["section"],[])
1313 [Header 2 ("",[],[]) [Str "About",Space,Str "this",Space,Str "Document"]
14− ,Para [Str "This",Space,Str "document",Space,Str "focuses",Space,Str "on",Space,Str "human-evaluated",Space,Str "binary",Space,Str "(pass/fail)",Space,Str "tests",Space,Str "in",Space,Str "a",Space,Str "reflowable",Space,Str "context.",Space,Str "Tests",Space,Str "for",Space,Str "fixed-layout",Space,Str "content",Space,Str "and",Space,Str "other",Space,Str "individual",Space,Str "tests",Space,Str "that",Space,Str "require",Space,Str "a",Space,Str "dedicated",Space,Str "epub",Space,Str "file",Space,Str "are",Space,Str "available",Space,Str "in",Space,Str "additional",Space,Str "sibling",Space,Str "documents;",Space,Str "refer",Space,Str "to",Space,Str "the",Space,Link [Str "test",Space,Str "suite",Space,Str "wiki"] ("https://github.com/mgylling/epub-testsuite/wiki/Overview",""),Space,Str "(",Code ("",[],[]) "https://github.com/mgylling/epub-testsuite/wiki/Overview",Str ")",Space,Str "for",Space,Str "additional",Space,Str "information."]]
14+ ,Para [Str "This",Space,Str "document",Space,Str "focuses",Space,Str "on",Space,Str "human-evaluated",Space,Str "binary",Space,Str "(pass/fail)",Space,Str "tests",Space,Str "in",Space,Str "a",Space,Str "reflowable",Space,Str "context.",Space,Str "Tests",Space,Str "for",Space,Str "fixed-layout",Space,Str "content",Space,Str "and",Space,Str "other",Space,Str "individual",Space,Str "tests",Space,Str "that",Space,Str "require",Space,Str "a",Space,Str "dedicated",Space,Str "epub",Space,Str "file",Space,Str "are",Space,Str "available",Space,Str "in",Space,Str "additional",Space,Str "sibling",Space,Str "documents;",Space,Str "refer",Space,Str "to",Space,Str "the",Space,Link ("",[],[]) [Str "test",Space,Str "suite",Space,Str "wiki"] ("https://github.com/mgylling/epub-testsuite/wiki/Overview",""),Space,Str "(",Code ("",[],[]) "https://github.com/mgylling/epub-testsuite/wiki/Overview",Str ")",Space,Str "for",Space,Str "additional",Space,Str "information."]]
1515 ,Div ("",["section"],[])
1616 [Header 2 ("",[],[]) [Str "Conventions"]
1717 ,Para [Str "The",Space,Str "following",Space,Str "conventions",Space,Str "are",Space,Str "used",Space,Str "throughout",Space,Str "the",Space,Str "document:"]
@@ -389,12 +389,12 @@
389389 [Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "style-410"],Space,Code ("",[],[]) "over"]
390390 ,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Code ("",[],[]) "-epub-ruby-position",Space,Str "property",Space,Str "set",Space,Str "to",Space,Str "over",Space,Str "is",Space,Str "supported."]
391391 ,Plain [RawInline (Format "html") "<ruby class=\"ruby-over\">",Strong [Str "Lorem",Space,Str "Ipsum"],Space,RawInline (Format "html") "<rp>",Str "(",RawInline (Format "html") "</rp>",RawInline (Format "html") "<rt>",Str "Lorem",Space,Str "Ipsum",RawInline (Format "html") "</rt>",RawInline (Format "html") "<rp>",Str ")",RawInline (Format "html") "</rp>",RawInline (Format "html") "</ruby>"]
392− ,Para [Str "If",Space,Str "the",Space,Str "Ruby",Space,Str "text",Space,Str "is",Space,Str "positioned",Space,Str "on",Space,Str "the",Space,Link [Str "over"] ("http://www.w3.org/TR/css3-writing-modes/#over",""),Space,Str "side",Space,Str "of",Space,Str "the",Space,Str "ruby",Space,Str "base,",Space,Str "the",Space,Str "test",Space,Str "passes."]]
392+ ,Para [Str "If",Space,Str "the",Space,Str "Ruby",Space,Str "text",Space,Str "is",Space,Str "positioned",Space,Str "on",Space,Str "the",Space,Link ("",[],[]) [Str "over"] ("http://www.w3.org/TR/css3-writing-modes/#over",""),Space,Str "side",Space,Str "of",Space,Str "the",Space,Str "ruby",Space,Str "base,",Space,Str "the",Space,Str "test",Space,Str "passes."]]
393393 ,Div ("styling-xhtml-006.xhtml#style-411",["section","ctest"],[])
394394 [Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "style-411"],Space,Code ("",[],[]) "under"]
395395 ,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Code ("",[],[]) "-epub-ruby-position",Space,Str "property",Space,Str "set",Space,Str "to",Space,Str "under",Space,Str "is",Space,Str "supported."]
396396 ,Plain [RawInline (Format "html") "<ruby class=\"ruby-under\">",Strong [Str "Lorem",Space,Str "Ipsum"],Space,RawInline (Format "html") "<rp>",Str "(",RawInline (Format "html") "</rp>",RawInline (Format "html") "<rt>",Str "Lorem",Space,Str "Ipsum",RawInline (Format "html") "</rt>",RawInline (Format "html") "<rp>",Str ")",RawInline (Format "html") "</rp>",RawInline (Format "html") "</ruby>"]
397− ,Para [Str "If",Space,Str "the",Space,Str "Ruby",Space,Str "text",Space,Str "is",Space,Str "positioned",Space,Str "on",Space,Str "the",Space,Link [Str "under"] ("http://www.w3.org/TR/css3-writing-modes/#under",""),Space,Str "side",Space,Str "of",Space,Str "the",Space,Str "ruby",Space,Str "base,",Space,Str "the",Space,Str "test",Space,Str "passes."]]
397+ ,Para [Str "If",Space,Str "the",Space,Str "Ruby",Space,Str "text",Space,Str "is",Space,Str "positioned",Space,Str "on",Space,Str "the",Space,Link ("",[],[]) [Str "under"] ("http://www.w3.org/TR/css3-writing-modes/#under",""),Space,Str "side",Space,Str "of",Space,Str "the",Space,Str "ruby",Space,Str "base,",Space,Str "the",Space,Str "test",Space,Str "passes."]]
398398 ,Div ("styling-xhtml-006.xhtml#style-412",["section","ctest"],[])
399399 [Header 2 ("",[],[]) [Span ("",["nature"],[]) [Str "[REQUIRED]"],Space,Span ("",["test-id"],[]) [Str "style-412"],Space,Code ("",[],[]) "inter-character"]
400400 ,Para [Str "Tests",Space,Str "whether",Space,Str "the",Space,Code ("",[],[]) "-epub-ruby-position",Space,Str "property",Space,Str "set",Space,Str "to",Space,Str "inter-caracter",Space,Str "is",Space,Str "supported."]
tests/epub/wasteland.native+51−51
@@ -1,4 +1,4 @@
1−[Para [Image [] ("wasteland-cover.jpg","")]
1+[Para [Image ("",[],[]) [] ("wasteland-cover.jpg","")]
22,Para [Span ("wasteland-content.xhtml",[],[]) []]
33,Div ("wasteland-content.xhtml#frontmatter",["section"],[("type","frontmatter")])
44 []
@@ -46,13 +46,13 @@
4646 [Div ("",[],[])
4747 [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"]]
4848 ,Div ("wasteland-content.xhtml#ln20",[],[])
49− [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."]]]
49+ [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."]]]
5050 ,Div ("",[],[])
5151 [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"]]
5252 ,Div ("",[],[])
5353 [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,"]]
5454 ,Div ("wasteland-content.xhtml#ln23",[],[])
55− [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."]]]
55+ [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."]]]
5656 ,Div ("",[],[])
5757 [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"]]
5858 ,Div ("",[],[])
@@ -70,7 +70,7 @@
7070 ,BlockQuote
7171 [Div ("",[],[])
7272 [Div ("wasteland-content.xhtml#ln31",[],[])
73− [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."]]]
73+ [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."]]]
7474 ,Div ("",[],[])
7575 [Plain [Str "Der",Space,Str "Heimat",Space,Str "zu"]]
7676 ,Div ("",[],[])
@@ -93,7 +93,7 @@
9393 ,Div ("",[],[])
9494 [Plain [Str "Looking",Space,Str "into",Space,Str "the",Space,Str "heart",Space,Str "of",Space,Str "light,",Space,Str "the",Space,Str "silence."]]
9595 ,Div ("wasteland-content.xhtml#ln42",[],[("lang","de")])
96− [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."]]]
96+ [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."]]]
9797 ,Div ("",["linegroup"],[])
9898 [Div ("",[],[])
9999 [Plain [Str "Madame",Space,Str "Sosostris,",Space,Str "famous",Space,Str "clairvoyante,"]]
@@ -102,7 +102,7 @@
102102 ,Div ("",[],[])
103103 [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,"]]
104104 ,Div ("wasteland-content.xhtml#ln46",[],[])
105− [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",Space,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.",Space,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",Space,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,",Space,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",Space,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",Space,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",Space,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",Space,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",Space,Str "himself."]]]
105+ [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",Space,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.",Space,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",Space,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,",Space,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",Space,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",Space,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",Space,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",Space,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",Space,Str "himself."]]]
106106 ,Div ("",[],[])
107107 [Plain [Str "Is",Space,Str "your",Space,Str "card,",Space,Str "the",Space,Str "drowned",Space,Str "Phoenician",Space,Str "Sailor,"]]
108108 ,Div ("",[],[])
@@ -131,15 +131,15 @@
131131 [Plain [Str "One",Space,Str "must",Space,Str "be",Space,Str "so",Space,Str "careful",Space,Str "these",Space,Str "days."]]]
132132 ,Div ("",["linegroup"],[])
133133 [Div ("wasteland-content.xhtml#ln60",[],[])
134− [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",Space,Str "plein",Space,Str "jour",Space,Str "raccroche",Space,Str "le",Space,Str "passant.\""]]]]
134+ [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",Space,Str "plein",Space,Str "jour",Space,Str "raccroche",Space,Str "le",Space,Str "passant.\""]]]]
135135 ,Div ("",[],[])
136136 [Plain [Str "Under",Space,Str "the",Space,Str "brown",Space,Str "fog",Space,Str "of",Space,Str "a",Space,Str "winter",Space,Str "dawn,"]]
137137 ,Div ("",[],[])
138138 [Plain [Str "A",Space,Str "crowd",Space,Str "flowed",Space,Str "over",Space,Str "London",Space,Str "Bridge,",Space,Str "so",Space,Str "many,"]]
139139 ,Div ("wasteland-content.xhtml#ln63",[],[])
140− [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",Space,Str "morte",Space,Str "tanta",Space,Str "n'avesse",Space,Str "disfatta.\""]]]]
140+ [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",Space,Str "morte",Space,Str "tanta",Space,Str "n'avesse",Space,Str "disfatta.\""]]]]
141141 ,Div ("wasteland-content.xhtml#ln64",[],[])
142− [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",Space,Str "sospiri,",LineBreak,Str "\"che",Space,Str "l'aura",Space,Str "eterna",Space,Str "facevan",Space,Str "tremare.\""]]]]
142+ [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",Space,Str "sospiri,",LineBreak,Str "\"che",Space,Str "l'aura",Space,Str "eterna",Space,Str "facevan",Space,Str "tremare.\""]]]]
143143 ,Div ("",[],[])
144144 [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."]]
145145 ,Div ("",[],[])
@@ -147,7 +147,7 @@
147147 ,Div ("",[],[])
148148 [Plain [Str "To",Space,Str "where",Space,Str "Saint",Space,Str "Mary",Space,Str "Woolnoth",Space,Str "kept",Space,Str "the",Space,Str "hours"]]
149149 ,Div ("wasteland-content.xhtml#ln68",[],[])
150− [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."]]]
150+ [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."]]]
151151 ,Div ("",[],[])
152152 [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",Space,Str "\"Stetson!"]]
153153 ,Div ("",[],[])
@@ -160,16 +160,16 @@
160160 [Plain [Str "\"Or",Space,Str "has",Space,Str "the",Space,Str "sudden",Space,Str "frost",Space,Str "disturbed",Space,Str "its",Space,Str "bed?"]]]
161161 ,Div ("",["linegroup"],[])
162162 [Div ("wasteland-content.xhtml#ln74",[],[])
163− [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 "."]]]
163+ [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 "."]]]
164164 ,Div ("",[],[])
165165 [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!"]]
166166 ,Div ("wasteland-content.xhtml#ln76",[],[])
167− [Plain [Str "\"You!",Space,Span ("",[],[("lang","fr")]) [Str "hypocrite",Space,Str "lecteur!",Space,Str "-",Space,Str "mon",Space,Str "semblable,",Space,Str "-",Space,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."]]]
167+ [Plain [Str "\"You!",Space,Span ("",[],[("lang","fr")]) [Str "hypocrite",Space,Str "lecteur!",Space,Str "-",Space,Str "mon",Space,Str "semblable,",Space,Str "-",Space,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."]]]
168168 ,Div ("wasteland-content.xhtml#ch2",["section"],[])
169169 [Header 2 ("",[],[]) [Str "II.",Space,Str "A",Space,Str "GAME",Space,Str "OF",Space,Str "CHESS"]
170170 ,Div ("",["linegroup"],[])
171171 [Div ("wasteland-content.xhtml#ln77",[],[])
172− [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."]]]
172+ [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."]]]
173173 ,Div ("",[],[])
174174 [Plain [Str "Glowed",Space,Str "on",Space,Str "the",Space,Str "marble,",Space,Str "where",Space,Str "the",Space,Str "glass"]]
175175 ,Div ("",[],[])
@@ -199,7 +199,7 @@
199199 ,Div ("",[],[])
200200 [Plain [Str "In",Space,Str "fattening",Space,Str "the",Space,Str "prolonged",Space,Str "candle-flames,"]]
201201 ,Div ("wasteland-content.xhtml#ln92",[],[])
202− [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",Space,Str "flammis",LineBreak,Str "funalia",Space,Str "vincunt."]]]]
202+ [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",Space,Str "flammis",LineBreak,Str "funalia",Space,Str "vincunt."]]]]
203203 ,Div ("",[],[])
204204 [Plain [Str "Stirring",Space,Str "the",Space,Str "pattern",Space,Str "on",Space,Str "the",Space,Str "coffered",Space,Str "ceiling."]]
205205 ,Div ("",[],[])
@@ -211,11 +211,11 @@
211211 ,Div ("",[],[])
212212 [Plain [Str "Above",Space,Str "the",Space,Str "antique",Space,Str "mantel",Space,Str "was",Space,Str "displayed"]]
213213 ,Div ("wasteland-content.xhtml#ln98",[],[])
214− [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."]]]
214+ [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."]]]
215215 ,Div ("wasteland-content.xhtml#ln99",[],[])
216− [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."]]]
216+ [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."]]]
217217 ,Div ("wasteland-content.xhtml#ln100",[],[])
218− [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."]]]
218+ [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."]]]
219219 ,Div ("",[],[])
220220 [Plain [Str "Filled",Space,Str "all",Space,Str "the",Space,Str "desert",Space,Str "with",Space,Str "inviolable",Space,Str "voice"]]
221221 ,Div ("",[],[])
@@ -248,14 +248,14 @@
248248 [Plain [Str "\"I",Space,Str "never",Space,Str "know",Space,Str "what",Space,Str "you",Space,Str "are",Space,Str "thinking.",Space,Str "Think.\""]]]
249249 ,Div ("",["linegroup"],[])
250250 [Div ("wasteland-content.xhtml#ln115",[],[])
251− [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."]]]
251+ [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."]]]
252252 ,Div ("",[],[])
253253 [Plain [Str "Where",Space,Str "the",Space,Str "dead",Space,Str "men",Space,Str "lost",Space,Str "their",Space,Str "bones."]]]]
254254 ,Div ("",["linegroup"],[])
255255 [Div ("",[],[])
256256 [Plain [Str "\"What",Space,Str "is",Space,Str "that",Space,Str "noise?\""]]
257257 ,Div ("wasteland-content.xhtml#ln118",["indent"],[])
258− [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?\""]]]]
258+ [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?\""]]]]
259259 ,Div ("",[],[])
260260 [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?\""]]
261261 ,Div ("",["indent"],[])
@@ -273,7 +273,7 @@
273273 ,Div ("",[],[])
274274 [Plain [Str "Those",Space,Str "are",Space,Str "pearls",Space,Str "that",Space,Str "were",Space,Str "his",Space,Str "eyes."]]
275275 ,Div ("wasteland-content.xhtml#ln126",[],[])
276− [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."]]]
276+ [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."]]]
277277 ,Div ("",[],[])
278278 [Plain [Str "But"]]
279279 ,Div ("",[],[])
@@ -297,7 +297,7 @@
297297 ,Div ("",[],[])
298298 [Plain [Str "And",Space,Str "we",Space,Str "shall",Space,Str "play",Space,Str "a",Space,Str "game",Space,Str "of",Space,Str "chess,"]]
299299 ,Div ("wasteland-content.xhtml#ln138",[],[])
300− [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."]]]
300+ [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."]]]
301301 ,Div ("",["linegroup"],[])
302302 [Div ("",[],[])
303303 [Plain [Str "When",Space,Str "Lil's",Space,Str "husband",Space,Str "got",Space,Str "demobbed,",Space,Str "I",Space,Str "said",Space,Str "-"]]
@@ -378,7 +378,7 @@
378378 ,Div ("",[],[])
379379 [Plain [Str "Crosses",Space,Str "the",Space,Str "brown",Space,Str "land,",Space,Str "unheard.",Space,Str "The",Space,Str "nymphs",Space,Str "are",Space,Str "departed."]]
380380 ,Div ("wasteland-content.xhtml#ln176",[],[])
381− [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."]]]
381+ [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."]]]
382382 ,Div ("",[],[])
383383 [Plain [Str "The",Space,Str "river",Space,Str "bears",Space,Str "no",Space,Str "empty",Space,Str "bottles,",Space,Str "sandwich",Space,Str "papers,"]]
384384 ,Div ("",[],[])
@@ -411,7 +411,7 @@
411411 ,Div ("",[],[])
412412 [Plain [Str "Musing",Space,Str "upon",Space,Str "the",Space,Str "king",Space,Str "my",Space,Str "brother's",Space,Str "wreck"]]
413413 ,Div ("wasteland-content.xhtml#ln192",[],[])
414− [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."]]]
414+ [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."]]]
415415 ,Div ("",[],[])
416416 [Plain [Str "White",Space,Str "bodies",Space,Str "naked",Space,Str "on",Space,Str "the",Space,Str "low",Space,Str "damp",Space,Str "ground"]]
417417 ,Div ("",[],[])
@@ -419,19 +419,19 @@
419419 ,Div ("",[],[])
420420 [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."]]
421421 ,Div ("wasteland-content.xhtml#ln196",[],[])
422− [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."]]]
422+ [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."]]]
423423 ,Div ("wasteland-content.xhtml#ln197",[],[])
424− [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",Space,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",Space,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 ".\""]]]]]]
424+ [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",Space,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",Space,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 ".\""]]]]]]
425425 ,Div ("",[],[])
426426 [Plain [Str "Sweeney",Space,Str "to",Space,Str "Mrs.",Space,Str "Porter",Space,Str "in",Space,Str "the",Space,Str "spring."]]
427427 ,Div ("wasteland-content.xhtml#ln199",[],[])
428− [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",Space,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."]]]
428+ [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",Space,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."]]]
429429 ,Div ("",[],[])
430430 [Plain [Str "And",Space,Str "on",Space,Str "her",Space,Str "daughter",Span ("",["lnum"],[]) [Str "200"]]]
431431 ,Div ("",[],[])
432432 [Plain [Str "They",Space,Str "wash",Space,Str "their",Space,Str "feet",Space,Str "in",Space,Str "soda",Space,Str "water"]]
433433 ,Div ("wasteland-content.xhtml#ln202",[],[("lang","fr")])
434− [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."]]]
434+ [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."]]]
435435 ,Div ("",["linegroup"],[])
436436 [Div ("",[],[])
437437 [Plain [Str "Twit",Space,Str "twit",Space,Str "twit"]]
@@ -449,7 +449,7 @@
449449 ,Div ("",[],[])
450450 [Plain [Str "Mr.",Space,Str "Eugenides,",Space,Str "the",Space,Str "Smyrna",Space,Str "merchant"]]
451451 ,Div ("wasteland-content.xhtml#ln210",[],[])
452− [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",Space,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",Space,Str "payment",Space,Str "of",Space,Str "the",Space,Str "sight",Space,Str "draft."]]]
452+ [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",Space,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",Space,Str "payment",Space,Str "of",Space,Str "the",Space,Str "sight",Space,Str "draft."]]]
453453 ,Div ("",[],[])
454454 [Plain [Str "C.i.f.",Space,Str "London:",Space,Str "documents",Space,Str "at",Space,Str "sight,"]]
455455 ,Div ("",[],[])
@@ -466,13 +466,13 @@
466466 ,Div ("",[],[])
467467 [Plain [Str "Like",Space,Str "a",Space,Str "taxi",Space,Str "throbbing",Space,Str "waiting,"]]
468468 ,Div ("wasteland-content.xhtml#ln218",[],[])
469− [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",Space,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",Space,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",Space,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",Space,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",Space,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",Space,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,Space,Str "Quam,",Space,Str "quae",Space,Str "contingit",Space,Str "maribus,'",Space,Str "dixisse,",Space,Str "'voluptas.'",LineBreak,Space,Str "Illa",Space,Str "negat;",Space,Str "placuit",Space,Str "quae",Space,Str "sit",Space,Str "sententia",Space,Str "docti",LineBreak,Space,Str "Quaerere",Space,Str "Tiresiae:",Space,Str "venus",Space,Str "huic",Space,Str "erat",Space,Str "utraque",Space,Str "nota.",LineBreak,Space,Str "Nam",Space,Str "duo",Space,Str "magnorum",Space,Str "viridi",Space,Str "coeuntia",Space,Str "silva",LineBreak,Space,Str "Corpora",Space,Str "serpentum",Space,Str "baculi",Space,Str "violaverat",Space,Str "ictu",LineBreak,Space,Str "Deque",Space,Str "viro",Space,Str "factus,",Space,Str "mirabile,",Space,Str "femina",Space,Str "septem",LineBreak,Space,Str "Egerat",Space,Str "autumnos;",Space,Str "octavo",Space,Str "rursus",Space,Str "eosdem",LineBreak,Space,Str "Vidit",Space,Str "et",Space,Str "'est",Space,Str "vestrae",Space,Str "si",Space,Str "tanta",Space,Str "potentia",Space,Str "plagae,'",LineBreak,Space,Str "Dixit",Space,Str "'ut",Space,Str "auctoris",Space,Str "sortem",Space,Str "in",Space,Str "contraria",Space,Str "mutet,",LineBreak,Space,Str "Nunc",Space,Str "quoque",Space,Str "vos",Space,Str "feriam!'",Space,Str "percussis",Space,Str "anguibus",Space,Str "isdem",LineBreak,Space,Str "Forma",Space,Str "prior",Space,Str "rediit",Space,Str "genetivaque",Space,Str "venit",Space,Str "imago.",LineBreak,Space,Str "Arbiter",Space,Str "hic",Space,Str "igitur",Space,Str "sumptus",Space,Str "de",Space,Str "lite",Space,Str "iocosa",LineBreak,Space,Str "Dicta",Space,Str "Iovis",Space,Str "firmat;",Space,Str "gravius",Space,Str "Saturnia",Space,Str "iusto",LineBreak,Space,Str "Nec",Space,Str "pro",Space,Str "materia",Space,Str "fertur",Space,Str "doluisse",Space,Str "suique",LineBreak,Space,Str "Iudicis",Space,Str "aeterna",Space,Str "damnavit",Space,Str "lumina",Space,Str "nocte,",LineBreak,Space,Str "At",Space,Str "pater",Space,Str "omnipotens",Space,Str "(neque",Space,Str "enim",Space,Str "licet",Space,Str "inrita",Space,Str "cuiquam",LineBreak,Space,Str "Facta",Space,Str "dei",Space,Str "fecisse",Space,Str "deo)",Space,Str "pro",Space,Str "lumine",Space,Str "adempto",LineBreak,Space,Str "Scire",Space,Str "futura",Space,Str "dedit",Space,Str "poenamque",Space,Str "levavit",Space,Str "honore.",LineBreak]]]]
469+ [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",Space,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",Space,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",Space,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",Space,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",Space,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",Space,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,Space,Str "Quam,",Space,Str "quae",Space,Str "contingit",Space,Str "maribus,'",Space,Str "dixisse,",Space,Str "'voluptas.'",LineBreak,Space,Str "Illa",Space,Str "negat;",Space,Str "placuit",Space,Str "quae",Space,Str "sit",Space,Str "sententia",Space,Str "docti",LineBreak,Space,Str "Quaerere",Space,Str "Tiresiae:",Space,Str "venus",Space,Str "huic",Space,Str "erat",Space,Str "utraque",Space,Str "nota.",LineBreak,Space,Str "Nam",Space,Str "duo",Space,Str "magnorum",Space,Str "viridi",Space,Str "coeuntia",Space,Str "silva",LineBreak,Space,Str "Corpora",Space,Str "serpentum",Space,Str "baculi",Space,Str "violaverat",Space,Str "ictu",LineBreak,Space,Str "Deque",Space,Str "viro",Space,Str "factus,",Space,Str "mirabile,",Space,Str "femina",Space,Str "septem",LineBreak,Space,Str "Egerat",Space,Str "autumnos;",Space,Str "octavo",Space,Str "rursus",Space,Str "eosdem",LineBreak,Space,Str "Vidit",Space,Str "et",Space,Str "'est",Space,Str "vestrae",Space,Str "si",Space,Str "tanta",Space,Str "potentia",Space,Str "plagae,'",LineBreak,Space,Str "Dixit",Space,Str "'ut",Space,Str "auctoris",Space,Str "sortem",Space,Str "in",Space,Str "contraria",Space,Str "mutet,",LineBreak,Space,Str "Nunc",Space,Str "quoque",Space,Str "vos",Space,Str "feriam!'",Space,Str "percussis",Space,Str "anguibus",Space,Str "isdem",LineBreak,Space,Str "Forma",Space,Str "prior",Space,Str "rediit",Space,Str "genetivaque",Space,Str "venit",Space,Str "imago.",LineBreak,Space,Str "Arbiter",Space,Str "hic",Space,Str "igitur",Space,Str "sumptus",Space,Str "de",Space,Str "lite",Space,Str "iocosa",LineBreak,Space,Str "Dicta",Space,Str "Iovis",Space,Str "firmat;",Space,Str "gravius",Space,Str "Saturnia",Space,Str "iusto",LineBreak,Space,Str "Nec",Space,Str "pro",Space,Str "materia",Space,Str "fertur",Space,Str "doluisse",Space,Str "suique",LineBreak,Space,Str "Iudicis",Space,Str "aeterna",Space,Str "damnavit",Space,Str "lumina",Space,Str "nocte,",LineBreak,Space,Str "At",Space,Str "pater",Space,Str "omnipotens",Space,Str "(neque",Space,Str "enim",Space,Str "licet",Space,Str "inrita",Space,Str "cuiquam",LineBreak,Space,Str "Facta",Space,Str "dei",Space,Str "fecisse",Space,Str "deo)",Space,Str "pro",Space,Str "lumine",Space,Str "adempto",LineBreak,Space,Str "Scire",Space,Str "futura",Space,Str "dedit",Space,Str "poenamque",Space,Str "levavit",Space,Str "honore.",LineBreak]]]]
470470 ,Div ("",[],[])
471471 [Plain [Str "Old",Space,Str "man",Space,Str "with",Space,Str "wrinkled",Space,Str "female",Space,Str "breasts,",Space,Str "can",Space,Str "see"]]
472472 ,Div ("",[],[])
473473 [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"]]]
474474 ,Div ("wasteland-content.xhtml#ln221",[],[])
475− [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",Space,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."]]]
475+ [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",Space,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."]]]
476476 ,Div ("",[],[])
477477 [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"]]
478478 ,Div ("",[],[])
@@ -537,7 +537,7 @@
537537 ,Div ("",[],[])
538538 [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.\""]]
539539 ,Div ("wasteland-content.xhtml#ln253",[],[])
540− [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."]]]
540+ [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."]]]
541541 ,Div ("",[],[])
542542 [Plain [Str "Paces",Space,Str "about",Space,Str "her",Space,Str "room",Space,Str "again,",Space,Str "alone,"]]
543543 ,Div ("",[],[])
@@ -546,7 +546,7 @@
546546 [Plain [Str "And",Space,Str "puts",Space,Str "a",Space,Str "record",Space,Str "on",Space,Str "the",Space,Str "gramophone."]]]
547547 ,Div ("",["linegroup"],[])
548548 [Div ("wasteland-content.xhtml#ln257",[],[])
549− [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."]]]
549+ [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."]]]
550550 ,Div ("",[],[])
551551 [Plain [Str "And",Space,Str "along",Space,Str "the",Space,Str "Strand,",Space,Str "up",Space,Str "Queen",Space,Str "Victoria",Space,Str "Street."]]
552552 ,Div ("",[],[])
@@ -560,12 +560,12 @@
560560 ,Div ("",[],[])
561561 [Plain [Str "Where",Space,Str "fishmen",Space,Str "lounge",Space,Str "at",Space,Str "noon:",Space,Str "where",Space,Str "the",Space,Str "walls"]]
562562 ,Div ("wasteland-content.xhtml#ln264",[],[])
563− [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",Space,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",Space,Str "Churches",Space,Str "(P.",Space,Str "S.",Space,Str "King",Space,Str "&",Space,Str "Son,",Space,Str "Ltd.)."]]]
563+ [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",Space,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",Space,Str "Churches",Space,Str "(P.",Space,Str "S.",Space,Str "King",Space,Str "&",Space,Str "Son,",Space,Str "Ltd.)."]]]
564564 ,Div ("",[],[])
565565 [Plain [Str "Inexplicable",Space,Str "splendour",Space,Str "of",Space,Str "Ionian",Space,Str "white",Space,Str "and",Space,Str "gold."]]]
566566 ,Div ("",["linegroup","indent"],[])
567567 [Div ("wasteland-content.xhtml#ln266",[],[])
568− [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",Space,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",Space,Str "Rhine-daughters."]]]
568+ [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",Space,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",Space,Str "Rhine-daughters."]]]
569569 ,Div ("",[],[])
570570 [Plain [Str "Oil",Space,Str "and",Space,Str "tar"]]
571571 ,Div ("",[],[])
@@ -592,7 +592,7 @@
592592 [Plain [Str "Wallala",Space,Str "leialala"]]]
593593 ,Div ("",["linegroup","indent"],[])
594594 [Div ("wasteland-content.xhtml#ln279",[],[])
595− [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",Space,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",Space,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",Space,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",Space,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",Space,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.\""]]]]]]
595+ [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",Space,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",Space,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",Space,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",Space,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",Space,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.\""]]]]]]
596596 ,Div ("",[],[])
597597 [Plain [Str "Beating",Space,Str "oars",Span ("",["lnum"],[]) [Str "280"]]]
598598 ,Div ("",[],[])
@@ -621,7 +621,7 @@
621621 [Div ("",[],[])
622622 [Plain [Str "\"Trams",Space,Str "and",Space,Str "dusty",Space,Str "trees."]]
623623 ,Div ("wasteland-content.xhtml#ln293",[],[])
624− [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",Space,Str "Maremma.\""]]]]
624+ [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",Space,Str "Maremma.\""]]]]
625625 ,Div ("",[],[])
626626 [Plain [Str "Undid",Space,Str "me.",Space,Str "By",Space,Str "Richmond",Space,Str "I",Space,Str "raised",Space,Str "my",Space,Str "knees"]]
627627 ,Div ("",[],[])
@@ -651,12 +651,12 @@
651651 [Plain [Str "la",Space,Str "la"]]]
652652 ,Div ("",["linegroup"],[])
653653 [Div ("wasteland-content.xhtml#ln307",[],[])
654− [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",Space,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.\""]]]
654+ [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",Space,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.\""]]]
655655 ,Div ("",["linegroup"],[])
656656 [Div ("wasteland-content.xhtml#ln308",[],[])
657− [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",Space,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,",Space,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",Space,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",Space,Str "pioneers",Space,Str "of",Space,Str "Buddhist",Space,Str "studies",Space,Str "in",Space,Str "the",Space,Str "Occident."]]]
657+ [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",Space,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,",Space,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",Space,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",Space,Str "pioneers",Space,Str "of",Space,Str "Buddhist",Space,Str "studies",Space,Str "in",Space,Str "the",Space,Str "Occident."]]]
658658 ,Div ("wasteland-content.xhtml#ln309",[],[])
659− [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",Space,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",Space,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."]]]
659+ [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",Space,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",Space,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."]]]
660660 ,Div ("",[],[])
661661 [Plain [Str "O",Space,Str "Lord",Space,Str "Thou",Space,Str "pluckest",Span ("",["lnum"],[]) [Str "310"]]]]
662662 ,Div ("",["linegroup"],[])
@@ -764,14 +764,14 @@
764764 ,Div ("",[],[])
765765 [Plain [Str "But",Space,Str "sound",Space,Str "of",Space,Str "water",Space,Str "over",Space,Str "a",Space,Str "rock"]]
766766 ,Div ("wasteland-content.xhtml#ln357",[],[])
767− [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",Space,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",Space,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.",Space,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",Space,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",Space,Str "\"water-dripping",Space,Str "song\"",Space,Str "is",Space,Str "justly",Space,Str "celebrated."]]]
767+ [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",Space,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",Space,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.",Space,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",Space,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",Space,Str "\"water-dripping",Space,Str "song\"",Space,Str "is",Space,Str "justly",Space,Str "celebrated."]]]
768768 ,Div ("",[],[])
769769 [Plain [Str "Drip",Space,Str "drop",Space,Str "drip",Space,Str "drop",Space,Str "drop",Space,Str "drop",Space,Str "drop"]]
770770 ,Div ("",[],[])
771771 [Plain [Str "But",Space,Str "there",Space,Str "is",Space,Str "no",Space,Str "water"]]]]
772772 ,Div ("",["linegroup"],[])
773773 [Div ("wasteland-content.xhtml#ln360",[],[])
774− [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",Space,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):",Space,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",Space,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",Space,Str "could",Space,Str "actually",Space,Str "be",Space,Str "counted."]]]
774+ [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",Space,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):",Space,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",Space,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",Space,Str "could",Space,Str "actually",Space,Str "be",Space,Str "counted."]]]
775775 ,Div ("",[],[])
776776 [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"]]
777777 ,Div ("",[],[])
@@ -783,7 +783,7 @@
783783 ,Div ("",[],[])
784784 [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"]]
785785 ,Div ("wasteland-content.xhtml#ln367",[],[])
786− [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",Space,Str "auf",Space,Str "dem",LineBreak,Space,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",Space,Str "Abgrund",Space,Str "entlang",LineBreak,Space,Str "und",Space,Str "singt",Space,Str "dazu,",Space,Str "singt",Space,Str "betrunken",Space,Str "und",Space,Str "hymnisch",Space,Str "wie",Space,Str "Dmitri",Space,Str "Karamasoff",Space,Str "sang.",LineBreak,Space,Str "Ueber",Space,Str "diese",Space,Str "Lieder",Space,Str "lacht",Space,Str "der",Space,Str "Bsrger",Space,Str "beleidigt,",Space,Str "der",Space,Str "Heilige",LineBreak,Space,Str "und",Space,Str "Seher",Space,Str "hrt",Space,Str "sie",Space,Str "mit",Space,Str "Trvnen.\""]]]]
786+ [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",Space,Str "auf",Space,Str "dem",LineBreak,Space,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",Space,Str "Abgrund",Space,Str "entlang",LineBreak,Space,Str "und",Space,Str "singt",Space,Str "dazu,",Space,Str "singt",Space,Str "betrunken",Space,Str "und",Space,Str "hymnisch",Space,Str "wie",Space,Str "Dmitri",Space,Str "Karamasoff",Space,Str "sang.",LineBreak,Space,Str "Ueber",Space,Str "diese",Space,Str "Lieder",Space,Str "lacht",Space,Str "der",Space,Str "Bsrger",Space,Str "beleidigt,",Space,Str "der",Space,Str "Heilige",LineBreak,Space,Str "und",Space,Str "Seher",Space,Str "hrt",Space,Str "sie",Space,Str "mit",Space,Str "Trvnen.\""]]]]
787787 ,Div ("",["linegroup"],[])
788788 [Div ("",[],[])
789789 [Plain [Str "What",Space,Str "is",Space,Str "that",Space,Str "sound",Space,Str "high",Space,Str "in",Space,Str "the",Space,Str "air"]]
@@ -859,7 +859,7 @@
859859 ,Div ("",[],[])
860860 [Plain [Str "DA"]]
861861 ,Div ("wasteland-content.xhtml#ln402",[],[])
862− [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,",Space,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",Space,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",Space,Str "Sechzig",Space,Str "Upanishads",Space,Str "des",Space,Str "Veda,",Space,Str "p.",Space,Str "489."]]]
862+ [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,",Space,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",Space,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",Space,Str "Sechzig",Space,Str "Upanishads",Space,Str "des",Space,Str "Veda,",Space,Str "p.",Space,Str "489."]]]
863863 ,Div ("",[],[])
864864 [Plain [Str "My",Space,Str "friend,",Space,Str "blood",Space,Str "shaking",Space,Str "my",Space,Str "heart"]]
865865 ,Div ("",[],[])
@@ -871,7 +871,7 @@
871871 ,Div ("",[],[])
872872 [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"]]
873873 ,Div ("wasteland-content.xhtml#ln408",[],[])
874− [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,Space,Str "Ere",Space,Str "the",Space,Str "worm",Space,Str "pierce",Space,Str "your",Space,Str "winding-sheet,",Space,Str "ere",Space,Str "the",Space,Str "spider",LineBreak,Space,Str "Make",Space,Str "a",Space,Str "thin",Space,Str "curtain",Space,Str "for",Space,Str "your",Space,Str "epitaphs.\""]]]]
874+ [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,Space,Str "Ere",Space,Str "the",Space,Str "worm",Space,Str "pierce",Space,Str "your",Space,Str "winding-sheet,",Space,Str "ere",Space,Str "the",Space,Str "spider",LineBreak,Space,Str "Make",Space,Str "a",Space,Str "thin",Space,Str "curtain",Space,Str "for",Space,Str "your",Space,Str "epitaphs.\""]]]]
875875 ,Div ("",[],[])
876876 [Plain [Str "Or",Space,Str "under",Space,Str "seals",Space,Str "broken",Space,Str "by",Space,Str "the",Space,Str "lean",Space,Str "solicitor"]]
877877 ,Div ("",[],[])
@@ -879,7 +879,7 @@
879879 ,Div ("",[],[])
880880 [Plain [Str "DA"]]
881881 ,Div ("wasteland-content.xhtml#ln412",[],[])
882− [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,Space,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",Space,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",Space,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",Space,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",Space,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",Space,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",Space,Str "soul.\""]]]]
882+ [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,Space,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",Space,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",Space,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",Space,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",Space,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",Space,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",Space,Str "soul.\""]]]]
883883 ,Div ("",[],[])
884884 [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"]]
885885 ,Div ("",[],[])
@@ -906,25 +906,25 @@
906906 [Div ("",["indent"],[])
907907 [Plain [Str "I",Space,Str "sat",Space,Str "upon",Space,Str "the",Space,Str "shore"]]
908908 ,Div ("wasteland-content.xhtml#ln425",[],[])
909− [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."]]]
909+ [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."]]]
910910 ,Div ("",[],[])
911911 [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?"]]
912912 ,Div ("",[],[])
913913 [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"]]
914914 ,Div ("wasteland-content.xhtml#ln428",[],[("lang","it")])
915− [Plain [Emph [Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina"],Space,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,Space,Str "'que",Space,Str "vos",Space,Str "guida",Space,Str "al",Space,Str "som",Space,Str "de",Space,Str "l'escalina,",LineBreak,Space,Str "'sovegna",Space,Str "vos",Space,Str "a",Space,Str "temps",Space,Str "de",Space,Str "ma",Space,Str "dolor.'",LineBreak,Space,Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina.\""]]]]
915+ [Plain [Emph [Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina"],Space,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,Space,Str "'que",Space,Str "vos",Space,Str "guida",Space,Str "al",Space,Str "som",Space,Str "de",Space,Str "l'escalina,",LineBreak,Space,Str "'sovegna",Space,Str "vos",Space,Str "a",Space,Str "temps",Space,Str "de",Space,Str "ma",Space,Str "dolor.'",LineBreak,Space,Str "Poi",Space,Str "s'ascose",Space,Str "nel",Space,Str "foco",Space,Str "che",Space,Str "gli",Space,Str "affina.\""]]]]
916916 ,Div ("wasteland-content.xhtml#ln429",[],[])
917− [Plain [Span ("",[],[("lang","it")]) [Space,Emph [Str "Quando",Space,Str "fiam",Space,Str "ceu",Space,Str "chelidon"],Space],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."]]]
917+ [Plain [Span ("",[],[("lang","it")]) [Space,Emph [Str "Quando",Space,Str "fiam",Space,Str "ceu",Space,Str "chelidon"],Space],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."]]]
918918 ,Div ("wasteland-content.xhtml#ln430",[],[("lang","fr")])
919− [Plain [Emph [Str "Le",Space,Str "Prince",Space,Str "d'Aquitaine",Space,Str "a",Space,Str "la",Space,Str "tour",Space,Str "abolie"],Space,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."]]]
919+ [Plain [Emph [Str "Le",Space,Str "Prince",Space,Str "d'Aquitaine",Space,Str "a",Space,Str "la",Space,Str "tour",Space,Str "abolie"],Space,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."]]]
920920 ,Div ("",[],[])
921921 [Plain [Str "These",Space,Str "fragments",Space,Str "I",Space,Str "have",Space,Str "shored",Space,Str "against",Space,Str "my",Space,Str "ruins"]]
922922 ,Div ("wasteland-content.xhtml#ln432",[],[])
923− [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."]]]
923+ [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."]]]
924924 ,Div ("",[],[("lang","sa")])
925925 [Plain [Str "Datta.",Space,Str "Dayadhvam.",Space,Str "Damyata."]]
926926 ,Div ("wasteland-content.xhtml#ln434",["linegroup","indent"],[])
927− [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",Space,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",Space,Str "content",Space,Str "of",Space,Str "this",Space,Str "word."]]]]
927+ [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",Space,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",Space,Str "content",Space,Str "of",Space,Str "this",Space,Str "word."]]]]
928928 ,Div ("wasteland-content.xhtml#backmatter",["section"],[("type","backmatter")])
929929 [Div ("wasteland-content.xhtml#rearnotes",["section"],[("type","rearnotes")])
930930 [Header 2 ("",[],[]) [Str "NOTES",Space,Str "ON",Space,Str "\"THE",Space,Str "WASTE",Space,Str "LAND\""]
tests/haddock-reader.native+4−4
@@ -1,5 +1,5 @@
11Pandoc (Meta {unMeta = fromList []})
2−[Para [Str "This",Space,Str "file",Space,Str "tests",Space,Str "the",Space,Str "Pandoc",Space,Str "reader",Space,Str "for",Space,Str "Haddock.",Space,Str "We've",Space,Str "borrowed",Space,Str "examples",Space,Str "from",Space,Str "Haddock's",Space,Str "documentation:",Space,Link [Str "http://www.haskell.org/haddock/doc/html/ch03s08.html"] ("http://www.haskell.org/haddock/doc/html/ch03s08.html","http://www.haskell.org/haddock/doc/html/ch03s08.html"),Str "."]
2+[Para [Str "This",Space,Str "file",Space,Str "tests",Space,Str "the",Space,Str "Pandoc",Space,Str "reader",Space,Str "for",Space,Str "Haddock.",Space,Str "We've",Space,Str "borrowed",Space,Str "examples",Space,Str "from",Space,Str "Haddock's",Space,Str "documentation:",Space,Link ("",[],[]) [Str "http://www.haskell.org/haddock/doc/html/ch03s08.html"] ("http://www.haskell.org/haddock/doc/html/ch03s08.html","http://www.haskell.org/haddock/doc/html/ch03s08.html"),Str "."]
33,Para [Str "The",Space,Str "following",Space,Str "characters",Space,Str "have",Space,Str "special",Space,Str "meanings",Space,Str "in",Space,Str "Haddock,",Space,Str "/,",Space,Str "',",Space,Str "`,",Space,Str "\",",Space,Str "@,",Space,Str "<,",Space,Str "so",Space,Str "they",Space,Str "must",Space,Str "be",Space,Str "escaped."]
44,Para [Str "*",Space,Str "This",Space,Str "is",Space,Str "a",Space,Str "paragraph,",Space,Str "not",Space,Str "a",Space,Str "list",Space,Str "item.",Space,Str ">",Space,Str "This",Space,Str "sentence",Space,Str "is",Space,Str "not",Space,Str "code.",Space,Str ">>>",Space,Str "This",Space,Str "is",Space,Str "not",Space,Str "an",Space,Str "example."]
55,Para [Str "The",Space,Str "references",Space,Str "\955,",Space,Str "\955",Space,Str "and",Space,Str "\955",Space,Str "all",Space,Str "represent",Space,Str "the",Space,Str "lower-case",Space,Str "letter",Space,Str "lambda."]
@@ -26,6 +26,6 @@ Pandoc (Meta {unMeta = fromList []})
2626 [[Para [Str "The",Space,Str "description",Space,Str "of",Space,Code ("",[],[]) "foo",Str "."]]])
2727 ,([Code ("",[],[]) "bar"],
2828 [[Para [Str "The",Space,Str "description",Space,Str "of",Space,Code ("",[],[]) "bar",Str "."]]])]
29−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "link:",Space,Link [Str "http://haskell.org"] ("http://haskell.org","http://haskell.org")]
30−,Para [Link [Str "Haskell"] ("http://haskell.org","http://haskell.org"),Space,Str "is",Space,Str "a",Space,Str "fun",Space,Str "language!"]
31−,Para [Link [Str "Click",Space,Str "Here!"] ("http://example.com","http://example.com")]]
29+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "link:",Space,Link ("",[],[]) [Str "http://haskell.org"] ("http://haskell.org","http://haskell.org")]
30+,Para [Link ("",[],[]) [Str "Haskell"] ("http://haskell.org","http://haskell.org"),Space,Str "is",Space,Str "a",Space,Str "fun",Space,Str "language!"]
31+,Para [Link ("",[],[]) [Str "Click",Space,Str "Here!"] ("http://example.com","http://example.com")]]
tests/html-reader.native+32−32
@@ -2,7 +2,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
22[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber's",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
33,HorizontalRule
44,Header 1 ("headers",[],[]) [Str "Headers"]
5−,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
5+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embedded",Space,Str "link"] ("/url","")]
66,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]
77,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]
88,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]
@@ -200,7 +200,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
200200,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]
201201,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."]
202202,Para [Str "Empty",Space,Strong [],Space,Str "and",Space,Emph [],Str "."]
203−,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
203+,Para [Str "An",Space,Emph [Link ("",[],[]) [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
204204,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
205205,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
206206,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
@@ -213,7 +213,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
213213,Para [Str "'A',",Space,Str "'B',",Space,Str "and",Space,Str "'C'",Space,Str "are",Space,Str "letters."]
214214,Para [Str "'Oak,'",Space,Str "'elm,'",Space,Str "and",Space,Str "'beech'",Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Str "'pine.'"]
215215,Para [Str "'He",Space,Str "said,",Space,Str "\"I",Space,Str "want",Space,Str "to",Space,Str "go.\"'",Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70's?"]
216−,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Str "'",Code ("",[],[]) "code",Str "'",Space,Str "and",Space,Str "a",Space,Str "\"",Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2",""),Str "\"."]
216+,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Str "'",Code ("",[],[]) "code",Str "'",Space,Str "and",Space,Str "a",Space,Str "\"",Link ("",[],[]) [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2",""),Str "\"."]
217217,Para [Str "Some",Space,Str "dashes:",Space,Str "one---two",Space,Str "---",Space,Str "three--four",Space,Str "--",Space,Str "five."]
218218,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5-7,",Space,Str "255-66,",Space,Str "1987-1999."]
219219,Para [Str "Ellipses...and.",Space,Str ".",Space,Str ".and",Space,Str ".",Space,Str ".",Space,Str ".",Space,Str "."]
@@ -269,53 +269,53 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
269269,HorizontalRule
270270,Header 1 ("links",[],[]) [Str "Links"]
271271,Header 2 ("explicit",[],[]) [Str "Explicit"]
272−,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
273−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
274−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
275−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
276−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
277−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
272+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
273+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
274+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
275+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
276+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
277+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
278278,Para [Str "Email",Space,Str "link",Space,Str "(nobody",Space,Str "[at]",Space,Str "nowhere.net)"]
279−,Para [Link [Str "Empty"] ("",""),Str "."]
279+,Para [Link ("",[],[]) [Str "Empty"] ("",""),Str "."]
280280,Header 2 ("reference",[],[]) [Str "Reference"]
281−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
282−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
283−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
284−,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
285−,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
286−,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."]
287−,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."]
288−,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]
281+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
282+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
283+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
284+,Para [Str "With",Space,Link ("",[],[]) [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
285+,Para [Link ("",[],[]) [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
286+,Para [Str "Indented",Space,Link ("",[],[]) [Str "once"] ("/url",""),Str "."]
287+,Para [Str "Indented",Space,Link ("",[],[]) [Str "twice"] ("/url",""),Str "."]
288+,Para [Str "Indented",Space,Link ("",[],[]) [Str "thrice"] ("/url",""),Str "."]
289289,Para [Str "This",Space,Str "should",Space,Str "[not]",Space,Str "be",Space,Str "a",Space,Str "link."]
290290,CodeBlock ("",[],[]) "[not]: /url"
291−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
292−,Para [Str "Foo",Space,Link [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
291+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
292+,Para [Str "Foo",Space,Link ("",[],[]) [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
293293,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"]
294−,Para [Str "Here's",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
295−,Para [Str "Here's",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
296−,Para [Str "Here's",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
297−,Para [Str "Here's",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
294+,Para [Str "Here's",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
295+,Para [Str "Here's",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
296+,Para [Str "Here's",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
297+,Para [Str "Here's",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
298298,Header 2 ("autolinks",[],[]) [Str "Autolinks"]
299−,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
299+,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
300300,BulletList
301301 [[Plain [Str "In",Space,Str "a",Space,Str "list?"]]
302− ,[Plain [Link [Str "http://example.com/"] ("http://example.com/","")]]
302+ ,[Plain [Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
303303 ,[Plain [Str "It",Space,Str "should."]]]
304304,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Str "nobody",Space,Str "[at]",Space,Str "nowhere.net"]
305305,BlockQuote
306− [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]]
306+ [Para [Str "Blockquoted:",Space,Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
307307,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]
308308,CodeBlock ("",[],[]) "or here: <http://example.com/>"
309309,HorizontalRule
310310,Header 1 ("images",[],[]) [Str "Images"]
311311,Para [Str "From",Space,Str "\"Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune\"",Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
312−,Para [Image [Str "lalune"] ("lalune.jpg","Voyage dans la Lune")]
313−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
312+,Para [Image ("",[],[]) [Str "lalune"] ("lalune.jpg","Voyage dans la Lune")]
313+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
314314,HorizontalRule
315315,Header 1 ("footnotes",[],[]) [Str "Footnotes"]
316−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference",Link [Str "(1)"] ("#note_1",""),Str ",",Space,Str "and",Space,Str "another",Link [Str "(longnote)"] ("#note_longnote",""),Str ".",Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space^(my",Space,Str "note)."]
317−,Para [Link [Str "(1)"] ("#ref_1",""),Space,Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "in",Space,Str "the",Space,Str "document,",Space,Str "not",Space,Str "just",Space,Str "at",Space,Str "the",Space,Str "end."]
318−,Para [Link [Str "(longnote)"] ("#ref_longnote",""),Space,Str "Here's",Space,Str "the",Space,Str "other",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."]
316+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference",Link ("",[],[]) [Str "(1)"] ("#note_1",""),Str ",",Space,Str "and",Space,Str "another",Link ("",[],[]) [Str "(longnote)"] ("#note_longnote",""),Str ".",Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space^(my",Space,Str "note)."]
317+,Para [Link ("",[],[]) [Str "(1)"] ("#ref_1",""),Space,Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "in",Space,Str "the",Space,Str "document,",Space,Str "not",Space,Str "just",Space,Str "at",Space,Str "the",Space,Str "end."]
318+,Para [Link ("",[],[]) [Str "(longnote)"] ("#ref_longnote",""),Space,Str "Here's",Space,Str "the",Space,Str "other",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."]
319319,Para [Str "Caret",Space,Str "characters",Space,Str "are",Space,Str "used",Space,Str "to",Space,Str "indicate",Space,Str "that",Space,Str "the",Space,Str "blocks",Space,Str "all",Space,Str "belong",Space,Str "to",Space,Str "a",Space,Str "single",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "block",Space,Str "quotes)."]
320320,CodeBlock ("",[],[]) " { <code> }"
321321,Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "use",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "every",Space,Str "line,",Space,Str "as",Space,Str "with",Space,Str "blockquotes,",Space,Str "but",Space,Str "all",Space,Str "that",Space,Str "you",Space,Str "need",Space,Str "is",Space,Str "a",Space,Str "caret",Space,Str "at",Space,Str "the",Space,Str "beginning",Space,Str "of",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "the",Space,Str "block",Space,Str "and",Space,Str "any",Space,Str "preceding",Space,Str "blank",Space,Str "lines."]
tests/latex-reader.latex−27
@@ -845,31 +845,4 @@ indented.
845845
846846\$ \% \& \# \_ \{ \}
847847
848−\section{Block newcommands}
849−
850−See e.g. issues #1866, #1835
851−
852−\newcommand{\FIG}[3]{
853− \begin{figure}[h!]
854− \centering
855− \includegraphics[width=#2\columnwidth,angle=0]{#1}
856− \caption{#3}
857− \label{fig:#1}
858− \end{figure}
859−}
860−
861−\newcommand{\separator}{\vspace{4em}}
862−
863−\separator
864−
865−\FIG{lalune.jpg}{0.5}{Test caption}
866−
867−\newcommand{\wbal}{The Wikibook about \LaTeX}
868−
869−\wbal is a good resource for learning \LaTeX.
870−
871−\separator with trailing inlines
872−
873−\FIG{lalune.jpg}{0.5}{Test caption} with trailing inlines
874−
875848\end{document}
tests/latex-reader.native+34−43
@@ -3,7 +3,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
33,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
44,HorizontalRule
55,Header 1 ("headers",[],[]) [Str "Headers"]
6−,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
6+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embedded",Space,Str "link"] ("/url","")]
77,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]
88,Para [Str "Level",Space,Str "4"]
99,Para [Str "Level",Space,Str "5"]
@@ -237,7 +237,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
237237,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
238238,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]
239239,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."]
240−,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
240+,Para [Str "An",Space,Emph [Link ("",[],[]) [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
241241,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
242242,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
243243,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
@@ -253,7 +253,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
253253,Para [Quoted SingleQuote [Str "A"],Str ",",Space,Quoted SingleQuote [Str "B"],Str ",",Space,Str "and",Space,Quoted SingleQuote [Str "C"],Space,Str "are",Space,Str "letters."]
254254,Para [Quoted SingleQuote [Str "Oak,"],Space,Quoted SingleQuote [Str "elm,"],Space,Str "and",Space,Quoted SingleQuote [Str "beech"],Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Quoted SingleQuote [Str "pine."]]
255255,Para [Quoted SingleQuote [Str "He",Space,Str "said,",Space,Quoted DoubleQuote [Str "I",Space,Str "want",Space,Str "to",Space,Str "go."]],Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70\8217s?"]
256−,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
256+,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link ("",[],[]) [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
257257,Para [Str "Some",Space,Str "dashes:",Space,Str "one\8212two\8212three\8212four\8212five."]
258258,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5\8211\&7,",Space,Str "255\8211\&66,",Space,Str "1987\8211\&1999."]
259259,Para [Str "Ellipses\8230and\8230and\8230."]
@@ -320,65 +320,56 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
320320,HorizontalRule
321321,Header 1 ("links",[],[]) [Str "Links"]
322322,Header 2 ("explicit",[],[]) [Str "Explicit"]
323−,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
324−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
325−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
326−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
327−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
328−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
329−,Para [Link [Str "with_underscore"] ("/url/with_underscore","")]
330−,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
331−,Para [Link [Str "Empty"] ("",""),Str "."]
323+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
324+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
325+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
326+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]
327+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
328+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","")]
329+,Para [Link ("",[],[]) [Str "with_underscore"] ("/url/with_underscore","")]
330+,Para [Link ("",[],[]) [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
331+,Para [Link ("",[],[]) [Str "Empty"] ("",""),Str "."]
332332,Header 2 ("reference",[],[]) [Str "Reference"]
333−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
334−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
335−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
336−,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
337−,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
338−,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."]
339−,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."]
340−,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]
333+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
334+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
335+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
336+,Para [Str "With",Space,Link ("",[],[]) [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
337+,Para [Link ("",[],[]) [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
338+,Para [Str "Indented",Space,Link ("",[],[]) [Str "once"] ("/url",""),Str "."]
339+,Para [Str "Indented",Space,Link ("",[],[]) [Str "twice"] ("/url",""),Str "."]
340+,Para [Str "Indented",Space,Link ("",[],[]) [Str "thrice"] ("/url",""),Str "."]
341341,Para [Str "This",Space,Str "should",Space,Str "[not][]",Space,Str "be",Space,Str "a",Space,Str "link."]
342342,CodeBlock ("",[],[]) "[not]: /url"
343−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
344−,Para [Str "Foo",Space,Link [Str "biz"] ("/url/",""),Str "."]
343+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
344+,Para [Str "Foo",Space,Link ("",[],[]) [Str "biz"] ("/url/",""),Str "."]
345345,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"]
346−,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
347−,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/",""),Str "."]
348−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
349−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
346+,Para [Str "Here\8217s",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
347+,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("http://att.com/",""),Str "."]
348+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
349+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
350350,Header 2 ("autolinks",[],[]) [Str "Autolinks"]
351−,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
351+,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
352352,BulletList
353353 [[Para [Str "In",Space,Str "a",Space,Str "list?"]]
354− ,[Para [Link [Str "http://example.com/"] ("http://example.com/","")]]
354+ ,[Para [Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
355355 ,[Para [Str "It",Space,Str "should."]]]
356−,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
356+,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
357357,BlockQuote
358− [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]]
358+ [Para [Str "Blockquoted:",Space,Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
359359,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]
360360,CodeBlock ("",[],[]) "or here: <http://example.com/>"
361361,HorizontalRule
362362,Header 1 ("images",[],[]) [Str "Images"]
363363,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
364−,Para [Image [Str "image"] ("lalune.jpg","")]
365−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "image"] ("movie.jpg",""),Space,Str "icon."]
364+,Para [Image ("",[],[]) [Str "image"] ("lalune.jpg","")]
365+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "image"] ("movie.jpg",""),Space,Str "icon."]
366366,HorizontalRule
367367,Header 1 ("footnotes",[],[]) [Str "Footnotes"]
368−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
368+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link ("",[],[]) [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
369369,BlockQuote
370370 [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]]
371371,OrderedList (1,Decimal,Period)
372372 [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]]
373373,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
374374,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"]
375−,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]
376−,Header 1 ("block-newcommands",[],[]) [Str "Block",Space,Str "newcommands"]
377−,Para [Str "See",Space,Str "e.g.",Space,Str "issues",Space,Str "#1866,",Space,Str "#1835"]
378−,RawBlock (Format "latex") "\\vspace{4em}"
379−,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
380−,Para [Span ("",[],[]) [Str "The",Space,Str "Wikibook",Space,Str "about",Space,Str "LaTeX"],Str "is",Space,Str "a",Space,Str "good",Space,Str "resource",Space,Str "for",Space,Str "learning",Space,Str "LaTeX."]
381−,RawBlock (Format "latex") "\\vspace{4em}"
382−,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]
383−,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
384−,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]]
375+,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]]
tests/markdown-reader-more.native+25−25
@@ -1,14 +1,14 @@
11[Header 1 ("additional-markdown-reader-tests",[],[]) [Str "Additional",Space,Str "markdown",Space,Str "reader",Space,Str "tests"]
22,Header 2 ("blank-line-before-url-in-link-reference",[],[]) [Str "Blank",Space,Str "line",Space,Str "before",Space,Str "URL",Space,Str "in",Space,Str "link",Space,Str "reference"]
3−,Para [Link [Str "foo"] ("/url",""),Space,Str "and",Space,Link [Str "bar"] ("/url","title")]
3+,Para [Link ("",[],[]) [Str "foo"] ("/url",""),Space,Str "and",Space,Link ("",[],[]) [Str "bar"] ("/url","title")]
44,Header 2 ("raw-context-environments",[],[]) [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]
55,Plain [RawInline (Format "tex") "\\placeformula "]
66,RawBlock (Format "context") "\\startformula\n L_{1} = L_{2}\n \\stopformula"
77,RawBlock (Format "context") "\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]"
88,Header 2 ("urls-with-spaces-and-punctuation",[],[]) [Str "URLs",Space,Str "with",Space,Str "spaces",Space,Str "and",Space,Str "punctuation"]
9−,Para [Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("bar%20baz","title")]
10−,Para [Link [Str "baz"] ("/foo%20foo",""),Space,Link [Str "bam"] ("/foo%20fee",""),Space,Link [Str "bork"] ("/foo/zee%20zob","title")]
11−,Para [Link [Str "Ward\8217s",Space,Str "method."] ("http://en.wikipedia.org/wiki/Ward's_method","")]
9+,Para [Link ("",[],[]) [Str "foo"] ("/bar%20and%20baz",""),Space,Link ("",[],[]) [Str "foo"] ("/bar%20and%20baz",""),Space,Link ("",[],[]) [Str "foo"] ("/bar%20and%20baz",""),Space,Link ("",[],[]) [Str "foo"] ("bar%20baz","title")]
10+,Para [Link ("",[],[]) [Str "baz"] ("/foo%20foo",""),Space,Link ("",[],[]) [Str "bam"] ("/foo%20fee",""),Space,Link ("",[],[]) [Str "bork"] ("/foo/zee%20zob","title")]
11+,Para [Link ("",[],[]) [Str "Ward\8217s",Space,Str "method."] ("http://en.wikipedia.org/wiki/Ward's_method","")]
1212,Header 2 ("horizontal-rules-with-spaces-at-end",[],[]) [Str "Horizontal",Space,Str "rules",Space,Str "with",Space,Str "spaces",Space,Str "at",Space,Str "end"]
1313,HorizontalRule
1414,HorizontalRule
@@ -42,9 +42,9 @@
4242,Para [Str "`hi"]
4343,Para [Str "there`"]
4444,Header 2 ("multilingual-urls",[],[]) [Str "Multilingual",Space,Str "URLs"]
45−,Para [Link [Str "http://\27979.com?\27979=\27979"] ("http://\27979.com?\27979=\27979","")]
46−,Para [Link [Str "foo"] ("/bar/\27979?x=\27979","title")]
47−,Para [Link [Str "\27979@foo.\27979.baz"] ("mailto:\27979@foo.\27979.baz","")]
45+,Para [Link ("",[],[]) [Str "http://\27979.com?\27979=\27979"] ("http://\27979.com?\27979=\27979","")]
46+,Para [Link ("",[],[]) [Str "foo"] ("/bar/\27979?x=\27979","title")]
47+,Para [Link ("",[],[]) [Str "\27979@foo.\27979.baz"] ("mailto:\27979@foo.\27979.baz","")]
4848,Header 2 ("numbered-examples",[],[]) [Str "Numbered",Space,Str "examples"]
4949,OrderedList (1,Example,TwoParens)
5050 [[Plain [Str "First",Space,Str "example."]]
@@ -55,9 +55,9 @@
5555,Header 2 ("macros",[],[]) [Str "Macros"]
5656,Para [Math InlineMath "{\\langle x,y \\rangle}"]
5757,Header 2 ("case-insensitive-references",[],[]) [Str "Case-insensitive",Space,Str "references"]
58−,Para [Link [Str "Fum"] ("/fum","")]
59−,Para [Link [Str "FUM"] ("/fum","")]
60−,Para [Link [Str "bat"] ("/bat","")]
58+,Para [Link ("",[],[]) [Str "Fum"] ("/fum","")]
59+,Para [Link ("",[],[]) [Str "FUM"] ("/fum","")]
60+,Para [Link ("",[],[]) [Str "bat"] ("/bat","")]
6161,Header 2 ("curly-smart-quotes",[],[]) [Str "Curly",Space,Str "smart",Space,Str "quotes"]
6262,Para [Quoted DoubleQuote [Str "Hi"]]
6363,Para [Quoted SingleQuote [Str "Hi"]]
@@ -74,11 +74,11 @@
7474,Header 2 ("implicit-header-references",[],[]) [Str "Implicit",Space,Str "header",Space,Str "references"]
7575,Header 3 ("my-header-1",[],[]) [Str "My",Space,Str "header"]
7676,Header 3 ("my-other-header",[],[]) [Str "My",Space,Str "other",Space,Str "header"]
77−,Para [Str "A",Space,Str "link",Space,Str "to",Space,Link [Str "My",Space,Str "header"] ("#my-header-1",""),Str "."]
78−,Para [Str "Another",Space,Str "link",Space,Str "to",Space,Link [Str "it"] ("#my-header-1",""),Str "."]
79−,Para [Str "Should",Space,Str "be",Space,Link [Str "case",Space,Str "insensitive"] ("#my-header-1",""),Str "."]
80−,Para [Str "Link",Space,Str "to",Space,Link [Str "Explicit",Space,Str "header",Space,Str "attributes"] ("#foobar",""),Str "."]
81−,Para [Str "But",Space,Str "this",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "link",Space,Str "to",Space,Link [Str "My",Space,Str "other",Space,Str "header"] ("/foo",""),Str ",",Space,Str "since",Space,Str "the",Space,Str "reference",Space,Str "is",Space,Str "defined."]
77+,Para [Str "A",Space,Str "link",Space,Str "to",Space,Link ("",[],[]) [Str "My",Space,Str "header"] ("#my-header-1",""),Str "."]
78+,Para [Str "Another",Space,Str "link",Space,Str "to",Space,Link ("",[],[]) [Str "it"] ("#my-header-1",""),Str "."]
79+,Para [Str "Should",Space,Str "be",Space,Link ("",[],[]) [Str "case",Space,Str "insensitive"] ("#my-header-1",""),Str "."]
80+,Para [Str "Link",Space,Str "to",Space,Link ("",[],[]) [Str "Explicit",Space,Str "header",Space,Str "attributes"] ("#foobar",""),Str "."]
81+,Para [Str "But",Space,Str "this",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "link",Space,Str "to",Space,Link ("",[],[]) [Str "My",Space,Str "other",Space,Str "header"] ("/foo",""),Str ",",Space,Str "since",Space,Str "the",Space,Str "reference",Space,Str "is",Space,Str "defined."]
8282,Header 2 ("foobar",["baz"],[("key","val")]) [Str "Explicit",Space,Str "header",Space,Str "attributes"]
8383,BlockQuote
8484 [Header 2 ("foobar",["baz"],[("key","val")]) [Str "Header",Space,Str "attributes",Space,Str "inside",Space,Str "block",Space,Str "quote"]]
@@ -143,23 +143,23 @@
143143 [[[]
144144 ,[]]]
145145,Header 2 ("entities-in-links-and-titles",[],[]) [Str "Entities",Space,Str "in",Space,Str "links",Space,Str "and",Space,Str "titles"]
146−,Para [Link [Str "link"] ("/\252rl","\246\246!")]
147−,Para [Link [Str "http://g\246\246gle.com"] ("http://g\246\246gle.com","")]
148−,Para [Link [Str "me@ex\228mple.com"] ("mailto:me@ex\228mple.com","")]
149−,Para [Link [Str "foobar"] ("/\252rl","\246\246!")]
146+,Para [Link ("",[],[]) [Str "link"] ("/\252rl","\246\246!")]
147+,Para [Link ("",[],[]) [Str "http://g\246\246gle.com"] ("http://g\246\246gle.com","")]
148+,Para [Link ("",[],[]) [Str "me@ex\228mple.com"] ("mailto:me@ex\228mple.com","")]
149+,Para [Link ("",[],[]) [Str "foobar"] ("/\252rl","\246\246!")]
150150,Header 2 ("parentheses-in-urls",[],[]) [Str "Parentheses",Space,Str "in",Space,Str "URLs"]
151−,Para [Link [Str "link"] ("/hi(there)","")]
152−,Para [Link [Str "link"] ("/hithere)","")]
153−,Para [Link [Str "linky"] ("hi_(there_(nested))","")]
151+,Para [Link ("",[],[]) [Str "link"] ("/hi(there)","")]
152+,Para [Link ("",[],[]) [Str "link"] ("/hithere)","")]
153+,Para [Link ("",[],[]) [Str "linky"] ("hi_(there_(nested))","")]
154154,Header 2 ("backslashes-in-link-references",[],[]) [Str "Backslashes",Space,Str "in",Space,Str "link",Space,Str "references"]
155−,Para [Link [Str "*",RawInline (Format "tex") "\\a"] ("b","")]
155+,Para [Link ("",[],[]) [Str "*",RawInline (Format "tex") "\\a"] ("b","")]
156156,Header 2 ("reference-link-fallbacks",[],[]) [Str "Reference",Space,Str "link",Space,Str "fallbacks"]
157157,Para [Str "[",Emph [Str "not",Space,Str "a",Space,Str "link"],Str "]",Space,Str "[",Emph [Str "nope"],Str "]\8230"]
158158,Header 2 ("reference-link-followed-by-a-citation",[],[]) [Str "Reference",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "citation"]
159−,Para [Str "MapReduce",Space,Str "is",Space,Str "a",Space,Str "paradigm",Space,Str "popularized",Space,Str "by",Space,Link [Str "Google"] ("http://google.com",""),Space,Cite [Citation {citationId = "mapreduce", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@mapreduce]"],Space,Str "as",Space,Str "its",Space,Str "most",Space,Str "vocal",Space,Str "proponent."]
159+,Para [Str "MapReduce",Space,Str "is",Space,Str "a",Space,Str "paradigm",Space,Str "popularized",Space,Str "by",Space,Link ("",[],[]) [Str "Google"] ("http://google.com",""),Space,Cite [Citation {citationId = "mapreduce", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@mapreduce]"],Space,Str "as",Space,Str "its",Space,Str "most",Space,Str "vocal",Space,Str "proponent."]
160160,Header 2 ("empty-reference-links",[],[]) [Str "Empty",Space,Str "reference",Space,Str "links"]
161161,Para [Str "bar"]
162−,Para [Link [Str "foo2"] ("","")]
162+,Para [Link ("",[],[]) [Str "foo2"] ("","")]
163163,Header 2 ("wrapping-shouldnt-introduce-new-list-items",[],[]) [Str "Wrapping",Space,Str "shouldn\8217t",Space,Str "introduce",Space,Str "new",Space,Str "list",Space,Str "items"]
164164,BulletList
165165 [[Plain [Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "blah",Space,Str "2015."]]]]
tests/mediawiki-reader.native+19−17
@@ -71,24 +71,26 @@ Pandoc (Meta {unMeta = fromList []})
7171 ,Para [Str "With",Space,Str "two",Space,Str "paragraphs."]]
7272,Para [Str "Nother",Space,Str "paragraph."]
7373,Header 2 ("external-links",[],[]) [Str "external",Space,Str "links"]
74−,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
75−,Para [Link [Str "http://pandoc.org"] ("http://pandoc.org","")]
76−,Para [Link [Str "1"] ("http://google.com",""),Space,Link [Str "2"] ("http://yahoo.com","")]
77−,Para [Link [Str "email",Space,Str "me"] ("mailto:info@example.org","")]
74+,Para [Link ("",[],[]) [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
75+,Para [Link ("",[],[]) [Str "http://pandoc.org"] ("http://pandoc.org","")]
76+,Para [Link ("",[],[]) [Str "1"] ("http://google.com",""),Space,Link ("",[],[]) [Str "2"] ("http://yahoo.com","")]
77+,Para [Link ("",[],[]) [Str "email",Space,Str "me"] ("mailto:info@example.org","")]
7878,Header 2 ("internal-links",[],[]) [Str "internal",Space,Str "links"]
79−,Para [Link [Str "Help"] ("Help","wikilink")]
80−,Para [Link [Str "the",Space,Str "help",Space,Str "page"] ("Help","wikilink")]
81−,Para [Link [Str "Helpers"] ("Help","wikilink")]
82−,Para [Link [Str "Help"] ("Help","wikilink"),Str "ers"]
83−,Para [Link [Str "Contents"] ("Help:Contents","wikilink")]
84−,Para [Link [Str "#My",Space,Str "anchor"] ("#My_anchor","wikilink")]
85−,Para [Link [Str "and",Space,Str "text"] ("Page#with_anchor","wikilink")]
79+,Para [Link ("",[],[]) [Str "Help"] ("Help","wikilink")]
80+,Para [Link ("",[],[]) [Str "the",Space,Str "help",Space,Str "page"] ("Help","wikilink")]
81+,Para [Link ("",[],[]) [Str "Helpers"] ("Help","wikilink")]
82+,Para [Link ("",[],[]) [Str "Help"] ("Help","wikilink"),Str "ers"]
83+,Para [Link ("",[],[]) [Str "Contents"] ("Help:Contents","wikilink")]
84+,Para [Link ("",[],[]) [Str "#My",Space,Str "anchor"] ("#My_anchor","wikilink")]
85+,Para [Link ("",[],[]) [Str "and",Space,Str "text"] ("Page#with_anchor","wikilink")]
8686,Header 2 ("images",[],[]) [Str "images"]
87−,Para [Image [Str "caption"] ("example.jpg","fig:caption")]
88−,Para [Image [Str "the",Space,Emph [Str "caption"],Space,Str "with",Space,Link [Str "external",Space,Str "link"] ("http://google.com","")] ("example.jpg","fig:the caption with external link")]
89−,Para [Image [Str "caption"] ("example.jpg","fig:caption")]
90−,Para [Image [Str "example.jpg"] ("example.jpg","fig:example.jpg")]
91−,Para [Image [Str "example_es.jpg"] ("example_es.jpg","fig:example_es.jpg")]
87+,Para [Image ("",[],[]) [Str "caption"] ("example.jpg","fig:caption")]
88+,Para [Image ("",[],[]) [Str "the",Space,Emph [Str "caption"],Space,Str "with",Space,Link ("",[],[]) [Str "external",Space,Str "link"] ("http://google.com","")] ("example.jpg","fig:the caption with external link")]
89+,Para [Image ("",[],[("width","30"),("height","40")]) [Str "caption"] ("example.jpg","fig:caption")]
90+,Para [Image ("",[],[("width","30")]) [Str "caption"] ("example.jpg","fig:caption")]
91+,Para [Image ("",[],[("width","30")]) [Str "caption"] ("example.jpg","fig:caption")]
92+,Para [Image ("",[],[]) [Str "example.jpg"] ("example.jpg","fig:example.jpg")]
93+,Para [Image ("",[],[]) [Str "example_es.jpg"] ("example_es.jpg","fig:example_es.jpg")]
9294,Header 2 ("lists",[],[]) [Str "lists"]
9395,BulletList
9496 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
@@ -252,4 +254,4 @@ Pandoc (Meta {unMeta = fromList []})
252254,Para [Str "Paragraph",Space,Str "after",Space,Str "the",Space,Str "table."]
253255,Header 2 ("notes",[],[]) [Str "notes"]
254256,Para [Str "My",Space,Str "note!",Note [Plain [Str "This."]]]
255−,Para [Str "URL",Space,Str "note.",Note [Plain [Link [Str "http://docs.python.org/library/functions.html#range"] ("http://docs.python.org/library/functions.html#range","")]]]]
257+,Para [Str "URL",Space,Str "note.",Note [Plain [Link ("",[],[]) [Str "http://docs.python.org/library/functions.html#range"] ("http://docs.python.org/library/functions.html#range","")]]]]
tests/mediawiki-reader.wiki+4
@@ -171,6 +171,10 @@ http://pandoc.org
171171
172172[[File:example.jpg|frameless|border|30x40px|caption]]
173173
174+[[File:example.jpg|frameless|border|30px|caption]]
175+
176+[[File:example.jpg|page=4|30px|border|caption]]
177+
174178[[File:example.jpg]]
175179
176180[[Archivo:example_es.jpg]]
tests/odt/native/referenceToChapter.native+1−1
@@ -1 +1 @@
1−[Header 1 ("a-chapter",[],[]) [Span ("anchor",[],[]) [],Str "A",Space,Str "chapter"],Para [Str "Some",Space,Str "text."],Header 1 ("another-chapter",[],[]) [Str "Another",Space,Str "chapter"],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Str "."],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Link [Str "A",Space,Str "chapter"] ("#anchor",""),Str "."]]
1+[Header 1 ("a-chapter",[],[]) [Span ("anchor",[],[]) [],Str "A",Space,Str "chapter"],Para [Str "Some",Space,Str "text."],Header 1 ("another-chapter",[],[]) [Str "Another",Space,Str "chapter"],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Str "."],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Link ("",[],[]) [Str "A",Space,Str "chapter"] ("#anchor",""),Str "."]]
tests/odt/native/referenceToListItem.native+1−1
@@ -1 +1 @@
1−[OrderedList (1,Decimal,Period) [[Plain [Span ("anchor",[],[]) [],Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "Another",Space,Str "list",Space,Str "item"]]],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Str "list",Space,Str "item",Space,Link [Str "1."] ("#anchor",""),Str "."],Para [],Para []]
1+[OrderedList (1,Decimal,Period) [[Plain [Span ("anchor",[],[]) [],Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "Another",Space,Str "list",Space,Str "item"]]],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Str "list",Space,Str "item",Space,Link ("",[],[]) [Str "1."] ("#anchor",""),Str "."],Para [],Para []]
tests/odt/native/referenceToText.native+1−1
@@ -1 +1 @@
1−[Para [Span ("an anchor",[],[]) [],Str "Some",Space,Str "text."],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Link [Str "Some",Space,Str "text"] ("#an anchor",""),Str "."]]
1+[Para [Span ("an anchor",[],[]) [],Str "Some",Space,Str "text."],Para [Str "A",Space,Str "reference",Space,Str "to",Space,Link ("",[],[]) [Str "Some",Space,Str "text"] ("#an anchor",""),Str "."]]
tests/opml-reader.native+1−1
@@ -7,7 +7,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "Dave",Spa
77,Header 3 ("",[],[]) [Strong [Str "Nevada"]]
88,Para [Str "I",Space,Str "lived",Space,Str "here",Space,Emph [Str "once"],Str "."]
99,Para [Str "Loved",Space,Str "it."]
10−,Header 4 ("",[],[]) [Link [Str "Reno"] ("http://www.reno.gov","")]
10+,Header 4 ("",[],[]) [Link ("",[],[]) [Str "Reno"] ("http://www.reno.gov","")]
1111,Header 4 ("",[],[]) [Str "Las",Space,Str "Vegas"]
1212,Header 4 ("",[],[]) [Str "Ely"]
1313,Header 4 ("",[],[]) [Str "Gerlach"]
tests/rst-reader.native+10−10
@@ -210,20 +210,20 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
210210,Para [Str "Plus:",Space,Str "+"]
211211,Para [Str "Minus:",Space,Str "-"]
212212,Header 1 ("links",[],[]) [Str "Links"]
213−,Para [Str "Explicit:",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
214−,Para [Str "Two",Space,Str "anonymous",Space,Str "links:",Space,Link [Str "the",Space,Str "first"] ("/url1/",""),Space,Str "and",Space,Link [Str "the",Space,Str "second"] ("/url2/","")]
215−,Para [Str "Reference",Space,Str "links:",Space,Link [Str "link1"] ("/url1/",""),Space,Str "and",Space,Link [Str "link2"] ("/url2/",""),Space,Str "and",Space,Link [Str "link1"] ("/url1/",""),Space,Str "again."]
216−,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
217−,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("/url/",""),Str "."]
218−,Para [Str "Autolinks:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2",""),Space,Str "and",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net",""),Str "."]
213+,Para [Str "Explicit:",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
214+,Para [Str "Two",Space,Str "anonymous",Space,Str "links:",Space,Link ("",[],[]) [Str "the",Space,Str "first"] ("/url1/",""),Space,Str "and",Space,Link ("",[],[]) [Str "the",Space,Str "second"] ("/url2/","")]
215+,Para [Str "Reference",Space,Str "links:",Space,Link ("",[],[]) [Str "link1"] ("/url1/",""),Space,Str "and",Space,Link ("",[],[]) [Str "link2"] ("/url2/",""),Space,Str "and",Space,Link ("",[],[]) [Str "link1"] ("/url1/",""),Space,Str "again."]
216+,Para [Str "Here\8217s",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
217+,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("/url/",""),Str "."]
218+,Para [Str "Autolinks:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2",""),Space,Str "and",Space,Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net",""),Str "."]
219219,Para [Str "But",Space,Str "not",Space,Str "here:"]
220220,CodeBlock ("",[],[]) "http://example.com/"
221221,Header 1 ("images",[],[]) [Str "Images"]
222222,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
223−,Para [Image [Str "image"] ("lalune.jpg","")]
224−,Para [Image [Str "Voyage dans la Lune"] ("lalune.jpg","")]
225−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
226−,Para [Str "And",Space,Str "an",Space,Link [Image [Str "A movie"] ("movie.jpg","")] ("/url",""),Str "."]
223+,Para [Image ("",[],[]) [Str "image"] ("lalune.jpg","")]
224+,Para [Image ("",[],[]) [Str "Voyage dans la Lune"] ("lalune.jpg","")]
225+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
226+,Para [Str "And",Space,Str "an",Space,Link ("",[],[]) [Image ("",[],[]) [Str "A movie"] ("movie.jpg","")] ("/url",""),Str "."]
227227,Header 1 ("comments",[],[]) [Str "Comments"]
228228,Para [Str "First",Space,Str "paragraph"]
229229,Para [Str "Another",Space,Str "paragraph"]
tests/tables.icml+1−1
@@ -745,4 +745,4 @@
745745</Table>
746746<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/TableCaption">
747747 <Br />
748−</ParagraphStyleRange>
748+</ParagraphStyleRange>
tests/testsuite.native+33−33
@@ -2,7 +2,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
22[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
33,HorizontalRule
44,Header 1 ("headers",[],[]) [Str "Headers"]
5−,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
5+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embedded",Space,Str "link"] ("/url","")]
66,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]
77,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]
88,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]
@@ -286,7 +286,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
286286,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
287287,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]
288288,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."]
289−,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
289+,Para [Str "An",Space,Emph [Link ("",[],[]) [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
290290,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
291291,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
292292,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
@@ -302,7 +302,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
302302,Para [Quoted SingleQuote [Str "A"],Str ",",Space,Quoted SingleQuote [Str "B"],Str ",",Space,Str "and",Space,Quoted SingleQuote [Str "C"],Space,Str "are",Space,Str "letters."]
303303,Para [Quoted SingleQuote [Str "Oak,"],Space,Quoted SingleQuote [Str "elm,"],Space,Str "and",Space,Quoted SingleQuote [Str "beech"],Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Quoted SingleQuote [Str "pine."]]
304304,Para [Quoted SingleQuote [Str "He",Space,Str "said,",Space,Quoted DoubleQuote [Str "I",Space,Str "want",Space,Str "to",Space,Str "go."]],Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70\8217s?"]
305−,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
305+,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link ("",[],[]) [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
306306,Para [Str "Some",Space,Str "dashes:",Space,Str "one\8212two",Space,Str "\8212",Space,Str "three\8212four",Space,Str "\8212",Space,Str "five."]
307307,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5\8211\&7,",Space,Str "255\8211\&66,",Space,Str "1987\8211\&1999."]
308308,Para [Str "Ellipses\8230and\8230and\8230."]
@@ -358,52 +358,52 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
358358,HorizontalRule
359359,Header 1 ("links",[],[]) [Str "Links"]
360360,Header 2 ("explicit",[],[]) [Str "Explicit"]
361−,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
362−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
363−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
364−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
365−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
366−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
367−,Para [Link [Str "with_underscore"] ("/url/with_underscore","")]
368−,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
369−,Para [Link [Str "Empty"] ("",""),Str "."]
361+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
362+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
363+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
364+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
365+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
366+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
367+,Para [Link ("",[],[]) [Str "with_underscore"] ("/url/with_underscore","")]
368+,Para [Link ("",[],[]) [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
369+,Para [Link ("",[],[]) [Str "Empty"] ("",""),Str "."]
370370,Header 2 ("reference",[],[]) [Str "Reference"]
371−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
372−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
373−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
374−,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
375−,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
376−,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."]
377−,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."]
378−,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]
371+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
372+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
373+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
374+,Para [Str "With",Space,Link ("",[],[]) [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
375+,Para [Link ("",[],[]) [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
376+,Para [Str "Indented",Space,Link ("",[],[]) [Str "once"] ("/url",""),Str "."]
377+,Para [Str "Indented",Space,Link ("",[],[]) [Str "twice"] ("/url",""),Str "."]
378+,Para [Str "Indented",Space,Link ("",[],[]) [Str "thrice"] ("/url",""),Str "."]
379379,Para [Str "This",Space,Str "should",Space,Str "[not][]",Space,Str "be",Space,Str "a",Space,Str "link."]
380380,CodeBlock ("",[],[]) "[not]: /url"
381−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
382−,Para [Str "Foo",Space,Link [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
381+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
382+,Para [Str "Foo",Space,Link ("",[],[]) [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
383383,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"]
384−,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
385−,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
386−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
387−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
384+,Para [Str "Here\8217s",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
385+,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
386+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
387+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
388388,Header 2 ("autolinks",[],[]) [Str "Autolinks"]
389−,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
389+,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
390390,BulletList
391391 [[Plain [Str "In",Space,Str "a",Space,Str "list?"]]
392− ,[Plain [Link [Str "http://example.com/"] ("http://example.com/","")]]
392+ ,[Plain [Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
393393 ,[Plain [Str "It",Space,Str "should."]]]
394−,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
394+,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
395395,BlockQuote
396− [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]]
396+ [Para [Str "Blockquoted:",Space,Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
397397,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]
398398,CodeBlock ("",[],[]) "or here: <http://example.com/>"
399399,HorizontalRule
400400,Header 1 ("images",[],[]) [Str "Images"]
401401,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
402−,Para [Image [Str "lalune"] ("lalune.jpg","fig:Voyage dans la Lune")]
403−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
402+,Para [Image ("",[],[]) [Str "lalune"] ("lalune.jpg","fig:Voyage dans la Lune")]
403+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
404404,HorizontalRule
405405,Header 1 ("footnotes",[],[]) [Str "Footnotes"]
406−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
406+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link ("",[],[]) [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
407407,BlockQuote
408408 [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]]
409409,OrderedList (1,Decimal,Period)
tests/textile-reader.native+8−8
@@ -2,7 +2,7 @@ Pandoc (Meta {unMeta = fromList []})
22[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc",Space,Str "Textile",Space,Str "Reader.",Space,Str "Part",Space,Str "of",Space,Str "it",Space,Str "comes",LineBreak,Str "from",Space,Str "John",Space,Str "Gruber's",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
33,HorizontalRule
44,Header 1 ("headers",[],[]) [Str "Headers"]
5−,Header 2 ("level-2-with-an-embeded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embeded",Space,Str "link"] ("http://www.example.com","")]
5+,Header 2 ("level-2-with-an-embeded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embeded",Space,Str "link"] ("http://www.example.com","")]
66,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Strong [Str "emphasis"]]
77,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]
88,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]
@@ -84,7 +84,7 @@ Pandoc (Meta {unMeta = fromList []})
8484 ,([Str "beer"],
8585 [[Plain [Str "fresh",Space,Str "and",Space,Str "bitter"]]])]
8686,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
87−,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "Hyphenated-words-are-ok,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation.",LineBreak,Str "A",Space,Link [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]
87+,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "Hyphenated-words-are-ok,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation.",LineBreak,Str "A",Space,Link ("",[],[]) [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]
8888,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]]
8989,Para [Str "Superscripts:",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Space,Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts:",Space,Subscript [Str "here"],Space,Str "H",Space,Subscript [Str "2"],Str "O,",Space,Str "H",Space,Subscript [Str "23"],Str "O,",Space,Str "H",Space,Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O."]
9090,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "--",Space,Str "automatic",Space,Str "dashes."]
@@ -92,11 +92,11 @@ Pandoc (Meta {unMeta = fromList []})
9292,Para [Str "Quotes",Space,Str "and",Space,Str "apostrophes",Space,Str ":",Space,Str "\"I'd",Space,Str "like",Space,Str "to",Space,Str "thank",Space,Str "you\"",Space,Str "for",Space,Str "example."]
9393,Header 1 ("links",[],[]) [Str "Links"]
9494,Header 2 ("explicit",[],[]) [Str "Explicit"]
95−,Para [Str "Just",Space,Str "a",Space,Link [Str "url"] ("http://www.url.com","")]
96−,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
97−,Para [Str "Automatic",Space,Str "linking",Space,Str "to",Space,Link [Str "http://www.example.com"] ("http://www.example.com",""),Str "."]
98−,Para [Link [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon."]
99−,Para [Str "A",Space,Str "link",Link [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces."]
95+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "url"] ("http://www.url.com","")]
96+,Para [Link ("",[],[]) [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
97+,Para [Str "Automatic",Space,Str "linking",Space,Str "to",Space,Link ("",[],[]) [Str "http://www.example.com"] ("http://www.example.com",""),Str "."]
98+,Para [Link ("",[],[]) [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon."]
99+,Para [Str "A",Space,Str "link",Link ("",[],[]) [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces."]
100100,Header 1 ("tables",[],[]) [Str "Tables"]
101101,Para [Str "Textile",Space,Str "allows",Space,Str "tables",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "headers",Space,Str ":"]
102102,Header 2 ("without-headers",[],[]) [Str "Without",Space,Str "headers"]
@@ -130,7 +130,7 @@ Pandoc (Meta {unMeta = fromList []})
130130 ,[Plain [Str "45"]]
131131 ,[Plain [Str "f"]]]]
132132,Header 1 ("images",[],[]) [Str "Images"]
133−,Para [Str "Textile",Space,Str "inline",Space,Str "image",Space,Str "syntax,",Space,Str "like",LineBreak,Str "here",Space,Image [Str "this is the alt text"] ("this_is_an_image.png","this is the alt text"),LineBreak,Str "and",Space,Str "here",Space,Image [Str ""] ("this_is_an_image.png",""),Str "."]
133+,Para [Str "Textile",Space,Str "inline",Space,Str "image",Space,Str "syntax,",Space,Str "like",LineBreak,Str "here",Space,Image ("",[],[]) [Str "this is the alt text"] ("this_is_an_image.png","this is the alt text"),LineBreak,Str "and",Space,Str "here",Space,Image ("",[],[]) [Str ""] ("this_is_an_image.png",""),Str "."]
134134,Header 1 ("attributes",[],[]) [Str "Attributes"]
135135,Header 2 ("ident",["bar","foo"],[("style","color:red"),("lang","en")]) [Str "HTML",Space,Str "and",Space,Str "CSS",Space,Str "attributes",Space,Str "are",Space,Str "parsed",Space,Str "in",Space,Str "headers."]
136136,Para [Str "as",Space,Str "well",Space,Str "as",Space,Strong [Span ("",["foo"],[]) [Str "inline",Space,Str "attributes"]],Space,Str "of",Space,Span ("",[],[("style","color:red")]) [Str "all",Space,Str "kind"]]
tests/twiki-reader.native+4−4
@@ -43,10 +43,10 @@ Pandoc (Meta {unMeta = fromList []})
4343 ,Para [Str "With",Space,Str "two",Space,Str "paragraphs."]]
4444,Para [Str "Nother",Space,Str "paragraph."]
4545,Header 1 ("external-links",[],[]) [Str "external",Space,Str "links"]
46−,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
47−,Para [Link [Str "http://pandoc.org"] ("http://pandoc.org","")]
48−,Para [Link [Str "http://google.com"] ("http://google.com",""),Space,Link [Str "http://yahoo.com"] ("http://yahoo.com","")]
49−,Para [Link [Str "email",Space,Str "me"] ("mailto:info@example.org","")]
46+,Para [Link ("",[],[]) [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
47+,Para [Link ("",[],[]) [Str "http://pandoc.org"] ("http://pandoc.org","")]
48+,Para [Link ("",[],[]) [Str "http://google.com"] ("http://google.com",""),Space,Link ("",[],[]) [Str "http://yahoo.com"] ("http://yahoo.com","")]
49+,Para [Link ("",[],[]) [Str "email",Space,Str "me"] ("mailto:info@example.org","")]
5050,Para [Str "http://google.com"]
5151,Para [Str "http://google.com"]
5252,Para [Str "http://google.com"]
tests/txt2tags.native+13−13
@@ -1,8 +1,8 @@
11Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "author"]]),("date",MetaInlines [Str "date"]),("includeconf",MetaString "rules.conf"),("title",MetaInlines [Str "Txt2tags",Space,Str "Markup",Space,Str "Rules"])]})
22[Para [Str "This",Space,Str "document",Space,Str "describes",Space,Str "all",Space,Str "the",Space,Str "details",Space,Str "about",Space,Str "each",Space,Str "txt2tags",Space,Str "mark.",Space,Str "The",Space,Str "target",Space,Str "audience",Space,Str "are",Space,Strong [Str "experienced"],Space,Str "users.",Space,Str "You",Space,Str "may",Space,Str "find",Space,Str "it",Space,Str "useful",Space,Str "if",Space,Str "you",Space,Str "want",Space,Str "to",Space,Str "master",Space,Str "the",Space,Str "marks",Space,Str "or",Space,Str "solve",Space,Str "a",Space,Str "specific",Space,Str "problem",Space,Str "about",Space,Str "a",Space,Str "mark."]
3−,Para [Str "If",Space,Str "you",Space,Str "are",Space,Str "new",Space,Str "to",Space,Str "txt2tags",Space,Str "or",Space,Str "just",Space,Str "want",Space,Str "to",Space,Str "know",Space,Str "which",Space,Str "are",Space,Str "the",Space,Str "available",Space,Str "marks,",Space,Str "please",Space,Str "read",Space,Str "the",Space,Link [Str "Markup",Space,Str "Demo"] ("MARKUPDEMO",""),Str "."]
3+,Para [Str "If",Space,Str "you",Space,Str "are",Space,Str "new",Space,Str "to",Space,Str "txt2tags",Space,Str "or",Space,Str "just",Space,Str "want",Space,Str "to",Space,Str "know",Space,Str "which",Space,Str "are",Space,Str "the",Space,Str "available",Space,Str "marks,",Space,Str "please",Space,Str "read",Space,Str "the",Space,Link ("",[],[]) [Str "Markup",Space,Str "Demo"] ("MARKUPDEMO",""),Str "."]
44,Para [Str "Note",Space,Str "1:",Space,Str "This",Space,Str "document",Space,Str "is",Space,Str "generated",Space,Str "directly",Space,Str "from",Space,Str "the",Space,Str "txt2tags",Space,Str "test-suite.",Space,Str "All",Space,Str "the",Space,Str "rules",Space,Str "mentioned",Space,Str "here",Space,Str "are",Space,Str "100%",Space,Str "in",Space,Str "sync",Space,Str "with",Space,Str "the",Space,Str "current",Space,Str "program",Space,Str "code."]
5−,Para [Str "Note",Space,Str "2:",Space,Str "A",Space,Str "good",Space,Str "practice",Space,Str "is",Space,Str "to",Space,Str "consult",Space,Link [Str "the",Space,Str "sources"] ("rules.t2t",""),Space,Str "when",Space,Str "reading,",Space,Str "to",Space,Str "see",Space,Str "how",Space,Str "the",Space,Str "texts",Space,Str "were",Space,Str "made."]
5+,Para [Str "Note",Space,Str "2:",Space,Str "A",Space,Str "good",Space,Str "practice",Space,Str "is",Space,Str "to",Space,Str "consult",Space,Link ("",[],[]) [Str "the",Space,Str "sources"] ("rules.t2t",""),Space,Str "when",Space,Str "reading,",Space,Str "to",Space,Str "see",Space,Str "how",Space,Str "the",Space,Str "texts",Space,Str "were",Space,Str "made."]
66,Para [Str "Table",Space,Str "of",Space,Str "Contents:"]
77,HorizontalRule
88,Header 1 ("paragraph",[],[]) [Str "Paragraph"]
@@ -34,17 +34,17 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "author"]]
3434,Para [Str "i)",Space,Str "****",Space,Str "////",Space,Str "____",Space,Str "----",Space,Str "````",Space,Str "\"\"\"\"",Space,Str "''''",Space,Str "i)",Space,Str "**",Space,Str "**",Space,Str "//",Space,Str "//",Space,Str "__",Space,Str "__",Space,Str "--",Space,Str "--",Space,Str "``",Space,Str "``",Space,Str "\"\"",Space,Str "\"\"",Space,Str "''",Space,Str "''"]
3535,Para [Str "i)",Space,Str "**",Space,Str "bold**",Space,Str "//",Space,Str "ital//",Space,Str "__",Space,Str "undr__",Space,Str "--",Space,Str "strk--",Space,Str "``",Space,Str "mono``",Space,Str "\"\"",Space,Str "raw\"\"",Space,Str "''",Space,Str "tggd''",Space,Str "i)",Space,Str "**bold",Space,Str "**",Space,Str "//ital",Space,Str "//",Space,Str "__undr",Space,Str "__",Space,Str "--strk",Space,Str "--",Space,Str "``mono",Space,Str "``",Space,Str "\"\"raw",Space,Str "\"\"",Space,Str "''tggd",Space,Str "''",Space,Str "i)",Space,Str "**",Space,Str "bold",Space,Str "**",Space,Str "//",Space,Str "ital",Space,Str "//",Space,Str "__",Space,Str "undr",Space,Str "__",Space,Str "--",Space,Str "strk",Space,Str "--",Space,Str "``",Space,Str "mono",Space,Str "``",Space,Str "\"\"",Space,Str "raw",Space,Str "\"\"",Space,Str "''",Space,Str "tggd",Space,Str "''"]
3636,Header 1 ("link",[],[]) [Str "Link"]
37−,Para [Link [Str "mailto:user@domain.com"] ("user@domain.com",""),Space,Link [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Link [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Str "any",Space,Str "text.",Space,Link [Str "label"] ("user@domain.com",""),Space,Link [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Space,Link [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Str ".",Space,Link [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Str ",",Space,Link [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Space,Link [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ".",Space,Link [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ",",Space,Link [Str "label"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ".",Space,Link [Str "label"] ("user@domain.com?subject=bla&cc=otheruser@domain.com.",""),Str ".",Space,Link [Str "http://www.domain.com"] ("http://www.domain.com",""),Space,Link [Str "http://www.domain.com/dir/"] ("http://www.domain.com/dir/",""),Space,Link [Str "http://www.domain.com/dir///"] ("http://www.domain.com/dir///",""),Space,Link [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Link [Str "http://www.domain.com,"] ("http://www.domain.com,",""),Space,Link [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Str "any",Space,Str "text.",Space,Link [Str "http://www.domain.com,"] ("http://www.domain.com,",""),Space,Str "any",Space,Str "text.",Space,Link [Str "http://www.domain.com/dir/."] ("http://www.domain.com/dir/.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com/dir/."] ("http://www.domain.com/dir/.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com/dir/index.html."] ("http://www.domain.com/dir/index.html.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com/dir/index.html,"] ("http://www.domain.com/dir/index.html,",""),Space,Str "any",Space,Str "text.",Space,Link [Str "http://www.domain.com/dir/#anchor"] ("http://www.domain.com/dir/#anchor",""),Space,Link [Str "http://www.domain.com/dir/index.html#anchor"] ("http://www.domain.com/dir/index.html#anchor",""),Space,Link [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Link [Str "http://www.domain.com/dir/#anchor."] ("http://www.domain.com/dir/#anchor.",""),Space,Str "any",Space,Str "text.",Space,Link [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com/dir/#anchor."] ("http://www.domain.com/dir/#anchor.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Str "any",Space,Str "text.",Space,Link [Str "http://domain.com?a=a@a.a&b=a+b+c."] ("http://domain.com?a=a@a.a&b=a+b+c.",""),Space,Link [Str "http://domain.com?a=a@a.a&b=a+b+c,"] ("http://domain.com?a=a@a.a&b=a+b+c,",""),Space,Link [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c."] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@."] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.",""),Space,Link [Str "http://domain.com?a=a@a.a&b=a+b+c.#anchor"] ("http://domain.com?a=a@a.a&b=a+b+c.#anchor",""),Space,Link [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor"] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.#anchor"] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.#anchor",""),Space,Link [Str "http://user:password@domain.com/bla.html."] ("http://user:password@domain.com/bla.html.",""),Space,Link [Str "http://user:password@domain.com/dir/."] ("http://user:password@domain.com/dir/.",""),Space,Link [Str "http://user:password@domain.com."] ("http://user:password@domain.com.",""),Space,Link [Str "http://user:@domain.com."] ("http://user:@domain.com.",""),Space,Link [Str "http://user@domain.com."] ("http://user@domain.com.",""),Space,Link [Str "http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor"] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link [Str "http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c@#anchor"] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c@#anchor",""),Space,Link [Str "label"] ("www.domain.com",""),Space,Str "[",Space,Str "label",Space,Link [Str "www.domain.com"] ("www.domain.com",""),Str "]",Space,Link [Str "label",Space] ("www.domain.com",""),Space,Link [Str "anchor",Space] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Link [Str "login",Space] ("http://user:password@domain.com/bla.html",""),Space,Link [Str "form",Space] ("http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link [Str "form",Space,Str "&",Space,Str "anchor"] ("http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link [Str "login",Space,Str "&",Space,Str "form",Space] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link [Str "local",Space,Str "link",Space,Str "up",Space] ("..",""),Space,Link [Str "local",Space,Str "link",Space,Str "file",Space] ("bla.html",""),Space,Link [Str "local",Space,Str "link",Space,Str "anchor",Space] ("#anchor",""),Space,Link [Str "local",Space,Str "link",Space,Str "file/anchor"] ("bla.html#anchor",""),Space,Link [Str "local",Space,Str "link",Space,Str "file/anchor"] ("bla.html#anchor.",""),Space,Link [Str "local",Space,Str "link",Space,Str "img",Space] ("abc.gif",""),Space,Link [Str "www.fake.com"] ("www.domain.com",""),Space,Link [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm",""),Space,Link [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-",""),Space,Link [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_",""),Str "-1%.",Space,Link [Str "http://foo._user-9:pass!#$%&*()+word@domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_"] ("http://foo._user-9:pass!#$%&*()+word@domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_",""),Str "-1%.",Space,Link [Str "http://L1.com"] ("http://L1.com",""),Space,Str "!",Space,Link [Str "mailto:L2@www.com"] ("L2@www.com",""),Space,Str "!",Space,Link [Str "L3"] ("www.com",""),Space,Str "!",Space,Link [Str "L4"] ("w@ww.com",""),Space,Str "!",Space,Link [Str "www.L5.com"] ("www.L5.com",""),Space,Link [Str "www.domain.com"] ("www.domain.com",""),Space,Link [Str "www2.domain.com"] ("www2.domain.com",""),Space,Link [Str "ftp.domain.com"] ("ftp.domain.com",""),Space,Link [Str "WWW.DOMAIN.COM"] ("WWW.DOMAIN.COM",""),Space,Link [Str "FTP.DOMAIN.COM"] ("FTP.DOMAIN.COM",""),Space,Link [Str "label"] ("www.domain.com",""),Space,Link [Str "label"] ("ftp.domain.com",""),Space,Link [Str "label"] ("WWW.DOMAIN.COM",""),Space,Link [Str "label"] ("FTP.DOMAIN.COM",""),Space,Str "[label",Space,Link [Str "www.domain.com"] ("www.domain.com",""),Space,Str "]",Space,Str "[label]",Space,Link [Str "www.domain.com"] ("www.domain.com",""),Str "]"]
37+,Para [Link ("",[],[]) [Str "mailto:user@domain.com"] ("user@domain.com",""),Space,Link ("",[],[]) [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Link ("",[],[]) [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "mailto:user@domain.com"] ("user@domain.com",""),Str ".",Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "label"] ("user@domain.com",""),Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Str ".",Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla"] ("user@domain.com?subject=bla",""),Str ",",Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ".",Space,Link ("",[],[]) [Str "mailto:user@domain.com?subject=bla&cc=otheruser@domain.com"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ",",Space,Link ("",[],[]) [Str "label"] ("user@domain.com?subject=bla&cc=otheruser@domain.com",""),Str ".",Space,Link ("",[],[]) [Str "label"] ("user@domain.com?subject=bla&cc=otheruser@domain.com.",""),Str ".",Space,Link ("",[],[]) [Str "http://www.domain.com"] ("http://www.domain.com",""),Space,Link ("",[],[]) [Str "http://www.domain.com/dir/"] ("http://www.domain.com/dir/",""),Space,Link ("",[],[]) [Str "http://www.domain.com/dir///"] ("http://www.domain.com/dir///",""),Space,Link ("",[],[]) [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Link ("",[],[]) [Str "http://www.domain.com,"] ("http://www.domain.com,",""),Space,Link ("",[],[]) [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "http://www.domain.com,"] ("http://www.domain.com,",""),Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/."] ("http://www.domain.com/dir/.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com."] ("http://www.domain.com.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/."] ("http://www.domain.com/dir/.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html."] ("http://www.domain.com/dir/index.html.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html,"] ("http://www.domain.com/dir/index.html,",""),Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/#anchor"] ("http://www.domain.com/dir/#anchor",""),Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html#anchor"] ("http://www.domain.com/dir/index.html#anchor",""),Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Link ("",[],[]) [Str "http://www.domain.com/dir/#anchor."] ("http://www.domain.com/dir/#anchor.",""),Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/#anchor."] ("http://www.domain.com/dir/#anchor.",""),Space,Str "any",Space,Str "text.",Space,Str "any",Space,Str "text:",Space,Link ("",[],[]) [Str "http://www.domain.com/dir/index.html#anchor."] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Str "any",Space,Str "text.",Space,Link ("",[],[]) [Str "http://domain.com?a=a@a.a&b=a+b+c."] ("http://domain.com?a=a@a.a&b=a+b+c.",""),Space,Link ("",[],[]) [Str "http://domain.com?a=a@a.a&b=a+b+c,"] ("http://domain.com?a=a@a.a&b=a+b+c,",""),Space,Link ("",[],[]) [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c."] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link ("",[],[]) [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@."] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.",""),Space,Link ("",[],[]) [Str "http://domain.com?a=a@a.a&b=a+b+c.#anchor"] ("http://domain.com?a=a@a.a&b=a+b+c.#anchor",""),Space,Link ("",[],[]) [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor"] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link ("",[],[]) [Str "http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.#anchor"] ("http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.#anchor",""),Space,Link ("",[],[]) [Str "http://user:password@domain.com/bla.html."] ("http://user:password@domain.com/bla.html.",""),Space,Link ("",[],[]) [Str "http://user:password@domain.com/dir/."] ("http://user:password@domain.com/dir/.",""),Space,Link ("",[],[]) [Str "http://user:password@domain.com."] ("http://user:password@domain.com.",""),Space,Link ("",[],[]) [Str "http://user:@domain.com."] ("http://user:@domain.com.",""),Space,Link ("",[],[]) [Str "http://user@domain.com."] ("http://user@domain.com.",""),Space,Link ("",[],[]) [Str "http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor"] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link ("",[],[]) [Str "http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c@#anchor"] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c@#anchor",""),Space,Link ("",[],[]) [Str "label"] ("www.domain.com",""),Space,Str "[",Space,Str "label",Space,Link ("",[],[]) [Str "www.domain.com"] ("www.domain.com",""),Str "]",Space,Link ("",[],[]) [Str "label",Space] ("www.domain.com",""),Space,Link ("",[],[]) [Str "anchor",Space] ("http://www.domain.com/dir/index.html#anchor.",""),Space,Link ("",[],[]) [Str "login",Space] ("http://user:password@domain.com/bla.html",""),Space,Link ("",[],[]) [Str "form",Space] ("http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link ("",[],[]) [Str "form",Space,Str "&",Space,Str "anchor"] ("http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor",""),Space,Link ("",[],[]) [Str "login",Space,Str "&",Space,Str "form",Space] ("http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "up",Space] ("..",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "file",Space] ("bla.html",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "anchor",Space] ("#anchor",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "file/anchor"] ("bla.html#anchor",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "file/anchor"] ("bla.html#anchor.",""),Space,Link ("",[],[]) [Str "local",Space,Str "link",Space,Str "img",Space] ("abc.gif",""),Space,Link ("",[],[]) [Str "www.fake.com"] ("www.domain.com",""),Space,Link ("",[],[]) [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm",""),Space,Link ("",[],[]) [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-",""),Space,Link ("",[],[]) [Str "http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_"] ("http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_",""),Str "-1%.",Space,Link ("",[],[]) [Str "http://foo._user-9:pass!#$%&*()+word@domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_"] ("http://foo._user-9:pass!#$%&*()+word@domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_",""),Str "-1%.",Space,Link ("",[],[]) [Str "http://L1.com"] ("http://L1.com",""),Space,Str "!",Space,Link ("",[],[]) [Str "mailto:L2@www.com"] ("L2@www.com",""),Space,Str "!",Space,Link ("",[],[]) [Str "L3"] ("www.com",""),Space,Str "!",Space,Link ("",[],[]) [Str "L4"] ("w@ww.com",""),Space,Str "!",Space,Link ("",[],[]) [Str "www.L5.com"] ("www.L5.com",""),Space,Link ("",[],[]) [Str "www.domain.com"] ("www.domain.com",""),Space,Link ("",[],[]) [Str "www2.domain.com"] ("www2.domain.com",""),Space,Link ("",[],[]) [Str "ftp.domain.com"] ("ftp.domain.com",""),Space,Link ("",[],[]) [Str "WWW.DOMAIN.COM"] ("WWW.DOMAIN.COM",""),Space,Link ("",[],[]) [Str "FTP.DOMAIN.COM"] ("FTP.DOMAIN.COM",""),Space,Link ("",[],[]) [Str "label"] ("www.domain.com",""),Space,Link ("",[],[]) [Str "label"] ("ftp.domain.com",""),Space,Link ("",[],[]) [Str "label"] ("WWW.DOMAIN.COM",""),Space,Link ("",[],[]) [Str "label"] ("FTP.DOMAIN.COM",""),Space,Str "[label",Space,Link ("",[],[]) [Str "www.domain.com"] ("www.domain.com",""),Space,Str "]",Space,Str "[label]",Space,Link ("",[],[]) [Str "www.domain.com"] ("www.domain.com",""),Str "]"]
3838,Header 1 ("image",[],[]) [Str "Image"]
39−,Para [Image [] ("img.png","")]
40−,Para [Link [Image [] ("img.png","")] ("http://txt2tags.org","")]
41−,Para [Image [] ("img.png",""),Space,Str "Image",Space,Str "at",Space,Str "the",Space,Str "line",Space,Str "beginning."]
42−,Para [Str "Image",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Image [] ("img.png",""),Space,Str "of",Space,Str "the",Space,Str "line."]
43−,Para [Str "Image",Space,Str "at",Space,Str "the",Space,Str "line",Space,Str "end.",Space,Image [] ("img.png","")]
44−,Para [Image [] ("img.png",""),Space,Image [] ("img.png",""),Space,Image [] ("img.png","")]
45−,Para [Image [] ("img.png",""),Image [] ("img.png","")]
46−,Para [Str "Images",Space,Image [] ("img.png",""),Space,Str "mixed",Space,Image [] ("img.png",""),Space,Str "with",Space,Image [] ("img.png",""),Space,Str "text."]
47−,Para [Str "Images",Space,Str "glued",Space,Str "together:",Space,Image [] ("img.png",""),Image [] ("img.png",""),Image [] ("img.png",""),Str "."]
39+,Para [Image ("",[],[]) [] ("img.png","")]
40+,Para [Link ("",[],[]) [Image ("",[],[]) [] ("img.png","")] ("http://txt2tags.org","")]
41+,Para [Image ("",[],[]) [] ("img.png",""),Space,Str "Image",Space,Str "at",Space,Str "the",Space,Str "line",Space,Str "beginning."]
42+,Para [Str "Image",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Image ("",[],[]) [] ("img.png",""),Space,Str "of",Space,Str "the",Space,Str "line."]
43+,Para [Str "Image",Space,Str "at",Space,Str "the",Space,Str "line",Space,Str "end.",Space,Image ("",[],[]) [] ("img.png","")]
44+,Para [Image ("",[],[]) [] ("img.png",""),Space,Image ("",[],[]) [] ("img.png",""),Space,Image ("",[],[]) [] ("img.png","")]
45+,Para [Image ("",[],[]) [] ("img.png",""),Image ("",[],[]) [] ("img.png","")]
46+,Para [Str "Images",Space,Image ("",[],[]) [] ("img.png",""),Space,Str "mixed",Space,Image ("",[],[]) [] ("img.png",""),Space,Str "with",Space,Image ("",[],[]) [] ("img.png",""),Space,Str "text."]
47+,Para [Str "Images",Space,Str "glued",Space,Str "together:",Space,Image ("",[],[]) [] ("img.png",""),Image ("",[],[]) [] ("img.png",""),Image ("",[],[]) [] ("img.png",""),Str "."]
4848,Para [Str "[img.png",Space,Str "]"]
4949,Para [Str "[",Space,Str "img.png]"]
5050,Para [Str "[",Space,Str "img.png",Space,Str "]"]
@@ -159,7 +159,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "author"]]
159159 ,([Str "Start",Space,Str "term",Space,Str "with",Space,Str "colon"],
160160 [[Plain [Str "And",Space,Str "its",Space,Str "definition",Space,Str "follows"]]])]
161161,Header 1 ("numlist",[],[]) [Str "Numbered",Space,Str "List"]
162−,Para [Str "See",Space,Link [Str "List"] ("#list",""),Str ",",Space,Str "the",Space,Str "same",Space,Str "rules",Space,Str "apply."]
162+,Para [Str "See",Space,Link ("",[],[]) [Str "List"] ("#list",""),Str ",",Space,Str "the",Space,Str "same",Space,Str "rules",Space,Str "apply."]
163163,Header 1 ("list",[],[]) [Str "List"]
164164,BulletList
165165 [[Plain [Str "Use",Space,Str "the",Space,Str "hyphen",Space,Str "to",Space,Str "prefix",Space,Str "list",Space,Str "items."]]
tests/writer.icml+14−16
@@ -2544,27 +2544,26 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
25442544</ParagraphStyleRange>
25452545<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
25462546 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2547− <Rectangle Self="uec" ItemTransform="1 0 0 1 75 -50">
2547+ <Rectangle Self="uec" StrokeWeight="0" ItemTransform="1.00000 0 0 1.00000 75.00000 -75.00000">
25482548 <Properties>
25492549 <PathGeometry>
25502550 <GeometryPathType PathOpen="false">
25512551 <PathPointArray>
2552− <PathPointType Anchor="-75 -50" LeftDirection="-75 -50" RightDirection="-75 -50" />
2553− <PathPointType Anchor="-75 50" LeftDirection="-75 50" RightDirection="-75 50" />
2554− <PathPointType Anchor="75 50" LeftDirection="75 50" RightDirection="75 50" />
2555− <PathPointType Anchor="75 -50" LeftDirection="75 -50" RightDirection="75 -50" />
2552+ <PathPointType Anchor="-75.00000 -75.00000" LeftDirection="-75.00000 -75.00000" RightDirection="-75.00000 -75.00000" />
2553+ <PathPointType Anchor="-75.00000 75.00000" LeftDirection="-75.00000 75.00000" RightDirection="-75.00000 75.00000" />
2554+ <PathPointType Anchor="75.00000 75.00000" LeftDirection="75.00000 75.00000" RightDirection="75.00000 75.00000" />
2555+ <PathPointType Anchor="75.00000 -75.00000" LeftDirection="75.00000 -75.00000" RightDirection="75.00000 -75.00000" />
25562556 </PathPointArray>
25572557 </GeometryPathType>
25582558 </PathGeometry>
25592559 </Properties>
2560− <Image Self="ue6" ItemTransform="1.0 0 0 1.0 -75 -50">
2560+ <Image Self="ue6" ItemTransform="1.00000 0 0 1.00000 -75.00000 -75.00000">
25612561 <Properties>
25622562 <Profile type="string">
25632563 $ID/Embedded
2564− <GraphicBounds Left="0" Top="0" Right="150" Bottom="100" />
25652564 </Profile>
25662565 </Properties>
2567− <Link Self="ueb" LinkResourceURI="file:lalune.jpg" />
2566+ <Link Self="ueb" LinkResourceURI="file://./lalune.jpg" />
25682567 </Image>
25692568 </Rectangle>
25702569 </CharacterStyleRange><Br />
@@ -2574,27 +2573,26 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
25742573 <Content>Here is a movie </Content>
25752574 </CharacterStyleRange>
25762575 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2577− <Rectangle Self="uec" ItemTransform="1 0 0 1 75 -50">
2576+ <Rectangle Self="uec" StrokeWeight="0" ItemTransform="1.00000 0 0 1.00000 10.00000 -11.00000">
25782577 <Properties>
25792578 <PathGeometry>
25802579 <GeometryPathType PathOpen="false">
25812580 <PathPointArray>
2582− <PathPointType Anchor="-75 -50" LeftDirection="-75 -50" RightDirection="-75 -50" />
2583− <PathPointType Anchor="-75 50" LeftDirection="-75 50" RightDirection="-75 50" />
2584− <PathPointType Anchor="75 50" LeftDirection="75 50" RightDirection="75 50" />
2585− <PathPointType Anchor="75 -50" LeftDirection="75 -50" RightDirection="75 -50" />
2581+ <PathPointType Anchor="-10.00000 -11.00000" LeftDirection="-10.00000 -11.00000" RightDirection="-10.00000 -11.00000" />
2582+ <PathPointType Anchor="-10.00000 11.00000" LeftDirection="-10.00000 11.00000" RightDirection="-10.00000 11.00000" />
2583+ <PathPointType Anchor="10.00000 11.00000" LeftDirection="10.00000 11.00000" RightDirection="10.00000 11.00000" />
2584+ <PathPointType Anchor="10.00000 -11.00000" LeftDirection="10.00000 -11.00000" RightDirection="10.00000 -11.00000" />
25862585 </PathPointArray>
25872586 </GeometryPathType>
25882587 </PathGeometry>
25892588 </Properties>
2590− <Image Self="ue6" ItemTransform="1.0 0 0 1.0 -75 -50">
2589+ <Image Self="ue6" ItemTransform="1.00000 0 0 1.00000 -10.00000 -11.00000">
25912590 <Properties>
25922591 <Profile type="string">
25932592 $ID/Embedded
2594− <GraphicBounds Left="0" Top="0" Right="150" Bottom="100" />
25952593 </Profile>
25962594 </Properties>
2597− <Link Self="ueb" LinkResourceURI="file:movie.jpg" />
2595+ <Link Self="ueb" LinkResourceURI="file://./movie.jpg" />
25982596 </Image>
25992597 </Rectangle>
26002598 </CharacterStyleRange>
tests/writer.native+33−33
@@ -2,7 +2,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
22[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
33,HorizontalRule
44,Header 1 ("headers",[],[]) [Str "Headers"]
5−,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
5+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link ("",[],[]) [Str "embedded",Space,Str "link"] ("/url","")]
66,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]
77,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]
88,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]
@@ -286,7 +286,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
286286,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
287287,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]
288288,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."]
289−,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
289+,Para [Str "An",Space,Emph [Link ("",[],[]) [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]
290290,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
291291,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
292292,Para [Strong [Emph [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]]]
@@ -302,7 +302,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
302302,Para [Quoted SingleQuote [Str "A"],Str ",",Space,Quoted SingleQuote [Str "B"],Str ",",Space,Str "and",Space,Quoted SingleQuote [Str "C"],Space,Str "are",Space,Str "letters."]
303303,Para [Quoted SingleQuote [Str "Oak,"],Space,Quoted SingleQuote [Str "elm,"],Space,Str "and",Space,Quoted SingleQuote [Str "beech"],Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Quoted SingleQuote [Str "pine."]]
304304,Para [Quoted SingleQuote [Str "He",Space,Str "said,",Space,Quoted DoubleQuote [Str "I",Space,Str "want",Space,Str "to",Space,Str "go."]],Space,Str "Were",Space,Str "you",Space,Str "alive",Space,Str "in",Space,Str "the",Space,Str "70\8217s?"]
305−,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
305+,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "quoted",Space,Quoted SingleQuote [Code ("",[],[]) "code"],Space,Str "and",Space,Str "a",Space,Quoted DoubleQuote [Link ("",[],[]) [Str "quoted",Space,Str "link"] ("http://example.com/?foo=1&bar=2","")],Str "."]
306306,Para [Str "Some",Space,Str "dashes:",Space,Str "one\8212two",Space,Str "\8212",Space,Str "three\8212four",Space,Str "\8212",Space,Str "five."]
307307,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5\8211\&7,",Space,Str "255\8211\&66,",Space,Str "1987\8211\&1999."]
308308,Para [Str "Ellipses\8230and\8230and\8230."]
@@ -358,52 +358,52 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
358358,HorizontalRule
359359,Header 1 ("links",[],[]) [Str "Links"]
360360,Header 2 ("explicit",[],[]) [Str "Explicit"]
361−,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."]
362−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
363−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
364−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
365−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
366−,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
367−,Para [Link [Str "with_underscore"] ("/url/with_underscore","")]
368−,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
369−,Para [Link [Str "Empty"] ("",""),Str "."]
361+,Para [Str "Just",Space,Str "a",Space,Link ("",[],[]) [Str "URL"] ("/url/",""),Str "."]
362+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title"),Str "."]
363+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by two spaces"),Str "."]
364+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title preceded by a tab"),Str "."]
365+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with \"quotes\" in it")]
366+,Para [Link ("",[],[]) [Str "URL",Space,Str "and",Space,Str "title"] ("/url/","title with single quotes")]
367+,Para [Link ("",[],[]) [Str "with_underscore"] ("/url/with_underscore","")]
368+,Para [Link ("",[],[]) [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")]
369+,Para [Link ("",[],[]) [Str "Empty"] ("",""),Str "."]
370370,Header 2 ("reference",[],[]) [Str "Reference"]
371−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
372−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
373−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]
374−,Para [Str "With",Space,Link [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
375−,Para [Link [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
376−,Para [Str "Indented",Space,Link [Str "once"] ("/url",""),Str "."]
377−,Para [Str "Indented",Space,Link [Str "twice"] ("/url",""),Str "."]
378−,Para [Str "Indented",Space,Link [Str "thrice"] ("/url",""),Str "."]
371+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
372+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
373+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/",""),Str "."]
374+,Para [Str "With",Space,Link ("",[],[]) [Str "embedded",Space,Str "[brackets]"] ("/url/",""),Str "."]
375+,Para [Link ("",[],[]) [Str "b"] ("/url/",""),Space,Str "by",Space,Str "itself",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "link."]
376+,Para [Str "Indented",Space,Link ("",[],[]) [Str "once"] ("/url",""),Str "."]
377+,Para [Str "Indented",Space,Link ("",[],[]) [Str "twice"] ("/url",""),Str "."]
378+,Para [Str "Indented",Space,Link ("",[],[]) [Str "thrice"] ("/url",""),Str "."]
379379,Para [Str "This",Space,Str "should",Space,Str "[not][]",Space,Str "be",Space,Str "a",Space,Str "link."]
380380,CodeBlock ("",[],[]) "[not]: /url"
381−,Para [Str "Foo",Space,Link [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
382−,Para [Str "Foo",Space,Link [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
381+,Para [Str "Foo",Space,Link ("",[],[]) [Str "bar"] ("/url/","Title with \"quotes\" inside"),Str "."]
382+,Para [Str "Foo",Space,Link ("",[],[]) [Str "biz"] ("/url/","Title with \"quote\" inside"),Str "."]
383383,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"]
384−,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
385−,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
386−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
387−,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
384+,Para [Str "Here\8217s",Space,Str "a",Space,Link ("",[],[]) [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."]
385+,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link ("",[],[]) [Str "AT&T"] ("http://att.com/","AT&T"),Str "."]
386+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."]
387+,Para [Str "Here\8217s",Space,Str "an",Space,Link ("",[],[]) [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]
388388,Header 2 ("autolinks",[],[]) [Str "Autolinks"]
389−,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
389+,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link ("",[],[]) [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")]
390390,BulletList
391391 [[Plain [Str "In",Space,Str "a",Space,Str "list?"]]
392− ,[Plain [Link [Str "http://example.com/"] ("http://example.com/","")]]
392+ ,[Plain [Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
393393 ,[Plain [Str "It",Space,Str "should."]]]
394−,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
394+,Para [Str "An",Space,Str "e-mail",Space,Str "address:",Space,Link ("",[],[]) [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net","")]
395395,BlockQuote
396− [Para [Str "Blockquoted:",Space,Link [Str "http://example.com/"] ("http://example.com/","")]]
396+ [Para [Str "Blockquoted:",Space,Link ("",[],[]) [Str "http://example.com/"] ("http://example.com/","")]]
397397,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"]
398398,CodeBlock ("",[],[]) "or here: <http://example.com/>"
399399,HorizontalRule
400400,Header 1 ("images",[],[]) [Str "Images"]
401401,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
402−,Para [Image [Str "lalune"] ("lalune.jpg","fig:Voyage dans la Lune")]
403−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
402+,Para [Image ("",[],[]) [Str "lalune"] ("lalune.jpg","fig:Voyage dans la Lune")]
403+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
404404,HorizontalRule
405405,Header 1 ("footnotes",[],[]) [Str "Footnotes"]
406−,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
406+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) " { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link ("",[],[]) [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]]
407407,BlockQuote
408408 [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]]
409409,OrderedList (1,Decimal,Period)
tests/writer.rtf+2−2
@@ -429,8 +429,8 @@ http://example.com/
429429{\pard \qc \f0 \sa180 \li0 \fi0 \emdash\emdash\emdash\emdash\emdash\par}
430430{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Images\par}
431431{\pard \ql \f0 \sa180 \li0 \fi0 From \u8220"Voyage dans la Lune\u8221" by Georges Melies (1902):\par}
432−{\pard \ql \f0 \sa180 \li0 \fi0 {\pict\jpegblip\picw250\pich250\picwgoal3000\pichgoal3000 ffd8ffe000104a46494600010101007800780000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc000110800fa00fa03011100021101031101ffc4001c0000000701010000000000000000000000010203040506070008ffc4003e100002010303020404040502050500030001020300041105122106311322415107617181143291a1234252b1c115f016336272d1082443e1f1265382ffc40017010101010100000000000000000000000000010204ffc4001b11010101010003010000000000000000000001110212213141ffda000c03010002110311003f00dadd18a10a704f6a95ccc57e37750782b0d8d9ea0cd32e7c5446e07e9f4ad723119a7b89e61e348f260719278aad613cbb640002938c76a182b264fc87bd13009c0c019c76e3d68a072e1cf6f4cd502d330c28269a61bb39c923923d4fad44c08dccb95cfd28b8280769ee08a263891e1808739e4f1d8d149392172cc714050dbb9fde8960ed8c60b79b1ed44103b05c331dbdb1dc5026ac1946d20ff8140aa631c773ec738a0346a003bf93e9cf02801895e7b9a01886796c923bd0090a06393c76a0142003ce3d86680d8dd9392303f5341ccc1b3cf7a2c812c37e4923d381429757013209fa511c18146c9247a0f6a007900c0c671c6280854e086c673eb45c27c038fd68aedff2fda836ef881f136f25d5e6b7d1262964aa02b03f98fbf153131935edcc97576f35c33349212cc4f39f7ab26186dfce5b200f73451f7600dcb8cf27e7400c0b291914046c9e0718fde81371b8e7273f4ef4007691919240e714097f31f376e7b5008caee27807b0f5a02c8e1b3c6d27d33cd0201d839523144d1a149ae084b78da47638211771fd050d582c3a0faab5119b6d12f8ab1c06788a0fd4e2ac356fd1fe08754ddccaba849696309e598c9e2103fed1dcfdeadc44fea5ff00a7f956366d375e492403ca935bedcf1eea4ff6ac68a55efc1beb3b552574f8e7009ff933a927ec715bc82b3a8f4d6bba5ca1352d22fe061cf9a0383f71dea5119cc6c0baed3eaac0f1fad40897dcc3d81f7a052366c1007df3400f21edefc5008c28f30c9c5170ee4fc37830086395250a7c66770c18e78da31c0c63de8609b41f7c515c5172a30c3b76344a3e377cb2339cf7a242aea89808cce368272b8c1a2e107c672a49f5c1a181c9c7ae7da8a2119e7b1f5068099ffa68258a132062d8f9e0f34059502b61bf2824e681bb297ced2a71efda80f19c47b9c77fdbe74057c13e539cf3c1a0eeeb9c73f33405ddb4f18249c1e28062b79ae242902024465b9214614649e7bd0362a7249eddc513456e5720f38f5a1a98e96e95d6baa6ebc2d1ad1e65521649bb469f563534d6d7d31f04347d2a2fc5f535db6a0e83718906c887cbbe5a9a8bef44dce9f731ca9a2e89169d6d6f2184b1455dc07b11dcfeb4d16f119c649a681285b03d3e5500f87820ff006a0e098191de80ac9b8904647b55d11da9681a56a31f87a869f6970b8ffe4883629a289aefc16e92d441682da5b098f21ed9f033f353914d19b751fc08d66cc16d12fe2bf45ec92ff0df1fdbfb559ec667aff4eeb1a04db359d3ae6d40eccebe53f46ec7f5ab82263da7dcf3eb5174e5181076918c7de869503232491ee4515c1803824f03b51287f30e0e7d803449494832c157278a2e8c71fcb9f9d144639236824d01e142efb1768cfb9c7ef40512a818de78ff00a682518e7cc30ab9e00a02cce9953247bd41e467191ed9a04205ee99da4e4e3d283a524b0427b5026c18a8e082067db8341ce0e39ed409b6502907391edda80f2dfdc496f0c124ac6184b144cf0a4e338fd2894f7a7342d4ba9b568f4fd261f12571966270a8bfd47d8511bae85f02b47b7fc34bac5d5c5dc88a0c90ab6c8d9bedce3ef4d1ad691a6dae976a96d616d15b409f9638d70054a1dbc68ea51d4329f4619a8022b78e04548515117b05000a035c5c4702a995c26e3819f534047bcb68a458cce866719540724d02e41c0f7a012a40f6141cbc8e7bd01719e38e6838af1c0a04ca8206d3cd037bdb082fad9e0bd8a39e0718649141047d0d5d18f759fc0cd3af164b8e9999acae4e4f81236e898f7c0f55fed574615aee83a96817ef67abda3db4ebdb7f66f983d88a061bb8db9e3d45165076db83c1f950a53780d8247c80a2398f182724f1c7ad080c608cfa7a51a0062adc7afbd0130173bb9c5070f071cb37e82826106e8f615e01c9e680d6b35bc534be3c1e3831b2aa962bb188f2b71df1de819ae4b1048c7f57bd01a58268e332642ae0704f7cf6207af6a01b99e17b7b6416e227407c494139909ed9f4c0a04a4e501e0f1eb40d263e53dce7fa682c9d0bd13abf58dd6db18bc2b157c4975270ab8ef8f563f21447a73a03a1f4de8eb031582b497328066b97fcd21ff038edfde88b7e32703bd64188e7e6283864b73400cd804b67ca3268317eacea6d56ff005233592f8b6303f953fa4af7c2fa93417fe98b763e0ea171297bab98558068f695ce0e08fdbd281e5c6a57ba5e9d14d716ef7774f2ec112601da4f27ec2827ada74bab559a20e148fcae36b0f91140283729c77a0e0a7777a01dac68395719e39a029607cb901b19c501480ab9279f4a086ea8d0b48d76c0586b7143224a76c61ce1831fe93e86b43cd1f12fe19ea7d2533dcdbeebcd20b612651e68f9ece3fcf6fa5067cbcf20ff009a051724905411e94032799060723da8406d6c67e7ea68d0e1770fe5cfb5026c37039ef9a02eca098c91e6e01e71c500b1d8a49c12786cf6a06a4e256008e3d050119958007920e2801154e32fb4120927b014017eb1c523ac5209a356215c291b87be28957ef853f0d66eaa99352d515e1d190f947669ce7b0ffa7e74a8f4be996569a5d9c56b6704705b46bb5238d42851f2ac875712bc70b3c30f892019540704d01ad2669a0491936330c95ce7140b2e4939a03638c7e8680ae485e33bbe540d60d3ada162c90a02c7270a39340a4f28b68da4645007a8f6a069a746f73235ddcefc391e12b2e1916824948742c99382473c73404791c617695279dc0640f9502c578c9efeb4095cb4cb0830ba21cf999c6401f4f5a05061d430c8079a02e03b3004311c7d281b5e3cd676c65489ee594e4aafe6c7ae07a9a0a075bbea3a8ea96f047d3935ebc404f04ad29411e08e011d98fed416fd212ee5b05b4d5ad6300c615807f1171eaa49eff5ad418c7c55f8466dd66d57a521f20cbcd66a7247a9283dbe5418a63862479877cf1f6c5008e400bdf1ce684016fe53dfbd1a73794600e08ce3d6800377c8c7d6800a9cf75fd4503d91492460f7ee3d28247a7b459f5fd592d22711c206f9e563858a31f99cfd050583518ba75247b1d134f9aed21396d4669769931dc01c003f7a329c4d17458ac5b55d36c12e040a3f1da75c1cb04ede2447f7f6a94567ad7a66db4fbbb29ba7d65b8b4bd8ccd09c8231eaa07b8ab04a7c2cf87b3f53ea8d77abc72c1a5dabe2452bb5a561fc83e5ee7e541e988218ed2dd22b7855228d76a46a00000ec00a510bd4dd511f4fe84da95cc31f880022da4902b1e7d3e99ac86fd03d631f565b4ee6d4dbbc649009cab2e48c83f514165b8b94b6895c44f279c280839e78ce28178ae6de46748a789e453865570483ec6812d42e85a421fc37918b00a883924d024c6e99b7a2a966c0009e17dc9f9fed40f81c77e28139218e4ff9815b9cf23340a01c907b9140201038ed402fcafd28386464e4fd33c50272bc60032609cf00fbd024f722dc66f24822ddf972f8feff00e280f69b24844919cac9ce7de83a447f30ded823007b50459d6ecacb528349b979127651b1dc795f1f3f7a0990148054823dc5015d491c0a0c3be337c2ff00c489b5ee9c87172016b9b541c49ff5a8f7f71eb560c1fc43e0a47e1aa94277310431f91fa551c1727f29ed409b641c86e31839a3454805739c1f6a026f1fd740f64665fc8c31cfde82db79bb40e9e8f49b62eb7d7e8b717ec832c91ff247fa1dc7df2281bcc9369d671493c422b7911654c1215f92bb8827bf068624ba635392df5eb4b9924558ee5bc19b71cee43c6dc7cf34c657be8db0b0b9d0f51d2afe668934dbf9628ddb8c2b8c0073f3a80da37546a7d25174fd95dc125c69f7313ee5655dfc313bd483cf07b1f6a68d5b48d5ec758b612e9d7293211c8fe653f35ee2a084eb9e8bb1eafb3582fe496278f3e1c919fcb9f97ad03ee8dd017a6741b6d3229dae161057c5750a48249ec3eb4139238568f6a9e7b103b5037934cb3793c610a2cd9277a8da73f5140ee38f6280c4b11c65b934023006d50050030e4647de80c846de3b500fcf9fbd0197273ed4007b91400e580c8e45074a82400e72682b36fd2162b7f25ddc09af2766ceeb872db79cf00f6a0b3229550140e07007a50092db860673de818df473c862686dad6470d9cce3b7b63e740fa1de6252ebb5bd81cd00bee2d800d003a6464004763ce683ce9f1cbe1f1d3a67ea1d1a30b68edffba814708c7f9c63d0fafceaca31e6dc71e1f07daa82608c83819f7a1a11ce149238fd68d0a579ec682cfd27a7c3a86bd10bc38b3b756b8b93c1fe1a8c91f7381f7a034f752ea5aa5c5eb292f732128037619c018f6ec282e5a2cb047abda74d5ce9b6da80f136de4a496219b3e48c92000323ea73467519d3da5bb757dbda410ac90c77c23058f99007ee7ec31416882ee47d23acb5185caf8bab4691b1efe57fff0038a9457ee75a82f6e7429350466b482f2742c0f74241c80c38c64541a9cfa1e89ac0177d33ab3d8de28f2b5bca429f91140e2c7a9b5ae9fb85b6ea9b46b9b3c796fe040768f76ec0fafb1f9505df4ebdb3d4edd6e74db98ee216fe68ce47d280648f75e2485a44da385ddc13f4a025ddbdbea16a633286566ce55f9c8f6c502ad750db2c514f30dec428247e6340bbf04100b73402afb943ed2b9e30683836defe9403bc1e06734020e06280cafe8683a375941d841c77c1a0151b467b50159f00e4127e5402872371040c5046eb5aadbe9b1c02e2f6dad25b89047099c677b7b0140fe3f1010afc803f3018e68160c3041ee2823f5dba92d34db89a1d9e2843b03b6d05bd013560c1748d57aa2797c6b35bab78e6959dc47231580ff336dcfb03c1a58364b5bbb7d7fa7b7427f1f673830c8664285bd1815238fad20f2c7c41e979ba43aa2e2c1cb1b663bede438f3a13c7dc76fb5515e9065b851f7a02950002a09c51a1b83cf14176e90d3645e9ad7752752aac23b3439c066665c827e944d29a6410aea725c4567135bd840d3c88a723728c29c9efe6c50d3ee9545b0bf8ef2e6e3c2fc2c6f72f2920e5f19039ee4938a9a875d03278377acf52ddf867f036ef71923932bfe51fbd3475cdc369df0db4fb389d4ea37970fa9cc0b00511795ce7d4f181eb4cd2451755fc45ac16d637381b14ca36b641dfce723e4053170d6cb52bbb362f6d3cb19241f2b9029862f09f143549ba7e7d2eef6caf2797c66ee17fdfd69862d1a069da7dfdac579d17adcda5ea9e1a992376c4723e39e3b024fd7e94c458ac3e25dee8d31d3bae74e7b79002bf8b8549471db38f5f4ed4c165e943a06a328d4ba605b4b22a1523c420c64fbaf38a82d36f0ce7cf7463790729b53017e940e0b0ceceed8ce0500e1b70daa08f5c9ed41d271cd0132476e7d7ff00aa069797d2411168ed9a41fcc858211f73c5075acb25ca6fb82aa31e58a36c81f561dcd033d42169e158ac64b98151b3981c2966cf639f4a064c7a8ac55e4865b7d493701e1c8e52403ea3cbfda827e390ca3f2c914aa81991bd281cdacc2747215c60e0ee5c67e940cb51b0b2bcbd824bfb08ee1a252d1caea1821cfa67b1fa504982b2283ce08f518a08abb82f6dd0369a5662081e14ce40c7ae1b04fda82275cb0bfd4f4536f7114589a5412461f3e4ce4e0e060f63f6ab2893d3b4b5b5b78e22ed22aae3cc3cc7e64fad3449a22a461500007602a0cd7e3b74c26b5d2ad79147baf34eccca40e4a7f30ff3f6aba3cd0543267eb5427b86f1f4c76ef45d0eca1ad5ef224d13e1cf4fd9b22192fa67bc955f8c8c617fba9fb510d7a6ed3fd43a735e5b54964be658c048fb6cdd9e7eb8a186bac97d174e6d22e23437b7ac26b95e77c68bf950fa7279e2b22dba45b59e97a669fa4ea36aeff89cea9a90451fc355ff0096ad9f4ce3f41570675d4fa8c77da8de5cde5be26bc653171ca47dc1f6c9fed5562b97f70276808da7c24f0c1c63804e33fa8a2928c0e0383c8f7ed41d92a41393f4a2548595c2c37493db4cd04e8a08f139566edfef3445b6e7aeaf65d2df48ea2b11776ae02a93e564c772adef409f4ee8ba9a21d73a36fa579ad9f325afe599171ed9c30a960d5ba0fe2843abb47a6f510fc26a4c36890f9558fcc6783506a1147b510024e30339ce680d2c6ae9861eb9a009178a0205443b989e39cd01d8075e3047ce80563057ca381ed4011c4531e503d85013c91b804a21279c903341131cda8c3abdc8650f6d20c4321232adec3dc504bab2c113c9293bb1963df3408dd4b75e1efb2856463dbc43b4631fad047e9177ad4fe32ea16b1db4b8fe1aa92571f5f5a0916bc8e0895af5c46c17cd8c9ff7da80f6d736f7f6915c59cab35bc837238ed8a072a31c1ef4062870718a06f7702dc5b3c522ee4752ae0fa8230683c75d6ba3b74ef535fe984929149e4278ca9e47edfdab42058003763ed409f88ffd6dfad06b1f12ae612fa0c76e0b471e9916d23f973eb4158d3efeff004a984da5debc1295d8e4018dbf3145d583a2ad96f356bbd7f5d90dc59587f1e79a6392f28fcaa3ee47159444ea3aa5ddfc7acf50dcdc344d7a4dbc317f52641200f6000fdeb41b5ef51d8eab672ffa9e971c97c11638268e431a46000012a3b9a351567db823b11f3ef40948e428048207a8340ab48ae83cb83ee0f3428a982719edf3e68c9cc97d3fe15ad8c9be138f2bf38e7b8f6ef40f7a5f55bdd3f56b46d3649127f1405f08e7249c76f5fa50689d48ba5f545cdcbdb462cba9206411b2b055bb07d4fb1c73528d4fa8f52d62cf47b6b8d2e65fc458c49f8a818795c151939f977a823ba0fe253750eb7fe937b04293f9f6c90be41dbdc7ff006283473c1efc1a06f69776d73bbf0f2aca32572bc80470450284a46dfca19f819f5a04e799614def26c0bdce09cfd85045dc75769d12dc3c3e2491db0dd3c85195235f7c91cfd066ae0cdba9be31f4ec61a386c1ef9d4ee473e45cfb1cf34c101d3ff1ac9d481d46c628ed24751881880833f988e7b0fa5328dfed2f2def2ce2b9b79925b791772ca87208f7a60182ee2b95cc0c48f53823fbd40ac658b30f4f4a086d4ee1d75bb6b78f4e965596366fc5211b23238008fde81f43692da5bc30d97831a0397dc09e3d714087506bf61a2c4cd77324726d2caaec141f9fd2ae0c435bf8c57173ad7876f7a2daca10489121244cdf319ce3dbf5a834fe81f881a6f57bcb6ba7c53c72c11873e28cee1db391dbef4199ff00ea4348116a5a66a8a8a04aad04847a90723f6ad7d18c312ddc02a3815423ba0f63fa541687bd9efe1b533b3c9e0a78473e899e318a09bd0ba6eef543e3b2bd8e9b10064bd9e4da001dc81401aeeb29a984d0ba7d5e1d06d4e6594f06523bc8e7f5c0ac8af752dfc17d7090d9218ec6d9447129ee71fcc4fb9cd6842ab10dc0014f3e5a2c1704b671dfdc734525226dc939e283a362c7f940344a380393df144733e2276e38f5efcd01b4bbbfc3dda4a9298a44395902e4a9c70682660d4265d62de40b1bdc1545054f95c8fe627df141af7c3af8808f3dd68dd5d2a45765884b8908d8c3b6c27b7a77a945d7a5fa474bd2ba8e4d5748b28624955d5d8b13b79ee9e983d8d40a753758c7a46b96f6114725dc92279a2810b3a64f94900763cfafa503fd3b59b79ed84da34713c0cd890f0a158fa1f981de826e1b548959fc4dc5cee24b6467e59ed4101ff19e9f676baa5d6a72c50adb4ad1ac790ccc076200f7ad41e7df881d79a87576a5f87b0f161d381db1c2a36e7e6d8ff3416bf87ff082c6f208ef7a82f22b9761bd6d619785f6dc477fa53705ab57f83bd297ceb1e9caf67708db9c4526723e849e3e94f212dd25d117fd29a8c09a76b534fa39cf8b6b71ced38e36fb73417f52e64548e34007e673e9f21ef590a1c918c90718dc281a69b68f67118d9da5058b798f6fa7fe280daadd1b2d36eae70710c4d263df0a4d583cc7a668fd4bf11b5837d7c93dcd9a3146959822a0e781f4cfa55161e9dd7fa67a4f55b9e9aea3e9f81fc09ca0ba118998fcdb2338c7b528d39f4cd2ba76e2d357d292df4eb391809963420ce1b1b576fa1e7359119f1eb4e17dd033ca172d6b2a4df303383fdeb5c8f2eef3bce4e0e335684cb0c9f354160d36f64b0baf16072b91b5f03391f43c51aab23a5debe91c4fad4d73689e6fc3a290573ff4f03e59f4a3280d67581ce916567f84b58ce0a1fccec3d58fa9a084de08c90464e4d1a8e419059b201f4a05630a176918efc50176293872c17bf14042aa0125b03db14046c60b60123fde6827fa0c68edd5365ff11346ba6292ee64194240c807e59a32b7fc51bfe8bd5ed5db424860beb62b89218422ce09c11c01dbbd0660ae110bf1bf2154838dbebfefeb41a8f4cdac7f117458f4d9ecd2df53b4cf81a822808c47255c0f7c8e7fb54a2ec2cfabba3b4b4b8d3af12eedad40926b0f070a13f9b633649f7a82eba6ea4357d321d4ecad512daf20df26e016507fa4fbfaf3e98f9d067dd2bd2faac9aa4d72d72d1e9510ca46a7631c7a320e18f1dfd7bd059afb7da816d23de4ba5de211346a1e4785f190548e4648c63b64e6b43ce9d5baafe3b539c5b452dbda46c638a167cb281c73ee4ff9340e3a3fa5f5aea4ba58f4bb57dbfcf2b02a8bf7f7a0de3a5fa0b50d2a2d92eb3e048c0a97c867dbedcf6a944e5cf4f6b76d1b3d8ea42795066266c87c81c65b9cfaf15048e83af3cd64abac08edaf01546c38dae4e0657ee6826e5b892de3702292e2545ddb55700fd0fbfca81c4b3bc718716eef9eeaa402280d14ab3c0b2c65c06fe571823ed40df56b217fa6dd5ab9216689a33f2c8c558307e83b8d77a37aaa7d22f2512c28768800c9954671b3d33ebef568d0ef7a7749eb0b5bbbb162d657b32b46d2e1564c8ed9c5644d1b0b9bbd261d2a440af6cb0e2e5b1e7dbc1238e0f7a0375b696daa7496a3a4dac8a92cf078685b271db04d391e40d5ec4586a1716de2a49e0c8c85d3b120f715ba1899173ff305413070abd89cfe9f5a2d3ee9c8639fa874eb6b804c52dc46b20c9f302c3bd11e84d47e1af4d5dc6521d3e3b662c19a58721ff5a9a321f89bd27a374b456d158dccd34d333332c9b4b2afbe47a7cb1f7aa33d2bc0d8c0f1c8f6a2c14b6d501b39cf63450897380c319e3de8065031c038f7ed40d8faf1ce41e4d004876a8dc3cc7e743025c956c818028c904579e7f0e15695c9c0541924f6c00283d0bf07f42d6b48820b8d62d20b2b58d656404959e52f83c8ff00fcfafbd4a35bb06f12391a48dd55cee2b2f3818ed8f6a8158a159890f02242079147623e631c502b0db436d1ecb7458d4738038fb0a087d6eeb508f48bb7d32d95750752b6c26c905b3ddb6f61eb574794f5cb6b9d0fa9678b512b25d24bbe52b8c1638278fbd582c57ff12afaed45b5bc0d0d8a8c08a2731ee3eec5793f40450466a1d59af446293c186cd53ca0c36eab93dc649e49fbd048e89f1675ed35e301e293919dcbf9867b37cbe94a35fe94ea4d33aba6824306dc48015750d86c6e247b0cf63591a40b8dc23fc30f14138dcac3000f9d03687547f12e8dd5af816b13148dddbcd29039c0f6f6f7a0eb5d62caf5636825db70c9bc4328f0dc0271c8a090627d3073ce681acf6505ccf14d35bc2f2c2731bb28254fb8a075144a83ca806792400334049ee6281e2496408656d880ff0031f61fa50446bd76058ea1b9e21025a3bb48afe71df9c7b71de9c8f196a0de23ca7b827d4f7add117e0cbfd4b5059392369663ff004e71c51aa97e8f555eadd258f2bf8a889cff00dc28cbd0bf123a926e96d163bdb74490bca2321c678209ff001591e71eafd7a7d7ef45cde2c20aae144638033fb9ad2e1b5e69d058da431ccf21d4a5c3b4631b62523807feaf5c7a50222f2d648c25f5aeec8c2cd19dae3d3e87e944d3eb7e90d425b49ef2292de38224f1505c3f8724a9eeaa7bd0d57a60406059436306868a7803839c7ad1a158039c13f4a33a716767f8cb9b6b55e1ae2458813e9938cd07a9f42d0b4de99b4b7d1f41b58ff19b03c93ba06607fa8b1f5f619a5b8266d74a65d42da6ba90cce996dcdc8c9fff006a5a2c2635083b05ef83eb5028076341db4b1ed9f7a04651fc41db18ed419d75b744dbea335fcb0db0335f2057901c05da73c8f9d5d18a75174a3f4c47335e35da4ce418a489374254f707d463d33565d1529b569a489a17944b06ec8057d71dcd037b4b6b8bfba31584124b27e62a8a4f1ea68357f83da7ea5a76bfe0912453ccabb49194653cb60f6ce3dfda983d196cd108c2401711f9768e306b2297d73fc6d02773a8b591922693c5004bb9d72542fa2f6efde8314ff867aeeec27500b77bb5670e36ca19b1dff2e7f2fd2837ce8bd5dd348b78b552219022870d9c46e792a4f6c608a0b846c8e03232b29ec41cd0199f1410fd4b24b1e8f712c0a5e4452d851e6c639dbf3238a0afa42ba77475e4ba8470896681da45180b18da76af3c9029c8f26dc1df2b9c606e273e86b743331924f27f4a82c12280e59b008e79f6a2d4d74188ff00e30d203a82ad7519c1ff00b860d11ba7c5e86c9fa3afae6f4091e043e021270b21e01c7dcd6479ab4dd3aeb56be4b7b184cf2b301b57d07bfd2b4bad0fe25e9f6960ba7c7a55ac50cd750335ccaade7723b83b8f6e38a2207a5ba4e7ea3d93780cb616ca53781f99fbff009a0b675a5be9765d43a75a6ad3b25adb4185429b831c70303dfdfd2831eb8954ca48f3827819c71ed406b2b1b9bf9a5fc1c4ce2253238047957dc9345d122b792eee522811a495ce1157b93ed444ff0049f476b1aaf51c761345269d25be269259570c833c6077249e062a68f53e8ef0da69509d4ae225b92a04af232ab16f98cf1f4a5a266d4dbca8af13a329ecca723f51502d14f0cb9f05d1c8ee01c91f6a0393b4edfe63c8a031608859b38f97340d84d04e5846eae50f9829ce3eb400fb24466041f5e3d2823f56d22db57b192d6e61468a41c823ff0035651916bbf04ada7badda5cad6d1b72c09dc33f2a6875d25f0865d06fe2bc6d4c4d3282026cca8cfafcfd29a34cd234a10c768f711a78f1bb392a3001208e3ec69a26a58d640c832091c90706a084ea1d3eeafdadf4f86da3166c0b4b397c18f046140f5ce4d04f4702436e91c28a9122e028ed8a0a9f5a5b6a09a1bc5a135bc72cce048b3c5bc15c638f9d59043fc2db997481aa69dae49e1cb6bb643239211939e467818f97bd305965ebce9a10bc8da9dbaa2679dd9ce3d8530572cfac87566ab05ae9f1490692b9696e1f833738555f96793504df5f25945d2576b7ec16dc46792381c7b7ad5e60f234980e42f6c9c56a82ec3eff00bd4124e49700f1c646e3cd169ce9575f83d52cee324347323f6e3861ff008a23d47d4ba6a75074fdcd8ef317e2e2ff0098bdd4706a60c3f4ae8cd5f44eb8fc3e97248a638cbc73bf90483d463b373e9574685abf42a6b5649fea72bbdeac4a8d3b018cfae31f7a6895b6b29b41d30d8e9f6bbed9213e1b7a994e724fcbb5064bd7835a9752d3af75d8116354778f660788cbd9483dbb0a0cd20b2b8d43528ad2088bdcccf854039cff00e2827a0d34e9da1de896f2182492efc0976f998aa827d3d334113a74aa9a9298628e74570478bc0c7cf1da83724bb8246d3e6416b0384da61b5501c9f5c3704f152c037561a95f5fce61d3ad6db4ab950f34b331dd9f4191db8fdcd406d67a675ab4b6d325d1af248272a43430315ddec7038f6ad4b3f448bf47eb71cb69abddebf21d5e26896203846c30c8603b9c6452d9835901405660376319ac84bf13180779d8bb82827d4fb0a06f777367a75acd7170f1430a9f331200cfceae061a0cf6dac692d7365266191db0578f5edf3a6075a6c9278b3433188a467860d96fbd40fe540471409aa0c1140750001ed8ed4058e15133c983960077edf6a06faade5c5b7822d2d926766cb967da2341dd8f0727d85033d27597d62e2ee3163756915bbf8799d71e2f19dcbf2a092b88dd9a311950a0e5b70ce47fe6ac18af53f5b69da9752dd69da9ca906876e24465d9e69881c6ff005c679c0aa2bfd267a347512c93dbb5d42d90d3c800b68c9ce0ec3cfa528db74ad034db5905ee8be1ac728dc153984f3f980f4fb56453be2de8f647a6aff53796596f0aed46798ec033ce149c0fb0ad71479c9bb9dc3bf3c55a0b95f65a825150b481a407b93c0fda8a29c06671dc93803bd131eafd0af6dffe18d2ee25982a4b04603b7a9c631fad03bbe586381bc5945b96385718c827db3eb5288eb8ba934eb15fc3c535f05427796dcccdec7150637d5bd55d5362b7975aa4d0d919018adec8637807bb60723000e4f7cd58203538aefa8aeb478a7b9beba924547b8774cf8608036a80704639cf1f9855d1a7f4c68b67a03de5e5d59dad8d988c62e1c0f107a1e7fdf7a082ea6d07a6e3e99375a7cb6b3db093c727701e2360f7f53dfb50653d4130d42ee18f48b3f0232a15218936963ebf5fbd06dbf0cfa74855b9d46e04b730c6144691e12307d33ea7de8348ba6b5478a279a004f98c479247b81f5a9438805ac0be2e02e73c9ef8fbd40c2346d43578eefc40da7da1dc8b8eefea4fcb9fef419beabf12a4bcebcb2d2fa7ee0dc58492084b30236bb6467dce383f6a0b87556a67a7f4d95a0bbb5468816f0a69c78b2e072572719ce78357079dfab3af2e7a92c963b88d94abbbf91cedc93edf418aa2c5f0dbe2a6a9a0c90d8de34773a6a8da1186d6403fa48fec682d9adeb7a9b4c9d572dacc9a6c9700456e5ca910e000ecbd8e580352fb1ae7476bd6dd49a325e5a9f3025245fe961dea097523cc0919a032af039a006936c81423104649c703ef40dcce64bc3035a87b6f0c378f9fe7cf2b8fdf340a4b6e25962915d94a67807839f7a043586922b5636ec44c061063f31f6ab079d7fe19b7eb2d4efeef55d5d74f992e9a0fc3a441dcb13927b838c9aa2d4bf042c618e178efee6e18104870172318edf5c1e6945bbe1a748ea7d2315edbea3a99bcb190030c401010e4e783ee0fa56455be3d6b90c1a6268d69e17f1486900ee98ec29ccc183119419e7e55ba11f089f523ef5058363a8059fb8e31e9421b491056c01819e28d3d0ff07eea3d53a1e3b6b8db235aca63c139c0eea68ca47a9fa6ef757b83ff00bf68ad428c2f248c7a8f9fcea518df516adac74e7544f63a2ea172f1800291e6cee19ec78cd5826344e85b6bad25ba8fade5b99dae0ee11efc71e858f7e7d054a2d7d39a75ae8f7b6b00b8917f1516624b78429da327cec493db1db1d8540cf4aea28f58d6aeae2f6dd64b498082d880488d149fcea7d4939ab04175e6850a8d32de3b78e380c8de32c4db4e18e430fef543cf86fd0d691b4fabdf6648b3b2db69ce7dd87be68342d2f4fb9b5b891af1a28a2dc05bc5036d001e0eef7352884b961a2ea9aa7555c885e08d45b5bc52b61b686c120fb939fb541276bd4b61d53624d942e2f6200bc32290633e99f4233416dd3ad3f0d611c0c77b632e71dc9ef41156dd27a45addcb3dbd9c513b1dd941821bdc7b558333b9f873757fd69a85e3f813e9c7723b5d93265d872473c11544a68ff08fa75e290b42ec4e4124e70738fa5048e89f0f745d2aeadd2decedda6525c975121183c77f7a945c754d0e0d563682ed43425369403bff00bcd58308ba7d5fe13f5a05889974a9d8b46aede4914f707d88ff001528ddf4fd7edb54d1a1d56c312dab2e64dbc9418e78f5c541296d70b716d1cd6f8789977230ecc280cb7519b816f212b205de4e0843ce300f6cfcb39a0545c42cee88e0b458ddec33ee680eac92266360debc7b5056fad2d354b9b189745744be121daf27e550548ce3d4d58324d07a725e98ea2b7ff5381f5169a7579d021fe13904ee43ddfbe49038ab46e76cf05cc714f6d309232a4a98ce54fd6b2196bb7f2e9b631b2c427b891b6851db3eff002007341e5bf887aa2ea3d4f77378be381e42fdb711ed5a1554395caf1cd07617dcd04fc85402101da791421b49920331381c60d1a69bf02f56f03a925b12c162b98c955f775e47df19a32d99b518268e4491668704a79d4aeec7b7bd4a30feb7e9144d76e265697c3e2693631674273803e556087d76f35fd49859e9925ccf611141106f2e182e3241f727f5a94681a268f79ad1b1b8b9dd66b1c2b1ce9bb06361c1e7bf3fe6a096b0d3ba57488e485b52b40909c386901607d47bf7a0ae758eb69ac4d15be81a748f0a9c35cc90b2eff4c03c1c638a0b77405c5d5d45f87be5fe359a88b81b401dc1c7d38fb50586fed18ea3015790091591e447c1518c8c7a0a0a5754d8c9d49a8d9f4ee9dba0b3b5224b9692327728f627e7c6682f9a7e996b6b3a8b6b748a348820c7720761412c064e3041ce282b5d4bd73d3bd3f33daea97ac2e540dd0a292dc8cd043c1f15ba2a7923b65bb910371b9a12141f9d02edf13ba2ade56857551e5e77244c54fd0e280746ebfe99bbbd655d56dcdc9ce08465565f4ee3bfca82d53eb3a6dac3e25c5f5ba646402e33fa77a0aff5b74ad8757e9ca972844aa37c520fcca7d3f5ab067bd369a8f467544d626c98e9f7118f0200e4465c903049c8c9e6ad1b24334b6fa6249716cab20037c309dd83db03b5640dddac3764a4f02cb1103863919fa7a1a06d6f600c37162911b7b252b87dc773f1927393f4a079f868edae1ae6328a8b1ed38e30050226e85d5dc1f879011b3c47c2f604719f9d01eff4f4b83e3c6b18bb452b1cac9b8a83de80b16e8208a3b7b58e1407cc061427cc0ff1560ce7a8f592d69a97504cad2dac01a2b53900c3e9e51ea58f727d0551e73bfb86b99a49a46dcf21c96340dc13804f20f6f9501c0e3b8a0963316fcc4607007f57bd084d64dec01200ce483468ff0040d525d1755b4d4206ff0095207c11dc67ff0019a18f56584f6daad9dade4211e39104a8ded9152b235cd8c530613229c8c1c8ef50472e81690ee00322b0c100f0debdbb7ca8111ace856371358cba85aa5cc407891ccf83f2ef4048b4ad2e59bf116769672c72f99dd1437239078e2824a4d3e1b94559234110e781839fa0a0561b38ad532a12319c86c6307e740a9732a3a00cac870cd8e0faf0681be8b6db965bb909df3c85806eeabced5a09523647e6e0fef419a6adf116daf7ac34be9dd1da686e7f1ca2e243b76320ce57df9ff1560cc3e3f470ff00c78255b842b35bc6c4af9b6e323d3e95467b6365f8dbcf062beb68c119595d8aaff6e282422e9899b4f6bb5d46cda2562a76316c1078f4a0859e1b9b762c0bf94f0e84feb4125a57505c58ea70dd5d0174a986d92b1c13f6f5a0de7a5be366877260b5d42dee2d2423124a487507ebdf15289dd3fac7a7bab6feded74d61733473acdb5a162142ff00313d81ed505fa58fc6d809380c1b9f5c502e0e05040ea367a85dea454de2ff00a610375b04c16c7a16ef8340b5f6930dce9375636acf6a278f04c5dd4f1dbf4a084e91d06f3a52dee62bbd4a2b882494ced3c8a448063b63b638fde803ab7ae749b2b3096d792c93c8c109b55dcd18ce3710473ffdd043dc758dc5869044565aa5dda4c3c2b7bc78c1f14e3963db03e7c0ab066bf1327d41ba76ca6bc48ecad24c456f6b0c87cf8e4bbfa138c0fa9aa3297c83dd4e28395811cf2680a5b93c7ed413cd1ff0f3c797b8031406645236b0508406f30e68ba49c051b97d0e0e7d28ad57e19f575c5be8f269515dac772877c11bc464dea7ba8c739ce78f9d3193bb8ebfea2bcbd6b5b6b8b58bb7f13c2f0ce31cf0deb4c0f2dbad6d743d2ee99efae752d6c02a86e0054524f6383c7ff94c0b6af274c75149a46a5a82c46f1e1479fc3190bd8156fbe7f4a960bf74e9d253f1167a3ac09e0856610e3041ec7f6c540f67b892cee7f8d18368232ef2af2508c7047cf340ead5bf130accc9b1186541e723d09ffc5033bbb1b82d74d6b37f1244daa1b38073df3f4a08eeb1d3b50d4fa6a5b4d32f12cef1902ee73e523d476fde8306eb0d3fabfa4ba92c278af67bb7281606472f90bdd58558253a6afb40ea1d62283a8b461a66a6f931cf6a7c2466f7cfb939e7b5515fbed3747b5eb8f06eb78d35080a2ec9719c76f98049a0b4ebdd37d1bad869acbf0b03c5c16b29444adf50ded41995f68564a263a66b31cd02be152505493f51c1a088bab69ad1bc179e320f07c37c8a0692b46c4995f0381db39a0b2fc34e971d57d4705bc8db6c50ef9dd97b81fcbf7381528f5ae97a1d8e996d1db69b0c7648855b10a81b80f43c739c54134147b9a036063279fb5046e957726a0f2cfe04915b06db1788305ffeac7a0a00d72f8d9c491c06337533050ac7185cf2df6a06da2da4293488f34973328c34aea428c9ec3eded40ee7d2ad249448f6b133820ee2833df3fde819ea96897461b05b87815f2ee919e5d47704fa039ab079b3e326b70eafd4ef6d6650d8e9ebf868b69c8247723efebf2aa280eb9193ebedc5002a124e015340018fb8fde82cf32b1603d0678cd02406dce3008e47ce81b499c331383c9c9f5a2e9c69377369f7d6f796a4acf148acb83fb511e91b3b3d0bab745b7d45acedd8e3732b71b1fd73f7a5a19eafd09a56a0a96b1c705b49c48510761ce4fcfbd4d0d752826b2b583476fc3daacb295b79d768de8a32b1e71f989e49f6a7d14dd1af5ba275a45b8b093c054492ea769092373765c1da4679fbd306e36ba9595fe9f0dcdbcc92c33e1579cf27d0d409ea178f68521b6b76926ee8a7853f7ff140bc768d78f6f73748d1cd103b543f0091cf6efc502f7319dac194371d8b6326829f0c501d7ae6fa568d5d4942c806d4db81839f53c8cd59456fae6e628749b5bab8b1865b08e4726588ec11e7f2e49071c93da9a31dd4341d675e9a5bad374f9858162d0b4ac70e18f0573df35a0c759f87bd53a404f174f965dfff00f479b1ef570576e34bd4b4cc0bdb3b9b7258a00e846e3f2a94376475cee4914af7ca9150685f09ba61efb52fc7dd69bf8eb7c158d1d0b47bb38f37efde968d6eeb4eb5e91d6ad25b660aee59974db6881690918e31ce39279e062a5a34bb57b88adedd1e379679065d80036679e6a07e8391bce7e940c659ef5afe1286de3b16f2b8903094b7b2fa7ce81eb380c4260ed193f2a0cd6fa5d4a4ea0fc7bdadcce923158a3039db83c038e3ef41a0e96b2ad8a35e009291b8a939d9f227e43bd590436bbd6fa269202c974b7123602c76e779624e00e29833bf897d493e896525dbcb2a6b5a9c3e1456b91b6d60cf989c7f31f7a60c02490961ebcf3eb541308e39e067b507007b96007a67fb50178f97eb4165ce18165c2927b773fad023202d9c8dbb7818ff003408300b87f2f1c107d0d0c15a4f2e339c90467f6a18bdfc2cea8ff4bd561b4b9ba686d6e64552c4f954e7d7e46a60f4688d240af1b2bc6cbf5047ca960617ba658de1b792f2d94a5ab33461b18524633fa1a81b5c8b5168967369d23c0e0a24622dc981d81c76aba29df0bb48d660d52fceb88d069f04aeb69130037127f37b9c0ed9a8350781240bbc06da72323b1f7a0eb8816e633192ebc8c9472a78fa50349b4c83c068e24f0ddbcc1c13b837be4d055b57e98b996d4db5b4a893dc1e6620b6ccf2c467efc504ce97a38d3f4d874bf09af6d46e2f25cb82724e791db15650a43f878b51fc34f3da8f132b6d6a98c80a39ff007e99aba249631b58b9047239ec3e55368aeeb7d2da6f52c0eb7f16e87f2c6e836ba90724ab7a67b55d115ac7c3e8aed2182def4c56a14096368959a423d77e3229a27b41e9d8343b01069c8a8dc9660aa3713df3c64d4a1c695d3d6b67a8cba94b9b8d4e61869e4e4a8c636a7f4afcaa09a485519caae19b966f7a0435196582c656b74df3e308beec7b50629375775b691ac5bdb6b16d6378779f019b00a31cf391c9c2f1daae0b35ef52f5374de88d77aa45a6cd25ddc0108694ee2188c28007603d6a0d16c92430a4b2ed3230dc401855cfa0a0a07c45d7b5db9d462e9ee960b14b2ee134ef8c850012147ec78ab0670b643a2efae753d72686e6e2da211db42176079c8e768f65e39f7aa332d6f58bbd635096f6fe6692695b24f603d801e82823cb900ee00e68006460051dfd680ed9f0c905b713d8d006d5f5419fa505a18f94e40501b1b81a04186d62402c87be3d6810b81290aea8467201231cd1749dbc437f9f1e201db3de8ba07dc0175c027f28a335b17c26f888d6b6d0e8fabf892a29c453b1e547f49f7a946d6424f08236491c833ee0835073294888894120700f0280813c40a6711bc8843e00fca7d3ef40e41dc081f9a811681c6f7565329185623b7e9de812b3bcf11ff0b74563bd50494cf120071b97e5fda80d7577046c9019d5669dbc340324eec67fb734103d5da96bf67a7cf0e916f6e2765f25ddc4c11107ab1c8c647cce2816d3ec7f0f6564cae6e67da375e6d52cc4af2e4fb13ed4145f899d47b3499f4bb6d46cda49b69b92921565c3648e3dd40c81cd5c0ae89f13ec246d3e379ed2d6da180b5d34849da1780b128e49271c9f4a60ba685d5fa36bc42d95c324ec7090cc9b1d87b81ed50588958977cacaaa3b9341c655f12348d1dcb8dc1946540f99a019e2134454eeda7bed3839cd052fe2136b536b5d3563a1ca53c49da4b9507198940ce7e5c9fbe281c6b7a974cf4ee4ea7242d76dc784a3c595b3e9b464e3f6ad0ac745ccbd4fadcbabea42da56959a382ce7460d6b1a93c01f97272093ebf6a82f1ad6af0e9da5cb3cecf6902216919f82aa3818c7a9f4c530649a9f5269ba7429d472239bc991a1b0d3c3152880f0f23039e7bf3de90635ab6a377aa5ebdcdecef2c9239e59f3827e5ed54302195fcc38cd01245395c1f5f4a05b606538e483c501b6939e3b5077860f3914165754c33e549000dbe87de813b820c27fa7baafb8a04a69c98e281e42618c795338033df1f3a06c03e4e029247007ad010093c35674da71f977640340081a190658e41c820f141b0fc33f8926c218b4ed609366a02249bb2d19ce3ea4528dbece68eead926b7916689c643a9e0d643387521fea2f693c2d6efc786ee46d9bfed3eff2a04669edf5295ff057a60bd865309246d3bbbedc1efef41d63a8dec9ab4fa7dd4510fc3c69234ca186e2d9c003b7a67bd034bad0a5bb96e25d575267889cc1b54446d9bd0a37bfbfbd02925945a72cba8dddc48b3f87b1e58f23c623f292bdb7fa7cf38a0a5750f54ebba56a9a67fc516b6d6fd3970ea9234677c8dc7f38f6e4640ce282d1ac4b16bfa72c1d2bad430cd1ba822061865f5007d3daac19cf547c189357d561bbd3eee683c62cd786e9b73337b8c7bd512bd39f06adedec2de0d5ae639da372e6485363107f97767b505cee755d03a5e58ac228659af123184b7b733322e38c91dbf5a943ab3d52e64b49ee755d2e64950e238e35f10c884e17cbe87dc540e6d7509a4f110e9f7566a471712850abf6ce463e6280bacea36fd33a4497f773cf32c698dcc4beee33938edc7ad05534aea683ae61d64c4d2a69b6b88d16d5ca5c303f3e386cf61db140e27b5e99e96b64bdd562b6b30aa36c6c37cac7dc9eec6b42c1a66a962fa70beb6b516d0cbe76322f86c78f6c66831bf8b5d5d2dfa35a5dce60b1933b6ce3c788769f2b331ec1b8fd2831b79649984b239773c1dc68129725c1c640e73400ec781d8fb1a03c4a85d0c8582640257bd01e51fc42236263c9c67be280429c6037eb405dbf5fd682c2a0bb976cf07d3fc5009279ef8ec4e68193a9902b28e7dc71fb501d95b098e0f6dd9e0d0049131019b047b8390281bb292484e47c8500c4f242c3076bf704704739a0be7c3febfbae9a5daf23cd017c7e19fb107bb67d0f6fd6837cd2757d1fab34f4f05e37dde630b1c3a91edf4f7159103d6eb7da65fdbdf59dadb5e2460ac876ed9e1c8c060f9efe9c8a0a75cfc42d5742d2ee5a7e9dbb494b6d6b9bc930cce4f940e3cd81ed4160e98f88315e689fff0022b57664199cc5196f0c7a164ef8f98cd0589baffa68590985eb15c0db1985839f6c2919340b69d03f5285bdd6f4bf021424db4329cb153fccc3d09c76a090d3340d2f479a7bab3b38e2924e5e451cfd280d7dafe936f6c5e4bd89813b02a36589ce318a0358dc35cc4e17f9bf234cdbb78fa0c607a7340e6cec20b1596610c6934b8323226379edda81da8dcb9ec40a042f50b5bb21645473b58b11dbd7bfca8304f8add5d67a9ea8ba5d8ea72c1a4d8a952f10f2c920e368cf71e99fad5833dd0754d6ed66bdb2e9a91a5babb2a310465a57c1ddc1038e7bd5171d3748b8d46ee1ff005298dc6a764c27d4eeaee7fe1c01795881c9e7804fe940dbe287c4b6d75a1b1d1c986d62277c91bf131f4c0f6fad0663737135d3b497124924871f98e7803007d2811dc5b83903dc0a0333f03be7de8122df2c9a05a11e5f51f7a05ce7071804fca8033e5da0734020b0183bb23e5416269577ed0e5323078ceeefdff6a03dbcd62914c2f629a47c622689800879e4fbd046f9d8a2a03e31385c0e73da8b83ca590947dcaead8208e73da8849b3e19ce704f7c5015586d006431f5cf61f3a04ee586ff002481c8fe6191408f0011eb8e30682774dea9bbb5784492ca6385832e1ca95e3d2834be9df8c312e2db5eb4375080337000f1303d18763591a469baef4d755989ec6f6dae5a23e20b599406dd8e080ddbed41272f4dd8caf1c86d163910f9595882a3d718a035edd695d3b6a926b57d0ac65b10b4e06eedd863bf141077fd7af2782bd3fa26a1a8891d57c630948c0279393dcd04cf5875258f4de9f0cb7b7b6d66d2b81ba752d85f5214724fed41036bd79d2fe319d7a8f4b9c81e58de2f04827b9ce09a07a3acecf54b790685ace8697606009e52c377b7f2e682b097d7d36acf0f55df5edbdc0977412468cb6ce3be10af3c63b9c8a0b0751f505be9690dd5d752436f62a3fe4c6448f3b7b0c64e38f615734651f107e3045ac42b67a7693018633b965bc1bc838ee173807bf7cd33065baaeb1a95f2c11dfcd2bc51fe48880aa3e8a062a8b059f595df4ae9a74de9e9ec499d43c97b1427c6e47e525bb63e4282ad3ea3712893c599dbc4259c1627713c927de81043950df97db1406da8411c92063be280230839627078e79a0390a71b5bb5003a8c1232338e4507025573e9fbd02a0e41dc0e680c3691cf714053bb34160895dc16f291d98d02322aa39f3e14707ffaa06f202a5bb0c7201f4a343aca51090497efdfbfce89840c8db8e46573923ff14410b00490d9f5c1a0425dd8ce4673e873cd0265e4dbe7041ed814009b8cbb8e5863bd07163b7716e0607b6698060b96b7b9478dc8643918247ee39a60b7e97f133a8b4e0c63d4ee597380923970a3ef4c0e13e25dfcfab457ba95bdbddb212016501867b9cfbfda982f907c74b282da34874a9048aa479c83838edc62982b7ac7c42d235cd67f15ac5b40c366418a2cb0c1c81e6f5e31db14c160d035de8cd4a3f18ea96562cc37359dfe9cac887fef039fd6b39446f56ea5d13a9dca4579a922496b1975b8d22dfc3566cf9557230703be715ac1431d4d2275325d7fae6b4f6f182a93ef1e32a9f41938f6a60afeb1a95c5fea53dccf772cf2c8c489240031f627e7565c0d67bbf160487c1801073bc0c31f91f953420f2bc8c7c52cc540032738a809905c0f4fa501940208e73df34028e703938a0577ae013f4a001300db4f03b71407461ce0502dca8c9c7dcf6a003fafcbdcd0070bc1e0fd734070db467b8a04cb9c9e68274b93bcb1daa40200ed4099765249ec476cf340849b8b264823bf34689ee009cb671df1409bc8e8b8e770e3ec68984d9c953cf97be2860b248caaebc107dc67f7a184c31232db88fd451031ce50e76039f5c8045026efb8f93279e0fd680b239504f0483d88ef409ee25bb90c79c0e050151c6e21b39ce783eb40adbcc2cefa17bdb61322387781c950e3dbdf9c8a066f28790b22e013db3dbef54726081e63c6460d34191b1bb0720f634060e7600412c781502409c8e3d7b500ed71dbef8ed40243f181c0a02e5d4e0fad006f644e4819e3b501f7e3049e7b501bc43b4e391da80558003392d40a23305e320d02e64cf998e1bf5a032b0c927b8e68049c8c8e71c6280377043118f4e680bbff00de0504ddbb3128371c1c64668024e59f3cd02521254e4fad1a2107e48fe6a6809ddb9e78a029e1463d05027ffc744a6c3857c7b1a205ff00e637fbf4a02b12b1794e39f4a02024e7249ed409924720906800005173fd7404989698ee39e4f7a04cf723d07a501fff0097ed406ffe36a018ff00281e99a037f4d0731f3bfd28007e53400ff99a810248c0cf140bc60123233cff008a0557f9beb4056eff007a07109243e79a03778b27bfbd02b128c27039a054001b818a06609de793da815006070283ffd9}\par}
433−{\pard \ql \f0 \sa180 \li0 \fi0 Here is a movie {\pict\jpegblip\picw20\pich22\picwgoal400\pichgoal440 ffd8ffe000104a46494600010101004800480000fffe0050546869732061727420697320696e20746865207075626c696320646f6d61696e2e204b6576696e204875676865732c206b6576696e68406569742e636f6d2c2053657074656d6265722031393935ffdb00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffdb00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffc00011080016001403012200021101031101ffc4001a000100020301000000000000000000000000080905060a07ffc400231000010501000300010500000000000000060304050708020001090a11153976b7ffc400160101010100000000000000000000000000060800ffc400261101000102050109000000000000000000010200030405061121b33134365154717475b4ffda000c03010002110311003f00a90cf388f366a62aa720ed6ae07f96901f3831d973452b8cf36fe3570fc908e46d466433e5dd954f2e96992d9e498c7753faa44916e016ca91cc7d88b38fe60a5b97737defcbcc539c98d336a57f4fc2ca9a486bf07ab575ad9a3af4df221d8215e36df86c4504ff0024574551b3d687ee0575757b3ad64e311ee62bd94158d37e24198c43973099f1fc0c41614d950246513a081abf76cfe7061f6863281e6352fd1670949c148dd6dfb0d25f5b3689b1d5c965b0eacbf4e0932ad28e22ab9ae945633f4744bd3c8cee0a7fdf085b9000f449c5f7afa30b83e0b6fd7b0c8429c9467ff9715347c891e25fa24a205861aa715e6a09bd0488237dc2723414d9891381524e8ca7c0894664f835653631ab55ee7e3de433e4ff001b30949124e4c10c8b6ad0a479b3f9c937b2cf5bc0095ad600a0a41a0e9faee174a1c605e161c6c7a313539650b0113190f1a8368e60d5b24f30ff008ea7f0bf867fa6595feeb6978f1fe0f9c26177f4d63a51a9235184750e7d18811339cd000000c75f000e00380380ae390c350def826ed42ad051fa6f501c50f9b699c3b69cbeb76476d202bf3ac985b6e0e968be66572893e6a744540bd9722e5c87956848629bc2559306bd113e8653d3b6aff651dfad7a3ac8b02958cba02a93ccf525757039bae6cff090e1d90688e8aa233ee86a4c4a3e0586d6b2340522e47dcb7d0046d8a5acb05a123ee25d2b230b2ada6e2e2f9ede3c05202520ec2487b0d56562529d8b3393bca76adca4ec1bca508abb001babc007915d84fe3dd14e207e3c62f8379da2a3b861fb6629d28dba53b6ea388ebfed866bf6dfb553455e91ed547ae92e9445253a4fdf3efb4f8ebdfbe7d3c78f1ee0bb9e13e358e942a4ed49e22cff00eeb35fdd7ebfffd9} icon.\par}
432+{\pard \ql \f0 \sa180 \li0 \fi0 {\pict\jpegblip\picw250\pich250\picwgoal3000\pichgoal3000\bin ffd8ffe000104a46494600010101007800780000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc000110800fa00fa03011100021101031101ffc4001c0000000701010000000000000000000000010203040506070008ffc4003e100002010303020404040502050500030001020300041105122106311322415107617181143291a1234252b1c115f016336272d1082443e1f1265382ffc40017010101010100000000000000000000000000010204ffc4001b11010101010003010000000000000000000001110212213141ffda000c03010002110311003f00dadd18a10a704f6a95ccc57e37750782b0d8d9ea0cd32e7c5446e07e9f4ad723119a7b89e61e348f260719278aad613cbb640002938c76a182b264fc87bd13009c0c019c76e3d68a072e1cf6f4cd502d330c28269a61bb39c923923d4fad44c08dccb95cfd28b8280769ee08a263891e1808739e4f1d8d149392172cc714050dbb9fde8960ed8c60b79b1ed44103b05c331dbdb1dc5026ac1946d20ff8140aa631c773ec738a0346a003bf93e9cf02801895e7b9a01886796c923bd0090a06393c76a0142003ce3d86680d8dd9392303f5341ccc1b3cf7a2c812c37e4923d381429757013209fa511c18146c9247a0f6a007900c0c671c6280854e086c673eb45c27c038fd68aedff2fda836ef881f136f25d5e6b7d1262964aa02b03f98fbf153131935edcc97576f35c33349212cc4f39f7ab26186dfce5b200f73451f7600dcb8cf27e7400c0b291914046c9e0718fde81371b8e7273f4ef4007691919240e714097f31f376e7b5008caee27807b0f5a02c8e1b3c6d27d33cd0201d839523144d1a149ae084b78da47638211771fd050d582c3a0faab5119b6d12f8ab1c06788a0fd4e2ac356fd1fe08754ddccaba849696309e598c9e2103fed1dcfdeadc44fea5ff00a7f956366d375e492403ca935bedcf1eea4ff6ac68a55efc1beb3b552574f8e7009ff933a927ec715bc82b3a8f4d6bba5ca1352d22fe061cf9a0383f71dea5119cc6c0baed3eaac0f1fad40897dcc3d81f7a052366c1007df3400f21edefc5008c28f30c9c5170ee4fc37830086395250a7c66770c18e78da31c0c63de8609b41f7c515c5172a30c3b76344a3e377cb2339cf7a242aea89808cce368272b8c1a2e107c672a49f5c1a181c9c7ae7da8a2119e7b1f5068099ffa68258a132062d8f9e0f34059502b61bf2824e681bb297ced2a71efda80f19c47b9c77fdbe74057c13e539cf3c1a0eeeb9c73f33405ddb4f18249c1e28062b79ae242902024465b9214614649e7bd0362a7249eddc513456e5720f38f5a1a98e96e95d6baa6ebc2d1ad1e65521649bb469f563534d6d7d31f04347d2a2fc5f535db6a0e83718906c887cbbe5a9a8bef44dce9f731ca9a2e89169d6d6f2184b1455dc07b11dcfeb4d16f119c649a681285b03d3e5500f87820ff006a0e098191de80ac9b8904647b55d11da9681a56a31f87a869f6970b8ffe4883629a289aefc16e92d441682da5b098f21ed9f033f353914d19b751fc08d66cc16d12fe2bf45ec92ff0df1fdbfb559ec667aff4eeb1a04db359d3ae6d40eccebe53f46ec7f5ab82263da7dcf3eb5174e5181076918c7de869503232491ee4515c1803824f03b51287f30e0e7d803449494832c157278a2e8c71fcb9f9d144639236824d01e142efb1768cfb9c7ef40512a818de78ff00a682518e7cc30ab9e00a02cce9953247bd41e467191ed9a04205ee99da4e4e3d283a524b0427b5026c18a8e082067db8341ce0e39ed409b6502907391edda80f2dfdc496f0c124ac6184b144cf0a4e338fd2894f7a7342d4ba9b568f4fd261f12571966270a8bfd47d8511bae85f02b47b7fc34bac5d5c5dc88a0c90ab6c8d9bedce3ef4d1ad691a6dae976a96d616d15b409f9638d70054a1dbc68ea51d4329f4619a8022b78e04548515117b05000a035c5c4702a995c26e3819f534047bcb68a458cce866719540724d02e41c0f7a012a40f6141cbc8e7bd01719e38e6838af1c0a04ca8206d3cd037bdb082fad9e0bd8a39e0718649141047d0d5d18f759fc0cd3af164b8e9999acae4e4f81236e898f7c0f55fed574615aee83a96817ef67abda3db4ebdb7f66f983d88a061bb8db9e3d45165076db83c1f950a53780d8247c80a2398f182724f1c7ad080c608cfa7a51a0062adc7afbd0130173bb9c5070f071cb37e82826106e8f615e01c9e680d6b35bc534be3c1e3831b2aa962bb188f2b71df1de819ae4b1048c7f57bd01a58268e332642ae0704f7cf6207af6a01b99e17b7b6416e227407c494139909ed9f4c0a04a4e501e0f1eb40d263e53dce7fa682c9d0bd13abf58dd6db18bc2b157c4975270ab8ef8f563f21447a73a03a1f4de8eb031582b497328066b97fcd21ff038edfde88b7e32703bd64188e7e6283864b73400cd804b67ca3268317eacea6d56ff005233592f8b6303f953fa4af7c2fa93417fe98b763e0ea171297bab98558068f695ce0e08fdbd281e5c6a57ba5e9d14d716ef7774f2ec112601da4f27ec2827ada74bab559a20e148fcae36b0f91140283729c77a0e0a7777a01dac68395719e39a029607cb901b19c501480ab9279f4a086ea8d0b48d76c0586b7143224a76c61ce1831fe93e86b43cd1f12fe19ea7d2533dcdbeebcd20b612651e68f9ece3fcf6fa5067cbcf20ff009a051724905411e94032799060723da8406d6c67e7ea68d0e1770fe5cfb5026c37039ef9a02eca098c91e6e01e71c500b1d8a49c12786cf6a06a4e256008e3d050119958007920e2801154e32fb4120927b014017eb1c523ac5209a356215c291b87be28957ef853f0d66eaa99352d515e1d190f947669ce7b0ffa7e74a8f4be996569a5d9c56b6704705b46bb5238d42851f2ac875712bc70b3c30f892019540704d01ad2669a0491936330c95ce7140b2e4939a03638c7e8680ae485e33bbe540d60d3ada162c90a02c7270a39340a4f28b68da4645007a8f6a069a746f73235ddcefc391e12b2e1916824948742c99382473c73404791c617695279dc0640f9502c578c9efeb4095cb4cb0830ba21cf999c6401f4f5a05061d430c8079a02e03b3004311c7d281b5e3cd676c65489ee594e4aafe6c7ae07a9a0a075bbea3a8ea96f047d3935ebc404f04ad29411e08e011d98fed416fd212ee5b05b4d5ad6300c615807f1171eaa49eff5ad418c7c55f8466dd66d57a521f20cbcd66a7247a9283dbe5418a63862479877cf1f6c5008e400bdf1ce684016fe53dfbd1a73794600e08ce3d6800377c8c7d6800a9cf75fd4503d91492460f7ee3d28247a7b459f5fd592d22711c206f9e563858a31f99cfd050583518ba75247b1d134f9aed21396d4669769931dc01c003f7a329c4d17458ac5b55d36c12e040a3f1da75c1cb04ede2447f7f6a94567ad7a66db4fbbb29ba7d65b8b4bd8ccd09c8231eaa07b8ab04a7c2cf87b3f53ea8d77abc72c1a5dabe2452bb5a561fc83e5ee7e541e988218ed2dd22b7855228d76a46a00000ec00a510bd4dd511f4fe84da95cc31f880022da4902b1e7d3e99ac86fd03d631f565b4ee6d4dbbc649009cab2e48c83f514165b8b94b6895c44f279c280839e78ce28178ae6de46748a789e453865570483ec6812d42e85a421fc37918b00a883924d024c6e99b7a2a966c0009e17dc9f9fed40f81c77e28139218e4ff9815b9cf23340a01c907b9140201038ed402fcafd28386464e4fd33c50272bc60032609cf00fbd024f722dc66f24822ddf972f8feff00e280f69b24844919cac9ce7de83a447f30ded823007b50459d6ecacb528349b979127651b1dc795f1f3f7a0990148054823dc5015d491c0a0c3be337c2ff00c489b5ee9c87172016b9b541c49ff5a8f7f71eb560c1fc43e0a47e1aa94277310431f91fa551c1727f29ed409b641c86e31839a3454805739c1f6a026f1fd740f64665fc8c31cfde82db79bb40e9e8f49b62eb7d7e8b717ec832c91ff247fa1dc7df2281bcc9369d671493c422b7911654c1215f92bb8827bf068624ba635392df5eb4b9924558ee5bc19b71cee43c6dc7cf34c657be8db0b0b9d0f51d2afe668934dbf9628ddb8c2b8c0073f3a80da37546a7d25174fd95dc125c69f7313ee5655dfc313bd483cf07b1f6a68d5b48d5ec758b612e9d7293211c8fe653f35ee2a084eb9e8bb1eafb3582fe496278f3e1c919fcb9f97ad03ee8dd017a6741b6d3229dae161057c5750a48249ec3eb4139238568f6a9e7b103b5037934cb3793c610a2cd9277a8da73f5140ee38f6280c4b11c65b934023006d50050030e4647de80c846de3b500fcf9fbd0197273ed4007b91400e580c8e45074a82400e72682b36fd2162b7f25ddc09af2766ceeb872db79cf00f6a0b3229550140e07007a50092db860673de818df473c862686dad6470d9cce3b7b63e740fa1de6252ebb5bd81cd00bee2d800d003a6464004763ce683ce9f1cbe1f1d3a67ea1d1a30b68edffba814708c7f9c63d0fafceaca31e6dc71e1f07daa82608c83819f7a1a11ce149238fd68d0a579ec682cfd27a7c3a86bd10bc38b3b756b8b93c1fe1a8c91f7381f7a034f752ea5aa5c5eb292f732128037619c018f6ec282e5a2cb047abda74d5ce9b6da80f136de4a496219b3e48c92000323ea73467519d3da5bb757dbda410ac90c77c23058f99007ee7ec31416882ee47d23acb5185caf8bab4691b1efe57fff0038a9457ee75a82f6e7429350466b482f2742c0f74241c80c38c64541a9cfa1e89ac0177d33ab3d8de28f2b5bca429f91140e2c7a9b5ae9fb85b6ea9b46b9b3c796fe040768f76ec0fafb1f9505df4ebdb3d4edd6e74db98ee216fe68ce47d280648f75e2485a44da385ddc13f4a025ddbdbea16a633286566ce55f9c8f6c502ad750db2c514f30dec428247e6340bbf04100b73402afb943ed2b9e30683836defe9403bc1e06734020e06280cafe8683a375941d841c77c1a0151b467b50159f00e4127e5402872371040c5046eb5aadbe9b1c02e2f6dad25b89047099c677b7b0140fe3f1010afc803f3018e68160c3041ee2823f5dba92d34db89a1d9e2843b03b6d05bd013560c1748d57aa2797c6b35bab78e6959dc47231580ff336dcfb03c1a58364b5bbb7d7fa7b7427f1f673830c8664285bd1815238fad20f2c7c41e979ba43aa2e2c1cb1b663bede438f3a13c7dc76fb5515e9065b851f7a02950002a09c51a1b83cf14176e90d3645e9ad7752752aac23b3439c066665c827e944d29a6410aea725c4567135bd840d3c88a723728c29c9efe6c50d3ee9545b0bf8ef2e6e3c2fc2c6f72f2920e5f19039ee4938a9a875d03278377acf52ddf867f036ef71923932bfe51fbd3475cdc369df0db4fb389d4ea37970fa9cc0b00511795ce7d4f181eb4cd2451755fc45ac16d637381b14ca36b641dfce723e4053170d6cb52bbb362f6d3cb19241f2b9029862f09f143549ba7e7d2eef6caf2797c66ee17fdfd69862d1a069da7dfdac579d17adcda5ea9e1a992376c4723e39e3b024fd7e94c458ac3e25dee8d31d3bae74e7b79002bf8b8549471db38f5f4ed4c165e943a06a328d4ba605b4b22a1523c420c64fbaf38a82d36f0ce7cf7463790729b53017e940e0b0ceceed8ce0500e1b70daa08f5c9ed41d271cd0132476e7d7ff00aa069797d2411168ed9a41fcc858211f73c5075acb25ca6fb82aa31e58a36c81f561dcd033d42169e158ac64b98151b3981c2966cf639f4a064c7a8ac55e4865b7d493701e1c8e52403ea3cbfda827e390ca3f2c914aa81991bd281cdacc2747215c60e0ee5c67e940cb51b0b2bcbd824bfb08ee1a252d1caea1821cfa67b1fa504982b2283ce08f518a08abb82f6dd0369a5662081e14ce40c7ae1b04fda82275cb0bfd4f4536f7114589a5412461f3e4ce4e0e060f63f6ab2893d3b4b5b5b78e22ed22aae3cc3cc7e64fad3449a22a461500007602a0cd7e3b74c26b5d2ad79147baf34eccca40e4a7f30ff3f6aba3cd0543267eb5427b86f1f4c76ef45d0eca1ad5ef224d13e1cf4fd9b22192fa67bc955f8c8c617fba9fb510d7a6ed3fd43a735e5b54964be658c048fb6cdd9e7eb8a186bac97d174e6d22e23437b7ac26b95e77c68bf950fa7279e2b22dba45b59e97a669fa4ea36aeff89cea9a90451fc355ff0096ad9f4ce3f41570675d4fa8c77da8de5cde5be26bc653171ca47dc1f6c9fed5562b97f70276808da7c24f0c1c63804e33fa8a2928c0e0383c8f7ed41d92a41393f4a2548595c2c37493db4cd04e8a08f139566edfef3445b6e7aeaf65d2df48ea2b11776ae02a93e564c772adef409f4ee8ba9a21d73a36fa579ad9f325afe599171ed9c30a960d5ba0fe2843abb47a6f510fc26a4c36890f9558fcc6783506a1147b510024e30339ce680d2c6ae9861eb9a009178a0205443b989e39cd01d8075e3047ce80563057ca381ed4011c4531e503d85013c91b804a21279c903341131cda8c3abdc8650f6d20c4321232adec3dc504bab2c113c9293bb1963df3408dd4b75e1efb2856463dbc43b4631fad047e9177ad4fe32ea16b1db4b8fe1aa92571f5f5a0916bc8e0895af5c46c17cd8c9ff7da80f6d736f7f6915c59cab35bc837238ed8a072a31c1ef4062870718a06f7702dc5b3c522ee4752ae0fa8230683c75d6ba3b74ef535fe984929149e4278ca9e47edfdab42058003763ed409f88ffd6dfad06b1f12ae612fa0c76e0b471e9916d23f973eb4158d3efeff004a984da5debc1295d8e4018dbf3145d583a2ad96f356bbd7f5d90dc59587f1e79a6392f28fcaa3ee47159444ea3aa5ddfc7acf50dcdc344d7a4dbc317f52641200f6000fdeb41b5ef51d8eab672ffa9e971c97c11638268e431a46000012a3b9a351567db823b11f3ef40948e428048207a8340ab48ae83cb83ee0f3428a982719edf3e68c9cc97d3fe15ad8c9be138f2bf38e7b8f6ef40f7a5f55bdd3f56b46d3649127f1405f08e7249c76f5fa50689d48ba5f545cdcbdb462cba9206411b2b055bb07d4fb1c73528d4fa8f52d62cf47b6b8d2e65fc458c49f8a818795c151939f977a823ba0fe253750eb7fe937b04293f9f6c90be41dbdc7ff006283473c1efc1a06f69776d73bbf0f2aca32572bc80470450284a46dfca19f819f5a04e799614def26c0bdce09cfd85045dc75769d12dc3c3e2491db0dd3c85195235f7c91cfd066ae0cdba9be31f4ec61a386c1ef9d4ee473e45cfb1cf34c101d3ff1ac9d481d46c628ed24751881880833f988e7b0fa5328dfed2f2def2ce2b9b79925b791772ca87208f7a60182ee2b95cc0c48f53823fbd40ac658b30f4f4a086d4ee1d75bb6b78f4e965596366fc5211b23238008fde81f43692da5bc30d97831a0397dc09e3d714087506bf61a2c4cd77324726d2caaec141f9fd2ae0c435bf8c57173ad7876f7a2daca10489121244cdf319ce3dbf5a834fe81f881a6f57bcb6ba7c53c72c11873e28cee1db391dbef4199ff00ea4348116a5a66a8a8a04aad04847a90723f6ad7d18c312ddc02a3815423ba0f63fa541687bd9efe1b533b3c9e0a78473e899e318a09bd0ba6eef543e3b2bd8e9b10064bd9e4da001dc81401aeeb29a984d0ba7d5e1d06d4e6594f06523bc8e7f5c0ac8af752dfc17d7090d9218ec6d9447129ee71fcc4fb9cd6842ab10dc0014f3e5a2c1704b671dfdc734525226dc939e283a362c7f940344a380393df144733e2276e38f5efcd01b4bbbfc3dda4a9298a44395902e4a9c70682660d4265d62de40b1bdc1545054f95c8fe627df141af7c3af8808f3dd68dd5d2a45765884b8908d8c3b6c27b7a77a945d7a5fa474bd2ba8e4d5748b28624955d5d8b13b79ee9e983d8d40a753758c7a46b96f6114725dc92279a2810b3a64f94900763cfafa503fd3b59b79ed84da34713c0cd890f0a158fa1f981de826e1b548959fc4dc5cee24b6467e59ed4101ff19e9f676baa5d6a72c50adb4ad1ac790ccc076200f7ad41e7df881d79a87576a5f87b0f161d381db1c2a36e7e6d8ff3416bf87ff082c6f208ef7a82f22b9761bd6d619785f6dc477fa53705ab57f83bd297ceb1e9caf67708db9c4526723e849e3e94f212dd25d117fd29a8c09a76b534fa39cf8b6b71ced38e36fb73417f52e64548e34007e673e9f21ef590a1c918c90718dc281a69b68f67118d9da5058b798f6fa7fe280daadd1b2d36eae70710c4d263df0a4d583cc7a668fd4bf11b5837d7c93dcd9a3146959822a0e781f4cfa55161e9dd7fa67a4f55b9e9aea3e9f81fc09ca0ba118998fcdb2338c7b528d39f4cd2ba76e2d357d292df4eb391809963420ce1b1b576fa1e7359119f1eb4e17dd033ca172d6b2a4df303383fdeb5c8f2eef3bce4e0e335684cb0c9f354160d36f64b0baf16072b91b5f03391f43c51aab23a5debe91c4fad4d73689e6fc3a290573ff4f03e59f4a3280d67581ce916567f84b58ce0a1fccec3d58fa9a084de08c90464e4d1a8e419059b201f4a05630a176918efc50176293872c17bf14042aa0125b03db14046c60b60123fde6827fa0c68edd5365ff11346ba6292ee64194240c807e59a32b7fc51bfe8bd5ed5db424860beb62b89218422ce09c11c01dbbd0660ae110bf1bf2154838dbebfefeb41a8f4cdac7f117458f4d9ecd2df53b4cf81a822808c47255c0f7c8e7fb54a2ec2cfabba3b4b4b8d3af12eedad40926b0f070a13f9b633649f7a82eba6ea4357d321d4ecad512daf20df26e016507fa4fbfaf3e98f9d067dd2bd2faac9aa4d72d72d1e9510ca46a7631c7a320e18f1dfd7bd059afb7da816d23de4ba5de211346a1e4785f190548e4648c63b64e6b43ce9d5baafe3b539c5b452dbda46c638a167cb281c73ee4ff9340e3a3fa5f5aea4ba58f4bb57dbfcf2b02a8bf7f7a0de3a5fa0b50d2a2d92eb3e048c0a97c867dbedcf6a944e5cf4f6b76d1b3d8ea42795066266c87c81c65b9cfaf15048e83af3cd64abac08edaf01546c38dae4e0657ee6826e5b892de3702292e2545ddb55700fd0fbfca81c4b3bc718716eef9eeaa402280d14ab3c0b2c65c06fe571823ed40df56b217fa6dd5ab9216689a33f2c8c558307e83b8d77a37aaa7d22f2512c28768800c9954671b3d33ebef568d0ef7a7749eb0b5bbbb162d657b32b46d2e1564c8ed9c5644d1b0b9bbd261d2a440af6cb0e2e5b1e7dbc1238e0f7a0375b696daa7496a3a4dac8a92cf078685b271db04d391e40d5ec4586a1716de2a49e0c8c85d3b120f715ba1899173ff305413070abd89cfe9f5a2d3ee9c8639fa874eb6b804c52dc46b20c9f302c3bd11e84d47e1af4d5dc6521d3e3b662c19a58721ff5a9a321f89bd27a374b456d158dccd34d333332c9b4b2afbe47a7cb1f7aa33d2bc0d8c0f1c8f6a2c14b6d501b39cf63450897380c319e3de8065031c038f7ed40d8faf1ce41e4d004876a8dc3cc7e743025c956c818028c904579e7f0e15695c9c0541924f6c00283d0bf07f42d6b48820b8d62d20b2b58d656404959e52f83c8ff00fcfafbd4a35bb06f12391a48dd55cee2b2f3818ed8f6a8158a159890f02242079147623e631c502b0db436d1ecb7458d4738038fb0a087d6eeb508f48bb7d32d95750752b6c26c905b3ddb6f61eb574794f5cb6b9d0fa9678b512b25d24bbe52b8c1638278fbd582c57ff12afaed45b5bc0d0d8a8c08a2731ee3eec5793f40450466a1d59af446293c186cd53ca0c36eab93dc649e49fbd048e89f1675ed35e301e293919dcbf9867b37cbe94a35fe94ea4d33aba6824306dc48015750d86c6e247b0cf63591a40b8dc23fc30f14138dcac3000f9d03687547f12e8dd5af816b13148dddbcd29039c0f6f6f7a0eb5d62caf5636825db70c9bc4328f0dc0271c8a090627d3073ce681acf6505ccf14d35bc2f2c2731bb28254fb8a075144a83ca806792400334049ee6281e2496408656d880ff0031f61fa50446bd76058ea1b9e21025a3bb48afe71df9c7b71de9c8f196a0de23ca7b827d4f7add117e0cbfd4b5059392369663ff004e71c51aa97e8f555eadd258f2bf8a889cff00dc28cbd0bf123a926e96d163bdb74490bca2321c678209ff001591e71eafd7a7d7ef45cde2c20aae144638033fb9ad2e1b5e69d058da431ccf21d4a5c3b4631b62523807feaf5c7a50222f2d648c25f5aeec8c2cd19dae3d3e87e944d3eb7e90d425b49ef2292de38224f1505c3f8724a9eeaa7bd0d57a60406059436306868a7803839c7ad1a158039c13f4a33a716767f8cb9b6b55e1ae2458813e9938cd07a9f42d0b4de99b4b7d1f41b58ff19b03c93ba06607fa8b1f5f619a5b8266d74a65d42da6ba90cce996dcdc8c9fff006a5a2c2635083b05ef83eb5028076341db4b1ed9f7a04651fc41db18ed419d75b744dbea335fcb0db0335f2057901c05da73c8f9d5d18a75174a3f4c47335e35da4ce418a489374254f707d463d33565d1529b569a489a17944b06ec8057d71dcd037b4b6b8bfba31584124b27e62a8a4f1ea68357f83da7ea5a76bfe0912453ccabb49194653cb60f6ce3dfda983d196cd108c2401711f9768e306b2297d73fc6d02773a8b591922693c5004bb9d72542fa2f6efde8314ff867aeeec27500b77bb5670e36ca19b1dff2e7f2fd2837ce8bd5dd348b78b552219022870d9c46e792a4f6c608a0b846c8e03232b29ec41cd0199f1410fd4b24b1e8f712c0a5e4452d851e6c639dbf3238a0afa42ba77475e4ba8470896681da45180b18da76af3c9029c8f26dc1df2b9c606e273e86b743331924f27f4a82c12280e59b008e79f6a2d4d74188ff00e30d203a82ad7519c1ff00b860d11ba7c5e86c9fa3afae6f4091e043e021270b21e01c7dcd6479ab4dd3aeb56be4b7b184cf2b301b57d07bfd2b4bad0fe25e9f6960ba7c7a55ac50cd750335ccaade7723b83b8f6e38a2207a5ba4e7ea3d93780cb616ca53781f99fbff009a0b675a5be9765d43a75a6ad3b25adb4185429b831c70303dfdfd2831eb8954ca48f3827819c71ed406b2b1b9bf9a5fc1c4ce2253238047957dc9345d122b792eee522811a495ce1157b93ed444ff0049f476b1aaf51c761345269d25be269259570c833c6077249e062a68f53e8ef0da69509d4ae225b92a04af232ab16f98cf1f4a5a266d4dbca8af13a329ecca723f51502d14f0cb9f05d1c8ee01c91f6a0393b4edfe63c8a031608859b38f97340d84d04e5846eae50f9829ce3eb400fb24466041f5e3d2823f56d22db57b192d6e61468a41c823ff0035651916bbf04ada7badda5cad6d1b72c09dc33f2a6875d25f0865d06fe2bc6d4c4d3282026cca8cfafcfd29a34cd234a10c768f711a78f1bb392a3001208e3ec69a26a58d640c832091c90706a084ea1d3eeafdadf4f86da3166c0b4b397c18f046140f5ce4d04f4702436e91c28a9122e028ed8a0a9f5a5b6a09a1bc5a135bc72cce048b3c5bc15c638f9d59043fc2db997481aa69dae49e1cb6bb643239211939e467818f97bd305965ebce9a10bc8da9dbaa2679dd9ce3d8530572cfac87566ab05ae9f1490692b9696e1f833738555f96793504df5f25945d2576b7ec16dc46792381c7b7ad5e60f234980e42f6c9c56a82ec3eff00bd4124e49700f1c646e3cd169ce9575f83d52cee324347323f6e3861ff008a23d47d4ba6a75074fdcd8ef317e2e2ff0098bdd4706a60c3f4ae8cd5f44eb8fc3e97248a638cbc73bf90483d463b373e9574685abf42a6b5649fea72bbdeac4a8d3b018cfae31f7a6895b6b29b41d30d8e9f6bbed9213e1b7a994e724fcbb5064bd7835a9752d3af75d8116354778f660788cbd9483dbb0a0cd20b2b8d43528ad2088bdcccf854039cff00e2827a0d34e9da1de896f2182492efc0976f998aa827d3d334113a74aa9a9298628e74570478bc0c7cf1da83724bb8246d3e6416b0384da61b5501c9f5c3704f152c037561a95f5fce61d3ad6db4ab950f34b331dd9f4191db8fdcd406d67a675ab4b6d325d1af248272a43430315ddec7038f6ad4b3f448bf47eb71cb69abddebf21d5e26896203846c30c8603b9c6452d9835901405660376319ac84bf13180779d8bb82827d4fb0a06f777367a75acd7170f1430a9f331200cfceae061a0cf6dac692d7365266191db0578f5edf3a6075a6c9278b3433188a467860d96fbd40fe540471409aa0c1140750001ed8ed4058e15133c983960077edf6a06faade5c5b7822d2d926766cb967da2341dd8f0727d85033d27597d62e2ee3163756915bbf8799d71e2f19dcbf2a092b88dd9a311950a0e5b70ce47fe6ac18af53f5b69da9752dd69da9ca906876e24465d9e69881c6ff005c679c0aa2bfd267a347512c93dbb5d42d90d3c800b68c9ce0ec3cfa528db74ad034db5905ee8be1ac728dc153984f3f980f4fb56453be2de8f647a6aff53796596f0aed46798ec033ce149c0fb0ad71479c9bb9dc3bf3c55a0b95f65a825150b481a407b93c0fda8a29c06671dc93803bd131eafd0af6dffe18d2ee25982a4b04603b7a9c631fad03bbe586381bc5945b96385718c827db3eb5288eb8ba934eb15fc3c535f05427796dcccdec7150637d5bd55d5362b7975aa4d0d919018adec8637807bb60723000e4f7cd58203538aefa8aeb478a7b9beba924547b8774cf8608036a80704639cf1f9855d1a7f4c68b67a03de5e5d59dad8d988c62e1c0f107a1e7fdf7a082ea6d07a6e3e99375a7cb6b3db093c727701e2360f7f53dfb50653d4130d42ee18f48b3f0232a15218936963ebf5fbd06dbf0cfa74855b9d46e04b730c6144691e12307d33ea7de8348ba6b5478a279a004f98c479247b81f5a9438805ac0be2e02e73c9ef8fbd40c2346d43578eefc40da7da1dc8b8eefea4fcb9fef419beabf12a4bcebcb2d2fa7ee0dc58492084b30236bb6467dce383f6a0b87556a67a7f4d95a0bbb5468816f0a69c78b2e072572719ce78357079dfab3af2e7a92c963b88d94abbbf91cedc93edf418aa2c5f0dbe2a6a9a0c90d8de34773a6a8da1186d6403fa48fec682d9adeb7a9b4c9d572dacc9a6c9700456e5ca910e000ecbd8e580352fb1ae7476bd6dd49a325e5a9f3025245fe961dea097523cc0919a032af039a006936c81423104649c703ef40dcce64bc3035a87b6f0c378f9fe7cf2b8fdf340a4b6e25962915d94a67807839f7a043586922b5636ec44c061063f31f6ab079d7fe19b7eb2d4efeef55d5d74f992e9a0fc3a441dcb13927b838c9aa2d4bf042c618e178efee6e18104870172318edf5c1e6945bbe1a748ea7d2315edbea3a99bcb190030c401010e4e783ee0fa56455be3d6b90c1a6268d69e17f1486900ee98ec29ccc183119419e7e55ba11f089f523ef5058363a8059fb8e31e9421b491056c01819e28d3d0ff07eea3d53a1e3b6b8db235aca63c139c0eea68ca47a9fa6ef757b83ff00bf68ad428c2f248c7a8f9fcea518df516adac74e7544f63a2ea172f1800291e6cee19ec78cd5826344e85b6bad25ba8fade5b99dae0ee11efc71e858f7e7d054a2d7d39a75ae8f7b6b00b8917f1516624b78429da327cec493db1db1d8540cf4aea28f58d6aeae2f6dd64b498082d880488d149fcea7d4939ab04175e6850a8d32de3b78e380c8de32c4db4e18e430fef543cf86fd0d691b4fabdf6648b3b2db69ce7dd87be68342d2f4fb9b5b891af1a28a2dc05bc5036d001e0eef7352884b961a2ea9aa7555c885e08d45b5bc52b61b686c120fb939fb541276bd4b61d53624d942e2f6200bc32290633e99f4233416dd3ad3f0d611c0c77b632e71dc9ef41156dd27a45addcb3dbd9c513b1dd941821bdc7b558333b9f873757fd69a85e3f813e9c7723b5d93265d872473c11544a68ff08fa75e290b42ec4e4124e70738fa5048e89f0f745d2aeadd2decedda6525c975121183c77f7a945c754d0e0d563682ed43425369403bff00bcd58308ba7d5fe13f5a05889974a9d8b46aede4914f707d88ff001528ddf4fd7edb54d1a1d56c312dab2e64dbc9418e78f5c541296d70b716d1cd6f8789977230ecc280cb7519b816f212b205de4e0843ce300f6cfcb39a0545c42cee88e0b458ddec33ee680eac92266360debc7b5056fad2d354b9b189745744be121daf27e550548ce3d4d58324d07a725e98ea2b7ff5381f5169a7579d021fe13904ee43ddfbe49038ab46e76cf05cc714f6d309232a4a98ce54fd6b2196bb7f2e9b631b2c427b891b6851db3eff002007341e5bf887aa2ea3d4f77378be381e42fdb711ed5a1554395caf1cd07617dcd04fc85402101da791421b49920331381c60d1a69bf02f56f03a925b12c162b98c955f775e47df19a32d99b518268e4491668704a79d4aeec7b7bd4a30feb7e9144d76e265697c3e2693631674273803e556087d76f35fd49859e9925ccf611141106f2e182e3241f727f5a94681a268f79ad1b1b8b9dd66b1c2b1ce9bb06361c1e7bf3fe6a096b0d3ba57488e485b52b40909c386901607d47bf7a0ae758eb69ac4d15be81a748f0a9c35cc90b2eff4c03c1c638a0b77405c5d5d45f87be5fe359a88b81b401dc1c7d38fb50586fed18ea3015790091591e447c1518c8c7a0a0a5754d8c9d49a8d9f4ee9dba0b3b5224b9692327728f627e7c6682f9a7e996b6b3a8b6b748a348820c7720761412c064e3041ce282b5d4bd73d3bd3f33daea97ac2e540dd0a292dc8cd043c1f15ba2a7923b65bb910371b9a12141f9d02edf13ba2ade56857551e5e77244c54fd0e280746ebfe99bbbd655d56dcdc9ce08465565f4ee3bfca82d53eb3a6dac3e25c5f5ba646402e33fa77a0aff5b74ad8757e9ca972844aa37c520fcca7d3f5ab067bd369a8f467544d626c98e9f7118f0200e4465c903049c8c9e6ad1b24334b6fa6249716cab20037c309dd83db03b5640dddac3764a4f02cb1103863919fa7a1a06d6f600c37162911b7b252b87dc773f1927393f4a079f868edae1ae6328a8b1ed38e30050226e85d5dc1f879011b3c47c2f604719f9d01eff4f4b83e3c6b18bb452b1cac9b8a83de80b16e8208a3b7b58e1407cc061427cc0ff1560ce7a8f592d69a97504cad2dac01a2b53900c3e9e51ea58f727d0551e73bfb86b99a49a46dcf21c96340dc13804f20f6f9501c0e3b8a0963316fcc4607007f57bd084d64dec01200ce483468ff0040d525d1755b4d4206ff0095207c11dc67ff0019a18f56584f6daad9dade4211e39104a8ded9152b235cd8c530613229c8c1c8ef50472e81690ee00322b0c100f0debdbb7ca8111ace856371358cba85aa5cc407891ccf83f2ef4048b4ad2e59bf116769672c72f99dd1437239078e2824a4d3e1b94559234110e781839fa0a0561b38ad532a12319c86c6307e740a9732a3a00cac870cd8e0faf0681be8b6db965bb909df3c85806eeabced5a09523647e6e0fef419a6adf116daf7ac34be9dd1da686e7f1ca2e243b76320ce57df9ff1560cc3e3f470ff00c78255b842b35bc6c4af9b6e323d3e95467b6365f8dbcf062beb68c119595d8aaff6e282422e9899b4f6bb5d46cda2562a76316c1078f4a0859e1b9b762c0bf94f0e84feb4125a57505c58ea70dd5d0174a986d92b1c13f6f5a0de7a5be366877260b5d42dee2d2423124a487507ebdf15289dd3fac7a7bab6feded74d61733473acdb5a162142ff00313d81ed505fa58fc6d809380c1b9f5c502e0e05040ea367a85dea454de2ff00a610375b04c16c7a16ef8340b5f6930dce9375636acf6a278f04c5dd4f1dbf4a084e91d06f3a52dee62bbd4a2b882494ced3c8a448063b63b638fde803ab7ae749b2b3096d792c93c8c109b55dcd18ce3710473ffdd043dc758dc5869044565aa5dda4c3c2b7bc78c1f14e3963db03e7c0ab066bf1327d41ba76ca6bc48ecad24c456f6b0c87cf8e4bbfa138c0fa9aa3297c83dd4e28395811cf2680a5b93c7ed413cd1ff0f3c797b8031406645236b0508406f30e68ba49c051b97d0e0e7d28ad57e19f575c5be8f269515dac772877c11bc464dea7ba8c739ce78f9d3193bb8ebfea2bcbd6b5b6b8b58bb7f13c2f0ce31cf0deb4c0f2dbad6d743d2ee99efae752d6c02a86e0054524f6383c7ff94c0b6af274c75149a46a5a82c46f1e1479fc3190bd8156fbe7f4a960bf74e9d253f1167a3ac09e0856610e3041ec7f6c540f67b892cee7f8d18368232ef2af2508c7047cf340ead5bf130accc9b1186541e723d09ffc5033bbb1b82d74d6b37f1244daa1b38073df3f4a08eeb1d3b50d4fa6a5b4d32f12cef1902ee73e523d476fde8306eb0d3fabfa4ba92c278af67bb7281606472f90bdd58558253a6afb40ea1d62283a8b461a66a6f931cf6a7c2466f7cfb939e7b5515fbed3747b5eb8f06eb78d35080a2ec9719c76f98049a0b4ebdd37d1bad869acbf0b03c5c16b29444adf50ded41995f68564a263a66b31cd02be152505493f51c1a088bab69ad1bc179e320f07c37c8a0692b46c4995f0381db39a0b2fc34e971d57d4705bc8db6c50ef9dd97b81fcbf7381528f5ae97a1d8e996d1db69b0c7648855b10a81b80f43c739c54134147b9a036063279fb5046e957726a0f2cfe04915b06db1788305ffeac7a0a00d72f8d9c491c06337533050ac7185cf2df6a06da2da4293488f34973328c34aea428c9ec3eded40ee7d2ad249448f6b133820ee2833df3fde819ea96897461b05b87815f2ee919e5d47704fa039ab079b3e326b70eafd4ef6d6650d8e9ebf868b69c8247723efebf2aa280eb9193ebedc5002a124e015340018fb8fde82cf32b1603d0678cd02406dce3008e47ce81b499c331383c9c9f5a2e9c69377369f7d6f796a4acf148acb83fb511e91b3b3d0bab745b7d45acedd8e3732b71b1fd73f7a5a19eafd09a56a0a96b1c705b49c48510761ce4fcfbd4d0d752826b2b583476fc3daacb295b79d768de8a32b1e71f989e49f6a7d14dd1af5ba275a45b8b093c054492ea769092373765c1da4679fbd306e36ba9595fe9f0dcdbcc92c33e1579cf27d0d409ea178f68521b6b76926ee8a7853f7ff140bc768d78f6f73748d1cd103b543f0091cf6efc502f7319dac194371d8b6326829f0c501d7ae6fa568d5d4942c806d4db81839f53c8cd59456fae6e628749b5bab8b1865b08e4726588ec11e7f2e49071c93da9a31dd4341d675e9a5bad374f9858162d0b4ac70e18f0573df35a0c759f87bd53a404f174f965dfff00f479b1ef570576e34bd4b4cc0bdb3b9b7258a00e846e3f2a94376475cee4914af7ca9150685f09ba61efb52fc7dd69bf8eb7c158d1d0b47bb38f37efde968d6eeb4eb5e91d6ad25b660aee59974db6881690918e31ce39279e062a5a34bb57b88adedd1e379679065d80036679e6a07e8391bce7e940c659ef5afe1286de3b16f2b8903094b7b2fa7ce81eb380c4260ed193f2a0cd6fa5d4a4ea0fc7bdadcce923158a3039db83c038e3ef41a0e96b2ad8a35e009291b8a939d9f227e43bd590436bbd6fa269202c974b7123602c76e779624e00e29833bf897d493e896525dbcb2a6b5a9c3e1456b91b6d60cf989c7f31f7a60c02490961ebcf3eb541308e39e067b507007b96007a67fb50178f97eb4165ce18165c2927b773fad023202d9c8dbb7818ff003408300b87f2f1c107d0d0c15a4f2e339c90467f6a18bdfc2cea8ff4bd561b4b9ba686d6e64552c4f954e7d7e46a60f4688d240af1b2bc6cbf5047ca960617ba658de1b792f2d94a5ab33461b18524633fa1a81b5c8b5168967369d23c0e0a24622dc981d81c76aba29df0bb48d660d52fceb88d069f04aeb69130037127f37b9c0ed9a8350781240bbc06da72323b1f7a0eb8816e633192ebc8c9472a78fa50349b4c83c068e24f0ddbcc1c13b837be4d055b57e98b996d4db5b4a893dc1e6620b6ccf2c467efc504ce97a38d3f4d874bf09af6d46e2f25cb82724e791db15650a43f878b51fc34f3da8f132b6d6a98c80a39ff007e99aba249631b58b9047239ec3e55368aeeb7d2da6f52c0eb7f16e87f2c6e836ba90724ab7a67b55d115ac7c3e8aed2182def4c56a14096368959a423d77e3229a27b41e9d8343b01069c8a8dc9660aa3713df3c64d4a1c695d3d6b67a8cba94b9b8d4e61869e4e4a8c636a7f4afcaa09a485519caae19b966f7a0435196582c656b74df3e308beec7b50629375775b691ac5bdb6b16d6378779f019b00a31cf391c9c2f1daae0b35ef52f5374de88d77aa45a6cd25ddc0108694ee2188c28007603d6a0d16c92430a4b2ed3230dc401855cfa0a0a07c45d7b5db9d462e9ee960b14b2ee134ef8c850012147ec78ab0670b643a2efae753d72686e6e2da211db42176079c8e768f65e39f7aa332d6f58bbd635096f6fe6692695b24f603d801e82823cb900ee00e68006460051dfd680ed9f0c905b713d8d006d5f5419fa505a18f94e40501b1b81a04186d62402c87be3d6810b81290aea8467201231cd1749dbc437f9f1e201db3de8ba07dc0175c027f28a335b17c26f888d6b6d0e8fabf892a29c453b1e547f49f7a946d6424f08236491c833ee0835073294888894120700f0280813c40a6711bc8843e00fca7d3ef40e41dc081f9a811681c6f7565329185623b7e9de812b3bcf11ff0b74563bd50494cf120071b97e5fda80d7577046c9019d5669dbc340324eec67fb734103d5da96bf67a7cf0e916f6e2765f25ddc4c11107ab1c8c647cce2816d3ec7f0f6564cae6e67da375e6d52cc4af2e4fb13ed4145f899d47b3499f4bb6d46cda49b69b92921565c3648e3dd40c81cd5c0ae89f13ec246d3e379ed2d6da180b5d34849da1780b128e49271c9f4a60ba685d5fa36bc42d95c324ec7090cc9b1d87b81ed50588958977cacaaa3b9341c655f12348d1dcb8dc1946540f99a019e2134454eeda7bed3839cd052fe2136b536b5d3563a1ca53c49da4b9507198940ce7e5c9fbe281c6b7a974cf4ee4ea7242d76dc784a3c595b3e9b464e3f6ad0ac745ccbd4fadcbabea42da56959a382ce7460d6b1a93c01f97272093ebf6a82f1ad6af0e9da5cb3cecf6902216919f82aa3818c7a9f4c530649a9f5269ba7429d472239bc991a1b0d3c3152880f0f23039e7bf3de90635ab6a377aa5ebdcdecef2c9239e59f3827e5ed54302195fcc38cd01245395c1f5f4a05b606538e483c501b6939e3b5077860f3914165754c33e549000dbe87de813b820c27fa7baafb8a04a69c98e281e42618c795338033df1f3a06c03e4e029247007ad010093c35674da71f977640340081a190658e41c820f141b0fc33f8926c218b4ed609366a02249bb2d19ce3ea4528dbece68eead926b7916689c643a9e0d643387521fea2f693c2d6efc786ee46d9bfed3eff2a04669edf5295ff057a60bd865309246d3bbbedc1efef41d63a8dec9ab4fa7dd4510fc3c69234ca186e2d9c003b7a67bd034bad0a5bb96e25d575267889cc1b54446d9bd0a37bfbfbd02925945a72cba8dddc48b3f87b1e58f23c623f292bdb7fa7cf38a0a5750f54ebba56a9a67fc516b6d6fd3970ea9234677c8dc7f38f6e4640ce282d1ac4b16bfa72c1d2bad430cd1ba822061865f5007d3daac19cf547c189357d561bbd3eee683c62cd786e9b73337b8c7bd512bd39f06adedec2de0d5ae639da372e6485363107f97767b505cee755d03a5e58ac228659af123184b7b733322e38c91dbf5a943ab3d52e64b49ee755d2e64950e238e35f10c884e17cbe87dc540e6d7509a4f110e9f7566a471712850abf6ce463e6280bacea36fd33a4497f773cf32c698dcc4beee33938edc7ad05534aea683ae61d64c4d2a69b6b88d16d5ca5c303f3e386cf61db140e27b5e99e96b64bdd562b6b30aa36c6c37cac7dc9eec6b42c1a66a962fa70beb6b516d0cbe76322f86c78f6c66831bf8b5d5d2dfa35a5dce60b1933b6ce3c788769f2b331ec1b8fd2831b79649984b239773c1dc68129725c1c640e73400ec781d8fb1a03c4a85d0c8582640257bd01e51fc42236263c9c67be280429c6037eb405dbf5fd682c2a0bb976cf07d3fc5009279ef8ec4e68193a9902b28e7dc71fb501d95b098e0f6dd9e0d0049131019b047b8390281bb292484e47c8500c4f242c3076bf704704739a0be7c3febfbae9a5daf23cd017c7e19fb107bb67d0f6fd6837cd2757d1fab34f4f05e37dde630b1c3a91edf4f7159103d6eb7da65fdbdf59dadb5e2460ac876ed9e1c8c060f9efe9c8a0a75cfc42d5742d2ee5a7e9dbb494b6d6b9bc930cce4f940e3cd81ed4160e98f88315e689fff0022b57664199cc5196f0c7a164ef8f98cd0589baffa68590985eb15c0db1985839f6c2919340b69d03f5285bdd6f4bf021424db4329cb153fccc3d09c76a090d3340d2f479a7bab3b38e2924e5e451cfd280d7dafe936f6c5e4bd89813b02a36589ce318a0358dc35cc4e17f9bf234cdbb78fa0c607a7340e6cec20b1596610c6934b8323226379edda81da8dcb9ec40a042f50b5bb21645473b58b11dbd7bfca8304f8add5d67a9ea8ba5d8ea72c1a4d8a952f10f2c920e368cf71e99fad5833dd0754d6ed66bdb2e9a91a5babb2a310465a57c1ddc1038e7bd5171d3748b8d46ee1ff005298dc6a764c27d4eeaee7fe1c01795881c9e7804fe940dbe287c4b6d75a1b1d1c986d62277c91bf131f4c0f6fad0663737135d3b497124924871f98e7803007d2811dc5b83903dc0a0333f03be7de8122df2c9a05a11e5f51f7a05ce7071804fca8033e5da0734020b0183bb23e5416269577ed0e5323078ceeefdff6a03dbcd62914c2f629a47c622689800879e4fbd046f9d8a2a03e31385c0e73da8b83ca590947dcaead8208e73da8849b3e19ce704f7c5015586d006431f5cf61f3a04ee586ff002481c8fe6191408f0011eb8e30682774dea9bbb5784492ca6385832e1ca95e3d2834be9df8c312e2db5eb4375080337000f1303d18763591a469baef4d755989ec6f6dae5a23e20b599406dd8e080ddbed41272f4dd8caf1c86d163910f9595882a3d718a035edd695d3b6a926b57d0ac65b10b4e06eedd863bf141077fd7af2782bd3fa26a1a8891d57c630948c0279393dcd04cf5875258f4de9f0cb7b7b6d66d2b81ba752d85f5214724fed41036bd79d2fe319d7a8f4b9c81e58de2f04827b9ce09a07a3acecf54b790685ace8697606009e52c377b7f2e682b097d7d36acf0f55df5edbdc0977412468cb6ce3be10af3c63b9c8a0b0751f505be9690dd5d752436f62a3fe4c6448f3b7b0c64e38f615734651f107e3045ac42b67a7693018633b965bc1bc838ee173807bf7cd33065baaeb1a95f2c11dfcd2bc51fe48880aa3e8a062a8b059f595df4ae9a74de9e9ec499d43c97b1427c6e47e525bb63e4282ad3ea3712893c599dbc4259c1627713c927de81043950df97db1406da8411c92063be280230839627078e79a0390a71b5bb5003a8c1232338e4507025573e9fbd02a0e41dc0e680c3691cf714053bb34160895dc16f291d98d02322aa39f3e14707ffaa06f202a5bb0c7201f4a343aca51090497efdfbfce89840c8db8e46573923ff14410b00490d9f5c1a0425dd8ce4673e873cd0265e4dbe7041ed814009b8cbb8e5863bd07163b7716e0607b6698060b96b7b9478dc8643918247ee39a60b7e97f133a8b4e0c63d4ee597380923970a3ef4c0e13e25dfcfab457ba95bdbddb212016501867b9cfbfda982f907c74b282da34874a9048aa479c83838edc62982b7ac7c42d235cd67f15ac5b40c366418a2cb0c1c81e6f5e31db14c160d035de8cd4a3f18ea96562cc37359dfe9cac887fef039fd6b39446f56ea5d13a9dca4579a922496b1975b8d22dfc3566cf9557230703be715ac1431d4d2275325d7fae6b4f6f182a93ef1e32a9f41938f6a60afeb1a95c5fea53dccf772cf2c8c489240031f627e7565c0d67bbf160487c1801073bc0c31f91f953420f2bc8c7c52cc540032738a809905c0f4fa501940208e73df34028e703938a0577ae013f4a001300db4f03b71407461ce0502dca8c9c7dcf6a003fafcbdcd0070bc1e0fd734070db467b8a04cb9c9e68274b93bcb1daa40200ed4099765249ec476cf340849b8b264823bf34689ee009cb671df1409bc8e8b8e770e3ec68984d9c953cf97be2860b248caaebc107dc67f7a184c31232db88fd451031ce50e76039f5c8045026efb8f93279e0fd680b239504f0483d88ef409ee25bb90c79c0e050151c6e21b39ce783eb40adbcc2cefa17bdb61322387781c950e3dbdf9c8a066f28790b22e013db3dbef54726081e63c6460d34191b1bb0720f634060e7600412c781502409c8e3d7b500ed71dbef8ed40243f181c0a02e5d4e0fad006f644e4819e3b501f7e3049e7b501bc43b4e391da80558003392d40a23305e320d02e64cf998e1bf5a032b0c927b8e68049c8c8e71c6280377043118f4e680bbff00de0504ddbb3128371c1c64668024e59f3cd02521254e4fad1a2107e48fe6a6809ddb9e78a029e1463d05027ffc744a6c3857c7b1a205ff00e637fbf4a02b12b1794e39f4a02024e7249ed409924720906800005173fd7404989698ee39e4f7a04cf723d07a501fff0097ed406ffe36a018ff00281e99a037f4d0731f3bfd28007e53400ff99a810248c0cf140bc60123233cff008a0557f9beb4056eff007a07109243e79a03778b27bfbd02b128c27039a054001b818a06609de793da815006070283ffd9}\par}
433+{\pard \ql \f0 \sa180 \li0 \fi0 Here is a movie {\pict\jpegblip\picw20\pich22\picwgoal400\pichgoal440\bin ffd8ffe000104a46494600010101004800480000fffe0050546869732061727420697320696e20746865207075626c696320646f6d61696e2e204b6576696e204875676865732c206b6576696e68406569742e636f6d2c2053657074656d6265722031393935ffdb00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffdb00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffc00011080016001403012200021101031101ffc4001a000100020301000000000000000000000000080905060a07ffc400231000010501000300010500000000000000060304050708020001090a11153976b7ffc400160101010100000000000000000000000000060800ffc400261101000102050109000000000000000000010200030405061121b33134365154717475b4ffda000c03010002110311003f00a90cf388f366a62aa720ed6ae07f96901f3831d973452b8cf36fe3570fc908e46d466433e5dd954f2e96992d9e498c7753faa44916e016ca91cc7d88b38fe60a5b97737defcbcc539c98d336a57f4fc2ca9a486bf07ab575ad9a3af4df221d8215e36df86c4504ff0024574551b3d687ee0575757b3ad64e311ee62bd94158d37e24198c43973099f1fc0c41614d950246513a081abf76cfe7061f6863281e6352fd1670949c148dd6dfb0d25f5b3689b1d5c965b0eacbf4e0932ad28e22ab9ae945633f4744bd3c8cee0a7fdf085b9000f449c5f7afa30b83e0b6fd7b0c8429c9467ff9715347c891e25fa24a205861aa715e6a09bd0488237dc2723414d9891381524e8ca7c0894664f835653631ab55ee7e3de433e4ff001b30949124e4c10c8b6ad0a479b3f9c937b2cf5bc0095ad600a0a41a0e9faee174a1c605e161c6c7a313539650b0113190f1a8368e60d5b24f30ff008ea7f0bf867fa6595feeb6978f1fe0f9c26177f4d63a51a9235184750e7d18811339cd000000c75f000e00380380ae390c350def826ed42ad051fa6f501c50f9b699c3b69cbeb76476d202bf3ac985b6e0e968be66572893e6a744540bd9722e5c87956848629bc2559306bd113e8653d3b6aff651dfad7a3ac8b02958cba02a93ccf525757039bae6cff090e1d90688e8aa233ee86a4c4a3e0586d6b2340522e47dcb7d0046d8a5acb05a123ee25d2b230b2ada6e2e2f9ede3c05202520ec2487b0d56562529d8b3393bca76adca4ec1bca508abb001babc007915d84fe3dd14e207e3c62f8379da2a3b861fb6629d28dba53b6ea388ebfed866bf6dfb553455e91ed547ae92e9445253a4fdf3efb4f8ebdfbe7d3c78f1ee0bb9e13e358e942a4ed49e22cff00eeb35fdd7ebfffd9} icon.\par}
434434{\pard \qc \f0 \sa180 \li0 \fi0 \emdash\emdash\emdash\emdash\emdash\par}
435435{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Footnotes\par}
436436{\pard \ql \f0 \sa180 \li0 \fi0 Here is a footnote reference,{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \ql \f0 \sa180 \li0 \fi0 Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.\par}