From d073b168924a8391c771ecf47af3448bdfa027c6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Apr 2010 12:38:07 -0700 Subject: Added Textile writer module. --- tests/RunTests.hs | 1 + tests/tables.textile | 212 ++++++++++++++++ tests/writer.textile | 683 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 896 insertions(+) create mode 100644 tests/tables.textile create mode 100644 tests/writer.textile (limited to 'tests') diff --git a/tests/RunTests.hs b/tests/RunTests.hs index 1715400fd..cf2997a06 100644 --- a/tests/RunTests.hs +++ b/tests/RunTests.hs @@ -60,6 +60,7 @@ writerFormats = [ "native" , "markdown" , "rst" , "mediawiki" + , "textile" , "rtf" ] diff --git a/tests/tables.textile b/tests/tables.textile new file mode 100644 index 000000000..ccb34cf58 --- /dev/null +++ b/tests/tables.textile @@ -0,0 +1,212 @@ +Simple table with caption: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Demonstration of simple table syntax.
RightLeftCenterDefault
12121212
123123123123
1111
+ +Simple table without caption: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RightLeftCenterDefault
12121212
123123123123
1111
+ +Simple table indented two spaces: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Demonstration of simple table syntax.
RightLeftCenterDefault
12121212
123123123123
1111
+ +Multiline table with caption: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Here's the caption. It may span multiple lines.
Centered HeaderLeft AlignedRight AlignedDefault aligned
Firstrow12.0Example of a row that spans multiple lines.
Secondrow5.0Here's another one. Note the blank line between rows.
+ +Multiline table without caption: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Centered HeaderLeft AlignedRight AlignedDefault aligned
Firstrow12.0Example of a row that spans multiple lines.
Secondrow5.0Here's another one. Note the blank line between rows.
+ +Table without column headers: + + + + + + + + + + + + + + + + + + + + + + +
12121212
123123123123
1111
+ +Multiline table without column headers: + + + + + + + + + + + + + + + + + + + + +
Firstrow12.0Example of a row that spans multiple lines.
Secondrow5.0Here's another one. Note the blank line between rows.
+ diff --git a/tests/writer.textile b/tests/writer.textile new file mode 100644 index 000000000..f864e71f2 --- /dev/null +++ b/tests/writer.textile @@ -0,0 +1,683 @@ +This is a set of tests for pandoc. Most of them are adapted from John Gruber's markdown test suite. + +
+ +h1. Headers + +h2. Level 2 with an "embedded link":/url + +h3. Level 3 with _emphasis_ + +h4. Level 4 + +h5. Level 5 + +h1. Level 1 + +h2. Level 2 with _emphasis_ + +h3. Level 3 + +with no blank line + +h2. Level 2 + +with no blank line + +
+ +h1. Paragraphs + +Here's a regular paragraph. + +In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item. + +Here's one with a bullet. * criminey. + +There should be a hard line break +here. + +
+ +h1. Block Quotes + +E-mail style: + +bq. This is a block quote. It is pretty short. + +
+ +Code in a block quote: + +bc. sub status { + print "working"; +} + +A list: + +# item one +# item two + +Nested block quotes: + +bq. nested + +bq. nested + +
+ +This should not be a block quote: 2 > 1. + +And a following paragraph. + +
+ +h1. Code Blocks + +Code: + +bc.. ---- (should be four hyphens) + +sub status { + print "working"; +} + +this code block is indented by one tab + +And: + +bc.. this code block is indented by two tabs + +These should not be escaped: \$ \\ \> \[ \{ + +
+ +h1. Lists + +h2. Unordered + +Asterisks tight: + +* asterisk 1 +* asterisk 2 +* asterisk 3 + +Asterisks loose: + +* asterisk 1 +* asterisk 2 +* asterisk 3 + +Pluses tight: + +* Plus 1 +* Plus 2 +* Plus 3 + +Pluses loose: + +* Plus 1 +* Plus 2 +* Plus 3 + +Minuses tight: + +* Minus 1 +* Minus 2 +* Minus 3 + +Minuses loose: + +* Minus 1 +* Minus 2 +* Minus 3 + +h2. Ordered + +Tight: + +# First +# Second +# Third + +and: + +# One +# Two +# Three + +Loose using tabs: + +# First +# Second +# Third + +and using spaces: + +# One +# Two +# Three + +Multiple paragraphs: + +
    +
  1. Item 1, graf one.

    +

    Item 1. graf two. The quick brown fox jumped over the lazy dog's back.

  2. +
  3. Item 2.

  4. +
  5. Item 3.

+ +h2. Nested + +* Tab +** Tab +*** Tab + + + +Here's another: + +# First +# Second: +#* Fee +#* Fie +#* Foe + +# Third + +Same thing but with paragraphs: + +# First +# Second: +#* Fee +#* Fie +#* Foe + +# Third + +h2. Tabs and spaces + +* this is a list item indented with tabs +* this is a list item indented with spaces +** this is an example list item indented with tabs +** this is an example list item indented with spaces + + +h2. Fancy list markers + +
    +
  1. begins with 2
  2. +
  3. and now 3

    +

    with a continuation

    +
      +
    1. sublist with roman numerals, starting with 4
    2. +
    3. more items +
        +
      1. a subsublist
      2. +
      3. a subsublist
      +
    +
+ +Nesting: + +
    +
  1. Upper Alpha +
      +
    1. Upper Roman. +
        +
      1. Decimal start with 6 +
          +
        1. Lower alpha with paren
        +
      +
    +
+ +Autonumbering: + +# Autonumber. +# More. +## Nested. + + +Should not be a list item: + +M.A. 2007 + +B. Williams + +
+ +h1. Definition Lists + +Tight using spaces: + +
+
apple
+
red fruit
+
orange
+
orange fruit
+
banana
+
yellow fruit
+ +Tight using tabs: + +
+
apple
+
red fruit
+
orange
+
orange fruit
+
banana
+
yellow fruit
+ +Loose: + +
+
apple
+

red fruit

+
orange
+

orange fruit

+
banana
+

yellow fruit

+ +Multiple blocks with italics: + +
+
_apple_
+

red fruit

+

contains seeds, crisp, pleasant to taste

+
_orange_
+

orange fruit

+bc. { orange code block } + +bq.

orange block quote

+ +Multiple definitions, tight: + +
+
apple
+
red fruit
+
computer
+
orange
+
orange fruit
+
bank
+ +Multiple definitions, loose: + +
+
apple
+

red fruit

+

computer

+
orange
+

orange fruit

+

bank

+ +Blank line after term, indented marker, alternate markers: + +
+
apple
+

red fruit

+

computer

+
orange
+

orange fruit

+
    +
  1. sublist
  2. +
  3. sublist
+
+ +h1. HTML Blocks + +Simple block on one line: + +
+foo +
+ +And nested without indentation: + +
+
+
+foo +
+
+
+bar +
+
+ +Interpreted markdown in a table: + + + + + + +
+This is _emphasized_ + +And this is *strong* +
+ + + +Here's a simple block: + +
+ +foo +
+ +This should be a code block, though: + +bc. <div> + foo +</div> + +As should this: + +bc. <div>foo</div> + +Now, nested: + +
+
+
+ +foo +
+
+
+ +This should just be an HTML comment: + + + +Multiline: + + + + + +Code block: + +bc. <!-- Comment --> + +Just plain comment, with trailing spaces on the line: + + + +Code: + +bc. <hr /> + +Hr's: + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +h1. Inline Markup + +This is _emphasized_, and so _is this_. + +This is *strong*, and so *is this*. + +An _"emphasized link":/url_. + +*_This is strong and em._* + +So is *_this_* word. + +*_This is strong and em._* + +So is *_this_* word. + +This is code: @>@, @$@, @\@, @\$@, @<html>@. + +-This is _strikeout_.- + +Superscripts: a^bc^d a^_hello_^ a^hello there^. + +Subscripts: H~2~O, H~23~O, H~many of them~O. + +These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d. + +
+ +h1. Smart quotes, ellipses, dashes + +"Hello," said the spider. "'Shelob' is my name." + +'A', 'B', and 'C' are letters. + +'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.' + +'He said, "I want to go."' Were you alive in the 70's? + +Here is some quoted '@code@' and a ""quoted link":http://example.com/?foo=1&bar=2". + +Some dashes: one -- two -- three -- four -- five. + +Dashes between numbers: 5 - 7, 255 - 66, 1987 - 1999. + +Ellipses...and...and.... + +
+ +h1. LaTeX + +* +* 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: + + + +
+ +h1. Special Characters + +Here is some unicode: + +* I hat: Î +* o umlaut: ö +* section: § +* set membership: ∈ +* copyright: © + +AT&T has an ampersand in their name. + +AT&T is another way to write it. + +This & that. + +4 < 5. + +6 > 5. + +Backslash: \ + +Backtick: ` + +Asterisk: * + +Underscore: _ + +Left brace: { + +Right brace: } + +Left bracket: [ + +Right bracket: ] + +Left paren: ( + +Right paren: ) + +Greater-than: > + +Hash: # + +Period: . + +Bang: ! + +Plus: + + +Minus: - + +
+ +h1. Links + +h2. Explicit + +Just a "URL":/url/. + +"URL and title":/url/. + +"URL and title":/url/. + +"URL and title":/url/. + +"URL and title":/url/ + +"URL and title":/url/ + +"with_underscore":/url/with_underscore + +"Email link":mailto:nobody@nowhere.net + +"Empty":. + +h2. Reference + +Foo "bar":/url/. + +Foo "bar":/url/. + +Foo "bar":/url/. + +With "embedded [brackets]":/url/. + +"b":/url/ by itself should be a link. + +Indented "once":/url. + +Indented "twice":/url. + +Indented "thrice":/url. + +This should [not][] be a link. + +bc. [not]: /url + +Foo "bar":/url/. + +Foo "biz":/url/. + +h2. With ampersands + +Here's a "link with an ampersand in the URL":http://example.com/?foo=1&bar=2. + +Here's a link with an amersand in the link text: "AT&T":http://att.com/. + +Here's an "inline link":/script?foo=1&bar=2. + +Here's an "inline link in pointy braces":/script?foo=1&bar=2. + +h2. Autolinks + +With an ampersand: "http://example.com/?foo=1&bar=2":http://example.com/?foo=1&bar=2 + +* In a list? +* "http://example.com/":http://example.com/ +* It should. + +An e-mail address: "nobody@nowhere.net":mailto:nobody@nowhere.net + +bq. Blockquoted: "http://example.com/":http://example.com/ + +Auto-links should not occur here: @<http://example.com/>@ + +bc. or here: <http://example.com/> + +
+ +h1. Images + +From "Voyage dans la Lune" by Georges Melies (1902): + +!lalune.jpg(Voyage dans la Lune)! +lalune + +Here is a movie !movie.jpg(movie)! icon. + +
+ +h1. Footnotes + +Here is a footnote reference,[1] and another.[2] This should _not_ be a footnote reference, because it contains a space.[^my note] Here is an inline note.[3] + +bq. Notes can go in quotes.[4] + +# And in list items.[5] + +This paragraph should not be part of the note, as it is not indented. + + +fn1. Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document. + + +fn2. 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). + +bc. { <code> } + +If you want, you can indent every line, but you can also be lazy and just indent the first line of each block. + + +fn3. This is _easier_ to type. Inline notes may contain "links":http://google.com and @]@ verbatim characters, as well as [bracketed text]. + + +fn4. In quote. + + +fn5. In list. + + -- cgit v1.2.3 From cae3f8edbaac60e16152c87b93f0da317c1952f9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 27 Nov 2010 10:44:35 -0800 Subject: Fixed spacing problems in textile nested lists. --- src/Text/Pandoc/Writers/Textile.hs | 6 ++++-- tests/writer.textile | 6 ------ 2 files changed, 4 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/src/Text/Pandoc/Writers/Textile.hs b/src/Text/Pandoc/Writers/Textile.hs index 8dd2288c9..05acb5e8b 100644 --- a/src/Text/Pandoc/Writers/Textile.hs +++ b/src/Text/Pandoc/Writers/Textile.hs @@ -176,9 +176,10 @@ blockToTextile opts x@(BulletList items) = do return $ "
    \n" ++ vcat contents ++ "
\n" else do modify $ \s -> s { stListLevel = stListLevel s ++ "*" } + level <- get >>= return . length . stListLevel contents <- mapM (listItemToTextile opts) items modify $ \s -> s { stListLevel = init (stListLevel s) } - return $ vcat contents ++ "\n" + return $ vcat contents ++ (if level > 1 then "" else "\n") blockToTextile opts x@(OrderedList attribs items) = do oldUseTags <- liftM stUseTags get @@ -190,9 +191,10 @@ blockToTextile opts x@(OrderedList attribs items) = do " \n" else do modify $ \s -> s { stListLevel = stListLevel s ++ "#" } + level <- get >>= return . length . stListLevel contents <- mapM (listItemToTextile opts) items modify $ \s -> s { stListLevel = init (stListLevel s) } - return $ vcat contents ++ "\n" + return $ vcat contents ++ (if level > 1 then "" else "\n") blockToTextile opts (DefinitionList items) = do contents <- withUseTags $ mapM (definitionListItemToTextile opts) items diff --git a/tests/writer.textile b/tests/writer.textile index f864e71f2..7fcda539d 100644 --- a/tests/writer.textile +++ b/tests/writer.textile @@ -172,8 +172,6 @@ h2. Nested ** Tab *** Tab - - Here's another: # First @@ -181,7 +179,6 @@ Here's another: #* Fee #* Fie #* Foe - # Third Same thing but with paragraphs: @@ -191,7 +188,6 @@ Same thing but with paragraphs: #* Fee #* Fie #* Foe - # Third h2. Tabs and spaces @@ -201,7 +197,6 @@ h2. Tabs and spaces ** this is an example list item indented with tabs ** this is an example list item indented with spaces - h2. Fancy list markers
    @@ -237,7 +232,6 @@ Autonumbering: # More. ## Nested. - Should not be a list item: M.A. 2007 -- cgit v1.2.3 From 71c9316a597298415a7d4cb7f758b523ac9339cd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 27 Nov 2010 10:44:58 -0800 Subject: Use [] for superscripts and subscripts in textile writer. --- src/Text/Pandoc/Writers/Textile.hs | 4 ++-- tests/writer.textile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/src/Text/Pandoc/Writers/Textile.hs b/src/Text/Pandoc/Writers/Textile.hs index 05acb5e8b..cb8f20a0a 100644 --- a/src/Text/Pandoc/Writers/Textile.hs +++ b/src/Text/Pandoc/Writers/Textile.hs @@ -344,13 +344,13 @@ inlineToTextile opts (Superscript lst) = do contents <- inlineListToTextile opts lst return $ if '^' `elem` contents then "" ++ contents ++ "" - else "^" ++ contents ++ "^" + else "[^" ++ contents ++ "^]" inlineToTextile opts (Subscript lst) = do contents <- inlineListToTextile opts lst return $ if '~' `elem` contents then "" ++ contents ++ "" - else "~" ++ contents ++ "~" + else "[~" ++ contents ++ "~]" inlineToTextile opts (SmallCaps lst) = inlineListToTextile opts lst diff --git a/tests/writer.textile b/tests/writer.textile index 7fcda539d..b3e2e545b 100644 --- a/tests/writer.textile +++ b/tests/writer.textile @@ -450,9 +450,9 @@ This is code: @>@, @$@, @\@, @\$@, @<html>@. -This is _strikeout_.- -Superscripts: a^bc^d a^_hello_^ a^hello there^. +Superscripts: a[^bc^]d a[^_hello_^] a[^hello there^]. -Subscripts: H~2~O, H~23~O, H~many of them~O. +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. -- cgit v1.2.3