packages feed

pandoc 1.8.0.1 → 1.8.0.2

raw patch · 26 files changed

+1227/−1859 lines, 26 filessetup-changedPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

README view
@@ -216,7 +216,7 @@ :   Produce HTML5 instead of HTML4.  This option has no effect for writers     other than `html`. -`-m` *URL*, `--latexmathml=`*URL*+`-m` [*URL*], `--latexmathml`[=*URL*] :   Use the [LaTeXMathML] script to display embedded TeX math in HTML output.     To insert a link to a local copy of the `LaTeXMathML.js` script,     provide a *URL*. If no *URL* is provided, the contents of the@@ -225,15 +225,18 @@     several pages, it is much better to link to a copy of the script,     so it can be cached. -`--mathml`+`--mathml`[=*URL*] :   Convert TeX math to MathML.  In standalone mode, a small javascript-    will be inserted that allows the MathML to be viewed on some browsers.+    (or a link to such a script if a *URL* is supplied) will be inserted that+    allows the MathML to be viewed on some browsers. -`--jsmath=`*URL*+`--jsmath`[=*URL*] :   Use [jsMath] to display embedded TeX math in HTML output.     The *URL* should point to the jsMath load script (e.g.     `jsMath/easy/load.js`); if provided, it will be linked to in-    the header of standalone HTML documents.+    the header of standalone HTML documents. If a *URL* is not provided,+    no link to the jsMath load script will be inserted; it is then+    up to the author to provide such a link in the HTML template.  `--mathjax=`*URL* :   Use [MathJax] to display embedded TeX math in HTML output.@@ -244,11 +247,11 @@     be processed by [gladTeX] to produce links to images of the typeset     formulas.  -`--mimetex=`*URL*+`--mimetex`[=*URL*] :   Render TeX math using the [mimeTeX] CGI script.  If *URL* is not     specified, it is assumed that the script is at `/cgi-bin/mimetex.cgi`. -`--webtex=`*URL*+`--webtex`[=*URL*] :   Render TeX formulas using an external script that converts TeX     formulas to images. The formula will be concatenated with the URL     provided. If *URL* is not specified, the Google Chart API will be used.@@ -827,10 +830,25 @@ indented one, two, or three spaces. The bullet must be followed by whitespace. +List items look best if subsequent lines are flush with the first+line (after the bullet):++    * here is my first+      list item.+    * and my second.++But markdown also allows a "lazy" format:++    * here is my first+    list item.+    * and my second.++### The four-space rule ###+ A list item may contain multiple paragraphs and other block-level-content.  Subsequent paragraphs must be preceded by a blank line-and indented four spaces or a tab.  The list will look better if-the first paragraph is aligned with the rest:+content. However, subsequent paragraphs must be preceded by a blank line+and indented four spaces or a tab. The list will look better if the first+paragraph is aligned with the rest:        * First paragraph. @@ -855,9 +873,9 @@         + brocolli         + chard -Markdown allows you to write list items "lazily," instead of-indenting continuation lines.  However, if there are multiple paragraphs-or other blocks in a list item, the first line of each must be indented.+As noted above, markdown allows you to write list items "lazily," instead of+indenting continuation lines. However, if there are multiple paragraphs or+other blocks in a list item, the first line of each must be indented.      + A lazy, lazy, list     item.@@ -868,6 +886,20 @@         Second paragraph of second     list item. +**Note:**  Although the four-space rule for continuation paragraphs+comes from the official [markdown syntax guide], the reference implementation,+`Markdown.pl`, does not follow it. So pandoc will give different results than+`Markdown.pl` when authors have indented continuation paragraphs fewer than+four spaces.++The [markdown syntax guide] is not explicit whether the four-space+rule applies to *all* block-level content in a list item; it only+mentions paragraphs and code blocks.  But it implies that the rule+applies to all block-level content (including nested lists), and+pandoc interprets it that way.++  [markdown syntax guide]:+    http://daringfireball.net/projects/markdown/syntax#list  ### Ordered lists ### 
Setup.hs view
@@ -40,7 +40,7 @@ runTestSuite args _ pkg lbi = do   let testDir = buildDir lbi </> "test-pandoc"   testDir' <- canonicalizePath testDir-  let testArgs = concatMap (\arg -> ["-t",arg]) args+  let testArgs = "--timeout=5" : concatMap (\arg -> ["-t",arg]) args   if any id [buildable (buildInfo exe) | exe <- executables pkg, exeName exe == "test-pandoc"]      then inDirectory "tests" $ rawSystem (testDir' </> "test-pandoc") testArgs >>= exitWith      else do
changelog view
@@ -1,4 +1,34 @@-pando (1.8.0.1)+pandoc (1.8.0.2)++  * HTML writer:++    + Stringify alt text instead of converting to HTML.+    + Break lines after block elements, not inside tags.+      HTML output now closely resembles that of tidy. Resolves Issue #134.++  * Markdown reader: Fixed bug in footnote block parser (pointed out+    by Jesse Rosenthal).  The problem arose when the blank line+    at the end of a footnote block contained indenting spaces.++  * Shared: Improved 'normalize' function so it normalizes Spaces too.+    In normal form, Space elements only occur to separate two non-Space+    elements.  So, we never have [Space], or [, ..., Space].++  * Tests:++    + Improved Arbitrary instance.+    + Added timeout for test instances.++  * README:++    + Added section on four-space rule for lists.  Resolves Issue #283.+    + Clarified optional arguments on math options.++  * markdown2pdf: Fixed bug with output file extensions.+    Previously `markdown2pdf test.txt -o test.en.pdf` would produce+    `test.pdf`, not `test.en.pdf`.  Thanks to Paolo Tanimoto for the fix.++pandoc (1.8.0.1)    * Revised Interact.hs so that it works with the CPP macros     in the UTF8 module.
man/man1/pandoc.1 view
@@ -232,7 +232,7 @@ .RS .RE .TP-.B \f[C]-m\f[] \f[I]URL\f[], \f[C]--latexmathml=\f[]\f[I]URL\f[]+.B \f[C]-m\f[] [\f[I]URL\f[]], \f[C]--latexmathml\f[][=\f[I]URL\f[]] Use the LaTeXMathML script to display embedded TeX math in HTML output. To insert a link to a local copy of the \f[C]LaTeXMathML.js\f[] script, provide a \f[I]URL\f[].@@ -244,18 +244,22 @@ .RS .RE .TP-.B \f[C]--mathml\f[]+.B \f[C]--mathml\f[][=\f[I]URL\f[]] Convert TeX math to MathML.-In standalone mode, a small javascript will be inserted that allows the-MathML to be viewed on some browsers.+In standalone mode, a small javascript (or a link to such a script if a+\f[I]URL\f[] is supplied) will be inserted that allows the MathML to be+viewed on some browsers. .RS .RE .TP-.B \f[C]--jsmath=\f[]\f[I]URL\f[]+.B \f[C]--jsmath\f[][=\f[I]URL\f[]] Use jsMath to display embedded TeX math in HTML output. The \f[I]URL\f[] should point to the jsMath load script (e.g. \f[C]jsMath/easy/load.js\f[]); if provided, it will be linked to in the header of standalone HTML documents.+If a \f[I]URL\f[] is not provided, no link to the jsMath load script+will be inserted; it is then up to the author to provide such a link in+the HTML template. .RS .RE .TP@@ -272,14 +276,14 @@ .RS .RE .TP-.B \f[C]--mimetex=\f[]\f[I]URL\f[]+.B \f[C]--mimetex\f[][=\f[I]URL\f[]] Render TeX math using the mimeTeX CGI script. If \f[I]URL\f[] is not specified, it is assumed that the script is at \f[C]/cgi-bin/mimetex.cgi\f[]. .RS .RE .TP-.B \f[C]--webtex=\f[]\f[I]URL\f[]+.B \f[C]--webtex\f[][=\f[I]URL\f[]] Render TeX formulas using an external script that converts TeX formulas to images. The formula will be concatenated with the URL provided.
man/man5/pandoc_markdown.5 view
@@ -372,10 +372,32 @@ one, two, or three spaces. The bullet must be followed by whitespace. .PP+List items look best if subsequent lines are flush with the first line+(after the bullet):+.IP+.nf+\f[C]+*\ here\ is\ my\ first+\ \ list\ item.+*\ and\ my\ second.+\f[]+.fi+.PP+But markdown also allows a "lazy" format:+.IP+.nf+\f[C]+*\ here\ is\ my\ first+list\ item.+*\ and\ my\ second.+\f[]+.fi+.SS The four-space rule+.PP A list item may contain multiple paragraphs and other block-level content.-Subsequent paragraphs must be preceded by a blank line and indented four-spaces or a tab.+However, subsequent paragraphs must be preceded by a blank line and+indented four spaces or a tab. The list will look better if the first paragraph is aligned with the rest: .IP@@ -410,8 +432,8 @@ \f[] .fi .PP-Markdown allows you to write list items "lazily," instead of indenting-continuation lines.+As noted above, markdown allows you to write list items "lazily,"+instead of indenting continuation lines. However, if there are multiple paragraphs or other blocks in a list item, the first line of each must be indented. .IP@@ -427,6 +449,18 @@ list\ item. \f[] .fi+.PP+\f[B]Note:\f[] Although the four-space rule for continuation paragraphs+comes from the official markdown syntax guide, the reference+implementation, \f[C]Markdown.pl\f[], does not follow it.+So pandoc will give different results than \f[C]Markdown.pl\f[] when+authors have indented continuation paragraphs fewer than four spaces.+.PP+The markdown syntax guide is not explicit whether the four-space rule+applies to \f[I]all\f[] block-level content in a list item; it only+mentions paragraphs and code blocks.+But it implies that the rule applies to all block-level content+(including nested lists), and pandoc interprets it that way. .SS Ordered lists .PP Ordered lists work just like bulleted lists, except that the items begin
pandoc.cabal view
@@ -1,5 +1,5 @@ Name:            pandoc-Version:         1.8.0.1+Version:         1.8.0.2 Cabal-Version:   >= 1.6 Build-Type:      Custom License:         GPL@@ -11,7 +11,7 @@ Stability:       alpha Homepage:        http://johnmacfarlane.net/pandoc Category:        Text-Tested-With:     GHC == 6.12.1, GHC == 6.12.3, GHC == 7.0.1+Tested-With:     GHC == 6.10.4, GHC == 6.12.1, GHC == 6.12.3, GHC == 7.0.1 Synopsis:        Conversion between markup formats Description:     Pandoc is a Haskell library for converting from one markup                  format to another, and a command-line tool that uses@@ -159,6 +159,10 @@ Extra-Tmp-Files: man/man1/pandoc.1,                  man/man1/markdown2pdf.1,                  man/man5/pandoc_markdown.5++Source-repository head+  type:          git+  location:      https://jgm@github.com/jgm/pandoc.git  Flag threaded   Description:   Compile markdown2pdf with -threaded option.
src/Tests/Arbitrary.hs view
@@ -6,17 +6,20 @@ import Test.QuickCheck.Gen import Test.QuickCheck.Arbitrary import Control.Monad (liftM, liftM2)-import Text.Pandoc-import Text.Pandoc.Shared+import Text.Pandoc.Definition+import Text.Pandoc.Shared (normalize, escapeURI) import Text.Pandoc.Builder  realString :: Gen String-realString = resize 8 arbitrary -- elements wordlist+realString = resize 8 $ listOf $ frequency [ (9, elements [' '..'\127'])+                                           , (1, elements ['\128'..'\9999']) ] -{--wordlist :: [String]-wordlist = ["foo","Bar","baz","\\","/",":","\"","'","féé"]--}+arbAttr :: Gen Attr+arbAttr = do+  id' <- elements ["","loc"]+  classes <- elements [[],["haskell"],["c","numberLines"]]+  keyvals <- elements [[],[("start","22")],[("a","11"),("b_2","a b c")]]+  return (id',classes,keyvals)  instance Arbitrary Inlines where   arbitrary = liftM fromList arbitrary@@ -27,69 +30,79 @@ instance Arbitrary Inline where   arbitrary = resize 3 $ arbInline 3 +arbInlines :: Int -> Gen [Inline]+arbInlines n = listOf1 (arbInline n) `suchThat` (not . startsWithSpace)+  where startsWithSpace (Space:_) = True+        startsWithSpace        _  = False+ -- restrict to 3 levels of nesting max; otherwise we get -- bogged down in indefinitely large structures arbInline :: Int -> Gen Inline arbInline n = frequency $ [ (60, liftM Str realString)                           , (60, return Space)-                          , (10, liftM2 Code arbitrary realString)+                          , (10, liftM2 Code arbAttr realString)                           , (5,  return EmDash)                           , (5,  return EnDash)                           , (5,  return Apostrophe)                           , (5,  return Ellipses)-                          , (5,  elements [ RawInline "html" "<a>*&amp;*</a>"+                          , (5,  elements [ RawInline "html" "<a id=\"eek\">"                                           , RawInline "latex" "\\my{command}" ])                           ] ++ [ x | x <- nesters, n > 1]-   where nesters = [ (10,  liftM Emph $ listOf $ arbInline (n-1))-                   , (10,  liftM Strong $ listOf $ arbInline (n-1))-                   , (10,  liftM Strikeout $ listOf $ arbInline (n-1))-                   , (10,  liftM Superscript $ listOf $ arbInline (n-1))-                   , (10,  liftM Subscript $ listOf $ arbInline (n-1))-                   , (10,  liftM SmallCaps $ listOf $ arbInline (n-1))+   where nesters = [ (10,  liftM Emph $ arbInlines (n-1))+                   , (10,  liftM Strong $ arbInlines (n-1))+                   , (10,  liftM Strikeout $ arbInlines (n-1))+                   , (10,  liftM Superscript $ arbInlines (n-1))+                   , (10,  liftM Subscript $ arbInlines (n-1))+--                   , (10,  liftM SmallCaps $ arbInlines (n-1))                    , (10,  do x1 <- arbitrary-                              x2 <- listOf $ arbInline (n-1)+                              x2 <- arbInlines (n-1)                               return $ Quoted x1 x2)                    , (10,  do x1 <- arbitrary                               x2 <- realString                               return $ Math x1 x2)-                   , (10,  do x1 <- listOf $ arbInline (n-1)+                   , (10,  do x1 <- arbInlines (n-1)                               x3 <- realString-                              x2 <- realString+                              x2 <- liftM escapeURI realString                               return $ Link x1 (x2,x3))-                   , (10,  do x1 <- listOf $ arbInline (n-1)+                   , (10,  do x1 <- arbInlines (n-1)                               x3 <- realString-                              x2 <- realString+                              x2 <- liftM escapeURI realString                               return $ Image x1 (x2,x3))-                   , (2,  liftM Note $ resize 3 $ listOf1 arbitrary)+                   , (2,  liftM Note $ resize 3 $ listOf1 $ arbBlock (n-1))                    ]  instance Arbitrary Block where   arbitrary = resize 3 $ arbBlock 3  arbBlock :: Int -> Gen Block-arbBlock n = frequency $ [ (10, liftM Plain arbitrary)-                         , (15, liftM Para arbitrary)-                         , (5,  liftM2 CodeBlock arbitrary realString)+arbBlock n = frequency $ [ (10, liftM Plain $ arbInlines (n-1))+                         , (15, liftM Para $ arbInlines (n-1))+                         , (5,  liftM2 CodeBlock arbAttr realString)                          , (2,  elements [ RawBlock "html"                                             "<div>\n*&amp;*\n</div>"                                          , RawBlock "latex"                                             "\\begin[opt]{env}\nhi\n{\\end{env}"                                          ])                          , (5,  do x1 <- choose (1 :: Int, 6)-                                   x2 <- arbitrary+                                   x2 <- arbInlines (n-1)                                    return (Header x1 x2))                          , (2, return HorizontalRule)                          ] ++ [x | x <- nesters, n > 0]-   where nesters = [ (5,  liftM BlockQuote $ listOf $ arbBlock (n-1))-                   , (5,  liftM2 OrderedList arbitrary-                          $ (listOf1 $ listOf1 $ arbBlock (n-1)))+   where nesters = [ (5,  liftM BlockQuote $ listOf1 $ arbBlock (n-1))+                   , (5,  do x2 <- arbitrary+                             x3 <- arbitrary+                             x1 <- arbitrary `suchThat` (> 0)+                             x4 <- listOf1 $ listOf1 $ arbBlock (n-1)+                             return $ OrderedList (x1,x2,x3) x4 )                    , (5,  liftM BulletList $ (listOf1 $ listOf1 $ arbBlock (n-1)))-                   , (5,  do x1 <- listOf $ listOf1 $ listOf1 $ arbBlock (n-1)-                             x2 <- arbitrary-                             return (DefinitionList $ zip x2 x1))+                   , (5,  do items <- listOf1 $ do+                                        x1 <- listOf1 $ listOf1 $ arbBlock (n-1)+                                        x2 <- arbInlines (n-1)+                                        return (x2,x1)+                             return $ DefinitionList items)                    , (2, do rs <- choose (1 :: Int, 4)                             cs <- choose (1 :: Int, 4)-                            x1 <- arbitrary+                            x1 <- arbInlines (n-1)                             x2 <- vector cs                             x3 <- vectorOf cs $ elements [0, 0.25]                             x4 <- vectorOf cs $ listOf $ arbBlock (n-1)
src/Tests/Readers/Markdown.hs view
@@ -6,6 +6,7 @@ import Tests.Helpers import Tests.Arbitrary() import Text.Pandoc.Builder+-- import Text.Pandoc.Shared ( normalize ) import Text.Pandoc  markdown :: String -> Pandoc@@ -16,6 +17,19 @@      => String -> (String, c) -> Test (=:) = test markdown +{-+p_markdown_round_trip :: Block -> Bool+p_markdown_round_trip b = matches d' d''+  where d'  = normalize $ Pandoc (Meta [] [] []) [b]+        d'' = normalize+              $ readMarkdown defaultParserState{ stateSmart = True }+              $ writeMarkdown defaultWriterOptions d'+        matches (Pandoc _ [Plain []]) (Pandoc _ []) = True+        matches (Pandoc _ [Para []]) (Pandoc _ []) = True+        matches (Pandoc _ [Plain xs]) (Pandoc _ [Para xs']) = xs == xs'+        matches x y = x == y+-}+ tests :: [Test] tests = [ testGroup "inline code"           [ "with attribute" =:@@ -26,4 +40,16 @@             "`*` {.haskell .special x=\"7\"}"             =?> para (codeWith ("",["haskell","special"],[("x","7")]) "*")           ]+        , testGroup "footnotes"+          [ "indent followed by newline and flush-left text" =:+            "[^1]\n\n[^1]: my note\n\n     \nnot in note\n"+            =?> para (note (para "my note")) +++ para "not in note"+          , "indent followed by newline and indented text" =:+            "[^1]\n\n[^1]: my note\n     \n    in note\n"+            =?> para (note (para "my note" +++ para "in note"))+          ]+-- the round-trip properties frequently fail+--        , testGroup "round trip"+--          [ property "p_markdown_round_trip" p_markdown_round_trip+--          ]         ]
src/Tests/Shared.hs view
@@ -10,6 +10,8 @@ tests = [ testGroup "normalize"           [ property "p_normalize_blocks_rt" p_normalize_blocks_rt           , property "p_normalize_inlines_rt" p_normalize_inlines_rt+          , property "p_normalize_no_trailing_spaces"+              p_normalize_no_trailing_spaces           ]         ] @@ -19,3 +21,6 @@ p_normalize_inlines_rt :: [Inline] -> Bool p_normalize_inlines_rt ils = normalize ils == normalize (normalize ils) +p_normalize_no_trailing_spaces :: [Inline] -> Bool+p_normalize_no_trailing_spaces ils = null ils' || last ils' /= Space+  where ils' = normalize $ ils ++ [Space]
src/Tests/Writers/HTML.hs view
@@ -38,4 +38,9 @@           , "nolanguage" =: codeWith ("",["nolanguage"],[]) ">>="             =?> "<code class=\"nolanguage\">&gt;&gt;=</code>"           ]+        , testGroup "images"+          [ "alt with formatting" =:+            image "/url" "title" ("my " +++ emph "image")+            =?> "<img src=\"/url\" title=\"title\" alt=\"my image\" />"+          ]         ]
src/Tests/Writers/Native.hs view
@@ -11,8 +11,9 @@   read (writeNative defaultWriterOptions{ writerStandalone = True } d) == d  p_write_blocks_rt :: [Block] -> Bool-p_write_blocks_rt bs =-  read (writeNative defaultWriterOptions (Pandoc (Meta [] [] []) bs)) == bs+p_write_blocks_rt bs = length bs > 20 ||+  read (writeNative defaultWriterOptions (Pandoc (Meta [] [] []) bs)) ==+  bs  tests :: [Test] tests = [ property "p_write_rt" p_write_rt
src/Text/Pandoc/Readers/Markdown.hs view
@@ -245,15 +245,17 @@ noteMarker = string "[^" >> many1Till (satisfy $ not . isBlank) (char ']')  rawLine :: GenParser Char ParserState [Char]-rawLine = do+rawLine = try $ do   notFollowedBy blankline   notFollowedBy' $ try $ skipNonindentSpaces >> noteMarker-  contents <- many1 nonEndline-  end <- option "" (newline >> optional indentSpaces >> return "\n") -  return $ contents ++ end+  optional indentSpaces+  anyLine  rawLines :: GenParser Char ParserState [Char]-rawLines = many1 rawLine >>= return . concat+rawLines = do+  first <- anyLine+  rest <- many rawLine+  return $ unlines (first:rest)  noteBlock :: GenParser Char ParserState [Char] noteBlock = try $ do@@ -263,7 +265,9 @@   char ':'   optional blankline   optional indentSpaces-  raw <- sepBy rawLines (try (blankline >> indentSpaces))+  raw <- sepBy rawLines+             (try (blankline >> indentSpaces >>+                   notFollowedBy blankline))   optional blanklines   endPos <- getPosition   let newnote = (ref, (intercalate "\n" raw) ++ "\n\n")
src/Text/Pandoc/Shared.hs view
@@ -243,10 +243,7 @@ -- remove empty Str elements. normalizeSpaces :: [Inline] -> [Inline] normalizeSpaces = cleanup . dropWhile isSpaceOrEmpty-  where isSpaceOrEmpty Space = True-        isSpaceOrEmpty (Str "") = True-        isSpaceOrEmpty _ = False-        cleanup [] = []+ where  cleanup [] = []         cleanup (Space:rest) = let rest' = dropWhile isSpaceOrEmpty rest                                in  case rest' of                                    []            -> []@@ -254,13 +251,18 @@         cleanup ((Str ""):rest) = cleanup rest         cleanup (x:rest) = x : cleanup rest +isSpaceOrEmpty :: Inline -> Bool+isSpaceOrEmpty Space = True+isSpaceOrEmpty (Str "") = True+isSpaceOrEmpty _ = False+ -- | Normalize @Pandoc@ document, consolidating doubled 'Space's, -- combining adjacent 'Str's and 'Emph's, remove 'Null's and -- empty elements, etc. normalize :: (Eq a, Data a) => a -> a normalize = topDown removeEmptyBlocks .             topDown consolidateInlines .-            bottomUp removeEmptyInlines+            bottomUp (removeEmptyInlines . removeTrailingInlineSpaces)  removeEmptyBlocks :: [Block] -> [Block] removeEmptyBlocks (Null : xs) = removeEmptyBlocks xs@@ -283,6 +285,12 @@ removeEmptyInlines (Str "" : zs) = removeEmptyInlines zs removeEmptyInlines (x : xs) = x : removeEmptyInlines xs removeEmptyInlines [] = []++removeTrailingInlineSpaces :: [Inline] -> [Inline]+removeTrailingInlineSpaces = reverse . removeLeadingInlineSpaces . reverse++removeLeadingInlineSpaces :: [Inline] -> [Inline]+removeLeadingInlineSpaces = dropWhile isSpaceOrEmpty  consolidateInlines :: [Inline] -> [Inline] consolidateInlines (Str x : ys) =
src/Text/Pandoc/Writers/HTML.hs view
@@ -42,7 +42,7 @@ import Data.List ( isPrefixOf, intersperse ) import Data.Maybe ( catMaybes ) import Control.Monad.State-import Text.XHtml.Transitional hiding ( stringToHtml )+import Text.XHtml.Transitional hiding ( stringToHtml, unordList, ordList ) import Text.TeXMath import Text.XML.Light.Output @@ -58,16 +58,17 @@  -- Helpers to render HTML with the appropriate function. -renderFragment :: (HTML html) => WriterOptions -> html -> String-renderFragment opts = if writerWrapText opts-                         then renderHtmlFragment-                         else showHtmlFragment- -- | Modified version of Text.XHtml's stringToHtml. -- Use unicode characters wherever possible. stringToHtml :: String -> Html stringToHtml = primHtml . escapeStringForXML +-- | Hard linebreak.+nl :: WriterOptions -> Html+nl opts = if writerWrapText opts+             then primHtml "\n"+             else noHtml+ -- | Convert Pandoc document to Html string. writeHtmlString :: WriterOptions -> Pandoc -> String writeHtmlString opts d =@@ -75,7 +76,7 @@                                                  defaultWriterState   in  if writerStandalone opts          then inTemplate opts tit auths date toc body' newvars-         else renderFragment opts body'+         else dropWhile (=='\n') $ showHtmlFragment body'  -- | Convert Pandoc document to Html structure. writeHtml :: WriterOptions -> Pandoc -> Html@@ -119,13 +120,13 @@                                            cutUp xs ++ [endSlide]                 _                     -> [startSlide] ++ cutUp blocks ++                                            [endSlide]-  blocks' <- liftM toHtmlFromList $+  blocks' <- liftM (toHtmlFromList . intersperse (nl opts)) $               if writerSlideVariant opts `elem` [SlidySlides, S5Slides]                  then mapM (blockToHtml opts) slides                  else mapM (elementToHtml opts) sects   st <- get   let notes = reverse (stNotes st)-  let thebody = blocks' +++ footnoteSection notes+  let thebody = blocks' +++ footnoteSection opts notes   let  math = if stMath st                 then case writerHTMLMathMethod opts of                            LaTeXMathML (Just url) ->@@ -147,7 +148,7 @@                 else noHtml   let newvars = [("highlighting-css", defaultHighlightingCss) |                    stHighlighting st] ++-                [("math", renderHtmlFragment math) | stMath st]+                [("math", showHtmlFragment math) | stMath st]   return (tit, auths, date, toc, thebody, newvars)  inTemplate :: TemplateTarget a@@ -166,13 +167,13 @@       date'       = stripTags $ showHtmlFragment date       variables   = writerVariables opts ++ newvars       context     = variables ++-                    [ ("body", renderHtmlFragment body')+                    [ ("body", dropWhile (=='\n') $ showHtmlFragment body')                     , ("pagetitle", topTitle')-                    , ("title", renderHtmlFragment tit)+                    , ("title", dropWhile (=='\n') $ showHtmlFragment tit)                     , ("date", date') ] ++                     [ ("html5","true") | writerHtml5 opts ] ++                     (case toc of-                         Just t  -> [ ("toc", renderHtmlFragment t)]+                         Just t  -> [ ("toc", showHtmlFragment t)]                          Nothing -> [])  ++                     [ ("author", a) | a <- authors ]   in  renderTemplate context $ writerTemplate opts@@ -181,6 +182,14 @@ prefixedId :: WriterOptions -> String -> HtmlAttr prefixedId opts s = identifier $ writerIdentifierPrefix opts ++ s +-- | Replacement for Text.XHtml's unordList.+unordList :: WriterOptions -> ([Html] -> Html)+unordList opts items = ulist << toListItems opts items++-- | Replacement for Text.XHtml's ordList.+ordList :: WriterOptions -> ([Html] -> Html)+ordList opts items = olist << toListItems opts items+ -- | Construct table of contents from list of elements. tableOfContents :: WriterOptions -> [Element] -> State WriterState (Maybe Html) tableOfContents _ [] = return Nothing@@ -192,10 +201,12 @@               then Nothing               else Just $                    if writerHtml5 opts-                      then tag "nav" ! [prefixedId opts' "TOC"] $-                           unordList tocList-                      else thediv ! [prefixedId opts' "TOC"] $-                           unordList tocList+                      then (tag "nav" ! [prefixedId opts' "TOC"] $+                            nl opts +++ unordList opts tocList +++ nl opts)+                            +++ nl opts+                      else (thediv ! [prefixedId opts' "TOC"] $+                            nl opts +++ unordList opts tocList +++ nl opts)+                            +++ nl opts  -- | Convert section number to string showSecNum :: [Int] -> String@@ -214,7 +225,7 @@   subHeads <- mapM (elementToListItem opts) subsecs >>= return . catMaybes   let subList = if null subHeads                    then noHtml-                   else unordList subHeads+                   else unordList opts subHeads   return $ Just $ (anchor ! [href ("#" ++ writerIdentifierPrefix opts ++ id')] $ txt) +++ subList  -- | Convert an Element to Html.@@ -230,21 +241,24 @@                                   writerSectionDivs opts || slides)]   let stuff = header'' : innerContents   return $ if slides   -- S5 gets confused by the extra divs around sections-              then toHtmlFromList stuff+              then toHtmlFromList $ intersperse (nl opts) stuff               else if writerSectionDivs opts                       then if writerHtml5 opts                               then tag "section" ! [prefixedId opts id']-                                     << stuff-                              else thediv ! [prefixedId opts id'] << stuff-                      else toHtmlFromList stuff+                                     << intersperse (nl opts) stuff+                              else thediv ! [prefixedId opts id'] <<+                                      intersperse (nl opts) stuff+                      else toHtmlFromList $ intersperse (nl opts) stuff  -- | Convert list of Note blocks to a footnote <div>. -- Assumes notes are sorted.-footnoteSection :: [Html] -> Html-footnoteSection notes =+footnoteSection :: WriterOptions -> [Html] -> Html+footnoteSection opts notes =   if null notes       then noHtml-     else thediv ! [theclass "footnotes"] $ hr +++ (olist << notes)+     else nl opts +++ (thediv ! [theclass "footnotes"]+          $ nl opts +++ hr +++ nl opts ++++            (olist << (notes ++ [nl opts])) +++ nl opts)   -- | Parse a mailto link; return Just (name, domain) or Nothing.@@ -306,20 +320,23 @@  -- | Convert Pandoc block element to HTML. blockToHtml :: WriterOptions -> Block -> State WriterState Html-blockToHtml _ Null = return $ noHtml +blockToHtml _ Null = return noHtml blockToHtml opts (Plain lst) = inlineListToHtml opts lst blockToHtml opts (Para [Image txt (s,tit)]) = do   img <- inlineToHtml opts (Image txt (s,tit))   capt <- inlineListToHtml opts txt   return $ if writerHtml5 opts               then tag "figure" <<-                    [img, tag "figcaption" << capt]+                    [nl opts, img, tag "figcaption" << capt, nl opts]               else thediv ! [theclass "figure"] <<-                    [img, paragraph ! [theclass "caption"] << capt]-blockToHtml opts (Para lst) = inlineListToHtml opts lst >>= (return . paragraph)+                    [nl opts, img, paragraph ! [theclass "caption"] << capt,+                    nl opts]+blockToHtml opts (Para lst) = do+  contents <- inlineListToHtml opts lst+  return $ paragraph contents blockToHtml _ (RawBlock "html" str) = return $ primHtml str blockToHtml _ (RawBlock _ _) = return noHtml-blockToHtml _ (HorizontalRule) = return $ hr+blockToHtml _ (HorizontalRule) = return hr blockToHtml opts (CodeBlock (id',classes,keyvals) rawCode) = do   let classes' = if writerLiterateHaskell opts                     then classes@@ -335,7 +352,8 @@                     in  return $ pre ! attrs $ thecode <<                                  (replicate (length leadingBreaks) br +++                                  [stringToHtml $ addBird rawCode'])-         Right h -> modify (\st -> st{ stHighlighting = True }) >> return h+         Right h -> modify (\st -> st{ stHighlighting = True }) >>+                    return h blockToHtml opts (BlockQuote blocks) =   -- in S5, treat list in blockquote specially   -- if default is incremental, make it nonincremental; @@ -348,9 +366,12 @@              [OrderedList attribs lst] ->                                    blockToHtml (opts {writerIncremental = inc})                                   (OrderedList attribs lst)-             _                 -> blockListToHtml opts blocks >>= -                                  (return . blockquote)-     else blockListToHtml opts blocks >>= (return . blockquote)+             _                 -> do contents <- blockListToHtml opts blocks+                                     return $ blockquote (nl opts ++++                                               contents +++ nl opts)+     else do+       contents <- blockListToHtml opts blocks+       return $ blockquote (nl opts +++ contents +++ nl opts) blockToHtml opts (Header level lst) = do    contents <- inlineListToHtml opts lst   secnum <- liftM stSecNum get@@ -361,20 +382,20 @@   let contents''  = if writerTableOfContents opts                        then anchor ! [href $ "#" ++ writerIdentifierPrefix opts ++ "TOC"] $ contents'                        else contents'-  return $ case level of+  return $ (case level of               1 -> h1 contents''               2 -> h2 contents''               3 -> h3 contents''               4 -> h4 contents''               5 -> h5 contents''               6 -> h6 contents''-              _ -> paragraph contents''+              _ -> paragraph contents'') blockToHtml opts (BulletList lst) = do   contents <- mapM (blockListToHtml opts) lst   let attribs = if writerIncremental opts                    then [theclass "incremental"]                    else []-  return $ unordList ! attribs $ contents+  return $ (unordList opts contents) ! attribs blockToHtml opts (OrderedList (startnum, numstyle, _) lst) = do   contents <- mapM (blockListToHtml opts) lst   let numstyle' = camelCaseToHyphenated $ show numstyle@@ -397,20 +418,23 @@                            else [thestyle $ "list-style-type: " ++                                    numstyle']                    else [])-  return $ ordList ! attribs $ contents+  return $ (ordList opts contents) ! attribs blockToHtml opts (DefinitionList lst) = do   contents <- mapM (\(term, defs) ->                   do term' <- liftM (dterm <<) $ inlineListToHtml opts term-                     defs' <- mapM (liftM (ddef <<) . blockListToHtml opts) defs-                     return $ term' : defs') lst+                     defs' <- mapM ((liftM (\x -> ddef << (x +++ nl opts))) .+                                    blockListToHtml opts) defs+                     return $ nl opts : term' : nl opts : defs') lst   let attribs = if writerIncremental opts                    then [theclass "incremental"]                    else []-  return $ dlist ! attribs << concat contents+  return $ dlist ! attribs << (concat contents +++ nl opts) blockToHtml opts (Table capt aligns widths headers rows') = do   captionDoc <- if null capt                    then return noHtml-                   else inlineListToHtml opts capt >>= return . caption+                   else do+                     cs <- inlineListToHtml opts capt+                     return $ caption cs +++ nl opts   let percent w = show (truncate (100*w) :: Integer) ++ "%"   let widthAttrs w = if writerHtml5 opts                         then [thestyle $ "width: " ++ percent w]@@ -418,13 +442,17 @@   let coltags = if all (== 0.0) widths                    then noHtml                    else concatHtml $ map-                         (\w -> col ! (widthAttrs w) $ noHtml) widths+                         (\w -> (col ! (widthAttrs w)) noHtml +++ nl opts)+                         widths   head' <- if all null headers               then return noHtml-              else liftM (thead <<) $ tableRowToHtml opts aligns 0 headers-  body' <- liftM (tbody <<) $+              else do+                contents <- tableRowToHtml opts aligns 0 headers+                return $ thead << (nl opts +++ contents) +++ nl opts+  body' <- liftM (\x -> tbody << (nl opts +++ x)) $                zipWithM (tableRowToHtml opts aligns) [1..] rows'-  return $ table $ captionDoc +++ coltags +++ head' +++ body'+  return $ table $ nl opts +++ captionDoc +++ coltags +++ head' ++++                   body' +++ nl opts  tableRowToHtml :: WriterOptions                -> [Alignment]@@ -440,7 +468,8 @@   cols'' <- sequence $ zipWith              (\alignment item -> tableItemToHtml opts mkcell alignment item)              aligns cols'-  return $ tr ! [theclass rowclass] $ toHtmlFromList cols''+  return $ (tr ! [theclass rowclass] $ nl opts +++ toHtmlFromList cols'')+          +++ nl opts  alignmentToString :: Alignment -> [Char] alignmentToString alignment = case alignment of@@ -459,11 +488,18 @@   let alignAttrs = if writerHtml5 opts                       then [thestyle $ "align: " ++ alignmentToString align']                       else [align $ alignmentToString align']-  return $ tag' ! alignAttrs $ contents+  return $ (tag' ! alignAttrs) contents +++ nl opts +toListItems :: WriterOptions -> [Html] -> [Html]+toListItems opts items = map (toListItem opts) items ++ [nl opts]++toListItem :: WriterOptions -> Html -> Html+toListItem opts item = nl opts +++ li item+ blockListToHtml :: WriterOptions -> [Block] -> State WriterState Html-blockListToHtml opts lst = -  mapM (blockToHtml opts) lst >>= return . toHtmlFromList+blockListToHtml opts lst =+  mapM (blockToHtml opts) lst >>=+  return . toHtmlFromList . intersperse (nl opts)  -- | Convert list of Pandoc inline elements to HTML. inlineListToHtml :: WriterOptions -> [Inline] -> State WriterState Html@@ -566,8 +602,7 @@                                  if null tit then [] else [title tit]) $                                   linkText     (Image txt (s,tit)) -> do-                        alternate <- inlineListToHtml opts txt-                        let alternate' = renderFragment opts alternate+                        let alternate' = stringify txt                         let attributes = [src s] ++                                          (if null tit                                              then [] @@ -610,5 +645,5 @@                                   _           -> otherBlocks ++ [lastBlock,                                                  Plain backlink]   in  do contents <- blockListToHtml opts blocks'-         return $ li ! [prefixedId opts ("fn" ++ ref)] $ contents+         return $ nl opts +++ (li ! [prefixedId opts ("fn" ++ ref)]) contents 
src/markdown2pdf.hs view
@@ -37,7 +37,7 @@  runPandoc :: [String] -> FilePath -> IO (Either String FilePath) runPandoc inputsAndArgs output = do-  let texFile = replaceExtension output "tex"+  let texFile = addExtension output "tex"   result <- run "pandoc" $     ["-s", "--no-wrap", "-r", "markdown", "-w", "latex"]     ++ inputsAndArgs ++ ["-o", texFile]
tests/lhs-test.fragment.html+lhs view
@@ -1,50 +1,15 @@-<h1 id="lhs-test"->lhs test</h1-><p-><code-  >unsplit</code-  > is an arrow that takes a pair of values and combines them to return a single value:</p-><pre class="sourceCode haskell"-><code-  >&gt; <span class="ot"-    >unsplit </span-    ><span class="ot"-    >::</span-    > (<span class="dt"-    >Arrow</span-    > a) <span class="ot"-    >=&gt;</span-    > (b <span class="ot"-    >-&gt;</span-    > c <span class="ot"-    >-&gt;</span-    > d) <span class="ot"-    >-&gt;</span-    > a (b, c) d<br-     />&gt; unsplit <span class="fu"-    >=</span-    > arr <span class="fu"-    >.</span-    > <span class="fu"-    >uncurry</span-    >       <br-     />&gt;           <span class="co"-    >-- arr (\op (x,y) -&gt; x `op` y) </span-    ></code-  ></pre-><p-><code-  >(***)</code-  > combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p-><pre-><code-  >f *** g = first f &gt;&gt;&gt; second g-</code-  ></pre-><p->Block quote:</p-><blockquote-><p-  >foo bar</p-  ></blockquote->+<h1 id="lhs-test">lhs test</h1>++<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>++<pre class="sourceCode haskell"><code>&gt; <span class="ot">unsplit </span><span class="ot">::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d<br/>&gt; unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>       <br/>&gt;           <span class="co">-- arr (\op (x,y) -&gt; x `op` y) </span></code></pre>++<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>++<pre><code>f *** g = first f &gt;&gt;&gt; second g</code></pre>++<p>Block quote:</p>++<blockquote>+<p>foo bar</p>+</blockquote>
tests/lhs-test.html view
@@ -25,55 +25,15 @@   </style> </head> <body>-<h1 id="lhs-test"->lhs test</h1-><p-><code-  >unsplit</code-  > is an arrow that takes a pair of values and combines them to return a single value:</p-><pre class="sourceCode"-><code class="sourceCode haskell"-  ><span class="ot"-    >unsplit </span-    ><span class="ot"-    >::</span-    > (<span class="dt"-    >Arrow</span-    > a) <span class="ot"-    >=&gt;</span-    > (b <span class="ot"-    >-&gt;</span-    > c <span class="ot"-    >-&gt;</span-    > d) <span class="ot"-    >-&gt;</span-    > a (b, c) d<br-     />unsplit <span class="fu"-    >=</span-    > arr <span class="fu"-    >.</span-    > <span class="fu"-    >uncurry</span-    >       <br-     />          <span class="co"-    >-- arr (\op (x,y) -&gt; x `op` y) </span-    ></code-  ></pre-><p-><code-  >(***)</code-  > combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p-><pre-><code-  >f *** g = first f &gt;&gt;&gt; second g-</code-  ></pre-><p->Block quote:</p-><blockquote-><p-  >foo bar</p-  ></blockquote->+<h1 id="lhs-test">lhs test</h1>+<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>+<pre class="sourceCode"><code class="sourceCode haskell"><span class="ot">unsplit </span><span class="ot">::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d<br />unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>       <br />          <span class="co">-- arr (\op (x,y) -&gt; x `op` y) </span></code></pre>+<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>+<pre><code>f *** g = first f &gt;&gt;&gt; second g+</code></pre>+<p>Block quote:</p>+<blockquote>+<p>foo bar</p>+</blockquote> </body> </html>
tests/lhs-test.html+lhs view
@@ -25,55 +25,15 @@   </style> </head> <body>-<h1 id="lhs-test"->lhs test</h1-><p-><code-  >unsplit</code-  > is an arrow that takes a pair of values and combines them to return a single value:</p-><pre class="sourceCode"-><code class="sourceCode haskell"-  >&gt; <span class="ot"-    >unsplit </span-    ><span class="ot"-    >::</span-    > (<span class="dt"-    >Arrow</span-    > a) <span class="ot"-    >=&gt;</span-    > (b <span class="ot"-    >-&gt;</span-    > c <span class="ot"-    >-&gt;</span-    > d) <span class="ot"-    >-&gt;</span-    > a (b, c) d<br-     />&gt; unsplit <span class="fu"-    >=</span-    > arr <span class="fu"-    >.</span-    > <span class="fu"-    >uncurry</span-    >       <br-     />&gt;           <span class="co"-    >-- arr (\op (x,y) -&gt; x `op` y) </span-    ></code-  ></pre-><p-><code-  >(***)</code-  > combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p-><pre-><code-  >f *** g = first f &gt;&gt;&gt; second g-</code-  ></pre-><p->Block quote:</p-><blockquote-><p-  >foo bar</p-  ></blockquote->+<h1 id="lhs-test">lhs test</h1>+<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>+<pre class="sourceCode"><code class="sourceCode haskell">&gt; <span class="ot">unsplit </span><span class="ot">::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d<br />&gt; unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>       <br />&gt;           <span class="co">-- arr (\op (x,y) -&gt; x `op` y) </span></code></pre>+<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>+<pre><code>f *** g = first f &gt;&gt;&gt; second g+</code></pre>+<p>Block quote:</p>+<blockquote>+<p>foo bar</p>+</blockquote> </body> </html>
tests/lhs-test.nohl.html view
@@ -4,36 +4,36 @@   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <meta name="generator" content="pandoc" />   <title></title>+  <style type="text/css">+table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre +   { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }+td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }+td.sourceCode { padding-left: 5px; }+code.sourceCode span.kw { color: #007020; font-weight: bold; } +code.sourceCode span.dt { color: #902000; }+code.sourceCode span.dv { color: #40a070; }+code.sourceCode span.bn { color: #40a070; }+code.sourceCode span.fl { color: #40a070; }+code.sourceCode span.ch { color: #4070a0; }+code.sourceCode span.st { color: #4070a0; }+code.sourceCode span.co { color: #60a0b0; font-style: italic; }+code.sourceCode span.ot { color: #007020; }+code.sourceCode span.al { color: red; font-weight: bold; }+code.sourceCode span.fu { color: #06287e; }+code.sourceCode span.re { }+code.sourceCode span.er { color: red; font-weight: bold; }+  </style> </head> <body>-<h1 id="lhs-test"->lhs test</h1-><p-><code-  >unsplit</code-  > is an arrow that takes a pair of values and combines them to return a single value:</p-><pre class="sourceCode haskell"-><code-  >unsplit :: (Arrow a) =&gt; (b -&gt; c -&gt; d) -&gt; a (b, c) d-unsplit = arr . uncurry       -          -- arr (\op (x,y) -&gt; x `op` y) -</code-  ></pre-><p-><code-  >(***)</code-  > combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p-><pre-><code-  >f *** g = first f &gt;&gt;&gt; second g-</code-  ></pre-><p->Block quote:</p-><blockquote-><p-  >foo bar</p-  ></blockquote->+<h1 id="lhs-test">lhs test</h1>+<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>+<pre class="sourceCode"><code class="sourceCode haskell"><span class="ot">unsplit </span><span class="ot">::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d<br />unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>       <br />          <span class="co">-- arr (\op (x,y) -&gt; x `op` y) </span></code></pre>+<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>+<pre><code>f *** g = first f &gt;&gt;&gt; second g+</code></pre>+<p>Block quote:</p>+<blockquote>+<p>foo bar</p>+</blockquote> </body> </html>
tests/lhs-test.nohl.html+lhs view
@@ -4,36 +4,36 @@   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <meta name="generator" content="pandoc" />   <title></title>+  <style type="text/css">+table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre +   { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }+td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }+td.sourceCode { padding-left: 5px; }+code.sourceCode span.kw { color: #007020; font-weight: bold; } +code.sourceCode span.dt { color: #902000; }+code.sourceCode span.dv { color: #40a070; }+code.sourceCode span.bn { color: #40a070; }+code.sourceCode span.fl { color: #40a070; }+code.sourceCode span.ch { color: #4070a0; }+code.sourceCode span.st { color: #4070a0; }+code.sourceCode span.co { color: #60a0b0; font-style: italic; }+code.sourceCode span.ot { color: #007020; }+code.sourceCode span.al { color: red; font-weight: bold; }+code.sourceCode span.fu { color: #06287e; }+code.sourceCode span.re { }+code.sourceCode span.er { color: red; font-weight: bold; }+  </style> </head> <body>-<h1 id="lhs-test"->lhs test</h1-><p-><code-  >unsplit</code-  > is an arrow that takes a pair of values and combines them to return a single value:</p-><pre class="sourceCode literate haskell"-><code-  >&gt; unsplit :: (Arrow a) =&gt; (b -&gt; c -&gt; d) -&gt; a (b, c) d-&gt; unsplit = arr . uncurry       -&gt;           -- arr (\op (x,y) -&gt; x `op` y) -</code-  ></pre-><p-><code-  >(***)</code-  > combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p-><pre-><code-  >f *** g = first f &gt;&gt;&gt; second g-</code-  ></pre-><p->Block quote:</p-><blockquote-><p-  >foo bar</p-  ></blockquote->+<h1 id="lhs-test">lhs test</h1>+<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p>+<pre class="sourceCode"><code class="sourceCode haskell">&gt; <span class="ot">unsplit </span><span class="ot">::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d<br />&gt; unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>       <br />&gt;           <span class="co">-- arr (\op (x,y) -&gt; x `op` y) </span></code></pre>+<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p>+<pre><code>f *** g = first f &gt;&gt;&gt; second g+</code></pre>+<p>Block quote:</p>+<blockquote>+<p>foo bar</p>+</blockquote> </body> </html>
tests/s5.basic.html view
@@ -35,25 +35,21 @@   <h4>July 15, 2006</h4> </div> <div class="slide">-<h1->First slide</h1-><ul-><li-  >first bullet</li-  ><li-  >second bullet</li-  ></ul-></div>++<h1>First slide</h1>+<ul>+<li>first bullet</li>+<li>second bullet</li>+</ul>+</div>+ <div class="slide">-<h1->Math</h1-><ul-><li-  ><span class="math"-    >$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span-    ></li-  ></ul-></div>++<h1>Math</h1>+<ul>+<li><span class="math">$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span></li>+</ul>+</div> </div> </body> </html>
tests/s5.fancy.html view
@@ -17,8 +17,7 @@   <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />   <!-- S5 JS -->   <script src="ui/default/slides.js" type="text/javascript"></script>-  <script type="text/javascript"-  >/*+  <script type="text/javascript">/*   LaTeXMathML.js from http://math.etsu.edu/LaTeXMathML/   Adapted by Jeff Knisely and Douglas Woodall from ASCIIMathML.js v. 1.4.7,   (c) 2005 Peter Jipsen http://www.chapman.edu/~jipsen.@@ -216,8 +215,7 @@   {existing();generic();};}   else   {window.onload=generic;}}-  </script-  >+  </script> </head> <body> <div class="layout">@@ -236,25 +234,21 @@   <h4>July 15, 2006</h4> </div> <div class="slide">-<h1->First slide</h1-><ul class="incremental"-><li-  >first bullet</li-  ><li-  >second bullet</li-  ></ul-></div>++<h1>First slide</h1>+<ul class="incremental">+<li>first bullet</li>+<li>second bullet</li>+</ul>+</div>+ <div class="slide">-<h1->Math</h1-><ul class="incremental"-><li-  ><span class="LaTeX"-    >$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span-    ></li-  ></ul-></div>++<h1>Math</h1>+<ul class="incremental">+<li><span class="LaTeX">$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span></li>+</ul>+</div> </div> </body> </html>
tests/s5.fragment.html view
@@ -1,17 +1,9 @@-<h1 id="first-slide"->First slide</h1-><ul-><li-  >first bullet</li-  ><li-  >second bullet</li-  ></ul-><h1 id="math"->Math</h1-><ul-><li-  ><span class="math"-    >$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span-    ></li-  ></ul->+<h1 id="first-slide">First slide</h1>+<ul>+<li>first bullet</li>+<li>second bullet</li>+</ul>+<h1 id="math">Math</h1>+<ul>+<li><span class="math">$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span></li>+</ul>
tests/s5.inserts.html view
@@ -13,23 +13,15 @@ <body> STUFF INSERTED <h1 class="title">My S5 Document</h1>-<h1 id="first-slide"->First slide</h1-><ul-><li-  >first bullet</li-  ><li-  >second bullet</li-  ></ul-><h1 id="math"->Math</h1-><ul-><li-  ><span class="math"-    >$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span-    ></li-  ></ul->+<h1 id="first-slide">First slide</h1>+<ul>+<li>first bullet</li>+<li>second bullet</li>+</ul>+<h1 id="math">Math</h1>+<ul>+<li><span class="math">$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span></li>+</ul> STUFF INSERTED </body> </html>
tests/tables.html view
@@ -1,301 +1,198 @@-<p->Simple table with caption:</p-><table-><caption-  >Demonstration of simple table syntax.</caption-  ><thead-  ><tr class="header"-    ><th align="right"-      >Right</th-      ><th align="left"-      >Left</th-      ><th align="center"-      >Center</th-      ><th align="left"-      >Default</th-      ></tr-    ></thead-  ><tbody-  ><tr class="odd"-    ><td align="right"-      >12</td-      ><td align="left"-      >12</td-      ><td align="center"-      >12</td-      ><td align="left"-      >12</td-      ></tr-    ><tr class="even"-    ><td align="right"-      >123</td-      ><td align="left"-      >123</td-      ><td align="center"-      >123</td-      ><td align="left"-      >123</td-      ></tr-    ><tr class="odd"-    ><td align="right"-      >1</td-      ><td align="left"-      >1</td-      ><td align="center"-      >1</td-      ><td align="left"-      >1</td-      ></tr-    ></tbody-  ></table-><p->Simple table without caption:</p-><table-><thead-  ><tr class="header"-    ><th align="right"-      >Right</th-      ><th align="left"-      >Left</th-      ><th align="center"-      >Center</th-      ><th align="left"-      >Default</th-      ></tr-    ></thead-  ><tbody-  ><tr class="odd"-    ><td align="right"-      >12</td-      ><td align="left"-      >12</td-      ><td align="center"-      >12</td-      ><td align="left"-      >12</td-      ></tr-    ><tr class="even"-    ><td align="right"-      >123</td-      ><td align="left"-      >123</td-      ><td align="center"-      >123</td-      ><td align="left"-      >123</td-      ></tr-    ><tr class="odd"-    ><td align="right"-      >1</td-      ><td align="left"-      >1</td-      ><td align="center"-      >1</td-      ><td align="left"-      >1</td-      ></tr-    ></tbody-  ></table-><p->Simple table indented two spaces:</p-><table-><caption-  >Demonstration of simple table syntax.</caption-  ><thead-  ><tr class="header"-    ><th align="right"-      >Right</th-      ><th align="left"-      >Left</th-      ><th align="center"-      >Center</th-      ><th align="left"-      >Default</th-      ></tr-    ></thead-  ><tbody-  ><tr class="odd"-    ><td align="right"-      >12</td-      ><td align="left"-      >12</td-      ><td align="center"-      >12</td-      ><td align="left"-      >12</td-      ></tr-    ><tr class="even"-    ><td align="right"-      >123</td-      ><td align="left"-      >123</td-      ><td align="center"-      >123</td-      ><td align="left"-      >123</td-      ></tr-    ><tr class="odd"-    ><td align="right"-      >1</td-      ><td align="left"-      >1</td-      ><td align="center"-      >1</td-      ><td align="left"-      >1</td-      ></tr-    ></tbody-  ></table-><p->Multiline table with caption:</p-><table-><caption-  >Here's the caption. It may span multiple lines.</caption-  ><col width="15%"-   /><col width="13%"-   /><col width="16%"-   /><col width="33%"-   /><thead-  ><tr class="header"-    ><th align="center"-      >Centered Header</th-      ><th align="left"-      >Left Aligned</th-      ><th align="right"-      >Right Aligned</th-      ><th align="left"-      >Default aligned</th-      ></tr-    ></thead-  ><tbody-  ><tr class="odd"-    ><td align="center"-      >First</td-      ><td align="left"-      >row</td-      ><td align="right"-      >12.0</td-      ><td align="left"-      >Example of a row that spans multiple lines.</td-      ></tr-    ><tr class="even"-    ><td align="center"-      >Second</td-      ><td align="left"-      >row</td-      ><td align="right"-      >5.0</td-      ><td align="left"-      >Here's another one. Note the blank line between rows.</td-      ></tr-    ></tbody-  ></table-><p->Multiline table without caption:</p-><table-><col width="15%"-   /><col width="13%"-   /><col width="16%"-   /><col width="33%"-   /><thead-  ><tr class="header"-    ><th align="center"-      >Centered Header</th-      ><th align="left"-      >Left Aligned</th-      ><th align="right"-      >Right Aligned</th-      ><th align="left"-      >Default aligned</th-      ></tr-    ></thead-  ><tbody-  ><tr class="odd"-    ><td align="center"-      >First</td-      ><td align="left"-      >row</td-      ><td align="right"-      >12.0</td-      ><td align="left"-      >Example of a row that spans multiple lines.</td-      ></tr-    ><tr class="even"-    ><td align="center"-      >Second</td-      ><td align="left"-      >row</td-      ><td align="right"-      >5.0</td-      ><td align="left"-      >Here's another one. Note the blank line between rows.</td-      ></tr-    ></tbody-  ></table-><p->Table without column headers:</p-><table-><tbody-  ><tr class="odd"-    ><td align="right"-      >12</td-      ><td align="left"-      >12</td-      ><td align="center"-      >12</td-      ><td align="right"-      >12</td-      ></tr-    ><tr class="even"-    ><td align="right"-      >123</td-      ><td align="left"-      >123</td-      ><td align="center"-      >123</td-      ><td align="right"-      >123</td-      ></tr-    ><tr class="odd"-    ><td align="right"-      >1</td-      ><td align="left"-      >1</td-      ><td align="center"-      >1</td-      ><td align="right"-      >1</td-      ></tr-    ></tbody-  ></table-><p->Multiline table without column headers:</p-><table-><col width="15%"-   /><col width="13%"-   /><col width="16%"-   /><col width="33%"-   /><tbody-  ><tr class="odd"-    ><td align="center"-      >First</td-      ><td align="left"-      >row</td-      ><td align="right"-      >12.0</td-      ><td align="left"-      >Example of a row that spans multiple lines.</td-      ></tr-    ><tr class="even"-    ><td align="center"-      >Second</td-      ><td align="left"-      >row</td-      ><td align="right"-      >5.0</td-      ><td align="left"-      >Here's another one. Note the blank line between rows.</td-      ></tr-    ></tbody-  ></table->+<p>Simple table with caption:</p>+<table>+<caption>Demonstration of simple table syntax.</caption>+<thead>+<tr class="header">+<th align="right">Right</th>+<th align="left">Left</th>+<th align="center">Center</th>+<th align="left">Default</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="right">12</td>+<td align="left">12</td>+<td align="center">12</td>+<td align="left">12</td>+</tr>+<tr class="even">+<td align="right">123</td>+<td align="left">123</td>+<td align="center">123</td>+<td align="left">123</td>+</tr>+<tr class="odd">+<td align="right">1</td>+<td align="left">1</td>+<td align="center">1</td>+<td align="left">1</td>+</tr>+</tbody>+</table>+<p>Simple table without caption:</p>+<table>+<thead>+<tr class="header">+<th align="right">Right</th>+<th align="left">Left</th>+<th align="center">Center</th>+<th align="left">Default</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="right">12</td>+<td align="left">12</td>+<td align="center">12</td>+<td align="left">12</td>+</tr>+<tr class="even">+<td align="right">123</td>+<td align="left">123</td>+<td align="center">123</td>+<td align="left">123</td>+</tr>+<tr class="odd">+<td align="right">1</td>+<td align="left">1</td>+<td align="center">1</td>+<td align="left">1</td>+</tr>+</tbody>+</table>+<p>Simple table indented two spaces:</p>+<table>+<caption>Demonstration of simple table syntax.</caption>+<thead>+<tr class="header">+<th align="right">Right</th>+<th align="left">Left</th>+<th align="center">Center</th>+<th align="left">Default</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="right">12</td>+<td align="left">12</td>+<td align="center">12</td>+<td align="left">12</td>+</tr>+<tr class="even">+<td align="right">123</td>+<td align="left">123</td>+<td align="center">123</td>+<td align="left">123</td>+</tr>+<tr class="odd">+<td align="right">1</td>+<td align="left">1</td>+<td align="center">1</td>+<td align="left">1</td>+</tr>+</tbody>+</table>+<p>Multiline table with caption:</p>+<table>+<caption>Here's the caption. It may span multiple lines.</caption>+<col width="15%" />+<col width="13%" />+<col width="16%" />+<col width="33%" />+<thead>+<tr class="header">+<th align="center">Centered Header</th>+<th align="left">Left Aligned</th>+<th align="right">Right Aligned</th>+<th align="left">Default aligned</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="center">First</td>+<td align="left">row</td>+<td align="right">12.0</td>+<td align="left">Example of a row that spans multiple lines.</td>+</tr>+<tr class="even">+<td align="center">Second</td>+<td align="left">row</td>+<td align="right">5.0</td>+<td align="left">Here's another one. Note the blank line between rows.</td>+</tr>+</tbody>+</table>+<p>Multiline table without caption:</p>+<table>+<col width="15%" />+<col width="13%" />+<col width="16%" />+<col width="33%" />+<thead>+<tr class="header">+<th align="center">Centered Header</th>+<th align="left">Left Aligned</th>+<th align="right">Right Aligned</th>+<th align="left">Default aligned</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="center">First</td>+<td align="left">row</td>+<td align="right">12.0</td>+<td align="left">Example of a row that spans multiple lines.</td>+</tr>+<tr class="even">+<td align="center">Second</td>+<td align="left">row</td>+<td align="right">5.0</td>+<td align="left">Here's another one. Note the blank line between rows.</td>+</tr>+</tbody>+</table>+<p>Table without column headers:</p>+<table>+<tbody>+<tr class="odd">+<td align="right">12</td>+<td align="left">12</td>+<td align="center">12</td>+<td align="right">12</td>+</tr>+<tr class="even">+<td align="right">123</td>+<td align="left">123</td>+<td align="center">123</td>+<td align="right">123</td>+</tr>+<tr class="odd">+<td align="right">1</td>+<td align="left">1</td>+<td align="center">1</td>+<td align="right">1</td>+</tr>+</tbody>+</table>+<p>Multiline table without column headers:</p>+<table>+<col width="15%" />+<col width="13%" />+<col width="16%" />+<col width="33%" />+<tbody>+<tr class="odd">+<td align="center">First</td>+<td align="left">row</td>+<td align="right">12.0</td>+<td align="left">Example of a row that spans multiple lines.</td>+</tr>+<tr class="even">+<td align="center">Second</td>+<td align="left">row</td>+<td align="right">5.0</td>+<td align="left">Here's another one. Note the blank line between rows.</td>+</tr>+</tbody>+</table>
tests/writer.html view
@@ -10,1154 +10,565 @@ </head> <body> <h1 class="title">Pandoc Test Suite</h1>-<p->This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p-><hr- /><h1 id="headers"->Headers</h1-><h2 id="level-2-with-an-embedded-link"->Level 2 with an <a href="/url"-  >embedded link</a-  ></h2-><h3 id="level-3-with-emphasis"->Level 3 with <em-  >emphasis</em-  ></h3-><h4 id="level-4"->Level 4</h4-><h5 id="level-5"->Level 5</h5-><h1 id="level-1"->Level 1</h1-><h2 id="level-2-with-emphasis"->Level 2 with <em-  >emphasis</em-  ></h2-><h3 id="level-3"->Level 3</h3-><p->with no blank line</p-><h2 id="level-2"->Level 2</h2-><p->with no blank line</p-><hr- /><h1 id="paragraphs"->Paragraphs</h1-><p->Here’s a regular paragraph.</p-><p->In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p-><p->Here’s one with a bullet. * criminey.</p-><p->There should be a hard line break<br-   />here.</p-><hr- /><h1 id="block-quotes"->Block Quotes</h1-><p->E-mail style:</p-><blockquote-><p-  >This is a block quote. It is pretty short.</p-  ></blockquote-><blockquote-><p-  >Code in a block quote:</p-  ><pre-  ><code-    >sub status {-    print &quot;working&quot;;-}-</code-    ></pre-  ><p-  >A list:</p-  ><ol style="list-style-type: decimal"-  ><li-    >item one</li-    ><li-    >item two</li-    ></ol-  ><p-  >Nested block quotes:</p-  ><blockquote-  ><p-    >nested</p-    ></blockquote-  ><blockquote-  ><p-    >nested</p-    ></blockquote-  ></blockquote-><p->This should not be a block quote: 2 &gt; 1.</p-><p->And a following paragraph.</p-><hr- /><h1 id="code-blocks"->Code Blocks</h1-><p->Code:</p-><pre-><code-  >---- (should be four hyphens)--sub status {-    print &quot;working&quot;;-}--this code block is indented by one tab-</code-  ></pre-><p->And:</p-><pre-><code-  >    this code block is indented by two tabs--These should not be escaped:  \$ \\ \&gt; \[ \{-</code-  ></pre-><hr- /><h1 id="lists"->Lists</h1-><h2 id="unordered"->Unordered</h2-><p->Asterisks tight:</p-><ul-><li-  >asterisk 1</li-  ><li-  >asterisk 2</li-  ><li-  >asterisk 3</li-  ></ul-><p->Asterisks loose:</p-><ul-><li-  ><p-    >asterisk 1</p-    ></li-  ><li-  ><p-    >asterisk 2</p-    ></li-  ><li-  ><p-    >asterisk 3</p-    ></li-  ></ul-><p->Pluses tight:</p-><ul-><li-  >Plus 1</li-  ><li-  >Plus 2</li-  ><li-  >Plus 3</li-  ></ul-><p->Pluses loose:</p-><ul-><li-  ><p-    >Plus 1</p-    ></li-  ><li-  ><p-    >Plus 2</p-    ></li-  ><li-  ><p-    >Plus 3</p-    ></li-  ></ul-><p->Minuses tight:</p-><ul-><li-  >Minus 1</li-  ><li-  >Minus 2</li-  ><li-  >Minus 3</li-  ></ul-><p->Minuses loose:</p-><ul-><li-  ><p-    >Minus 1</p-    ></li-  ><li-  ><p-    >Minus 2</p-    ></li-  ><li-  ><p-    >Minus 3</p-    ></li-  ></ul-><h2 id="ordered"->Ordered</h2-><p->Tight:</p-><ol style="list-style-type: decimal"-><li-  >First</li-  ><li-  >Second</li-  ><li-  >Third</li-  ></ol-><p->and:</p-><ol style="list-style-type: decimal"-><li-  >One</li-  ><li-  >Two</li-  ><li-  >Three</li-  ></ol-><p->Loose using tabs:</p-><ol style="list-style-type: decimal"-><li-  ><p-    >First</p-    ></li-  ><li-  ><p-    >Second</p-    ></li-  ><li-  ><p-    >Third</p-    ></li-  ></ol-><p->and using spaces:</p-><ol style="list-style-type: decimal"-><li-  ><p-    >One</p-    ></li-  ><li-  ><p-    >Two</p-    ></li-  ><li-  ><p-    >Three</p-    ></li-  ></ol-><p->Multiple paragraphs:</p-><ol style="list-style-type: decimal"-><li-  ><p-    >Item 1, graf one.</p-    ><p-    >Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</p-    ></li-  ><li-  ><p-    >Item 2.</p-    ></li-  ><li-  ><p-    >Item 3.</p-    ></li-  ></ol-><h2 id="nested"->Nested</h2-><ul-><li-  >Tab<ul-    ><li-      >Tab<ul-	><li-	  >Tab</li-	  ></ul-	></li-      ></ul-    ></li-  ></ul-><p->Here’s another:</p-><ol style="list-style-type: decimal"-><li-  >First</li-  ><li-  >Second:<ul-    ><li-      >Fee</li-      ><li-      >Fie</li-      ><li-      >Foe</li-      ></ul-    ></li-  ><li-  >Third</li-  ></ol-><p->Same thing but with paragraphs:</p-><ol style="list-style-type: decimal"-><li-  ><p-    >First</p-    ></li-  ><li-  ><p-    >Second:</p-    ><ul-    ><li-      >Fee</li-      ><li-      >Fie</li-      ><li-      >Foe</li-      ></ul-    ></li-  ><li-  ><p-    >Third</p-    ></li-  ></ol-><h2 id="tabs-and-spaces"->Tabs and spaces</h2-><ul-><li-  ><p-    >this is a list item indented with tabs</p-    ></li-  ><li-  ><p-    >this is a list item indented with spaces</p-    ><ul-    ><li-      ><p-	>this is an example list item indented with tabs</p-	></li-      ><li-      ><p-	>this is an example list item indented with spaces</p-	></li-      ></ul-    ></li-  ></ul-><h2 id="fancy-list-markers"->Fancy list markers</h2-><ol start="2" style="list-style-type: decimal"-><li-  >begins with 2</li-  ><li-  ><p-    >and now 3</p-    ><p-    >with a continuation</p-    ><ol start="4" style="list-style-type: lower-roman"-    ><li-      >sublist with roman numerals, starting with 4</li-      ><li-      >more items<ol style="list-style-type: upper-alpha"-	><li-	  >a subsublist</li-	  ><li-	  >a subsublist</li-	  ></ol-	></li-      ></ol-    ></li-  ></ol-><p->Nesting:</p-><ol style="list-style-type: upper-alpha"-><li-  >Upper Alpha<ol style="list-style-type: upper-roman"-    ><li-      >Upper Roman.<ol start="6" style="list-style-type: decimal"-	><li-	  >Decimal start with 6<ol start="3" style="list-style-type: lower-alpha"-	    ><li-	      >Lower alpha with paren</li-	      ></ol-	    ></li-	  ></ol-	></li-      ></ol-    ></li-  ></ol-><p->Autonumbering:</p-><ol-><li-  >Autonumber.</li-  ><li-  >More.<ol-    ><li-      >Nested.</li-      ></ol-    ></li-  ></ol-><p->Should not be a list item:</p-><p->M.A. 2007</p-><p->B. Williams</p-><hr- /><h1 id="definition-lists"->Definition Lists</h1-><p->Tight using spaces:</p-><dl-><dt-  >apple</dt-  ><dd-  >red fruit</dd-  ><dt-  >orange</dt-  ><dd-  >orange fruit</dd-  ><dt-  >banana</dt-  ><dd-  >yellow fruit</dd-  ></dl-><p->Tight using tabs:</p-><dl-><dt-  >apple</dt-  ><dd-  >red fruit</dd-  ><dt-  >orange</dt-  ><dd-  >orange fruit</dd-  ><dt-  >banana</dt-  ><dd-  >yellow fruit</dd-  ></dl-><p->Loose:</p-><dl-><dt-  >apple</dt-  ><dd-  ><p-    >red fruit</p-    ></dd-  ><dt-  >orange</dt-  ><dd-  ><p-    >orange fruit</p-    ></dd-  ><dt-  >banana</dt-  ><dd-  ><p-    >yellow fruit</p-    ></dd-  ></dl-><p->Multiple blocks with italics:</p-><dl-><dt-  ><em-    >apple</em-    ></dt-  ><dd-  ><p-    >red fruit</p-    ><p-    >contains seeds, crisp, pleasant to taste</p-    ></dd-  ><dt-  ><em-    >orange</em-    ></dt-  ><dd-  ><p-    >orange fruit</p-    ><pre-    ><code-      >{ orange code block }-</code-      ></pre-    ><blockquote-    ><p-      >orange block quote</p-      ></blockquote-    ></dd-  ></dl-><p->Multiple definitions, tight:</p-><dl-><dt-  >apple</dt-  ><dd-  >red fruit</dd-  ><dd-  >computer</dd-  ><dt-  >orange</dt-  ><dd-  >orange fruit</dd-  ><dd-  >bank</dd-  ></dl-><p->Multiple definitions, loose:</p-><dl-><dt-  >apple</dt-  ><dd-  ><p-    >red fruit</p-    ></dd-  ><dd-  ><p-    >computer</p-    ></dd-  ><dt-  >orange</dt-  ><dd-  ><p-    >orange fruit</p-    ></dd-  ><dd-  ><p-    >bank</p-    ></dd-  ></dl-><p->Blank line after term, indented marker, alternate markers:</p-><dl-><dt-  >apple</dt-  ><dd-  ><p-    >red fruit</p-    ></dd-  ><dd-  ><p-    >computer</p-    ></dd-  ><dt-  >orange</dt-  ><dd-  ><p-    >orange fruit</p-    ><ol style="list-style-type: decimal"-    ><li-      >sublist</li-      ><li-      >sublist</li-      ></ol-    ></dd-  ></dl-><h1 id="html-blocks"->HTML Blocks</h1-><p->Simple block on one line:</p-><div>foo</div>-<p->And nested without indentation:</p-><div>-<div>-<div>foo</div>-</div>-<div>bar</div>-</div>-<p->Interpreted markdown in a table:</p-><table>-<tr>-<td>This is <em->emphasized</em-></td>-<td>And this is <strong->strong</strong-></td>-</tr>-</table>--<script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script>-<p->Here’s a simple block:</p-><div>-    foo</div>-<p->This should be a code block, though:</p-><pre-><code-  >&lt;div&gt;-    foo-&lt;/div&gt;-</code-  ></pre-><p->As should this:</p-><pre-><code-  >&lt;div&gt;foo&lt;/div&gt;-</code-  ></pre-><p->Now, nested:</p-><div>-    <div>-        <div>-            foo</div>-    </div>-</div>-<p->This should just be an HTML comment:</p-><!-- Comment -->-<p->Multiline:</p-><!---Blah-Blah--->--<!---    This is another comment.--->-<p->Code block:</p-><pre-><code-  >&lt;!-- Comment --&gt;-</code-  ></pre-><p->Just plain comment, with trailing spaces on the line:</p-><!-- foo -->   -<p->Code:</p-><pre-><code-  >&lt;hr /&gt;-</code-  ></pre-><p->Hr’s:</p-><hr>--<hr />--<hr />--<hr>   --<hr />  --<hr /> --<hr class="foo" id="bar" />--<hr class="foo" id="bar" />--<hr class="foo" id="bar">-<hr- /><h1 id="inline-markup"->Inline Markup</h1-><p->This is <em-  >emphasized</em-  >, and so <em-  >is this</em-  >.</p-><p->This is <strong-  >strong</strong-  >, and so <strong-  >is this</strong-  >.</p-><p->An <em-  ><a href="/url"-    >emphasized link</a-    ></em-  >.</p-><p-><strong-  ><em-    >This is strong and em.</em-    ></strong-  ></p-><p->So is <strong-  ><em-    >this</em-    ></strong-  > word.</p-><p-><strong-  ><em-    >This is strong and em.</em-    ></strong-  ></p-><p->So is <strong-  ><em-    >this</em-    ></strong-  > word.</p-><p->This is code: <code-  >&gt;</code-  >, <code-  >$</code-  >, <code-  >\</code-  >, <code-  >\$</code-  >, <code-  >&lt;html&gt;</code-  >.</p-><p-><span style="text-decoration: line-through;"-  >This is <em-    >strikeout</em-    >.</span-  ></p-><p->Superscripts: a<sup-  >bc</sup-  >d a<sup-  ><em-    >hello</em-    ></sup-  > a<sup-  >hello there</sup-  >.</p-><p->Subscripts: H<sub-  >2</sub-  >O, H<sub-  >23</sub-  >O, H<sub-  >many of them</sub-  >O.</p-><p->These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p-><hr- /><h1 id="smart-quotes-ellipses-dashes"->Smart quotes, ellipses, dashes</h1-><p->“Hello,” said the spider. “‘Shelob’ is my name.”</p-><p->‘A’, ‘B’, and ‘C’ are letters.</p-><p->‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p-><p->‘He said, “I want to go.”’ Were you alive in the 70’s?</p-><p->Here is some quoted ‘<code-  >code</code-  >’ and a “<a href="http://example.com/?foo=1&amp;bar=2"-  >quoted link</a-  >”.</p-><p->Some dashes: one—two — three—four — five.</p-><p->Dashes between numbers: 5–7, 255–66, 1987–1999.</p-><p->Ellipses…and…and….</p-><hr- /><h1 id="latex"->LaTeX</h1-><ul-><li-  ></li-  ><li-  ><span class="math"-    >2 + 2 = 4</span-    ></li-  ><li-  ><span class="math"-    ><em-      >x</em-      > ∈ <em-      >y</em-      ></span-    ></li-  ><li-  ><span class="math"-    >α ∧ ω</span-    ></li-  ><li-  ><span class="math"-    >223</span-    ></li-  ><li-  ><span class="math"-    ><em-      >p</em-      ></span-    >-Tree</li-  ><li-  >Here’s some display math: <br-     /><span class="math"-    >$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span-    ><br-     /></li-  ><li-  >Here’s one that has a line break in it: <span class="math"-    >α + ω × <em-      >x</em-      ><sup-      >2</sup-      ></span-    >.</li-  ></ul-><p->These shouldn’t be math:</p-><ul-><li-  >To get the famous equation, write <code-    >$e = mc^2$</code-    >.</li-  ><li-  >$22,000 is a <em-    >lot</em-    > of money. So is $34,000. (It worked if “lot” is emphasized.)</li-  ><li-  >Shoes ($20) and socks ($5).</li-  ><li-  >Escaped <code-    >$</code-    >: $73 <em-    >this should be emphasized</em-    > 23$.</li-  ></ul-><p->Here’s a LaTeX table:</p-><hr- /><h1 id="special-characters"->Special Characters</h1-><p->Here is some unicode:</p-><ul-><li-  >I hat: Î</li-  ><li-  >o umlaut: ö</li-  ><li-  >section: §</li-  ><li-  >set membership: ∈</li-  ><li-  >copyright: ©</li-  ></ul-><p->AT&amp;T has an ampersand in their name.</p-><p->AT&amp;T is another way to write it.</p-><p->This &amp; that.</p-><p->4 &lt; 5.</p-><p->6 &gt; 5.</p-><p->Backslash: \</p-><p->Backtick: `</p-><p->Asterisk: *</p-><p->Underscore: _</p-><p->Left brace: {</p-><p->Right brace: }</p-><p->Left bracket: [</p-><p->Right bracket: ]</p-><p->Left paren: (</p-><p->Right paren: )</p-><p->Greater-than: &gt;</p-><p->Hash: #</p-><p->Period: .</p-><p->Bang: !</p-><p->Plus: +</p-><p->Minus: -</p-><hr- /><h1 id="links"->Links</h1-><h2 id="explicit"->Explicit</h2-><p->Just a <a href="/url/"-  >URL</a-  >.</p-><p-><a href="/url/" title="title"-  >URL and title</a-  >.</p-><p-><a href="/url/" title="title preceded by two spaces"-  >URL and title</a-  >.</p-><p-><a href="/url/" title="title preceded by a tab"-  >URL and title</a-  >.</p-><p-><a href="/url/" title="title with &quot;quotes&quot; in it"-  >URL and title</a-  ></p-><p-><a href="/url/" title="title with single quotes"-  >URL and title</a-  ></p-><p-><a href="/url/with_underscore"-  >with_underscore</a-  ></p-><p-><script type="text/javascript"-  >-<!---h='&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#46;&#110;&#x65;&#116;';a='&#64;';n='&#110;&#x6f;&#98;&#x6f;&#100;&#x79;';e=n+a+h;-document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'Email link'+'<\/'+'a'+'>');-// -->-</script-  ><noscript-  >&#x45;&#x6d;&#x61;&#x69;&#108;&#32;&#108;&#x69;&#110;&#x6b;&#32;&#40;&#110;&#x6f;&#98;&#x6f;&#100;&#x79;&#32;&#x61;&#116;&#32;&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#32;&#100;&#x6f;&#116;&#32;&#110;&#x65;&#116;&#x29;</noscript-  ></p-><p-><a href=""-  >Empty</a-  >.</p-><h2 id="reference"->Reference</h2-><p->Foo <a href="/url/"-  >bar</a-  >.</p-><p->Foo <a href="/url/"-  >bar</a-  >.</p-><p->Foo <a href="/url/"-  >bar</a-  >.</p-><p->With <a href="/url/"-  >embedded [brackets]</a-  >.</p-><p-><a href="/url/"-  >b</a-  > by itself should be a link.</p-><p->Indented <a href="/url"-  >once</a-  >.</p-><p->Indented <a href="/url"-  >twice</a-  >.</p-><p->Indented <a href="/url"-  >thrice</a-  >.</p-><p->This should [not][] be a link.</p-><pre-><code-  >[not]: /url-</code-  ></pre-><p->Foo <a href="/url/" title="Title with &quot;quotes&quot; inside"-  >bar</a-  >.</p-><p->Foo <a href="/url/" title="Title with &quot;quote&quot; inside"-  >biz</a-  >.</p-><h2 id="with-ampersands"->With ampersands</h2-><p->Here’s a <a href="http://example.com/?foo=1&amp;bar=2"-  >link with an ampersand in the URL</a-  >.</p-><p->Here’s a link with an amersand in the link text: <a href="http://att.com/" title="AT&amp;T"-  >AT&amp;T</a-  >.</p-><p->Here’s an <a href="/script?foo=1&amp;bar=2"-  >inline link</a-  >.</p-><p->Here’s an <a href="/script?foo=1&amp;bar=2"-  >inline link in pointy braces</a-  >.</p-><h2 id="autolinks"->Autolinks</h2-><p->With an ampersand: <a href="http://example.com/?foo=1&amp;bar=2"-  ><code class="url"-    >http://example.com/?foo=1&amp;bar=2</code-    ></a-  ></p-><ul-><li-  >In a list?</li-  ><li-  ><a href="http://example.com/"-    ><code class="url"-      >http://example.com/</code-      ></a-    ></li-  ><li-  >It should.</li-  ></ul-><p->An e-mail address: <script type="text/javascript"-  >-<!---h='&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#46;&#110;&#x65;&#116;';a='&#64;';n='&#110;&#x6f;&#98;&#x6f;&#100;&#x79;';e=n+a+h;-document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'<code>'+e+'</code>'+'<\/'+'a'+'>');-// -->-</script-  ><noscript-  >&#110;&#x6f;&#98;&#x6f;&#100;&#x79;&#32;&#x61;&#116;&#32;&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#32;&#100;&#x6f;&#116;&#32;&#110;&#x65;&#116;</noscript-  ></p-><blockquote-><p-  >Blockquoted: <a href="http://example.com/"-    ><code class="url"-      >http://example.com/</code-      ></a-    ></p-  ></blockquote-><p->Auto-links should not occur here: <code-  >&lt;http://example.com/&gt;</code-  ></p-><pre-><code-  >or here: &lt;http://example.com/&gt;-</code-  ></pre-><hr- /><h1 id="images"->Images</h1-><p->From “Voyage dans la Lune” by Georges Melies (1902):</p-><div class="figure"-><img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune"-   /><p class="caption"-  >lalune</p-  ></div-><p->Here is a movie <img src="movie.jpg" alt="movie"-   /> icon.</p-><hr- /><h1 id="footnotes"->Footnotes</h1-><p->Here is a footnote reference,<sup-  ><a href="#fn1" class="footnoteRef" id="fnref1"-    >1</a-    ></sup-  > and another.<sup-  ><a href="#fn2" class="footnoteRef" id="fnref2"-    >2</a-    ></sup-  > This should <em-  >not</em-  > be a footnote reference, because it contains a space.[^my note] Here is an inline note.<sup-  ><a href="#fn3" class="footnoteRef" id="fnref3"-    >3</a-    ></sup-  ></p-><blockquote-><p-  >Notes can go in quotes.<sup-    ><a href="#fn4" class="footnoteRef" id="fnref4"-      >4</a-      ></sup-    ></p-  ></blockquote-><ol style="list-style-type: decimal"-><li-  >And in list items.<sup-    ><a href="#fn5" class="footnoteRef" id="fnref5"-      >5</a-      ></sup-    ></li-  ></ol-><p->This paragraph should not be part of the note, as it is not indented.</p-><div class="footnotes"-><hr-   /><ol-  ><li id="fn1"-    ><p-      >Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. <a href="#fnref1" class="footnoteBackLink" title="Jump back to footnote 1">↩</a></p-      ></li-    ><li id="fn2"-    ><p-      >Here’s the long note. This one contains multiple blocks.</p-      ><p-      >Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p-      ><pre-      ><code-	>  { &lt;code&gt; }-</code-	></pre-      ><p-      >If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. <a href="#fnref2" class="footnoteBackLink" title="Jump back to footnote 2">↩</a></p-      ></li-    ><li id="fn3"-    ><p-      >This is <em-	>easier</em-	> to type. Inline notes may contain <a href="http://google.com"-	>links</a-	> and <code-	>]</code-	> verbatim characters, as well as [bracketed text]. <a href="#fnref3" class="footnoteBackLink" title="Jump back to footnote 3">↩</a></p-      ></li-    ><li id="fn4"-    ><p-      >In quote. <a href="#fnref4" class="footnoteBackLink" title="Jump back to footnote 4">↩</a></p-      ></li-    ><li id="fn5"-    ><p-      >In list. <a href="#fnref5" class="footnoteBackLink" title="Jump back to footnote 5">↩</a></p-      ></li-    ></ol-  ></div->+<p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p>+<hr />+<h1 id="headers">Headers</h1>+<h2 id="level-2-with-an-embedded-link">Level 2 with an <a href="/url">embedded link</a></h2>+<h3 id="level-3-with-emphasis">Level 3 with <em>emphasis</em></h3>+<h4 id="level-4">Level 4</h4>+<h5 id="level-5">Level 5</h5>+<h1 id="level-1">Level 1</h1>+<h2 id="level-2-with-emphasis">Level 2 with <em>emphasis</em></h2>+<h3 id="level-3">Level 3</h3>+<p>with no blank line</p>+<h2 id="level-2">Level 2</h2>+<p>with no blank line</p>+<hr />+<h1 id="paragraphs">Paragraphs</h1>+<p>Here’s a regular paragraph.</p>+<p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p>+<p>Here’s one with a bullet. * criminey.</p>+<p>There should be a hard line break<br />here.</p>+<hr />+<h1 id="block-quotes">Block Quotes</h1>+<p>E-mail style:</p>+<blockquote>+<p>This is a block quote. It is pretty short.</p>+</blockquote>+<blockquote>+<p>Code in a block quote:</p>+<pre><code>sub status {+    print &quot;working&quot;;+}+</code></pre>+<p>A list:</p>+<ol style="list-style-type: decimal">+<li>item one</li>+<li>item two</li>+</ol>+<p>Nested block quotes:</p>+<blockquote>+<p>nested</p>+</blockquote>+<blockquote>+<p>nested</p>+</blockquote>+</blockquote>+<p>This should not be a block quote: 2 &gt; 1.</p>+<p>And a following paragraph.</p>+<hr />+<h1 id="code-blocks">Code Blocks</h1>+<p>Code:</p>+<pre><code>---- (should be four hyphens)++sub status {+    print &quot;working&quot;;+}++this code block is indented by one tab+</code></pre>+<p>And:</p>+<pre><code>    this code block is indented by two tabs++These should not be escaped:  \$ \\ \&gt; \[ \{+</code></pre>+<hr />+<h1 id="lists">Lists</h1>+<h2 id="unordered">Unordered</h2>+<p>Asterisks tight:</p>+<ul>+<li>asterisk 1</li>+<li>asterisk 2</li>+<li>asterisk 3</li>+</ul>+<p>Asterisks loose:</p>+<ul>+<li><p>asterisk 1</p></li>+<li><p>asterisk 2</p></li>+<li><p>asterisk 3</p></li>+</ul>+<p>Pluses tight:</p>+<ul>+<li>Plus 1</li>+<li>Plus 2</li>+<li>Plus 3</li>+</ul>+<p>Pluses loose:</p>+<ul>+<li><p>Plus 1</p></li>+<li><p>Plus 2</p></li>+<li><p>Plus 3</p></li>+</ul>+<p>Minuses tight:</p>+<ul>+<li>Minus 1</li>+<li>Minus 2</li>+<li>Minus 3</li>+</ul>+<p>Minuses loose:</p>+<ul>+<li><p>Minus 1</p></li>+<li><p>Minus 2</p></li>+<li><p>Minus 3</p></li>+</ul>+<h2 id="ordered">Ordered</h2>+<p>Tight:</p>+<ol style="list-style-type: decimal">+<li>First</li>+<li>Second</li>+<li>Third</li>+</ol>+<p>and:</p>+<ol style="list-style-type: decimal">+<li>One</li>+<li>Two</li>+<li>Three</li>+</ol>+<p>Loose using tabs:</p>+<ol style="list-style-type: decimal">+<li><p>First</p></li>+<li><p>Second</p></li>+<li><p>Third</p></li>+</ol>+<p>and using spaces:</p>+<ol style="list-style-type: decimal">+<li><p>One</p></li>+<li><p>Two</p></li>+<li><p>Three</p></li>+</ol>+<p>Multiple paragraphs:</p>+<ol style="list-style-type: decimal">+<li><p>Item 1, graf one.</p>+<p>Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</p></li>+<li><p>Item 2.</p></li>+<li><p>Item 3.</p></li>+</ol>+<h2 id="nested">Nested</h2>+<ul>+<li>Tab+<ul>+<li>Tab+<ul>+<li>Tab</li>+</ul></li>+</ul></li>+</ul>+<p>Here’s another:</p>+<ol style="list-style-type: decimal">+<li>First</li>+<li>Second:+<ul>+<li>Fee</li>+<li>Fie</li>+<li>Foe</li>+</ul></li>+<li>Third</li>+</ol>+<p>Same thing but with paragraphs:</p>+<ol style="list-style-type: decimal">+<li><p>First</p></li>+<li><p>Second:</p>+<ul>+<li>Fee</li>+<li>Fie</li>+<li>Foe</li>+</ul></li>+<li><p>Third</p></li>+</ol>+<h2 id="tabs-and-spaces">Tabs and spaces</h2>+<ul>+<li><p>this is a list item indented with tabs</p></li>+<li><p>this is a list item indented with spaces</p>+<ul>+<li><p>this is an example list item indented with tabs</p></li>+<li><p>this is an example list item indented with spaces</p></li>+</ul></li>+</ul>+<h2 id="fancy-list-markers">Fancy list markers</h2>+<ol start="2" style="list-style-type: decimal">+<li>begins with 2</li>+<li><p>and now 3</p>+<p>with a continuation</p>+<ol start="4" style="list-style-type: lower-roman">+<li>sublist with roman numerals, starting with 4</li>+<li>more items+<ol style="list-style-type: upper-alpha">+<li>a subsublist</li>+<li>a subsublist</li>+</ol></li>+</ol></li>+</ol>+<p>Nesting:</p>+<ol style="list-style-type: upper-alpha">+<li>Upper Alpha+<ol style="list-style-type: upper-roman">+<li>Upper Roman.+<ol start="6" style="list-style-type: decimal">+<li>Decimal start with 6+<ol start="3" style="list-style-type: lower-alpha">+<li>Lower alpha with paren</li>+</ol></li>+</ol></li>+</ol></li>+</ol>+<p>Autonumbering:</p>+<ol>+<li>Autonumber.</li>+<li>More.+<ol>+<li>Nested.</li>+</ol></li>+</ol>+<p>Should not be a list item:</p>+<p>M.A. 2007</p>+<p>B. Williams</p>+<hr />+<h1 id="definition-lists">Definition Lists</h1>+<p>Tight using spaces:</p>+<dl>+<dt>apple</dt>+<dd>red fruit+</dd>+<dt>orange</dt>+<dd>orange fruit+</dd>+<dt>banana</dt>+<dd>yellow fruit+</dd>+</dl>+<p>Tight using tabs:</p>+<dl>+<dt>apple</dt>+<dd>red fruit+</dd>+<dt>orange</dt>+<dd>orange fruit+</dd>+<dt>banana</dt>+<dd>yellow fruit+</dd>+</dl>+<p>Loose:</p>+<dl>+<dt>apple</dt>+<dd><p>red fruit</p>+</dd>+<dt>orange</dt>+<dd><p>orange fruit</p>+</dd>+<dt>banana</dt>+<dd><p>yellow fruit</p>+</dd>+</dl>+<p>Multiple blocks with italics:</p>+<dl>+<dt><em>apple</em></dt>+<dd><p>red fruit</p>+<p>contains seeds, crisp, pleasant to taste</p>+</dd>+<dt><em>orange</em></dt>+<dd><p>orange fruit</p>+<pre><code>{ orange code block }+</code></pre>+<blockquote>+<p>orange block quote</p>+</blockquote>+</dd>+</dl>+<p>Multiple definitions, tight:</p>+<dl>+<dt>apple</dt>+<dd>red fruit+</dd><dd>computer+</dd>+<dt>orange</dt>+<dd>orange fruit+</dd><dd>bank+</dd>+</dl>+<p>Multiple definitions, loose:</p>+<dl>+<dt>apple</dt>+<dd><p>red fruit</p>+</dd><dd><p>computer</p>+</dd>+<dt>orange</dt>+<dd><p>orange fruit</p>+</dd><dd><p>bank</p>+</dd>+</dl>+<p>Blank line after term, indented marker, alternate markers:</p>+<dl>+<dt>apple</dt>+<dd><p>red fruit</p>+</dd><dd><p>computer</p>+</dd>+<dt>orange</dt>+<dd><p>orange fruit</p>+<ol style="list-style-type: decimal">+<li>sublist</li>+<li>sublist</li>+</ol>+</dd>+</dl>+<h1 id="html-blocks">HTML Blocks</h1>+<p>Simple block on one line:</p>+<div>+foo+</div>++<p>And nested without indentation:</p>+<div>+<div>+<div>+foo+</div>+</div>+<div>+bar+</div>+</div>++<p>Interpreted markdown in a table:</p>+<table>+<tr>+<td>+This is <em>emphasized</em>+</td>+<td>+And this is <strong>strong</strong>+</td>+</tr>+</table>++<script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script>++<p>Here’s a simple block:</p>+<div>+    +foo+</div>++<p>This should be a code block, though:</p>+<pre><code>&lt;div&gt;+    foo+&lt;/div&gt;+</code></pre>+<p>As should this:</p>+<pre><code>&lt;div&gt;foo&lt;/div&gt;+</code></pre>+<p>Now, nested:</p>+<div>+    <div>+        <div>+            +foo+</div>+    </div>+</div>++<p>This should just be an HTML comment:</p>+<!-- Comment -->++<p>Multiline:</p>+<!--+Blah+Blah+-->++<!--+    This is another comment.+-->++<p>Code block:</p>+<pre><code>&lt;!-- Comment --&gt;+</code></pre>+<p>Just plain comment, with trailing spaces on the line:</p>+<!-- foo -->   ++<p>Code:</p>+<pre><code>&lt;hr /&gt;+</code></pre>+<p>Hr’s:</p>+<hr>++<hr />++<hr />++<hr>   ++<hr />  ++<hr /> ++<hr class="foo" id="bar" />++<hr class="foo" id="bar" />++<hr class="foo" id="bar">++<hr />+<h1 id="inline-markup">Inline Markup</h1>+<p>This is <em>emphasized</em>, and so <em>is this</em>.</p>+<p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p>+<p>An <em><a href="/url">emphasized link</a></em>.</p>+<p><strong><em>This is strong and em.</em></strong></p>+<p>So is <strong><em>this</em></strong> word.</p>+<p><strong><em>This is strong and em.</em></strong></p>+<p>So is <strong><em>this</em></strong> word.</p>+<p>This is code: <code>&gt;</code>, <code>$</code>, <code>\</code>, <code>\$</code>, <code>&lt;html&gt;</code>.</p>+<p><span style="text-decoration: line-through;">This is <em>strikeout</em>.</span></p>+<p>Superscripts: a<sup>bc</sup>d a<sup><em>hello</em></sup> a<sup>hello there</sup>.</p>+<p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p>+<p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p>+<hr />+<h1 id="smart-quotes-ellipses-dashes">Smart quotes, ellipses, dashes</h1>+<p>“Hello,” said the spider. “‘Shelob’ is my name.”</p>+<p>‘A’, ‘B’, and ‘C’ are letters.</p>+<p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p>+<p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p>+<p>Here is some quoted ‘<code>code</code>’ and a “<a href="http://example.com/?foo=1&amp;bar=2">quoted link</a>”.</p>+<p>Some dashes: one—two — three—four — five.</p>+<p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p>+<p>Ellipses…and…and….</p>+<hr />+<h1 id="latex">LaTeX</h1>+<ul>+<li></li>+<li><span class="math">2 + 2 = 4</span></li>+<li><span class="math"><em>x</em> ∈ <em>y</em></span></li>+<li><span class="math">α ∧ ω</span></li>+<li><span class="math">223</span></li>+<li><span class="math"><em>p</em></span>-Tree</li>+<li>Here’s some display math: <br /><span class="math">$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span><br /></li>+<li>Here’s one that has a line break in it: <span class="math">α + ω × <em>x</em><sup>2</sup></span>.</li>+</ul>+<p>These shouldn’t be math:</p>+<ul>+<li>To get the famous equation, write <code>$e = mc^2$</code>.</li>+<li>$22,000 is a <em>lot</em> of money. So is $34,000. (It worked if “lot” is emphasized.)</li>+<li>Shoes ($20) and socks ($5).</li>+<li>Escaped <code>$</code>: $73 <em>this should be emphasized</em> 23$.</li>+</ul>+<p>Here’s a LaTeX table:</p>++<hr />+<h1 id="special-characters">Special Characters</h1>+<p>Here is some unicode:</p>+<ul>+<li>I hat: Î</li>+<li>o umlaut: ö</li>+<li>section: §</li>+<li>set membership: ∈</li>+<li>copyright: ©</li>+</ul>+<p>AT&amp;T has an ampersand in their name.</p>+<p>AT&amp;T is another way to write it.</p>+<p>This &amp; that.</p>+<p>4 &lt; 5.</p>+<p>6 &gt; 5.</p>+<p>Backslash: \</p>+<p>Backtick: `</p>+<p>Asterisk: *</p>+<p>Underscore: _</p>+<p>Left brace: {</p>+<p>Right brace: }</p>+<p>Left bracket: [</p>+<p>Right bracket: ]</p>+<p>Left paren: (</p>+<p>Right paren: )</p>+<p>Greater-than: &gt;</p>+<p>Hash: #</p>+<p>Period: .</p>+<p>Bang: !</p>+<p>Plus: +</p>+<p>Minus: -</p>+<hr />+<h1 id="links">Links</h1>+<h2 id="explicit">Explicit</h2>+<p>Just a <a href="/url/">URL</a>.</p>+<p><a href="/url/" title="title">URL and title</a>.</p>+<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p>+<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p>+<p><a href="/url/" title="title with &quot;quotes&quot; in it">URL and title</a></p>+<p><a href="/url/" title="title with single quotes">URL and title</a></p>+<p><a href="/url/with_underscore">with_underscore</a></p>+<p><script type="text/javascript">+<!--+h='&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#46;&#110;&#x65;&#116;';a='&#64;';n='&#110;&#x6f;&#98;&#x6f;&#100;&#x79;';e=n+a+h;+document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'Email link'+'<\/'+'a'+'>');+// -->+</script><noscript>&#x45;&#x6d;&#x61;&#x69;&#108;&#32;&#108;&#x69;&#110;&#x6b;&#32;&#40;&#110;&#x6f;&#98;&#x6f;&#100;&#x79;&#32;&#x61;&#116;&#32;&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#32;&#100;&#x6f;&#116;&#32;&#110;&#x65;&#116;&#x29;</noscript></p>+<p><a href="">Empty</a>.</p>+<h2 id="reference">Reference</h2>+<p>Foo <a href="/url/">bar</a>.</p>+<p>Foo <a href="/url/">bar</a>.</p>+<p>Foo <a href="/url/">bar</a>.</p>+<p>With <a href="/url/">embedded [brackets]</a>.</p>+<p><a href="/url/">b</a> by itself should be a link.</p>+<p>Indented <a href="/url">once</a>.</p>+<p>Indented <a href="/url">twice</a>.</p>+<p>Indented <a href="/url">thrice</a>.</p>+<p>This should [not][] be a link.</p>+<pre><code>[not]: /url+</code></pre>+<p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>+<p>Foo <a href="/url/" title="Title with &quot;quote&quot; inside">biz</a>.</p>+<h2 id="with-ampersands">With ampersands</h2>+<p>Here’s a <a href="http://example.com/?foo=1&amp;bar=2">link with an ampersand in the URL</a>.</p>+<p>Here’s a link with an amersand in the link text: <a href="http://att.com/" title="AT&amp;T">AT&amp;T</a>.</p>+<p>Here’s an <a href="/script?foo=1&amp;bar=2">inline link</a>.</p>+<p>Here’s an <a href="/script?foo=1&amp;bar=2">inline link in pointy braces</a>.</p>+<h2 id="autolinks">Autolinks</h2>+<p>With an ampersand: <a href="http://example.com/?foo=1&amp;bar=2"><code class="url">http://example.com/?foo=1&amp;bar=2</code></a></p>+<ul>+<li>In a list?</li>+<li><a href="http://example.com/"><code class="url">http://example.com/</code></a></li>+<li>It should.</li>+</ul>+<p>An e-mail address: <script type="text/javascript">+<!--+h='&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#46;&#110;&#x65;&#116;';a='&#64;';n='&#110;&#x6f;&#98;&#x6f;&#100;&#x79;';e=n+a+h;+document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'<code>'+e+'</code>'+'<\/'+'a'+'>');+// -->+</script><noscript>&#110;&#x6f;&#98;&#x6f;&#100;&#x79;&#32;&#x61;&#116;&#32;&#110;&#x6f;&#x77;&#104;&#x65;&#114;&#x65;&#32;&#100;&#x6f;&#116;&#32;&#110;&#x65;&#116;</noscript></p>+<blockquote>+<p>Blockquoted: <a href="http://example.com/"><code class="url">http://example.com/</code></a></p>+</blockquote>+<p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p>+<pre><code>or here: &lt;http://example.com/&gt;+</code></pre>+<hr />+<h1 id="images">Images</h1>+<p>From “Voyage dans la Lune” by Georges Melies (1902):</p>+<div class="figure">+<img src="lalune.jpg" title="Voyage dans la Lune" alt="lalune" /><p class="caption">lalune</p>+</div>+<p>Here is a movie <img src="movie.jpg" alt="movie" /> icon.</p>+<hr />+<h1 id="footnotes">Footnotes</h1>+<p>Here is a footnote reference,<sup><a href="#fn1" class="footnoteRef" id="fnref1">1</a></sup> and another.<sup><a href="#fn2" class="footnoteRef" id="fnref2">2</a></sup> This should <em>not</em> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<sup><a href="#fn3" class="footnoteRef" id="fnref3">3</a></sup></p>+<blockquote>+<p>Notes can go in quotes.<sup><a href="#fn4" class="footnoteRef" id="fnref4">4</a></sup></p>+</blockquote>+<ol style="list-style-type: decimal">+<li>And in list items.<sup><a href="#fn5" class="footnoteRef" id="fnref5">5</a></sup></li>+</ol>+<p>This paragraph should not be part of the note, as it is not indented.</p>+<div class="footnotes">+<hr />+<ol>+<li id="fn1"><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. <a href="#fnref1" class="footnoteBackLink" title="Jump back to footnote 1">↩</a></p></li>+<li id="fn2"><p>Here’s the long note. This one contains multiple blocks.</p>+<p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p>+<pre><code>  { &lt;code&gt; }+</code></pre>+<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. <a href="#fnref2" class="footnoteBackLink" title="Jump back to footnote 2">↩</a></p></li>+<li id="fn3"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters, as well as [bracketed text]. <a href="#fnref3" class="footnoteBackLink" title="Jump back to footnote 3">↩</a></p></li>+<li id="fn4"><p>In quote. <a href="#fnref4" class="footnoteBackLink" title="Jump back to footnote 4">↩</a></p></li>+<li id="fn5"><p>In list. <a href="#fnref5" class="footnoteBackLink" title="Jump back to footnote 5">↩</a></p></li>+</ol>+</div> </body> </html>