diff options
-rw-r--r-- | src/Text/Pandoc/Parsing.hs | 4 | ||||
-rw-r--r-- | src/Text/Pandoc/Pretty.hs | 32 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/Markdown.hs | 59 | ||||
-rw-r--r-- | tests/writer.markdown | 40 | ||||
-rw-r--r-- | tests/writer.opml | 26 | ||||
-rw-r--r-- | tests/writer.plain | 202 |
6 files changed, 215 insertions, 148 deletions
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs index 66ebca253..b25fca100 100644 --- a/src/Text/Pandoc/Parsing.hs +++ b/src/Text/Pandoc/Parsing.hs @@ -408,7 +408,7 @@ emailAddress = try $ toResult <$> mailbox <*> (char '@' *> domain) -- Schemes from http://www.iana.org/assignments/uri-schemes.html plus --- the unofficial schemes coap, doi, javascript. +-- the unofficial schemes coap, doi, javascript, isbn, pmid schemes :: [String] schemes = ["coap","doi","javascript","aaa","aaas","about","acap","cap","cid", "crid","data","dav","dict","dns","file","ftp","geo","go","gopher", @@ -430,7 +430,7 @@ schemes = ["coap","doi","javascript","aaa","aaas","about","acap","cap","cid", "rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify", "ssh","steam","svn","teamspeak","things","udp","unreal","ut2004", "ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri", - "ymsgr"] + "ymsgr", "isbn", "pmid"] uriScheme :: Stream s m Char => ParserT s st m String uriScheme = oneOfStringsCI schemes diff --git a/src/Text/Pandoc/Pretty.hs b/src/Text/Pandoc/Pretty.hs index d25ba725f..1e72c2040 100644 --- a/src/Text/Pandoc/Pretty.hs +++ b/src/Text/Pandoc/Pretty.hs @@ -35,6 +35,7 @@ module Text.Pandoc.Pretty ( , render , cr , blankline + , blanklines , space , text , char @@ -100,7 +101,7 @@ data D = Text Int String | BreakingSpace | CarriageReturn | NewLine - | BlankLine + | BlankLines Int -- number of blank lines deriving (Show) newtype Doc = Doc { unDoc :: Seq D } @@ -113,7 +114,7 @@ isBlank :: D -> Bool isBlank BreakingSpace = True isBlank CarriageReturn = True isBlank NewLine = True -isBlank BlankLine = True +isBlank (BlankLines _) = True isBlank (Text _ (c:_)) = isSpace c isBlank _ = False @@ -190,7 +191,7 @@ vsep = foldr ($+$) empty nestle :: Doc -> Doc nestle (Doc d) = Doc $ go d where go x = case viewl x of - (BlankLine :< rest) -> go rest + (BlankLines _ :< rest) -> go rest (NewLine :< rest) -> go rest _ -> x @@ -203,7 +204,7 @@ chomp d = Doc (fromList dl') go (BreakingSpace : xs) = go xs go (CarriageReturn : xs) = go xs go (NewLine : xs) = go xs - go (BlankLine : xs) = go xs + go (BlankLines _ : xs) = go xs go (Prefixed s d' : xs) = Prefixed s (chomp d') : xs go xs = xs @@ -216,9 +217,10 @@ outp off s | off < 0 = do -- offset < 0 means newline characters let pref = reverse $ dropWhile isSpace $ reverse rawpref modify $ \st -> st{ output = fromString pref : output st , column = column st + realLength pref } + let numnewlines = length $ takeWhile (=='\n') $ reverse s modify $ \st -> st { output = fromString s : output st , column = 0 - , newlines = newlines st + 1 } + , newlines = newlines st + numnewlines } outp off s = do -- offset >= 0 (0 might be combining char) st' <- get let pref = prefix st' @@ -277,15 +279,11 @@ renderList (BeforeNonBlank d : xs) = | otherwise -> renderDoc d >> renderList xs [] -> renderList xs -renderList (BlankLine : xs) = do +renderList (BlankLines num : xs) = do st <- get case output st of - _ | newlines st > 1 || null xs -> return () - _ | column st == 0 -> do - outp (-1) "\n" - _ -> do - outp (-1) "\n" - outp (-1) "\n" + _ | newlines st > num || null xs -> return () + | otherwise -> replicateM_ (1 + num - newlines st) (outp (-1) "\n") renderList xs renderList (CarriageReturn : xs) = do @@ -302,7 +300,7 @@ renderList (NewLine : xs) = do renderList (BreakingSpace : CarriageReturn : xs) = renderList (CarriageReturn:xs) renderList (BreakingSpace : NewLine : xs) = renderList (NewLine:xs) -renderList (BreakingSpace : BlankLine : xs) = renderList (BlankLine:xs) +renderList (BreakingSpace : BlankLines n : xs) = renderList (BlankLines n:xs) renderList (BreakingSpace : BreakingSpace : xs) = renderList (BreakingSpace:xs) renderList (BreakingSpace : xs) = do let isText (Text _ _) = True @@ -383,9 +381,13 @@ cr = Doc $ singleton CarriageReturn -- | Inserts a blank line unless one exists already. -- (@blankline <> blankline@ has the same effect as @blankline@. --- If you want multiple blank lines, use @text "\\n\\n"@. blankline :: Doc -blankline = Doc $ singleton BlankLine +blankline = Doc $ singleton (BlankLines 1) + +-- | Inserts a blank lines unless they exists already. +-- (@blanklines m <> blanklines n@ has the same effect as @blankline (max m n)@. +blanklines :: Int -> Doc +blanklines n = Doc $ singleton (BlankLines n) -- | Uses the specified string as a prefix for every line of -- the inside document (except the first, if not at the beginning diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs index 41bec8b87..897e425c6 100644 --- a/src/Text/Pandoc/Writers/Markdown.hs +++ b/src/Text/Pandoc/Writers/Markdown.hs @@ -37,7 +37,7 @@ import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Shared import Text.Pandoc.Writers.Shared import Text.Pandoc.Options -import Text.Pandoc.Parsing hiding (blankline, char, space) +import Text.Pandoc.Parsing hiding (blankline, blanklines, char, space) import Data.List ( group, isPrefixOf, find, intersperse, transpose, sortBy ) import Data.Char ( isSpace, isPunctuation, toUpper ) import Data.Ord ( comparing ) @@ -79,6 +79,9 @@ writePlain opts document = writerExtensions = Set.delete Ext_escaped_line_breaks $ Set.delete Ext_pipe_tables $ Set.delete Ext_raw_html $ + Set.delete Ext_footnotes $ + Set.delete Ext_tex_math_dollars $ + Set.delete Ext_citations $ writerExtensions opts } document) def{ stPlain = True } @@ -171,7 +174,7 @@ pandocToMarkdown opts (Pandoc meta blocks) = do then tableOfContents opts headerBlocks else empty -- Strip off final 'references' header if markdown citations enabled - let blocks' = if not isPlain && isEnabled Ext_citations opts + let blocks' = if isEnabled Ext_citations opts then case reverse blocks of (Div (_,["references"],_) _):xs -> reverse xs _ -> blocks @@ -355,11 +358,11 @@ blockToMarkdown opts (Header level attr inlines) = do let setext = writerSetextHeaders opts return $ nowrap $ case level of - 1 | plain -> blankline <> text "\n\n" <> contents <> blankline <> text "\n" + 1 | plain -> blanklines 3 <> contents <> blanklines 2 | setext -> contents <> attr' <> cr <> text (replicate (offset contents) '=') <> blankline - 2 | plain -> blankline <> text "\n" <> contents <> blankline + 2 | plain -> blanklines 2 <> contents <> blankline | setext -> contents <> attr' <> cr <> text (replicate (offset contents) '-') <> blankline @@ -620,15 +623,21 @@ blockListToMarkdown opts blocks = -- code block will be treated as a list continuation paragraph where fixBlocks (b : CodeBlock attr x : rest) | (not (isEnabled Ext_fenced_code_blocks opts) || attr == nullAttr) - && isListBlock b = - b : RawBlock "html" "<!-- -->\n" : CodeBlock attr x : - fixBlocks rest + && isListBlock b = b : commentSep : CodeBlock attr x : + fixBlocks rest + fixBlocks (b1@(BulletList _) : b2@(BulletList _) : bs) = + b1 : commentSep : fixBlocks (b2:bs) + fixBlocks (b1@(OrderedList _ _) : b2@(OrderedList _ _) : bs) = + b1 : commentSep : fixBlocks (b2:bs) + fixBlocks (b1@(DefinitionList _) : b2@(DefinitionList _) : bs) = + b1 : commentSep : fixBlocks (b2:bs) fixBlocks (x : xs) = x : fixBlocks xs fixBlocks [] = [] isListBlock (BulletList _) = True isListBlock (OrderedList _ _) = True isListBlock (DefinitionList _) = True isListBlock _ = False + commentSep = RawBlock "html" "<!-- -->\n" -- | Get reference for target; if none exists, create unique one and return. -- Prefer label if possible; otherwise, generate a unique key. @@ -695,23 +704,15 @@ inlineToMarkdown opts (Strikeout lst) = do then "~~" <> contents <> "~~" else "<s>" <> contents <> "</s>" inlineToMarkdown opts (Superscript lst) = do - plain <- gets stPlain - if plain - then inlineListToMarkdown opts lst - else do - contents <- inlineListToMarkdown opts $ walk escapeSpaces lst - return $ if isEnabled Ext_superscript opts - then "^" <> contents <> "^" - else "<sup>" <> contents <> "</sup>" + contents <- inlineListToMarkdown opts $ walk escapeSpaces lst + return $ if isEnabled Ext_superscript opts + then "^" <> contents <> "^" + else "<sup>" <> contents <> "</sup>" inlineToMarkdown opts (Subscript lst) = do - plain <- gets stPlain - if plain - then inlineListToMarkdown opts lst - else do - contents <- inlineListToMarkdown opts $ walk escapeSpaces lst - return $ if isEnabled Ext_subscript opts - then "~" <> contents <> "~" - else "<sub>" <> contents <> "</sub>" + contents <- inlineListToMarkdown opts $ walk escapeSpaces lst + return $ if isEnabled Ext_subscript opts + then "~" <> contents <> "~" + else "<sub>" <> contents <> "</sub>" inlineToMarkdown opts (SmallCaps lst) = do plain <- gets stPlain if plain @@ -753,7 +754,11 @@ inlineToMarkdown opts (Math InlineMath str) return $ "\\(" <> text str <> "\\)" | isEnabled Ext_tex_math_double_backslash opts = return $ "\\\\(" <> text str <> "\\\\)" - | otherwise = inlineListToMarkdown opts $ texMathToInlines InlineMath str + | otherwise = do + plain <- gets stPlain + inlineListToMarkdown opts $ + (if plain then makeMathPlainer else id) $ + texMathToInlines InlineMath str inlineToMarkdown opts (Math DisplayMath str) | isEnabled Ext_tex_math_dollars opts = return $ "$$" <> text str <> "$$" @@ -853,3 +858,9 @@ inlineToMarkdown opts (Note contents) = do if isEnabled Ext_footnotes opts then return $ "[^" <> ref <> "]" else return $ "[" <> ref <> "]" + +makeMathPlainer :: [Inline] -> [Inline] +makeMathPlainer = walk go + where + go (Emph xs) = Span nullAttr xs + go x = x diff --git a/tests/writer.markdown b/tests/writer.markdown index 9974d27e0..ad97b15ef 100644 --- a/tests/writer.markdown +++ b/tests/writer.markdown @@ -9,7 +9,7 @@ title: Pandoc Test Suite This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite. -* * * * * +------------------------------------------------------------------------------ Headers ======= @@ -38,7 +38,7 @@ Level 2 with no blank line -* * * * * +------------------------------------------------------------------------------ Paragraphs ========== @@ -54,7 +54,7 @@ Here’s one with a bullet. \* criminey. There should be a hard line break\ here. -* * * * * +------------------------------------------------------------------------------ Block Quotes ============ @@ -84,7 +84,7 @@ This should not be a block quote: 2 \> 1. And a following paragraph. -* * * * * +------------------------------------------------------------------------------ Code Blocks =========== @@ -105,7 +105,7 @@ And: These should not be escaped: \$ \\ \> \[ \{ -* * * * * +------------------------------------------------------------------------------ Lists ===== @@ -268,7 +268,7 @@ M.A. 2007 B. Williams -* * * * * +------------------------------------------------------------------------------ Definition Lists ================ @@ -277,8 +277,10 @@ Tight using spaces: apple : red fruit + orange : orange fruit + banana : yellow fruit @@ -286,30 +288,37 @@ Tight using tabs: apple : red fruit + orange : orange fruit + banana : yellow fruit Loose: apple + : red fruit orange + : orange fruit banana + : yellow fruit Multiple blocks with italics: *apple* + : red fruit contains seeds, crisp, pleasant to taste *orange* + : orange fruit { orange code block } @@ -321,6 +330,7 @@ Multiple definitions, tight: apple : red fruit : computer + orange : orange fruit : bank @@ -328,11 +338,13 @@ orange Multiple definitions, loose: apple + : red fruit : computer orange + : orange fruit : bank @@ -340,11 +352,13 @@ orange Blank line after term, indented marker, alternate markers: apple + : red fruit : computer orange + : orange fruit 1. sublist @@ -465,7 +479,7 @@ Hr’s: <hr class="foo" id="bar" /> <hr class="foo" id="bar"> -* * * * * +------------------------------------------------------------------------------ Inline Markup ============= @@ -495,7 +509,7 @@ Subscripts: H~2~O, H~23~O, H~many of them~O. These should not be superscripts or subscripts, because of the unescaped spaces: a\^b c\^d, a\~b c\~d. -* * * * * +------------------------------------------------------------------------------ Smart quotes, ellipses, dashes ============================== @@ -517,7 +531,7 @@ Dashes between numbers: 5–7, 255–66, 1987–1999. Ellipses…and…and…. -* * * * * +------------------------------------------------------------------------------ LaTeX ===== @@ -548,7 +562,7 @@ Dog & 2 \\ Cat & 1 \\ \hline \end{tabular} -* * * * * +------------------------------------------------------------------------------ Special Characters ================== @@ -603,7 +617,7 @@ Plus: + Minus: - -* * * * * +------------------------------------------------------------------------------ Links ===== @@ -685,7 +699,7 @@ Auto-links should not occur here: `<http://example.com/>` or here: <http://example.com/> -* * * * * +------------------------------------------------------------------------------ Images ====== @@ -696,7 +710,7 @@ From “Voyage dans la Lune” by Georges Melies (1902): Here is a movie ![movie](movie.jpg) icon. -* * * * * +------------------------------------------------------------------------------ Footnotes ========= diff --git a/tests/writer.opml b/tests/writer.opml index 7c7ff01c9..54be4b671 100644 --- a/tests/writer.opml +++ b/tests/writer.opml @@ -21,14 +21,14 @@ <outline text="Level 3" _note="with no blank line "> </outline> </outline> - <outline text="Level 2" _note="with no blank line * * * * *"> + <outline text="Level 2" _note="with no blank line ------------------------------------------------------------------------"> </outline> </outline> -<outline text="Paragraphs" _note="Here’s a regular paragraph. In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item. Here’s one with a bullet. \* criminey. There should be a hard line break\ here. * * * * *"> +<outline text="Paragraphs" _note="Here’s a regular paragraph. In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item. Here’s one with a bullet. \* criminey. There should be a hard line break\ here. ------------------------------------------------------------------------"> </outline> -<outline text="Block Quotes" _note="E-mail style: > This is a block quote. It is pretty short. > Code in a block quote: > > sub status { > print "working"; > } > > A list: > > 1. item one > 2. item two > > Nested block quotes: > > > nested > > > nested This should not be a block quote: 2 \> 1. And a following paragraph. * * * * *"> +<outline text="Block Quotes" _note="E-mail style: > This is a block quote. It is pretty short. > Code in a block quote: > > sub status { > print "working"; > } > > A list: > > 1. item one > 2. item two > > Nested block quotes: > > > nested > > > nested This should not be a block quote: 2 \> 1. And a following paragraph. ------------------------------------------------------------------------"> </outline> -<outline text="Code Blocks" _note="Code: ---- (should be four hyphens) sub status { print "working"; } this code block is indented by one tab And: this code block is indented by two tabs These should not be escaped: \$ \\ \> \[ \{ * * * * *"> +<outline text="Code Blocks" _note="Code: ---- (should be four hyphens) sub status { print "working"; } this code block is indented by one tab And: this code block is indented by two tabs These should not be escaped: \$ \\ \> \[ \{ ------------------------------------------------------------------------"> </outline> <outline text="Lists"> <outline text="Unordered" _note="Asterisks tight: - asterisk 1 - asterisk 2 - asterisk 3 Asterisks loose: - asterisk 1 - asterisk 2 - asterisk 3 Pluses tight: - Plus 1 - Plus 2 - Plus 3 Pluses loose: - Plus 1 - Plus 2 - Plus 3 Minuses tight: - Minus 1 - Minus 2 - Minus 3 Minuses loose: - Minus 1 - Minus 2 - Minus 3 "> @@ -39,20 +39,20 @@ </outline> <outline text="Tabs and spaces" _note="- this is a list item indented with tabs - this is a list item indented with spaces - this is an example list item indented with tabs - this is an example list item indented with spaces "> </outline> - <outline text="Fancy list markers" _note="(2) begins with 2 (3) and now 3 with a continuation iv. sublist with roman numerals, starting with 4 v. more items (A) a subsublist (B) a subsublist Nesting: A. Upper Alpha I. Upper Roman. (6) Decimal start with 6 c) Lower alpha with paren Autonumbering: 1. Autonumber. 2. More. 1. Nested. Should not be a list item: M.A. 2007 B. Williams * * * * *"> + <outline text="Fancy list markers" _note="(2) begins with 2 (3) and now 3 with a continuation iv. sublist with roman numerals, starting with 4 v. more items (A) a subsublist (B) a subsublist Nesting: A. Upper Alpha I. Upper Roman. (6) Decimal start with 6 c) Lower alpha with paren Autonumbering: 1. Autonumber. 2. More. 1. Nested. Should not be a list item: M.A. 2007 B. Williams ------------------------------------------------------------------------"> </outline> </outline> -<outline text="Definition Lists" _note="Tight using spaces: apple : red fruit orange : orange fruit banana : yellow fruit Tight using tabs: apple : red fruit orange : orange fruit banana : yellow fruit Loose: apple : red fruit orange : orange fruit banana : yellow fruit Multiple blocks with italics: *apple* : red fruit contains seeds, crisp, pleasant to taste *orange* : orange fruit { orange code block } > orange block quote Multiple definitions, tight: apple : red fruit : computer orange : orange fruit : bank Multiple definitions, loose: apple : red fruit : computer orange : orange fruit : bank Blank line after term, indented marker, alternate markers: apple : red fruit : computer orange : orange fruit 1. sublist 2. sublist "> +<outline text="Definition Lists" _note="Tight using spaces: apple : red fruit orange : orange fruit banana : yellow fruit Tight using tabs: apple : red fruit orange : orange fruit banana : yellow fruit Loose: apple : red fruit orange : orange fruit banana : yellow fruit Multiple blocks with italics: *apple* : red fruit contains seeds, crisp, pleasant to taste *orange* : orange fruit { orange code block } > orange block quote Multiple definitions, tight: apple : red fruit : computer orange : orange fruit : bank Multiple definitions, loose: apple : red fruit : computer orange : orange fruit : bank Blank line after term, indented marker, alternate markers: apple : red fruit : computer orange : orange fruit 1. sublist 2. sublist "> </outline> -<outline text="HTML Blocks" _note="Simple block on one line: <div> foo </div> And nested without indentation: <div> <div> <div> foo </div> </div> <div> bar </div> </div> Interpreted markdown in a table: <table> <tr> <td> This is *emphasized* </td> <td> And this is **strong** </td> </tr> </table> <script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script> Here’s a simple block: <div> foo </div> This should be a code block, though: <div> foo </div> As should this: <div>foo</div> Now, nested: <div> <div> <div> foo </div> </div> </div> This should just be an HTML comment: <!-- Comment --> Multiline: <!-- Blah Blah --> <!-- This is another comment. --> Code block: <!-- Comment --> Just plain comment, with trailing spaces on the line: <!-- foo --> Code: <hr /> Hr’s: <hr> <hr /> <hr /> <hr> <hr /> <hr /> <hr class="foo" id="bar" /> <hr class="foo" id="bar" /> <hr class="foo" id="bar"> * * * * *"> +<outline text="HTML Blocks" _note="Simple block on one line: <div> foo </div> And nested without indentation: <div> <div> <div> foo </div> </div> <div> bar </div> </div> Interpreted markdown in a table: <table> <tr> <td> This is *emphasized* </td> <td> And this is **strong** </td> </tr> </table> <script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script> Here’s a simple block: <div> foo </div> This should be a code block, though: <div> foo </div> As should this: <div>foo</div> Now, nested: <div> <div> <div> foo </div> </div> </div> This should just be an HTML comment: <!-- Comment --> Multiline: <!-- Blah Blah --> <!-- This is another comment. --> Code block: <!-- Comment --> Just plain comment, with trailing spaces on the line: <!-- foo --> Code: <hr /> Hr’s: <hr> <hr /> <hr /> <hr> <hr /> <hr /> <hr class="foo" id="bar" /> <hr class="foo" id="bar" /> <hr class="foo" id="bar"> ------------------------------------------------------------------------"> </outline> -<outline text="Inline Markup" _note="This is *emphasized*, and so *is this*. This is **strong**, and so **is this**. An *[emphasized link](/url)*. ***This is strong and em.*** So is ***this*** word. ***This is strong and em.*** So is ***this*** word. This is code: `>`, `$`, `\`, `\$`, `<html>`. ~~This is *strikeout*.~~ Superscripts: a^bc^d a^*hello*^ a^hello there^. Subscripts: H~2~O, H~23~O, H~many of them~O. These should not be superscripts or subscripts, because of the unescaped spaces: a\^b c\^d, a\~b c\~d. * * * * *"> +<outline text="Inline Markup" _note="This is *emphasized*, and so *is this*. This is **strong**, and so **is this**. An *[emphasized link](/url)*. ***This is strong and em.*** So is ***this*** word. ***This is strong and em.*** So is ***this*** word. This is code: `>`, `$`, `\`, `\$`, `<html>`. ~~This is *strikeout*.~~ Superscripts: a^bc^d a^*hello*^ a^hello there^. Subscripts: H~2~O, H~23~O, H~many of them~O. These should not be superscripts or subscripts, because of the unescaped spaces: a\^b c\^d, a\~b c\~d. ------------------------------------------------------------------------"> </outline> -<outline text="Smart quotes, ellipses, dashes" _note="“Hello,” said the spider. “‘Shelob’ is my name.” ‘A’, ‘B’, and ‘C’ are letters. ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’ ‘He said, “I want to go.”’ Were you alive in the 70’s? Here is some quoted ‘`code`’ and a “[quoted link](http://example.com/?foo=1&bar=2)”. Some dashes: one—two — three—four — five. Dashes between numbers: 5–7, 255–66, 1987–1999. Ellipses…and…and…. * * * * *"> +<outline text="Smart quotes, ellipses, dashes" _note="“Hello,” said the spider. “‘Shelob’ is my name.” ‘A’, ‘B’, and ‘C’ are letters. ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’ ‘He said, “I want to go.”’ Were you alive in the 70’s? Here is some quoted ‘`code`’ and a “[quoted link](http://example.com/?foo=1&bar=2)”. Some dashes: one—two — three—four — five. Dashes between numbers: 5–7, 255–66, 1987–1999. Ellipses…and…and…. ------------------------------------------------------------------------"> </outline> -<outline text="LaTeX" _note="- \cite[22-23]{smith.1899} - $2+2=4$ - $x \in y$ - $\alpha \wedge \omega$ - $223$ - $p$-Tree - Here’s some display math: $$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$ - Here’s one that has a line break in it: $\alpha + \omega \times x^2$. These shouldn’t be math: - To get the famous equation, write `$e = mc^2$`. - \$22,000 is a *lot* of money. So is \$34,000. (It worked if “lot” is emphasized.) - Shoes (\$20) and socks (\$5). - Escaped `$`: \$73 *this should be emphasized* 23\$. Here’s a LaTeX table: \begin{tabular}{|l|l|}\hline Animal & Number \\ \hline Dog & 2 \\ Cat & 1 \\ \hline \end{tabular} * * * * *"> +<outline text="LaTeX" _note="- \cite[22-23]{smith.1899} - $2+2=4$ - $x \in y$ - $\alpha \wedge \omega$ - $223$ - $p$-Tree - Here’s some display math: $$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$ - Here’s one that has a line break in it: $\alpha + \omega \times x^2$. These shouldn’t be math: - To get the famous equation, write `$e = mc^2$`. - \$22,000 is a *lot* of money. So is \$34,000. (It worked if “lot” is emphasized.) - Shoes (\$20) and socks (\$5). - Escaped `$`: \$73 *this should be emphasized* 23\$. Here’s a LaTeX table: \begin{tabular}{|l|l|}\hline Animal & Number \\ \hline Dog & 2 \\ Cat & 1 \\ \hline \end{tabular} ------------------------------------------------------------------------"> </outline> -<outline text="Special Characters" _note="Here is some unicode: - I hat: Î - o umlaut: ö - section: § - set membership: ∈ - copyright: © AT&T has an ampersand in their name. AT&T is another way to write it. This & that. 4 \< 5. 6 \> 5. Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: { Right brace: } Left bracket: [ Right bracket: ] Left paren: ( Right paren: ) Greater-than: \> Hash: \# Period: . Bang: ! Plus: + Minus: - * * * * *"> +<outline text="Special Characters" _note="Here is some unicode: - I hat: Î - o umlaut: ö - section: § - set membership: ∈ - copyright: © AT&T has an ampersand in their name. AT&T is another way to write it. This & that. 4 \< 5. 6 \> 5. Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: { Right brace: } Left bracket: [ Right bracket: ] Left paren: ( Right paren: ) Greater-than: \> Hash: \# Period: . Bang: ! Plus: + Minus: - ------------------------------------------------------------------------"> </outline> <outline text="Links"> <outline text="Explicit" _note="Just a [URL](/url/). [URL and title](/url/ "title"). [URL and title](/url/ "title preceded by two spaces"). [URL and title](/url/ "title preceded by a tab"). [URL and title](/url/ "title with "quotes" in it") [URL and title](/url/ "title with single quotes") [with\_underscore](/url/with_underscore) [Email link](mailto:nobody@nowhere.net) [Empty](). "> @@ -61,10 +61,10 @@ </outline> <outline text="With ampersands" _note="Here’s a [link with an ampersand in the URL](http://example.com/?foo=1&bar=2). Here’s a link with an amersand in the link text: [AT&T](http://att.com/ "AT&T"). Here’s an [inline link](/script?foo=1&bar=2). Here’s an [inline link in pointy braces](/script?foo=1&bar=2). "> </outline> - <outline text="Autolinks" _note="With an ampersand: <http://example.com/?foo=1&bar=2> - In a list? - <http://example.com/> - It should. An e-mail address: <nobody@nowhere.net> > Blockquoted: <http://example.com/> Auto-links should not occur here: `<http://example.com/>` or here: <http://example.com/> * * * * *"> + <outline text="Autolinks" _note="With an ampersand: <http://example.com/?foo=1&bar=2> - In a list? - <http://example.com/> - It should. An e-mail address: <nobody@nowhere.net> > Blockquoted: <http://example.com/> Auto-links should not occur here: `<http://example.com/>` or here: <http://example.com/> ------------------------------------------------------------------------"> </outline> </outline> -<outline text="Images" _note="From “Voyage dans la Lune” by Georges Melies (1902): ![lalune](lalune.jpg "Voyage dans la Lune") Here is a movie ![movie](movie.jpg) icon. * * * * *"> +<outline text="Images" _note="From “Voyage dans la Lune” by Georges Melies (1902): ![lalune](lalune.jpg "Voyage dans la Lune") Here is a movie ![movie](movie.jpg) icon. ------------------------------------------------------------------------"> </outline> <outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be a footnote reference, because it contains a space.[\^my note] Here is an inline note.[^3] > Notes can go in quotes.[^4] 1. And in list items.[^5] This paragraph should not be part of the note, as it is not indented. [^1]: Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. [^2]: Here’s the long note. This one contains multiple blocks. Subsequent blocks are indented to show that they belong to the footnote (as with list items). { <code> } If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. [^3]: This is *easier* to type. Inline notes may contain [links](http://google.com) and `]` verbatim characters, as well as [bracketed text]. [^4]: In quote. [^5]: In list. "> </outline> diff --git a/tests/writer.plain b/tests/writer.plain index 60e7bb329..bd1a06998 100644 --- a/tests/writer.plain +++ b/tests/writer.plain @@ -5,39 +5,43 @@ July 17, 2006 This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite. -* * * * * +------------------------------------------------------------------------------ + + Headers -======= + Level 2 with an embedded link ------------------------------ -Level 3 with emphasis +Level 3 with _emphasis_ Level 4 Level 5 + + Level 1 -======= -Level 2 with emphasis ---------------------- + +Level 2 with _emphasis_ Level 3 with no blank line + Level 2 -------- with no blank line -* * * * * +------------------------------------------------------------------------------ + + Paragraphs -========== + Here’s a regular paragraph. @@ -47,13 +51,15 @@ item. Here’s one with a bullet. * criminey. -There should be a hard line break +There should be a hard line break here. -* * * * * +------------------------------------------------------------------------------ + + Block Quotes -============ + E-mail style: @@ -80,10 +86,12 @@ This should not be a block quote: 2 > 1. And a following paragraph. -* * * * * +------------------------------------------------------------------------------ + + Code Blocks -=========== + Code: @@ -101,13 +109,14 @@ And: These should not be escaped: \$ \\ \> \[ \{ -* * * * * +------------------------------------------------------------------------------ + + Lists -===== + Unordered ---------- Asterisks tight: @@ -151,8 +160,8 @@ Minuses loose: - Minus 3 + Ordered -------- Tight: @@ -192,8 +201,8 @@ Multiple paragraphs: 3. Item 3. + Nested ------- - Tab - Tab @@ -221,8 +230,8 @@ Same thing but with paragraphs: 3. Third + Tabs and spaces ---------------- - this is a list item indented with tabs @@ -232,8 +241,8 @@ Tabs and spaces - this is an example list item indented with spaces + Fancy list markers ------------------- (2) begins with 2 (3) and now 3 @@ -264,17 +273,21 @@ M.A. 2007 B. Williams -* * * * * +------------------------------------------------------------------------------ + + Definition Lists -================ + Tight using spaces: apple red fruit + orange orange fruit + banana yellow fruit @@ -282,30 +295,37 @@ Tight using tabs: apple red fruit + orange orange fruit + banana yellow fruit Loose: apple + red fruit orange + orange fruit banana + yellow fruit Multiple blocks with italics: -apple +_apple_ + red fruit contains seeds, crisp, pleasant to taste -orange +_orange_ + orange fruit { orange code block } @@ -317,6 +337,7 @@ Multiple definitions, tight: apple red fruit computer + orange orange fruit bank @@ -324,11 +345,13 @@ orange Multiple definitions, loose: apple + red fruit computer orange + orange fruit bank @@ -336,18 +359,22 @@ orange Blank line after term, indented marker, alternate markers: apple + red fruit computer orange + orange fruit 1. sublist 2. sublist + + HTML Blocks -=========== + Simple block on one line: @@ -361,8 +388,8 @@ bar Interpreted markdown in a table: -This is emphasized -And this is strong +This is _emphasized_ +And this is STRONG Here’s a simple block: foo @@ -397,40 +424,44 @@ Code: Hr’s: -* * * * * +------------------------------------------------------------------------------ + + Inline Markup -============= -This is emphasized, and so is this. -This is strong, and so is this. +This is _emphasized_, and so _is this_. + +This is STRONG, and so IS THIS. -An emphasized link. +An _emphasized link_. -This is strong and em. +_THIS IS STRONG AND EM._ -So is this word. +So is _THIS_ word. -This is strong and em. +_THIS IS STRONG AND EM._ -So is this word. +So is _THIS_ word. This is code: >, $, \, \$, <html>. -This is strikeout. +~~This is _strikeout_.~~ -Superscripts: abcd ahello ahello there. +Superscripts: a^bc^d a^_hello_^ a^hello there^. -Subscripts: H2O, H23O, Hmany of themO. +Subscripts: H~2~O, H~23~O, H~many of them~O. These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d. -* * * * * +------------------------------------------------------------------------------ + + Smart quotes, ellipses, dashes -============================== + “Hello,” said the spider. “‘Shelob’ is my name.” @@ -448,35 +479,39 @@ Dashes between numbers: 5–7, 255–66, 1987–1999. Ellipses…and…and…. -* * * * * +------------------------------------------------------------------------------ + + LaTeX -===== -- -- 2+2=4 -- x \in y -- \alpha \wedge \omega + +- \cite[22-23]{smith.1899} +- 2 + 2 = 4 +- x ∈ y +- α ∧ ω - 223 - p-Tree - Here’s some display math: - \frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h} -- Here’s one that has a line break in it: \alpha + \omega \times x^2. + $$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$ +- Here’s one that has a line break in it: α + ω × x^2^. These shouldn’t be math: - To get the famous equation, write $e = mc^2$. -- $22,000 is a lot of money. So is $34,000. (It worked if “lot” is +- $22,000 is a _lot_ of money. So is $34,000. (It worked if “lot” is emphasized.) - Shoes ($20) and socks ($5). -- Escaped $: $73 this should be emphasized 23$. +- Escaped $: $73 _this should be emphasized_ 23$. Here’s a LaTeX table: -* * * * * +------------------------------------------------------------------------------ + + Special Characters -================== + Here is some unicode: @@ -528,13 +563,14 @@ Plus: + Minus: - -* * * * * +------------------------------------------------------------------------------ + + Links -===== + Explicit --------- Just a URL. @@ -554,8 +590,8 @@ Email link Empty. + Reference ---------- Foo bar. @@ -581,8 +617,8 @@ Foo bar. Foo biz. + With ampersands ---------------- Here’s a link with an ampersand in the URL. @@ -592,8 +628,8 @@ Here’s an inline link. Here’s an inline link in pointy braces. + Autolinks ---------- With an ampersand: http://example.com/?foo=1&bar=2 @@ -609,10 +645,12 @@ Auto-links should not occur here: <http://example.com/> or here: <http://example.com/> -* * * * * +------------------------------------------------------------------------------ + + Images -====== + From “Voyage dans la Lune” by Georges Melies (1902): @@ -620,37 +658,39 @@ From “Voyage dans la Lune” by Georges Melies (1902): Here is a movie [movie] icon. -* * * * * +------------------------------------------------------------------------------ + + Footnotes -========= -Here is a footnote reference,[^1] and another.[^2] This should not be a + +Here is a footnote reference,[1] and another.[2] This should _not_ be a footnote reference, because it contains a space.[^my note] Here is an inline -note.[^3] +note.[3] - Notes can go in quotes.[^4] + Notes can go in quotes.[4] -1. And in list items.[^5] +1. And in list items.[5] This paragraph should not be part of the note, as it is not indented. -[^1]: Here is the footnote. It can go anywhere after the footnote reference. - It need not be placed at the end of the document. +[1] Here is the footnote. It can go anywhere after the footnote reference. It +need not be placed at the end of the document. -[^2]: Here’s the long note. This one contains multiple blocks. +[2] Here’s the long note. This one contains multiple blocks. - Subsequent blocks are indented to show that they belong to the footnote - (as with list items). +Subsequent blocks are indented to show that they belong to the footnote (as +with list items). - { <code> } + { <code> } - If you want, you can indent every line, but you can also be lazy and just - indent the first line of each block. +If you want, you can indent every line, but you can also be lazy and just +indent the first line of each block. -[^3]: This is easier to type. Inline notes may contain links and ] verbatim - characters, as well as [bracketed text]. +[3] This is _easier_ to type. Inline notes may contain links and ] verbatim +characters, as well as [bracketed text]. -[^4]: In quote. +[4] In quote. -[^5]: In list. +[5] In list. |