diff options
author | Alexander Krotov <ilabdsf@gmail.com> | 2017-03-10 13:16:27 +0400 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-03-10 10:16:27 +0100 |
commit | d037c5019d51b9fc64690f5e73158c1dd683012b (patch) | |
tree | 8127bde97d30278f53d99de32c1e568c28e1320e /test | |
parent | ebb2acb89053eca6063ad3b99a3b83cf80d09bca (diff) | |
download | pandoc-d037c5019d51b9fc64690f5e73158c1dd683012b.tar.gz |
Add Muse writer (#3489)
* Add Muse writer
* Advertise new Muse writer
* Muse writer: add regressions tests
Diffstat (limited to 'test')
-rw-r--r-- | test/Tests/Old.hs | 3 | ||||
-rw-r--r-- | test/Tests/Writers/Muse.hs | 273 | ||||
-rw-r--r-- | test/tables.muse | 46 | ||||
-rw-r--r-- | test/test-pandoc.hs | 2 | ||||
-rw-r--r-- | test/writer.muse | 772 |
5 files changed, 1096 insertions, 0 deletions
diff --git a/test/Tests/Old.hs b/test/Tests/Old.hs index 253238d21..d8cd3f5a0 100644 --- a/test/Tests/Old.hs +++ b/test/Tests/Old.hs @@ -142,6 +142,9 @@ tests = [ testGroup "markdown" , test "context" ["-f", "native", "-t", "context", "-s"] "writers-lang-and-dir.native" "writers-lang-and-dir.context" ] + , testGroup "muse" + [ testGroup "writer" $ writerTests "muse" + ] ] -- makes sure file is fully closed after reading diff --git a/test/Tests/Writers/Muse.hs b/test/Tests/Writers/Muse.hs new file mode 100644 index 000000000..12ecfb477 --- /dev/null +++ b/test/Tests/Writers/Muse.hs @@ -0,0 +1,273 @@ +module Tests.Writers.Muse (tests) where + +import Test.Framework +import Tests.Helpers +import Text.Pandoc +import Text.Pandoc.Arbitrary() +import Text.Pandoc.Builder + +muse :: (ToPandoc a) => a -> String +muse = museWithOpts def{ writerWrapText = WrapNone } + +museWithOpts :: (ToPandoc a) => WriterOptions -> a -> String +museWithOpts opts = purely (writeMuse opts) . toPandoc + +infix 4 =: +(=:) :: (ToString a, ToPandoc a) + => String -> (a, String) -> Test +(=:) = test muse + +tests :: [Test] +tests = [ testGroup "block elements" + [ "plain" =: plain (text "Foo bar.") =?> "Foo bar." + , testGroup "paragraphs" + [ "single paragraph" =: para (text "Sample paragraph.") + =?> "Sample paragraph." + , "two paragraphs" =: para (text "First paragraph.") <> + para (text "Second paragraph.") + =?> unlines [ "First paragraph." + , "" + , "Second paragraph." + ] + ] + , "line block" =: lineBlock ([text "Foo", text "bar", text "baz"]) + =?> unlines [ "<verse>" + , "Foo" + , "bar" + , "baz" + , "</verse>" + ] + , "code block" =: codeBlock ("int main(void) {\n\treturn 0;\n}") + =?> unlines [ "<example>" + , "int main(void) {" + , "\treturn 0;" + , "}" + , "</example>" + ] + , "html raw block" =: rawBlock "html" "<hr>" + =?> unlines [ "<literal style=\"html\">" + , "<hr>" + , "</literal>" + ] + , "block quote" =: blockQuote (para (text "Foo")) + =?> unlines [ "<quote>" + , "Foo" + , "</quote>" + ] + , testGroup "lists" + [ testGroup "simple lists" + [ + "ordered list" =: orderedList [ plain $ text "first" + , plain $ text "second" + , plain $ text "third" + ] + =?> unlines [ " 1. first" + , " 2. second" + , " 3. third" + ] + , "ordered list with Roman numerals" + =: orderedListWith (1, UpperRoman, DefaultDelim) + [ plain $ text "first" + , plain $ text "second" + , plain $ text "third" + ] + =?> unlines [ " I. first" + , " II. second" + , " III. third" + ] + , "bullet list" =: bulletList [ plain $ text "first" + , plain $ text "second" + , plain $ text "third" + ] + =?> unlines [ " - first" + , " - second" + , " - third" + ] + , "definition list" =: definitionList [ (text "first definition", [plain $ text "first description"]) + , (text "second definition", [plain $ text "second description"]) + , (text "third definition", [plain $ text "third description"]) + ] + =?> unlines [ " first definition :: first description" + , " second definition :: second description" + , " third definition :: third description" + ] + ] + , testGroup "nested lists" + [ "nested ordered list" =: orderedList [ plain $ text "First outer" + , plain (text "Second outer:") <> + orderedList [ plain $ text "first" + , plain $ text "second" + ] + , plain $ text "Third outer" + ] + =?> unlines [ " 1. First outer" + , " 2. Second outer:" + , " 1. first" + , " 2. second" + , " 3. Third outer" + ] + , "nested bullet lists" =: bulletList [ plain $ text "First outer" + , plain (text "Second outer:") <> + bulletList [ plain $ text "first" + , plain $ text "second" + ] + , plain $ text "Third outer" + ] + =?> unlines [ " - First outer" + , " - Second outer:" + , " - first" + , " - second" + , " - Third outer" + ] + , "nested definition lists" =: definitionList [ (text "first definition", [plain $ text "first description"]) + , (text "second definition", + [ plain (text "second description") + , definitionList [ ( text "first inner definition" + , [plain $ text "first inner description"]) + , ( text "second inner definition" + , [plain $ text "second inner description"]) + ] + ] + ) + ] + =?> unlines [ " first definition :: first description" + , " second definition :: second description" + , " first inner definition :: first inner description" + , " second inner definition :: second inner description" + ] + ] + ] + , testGroup "headings" + [ "normal heading" =: + header 1 (text "foo") =?> "* foo" + , "heading levels" =: + header 1 (text "First level") <> + header 3 (text "Third level") =?> + unlines [ "* First level" + , "" + , "*** Third level" + ] + ] + , "horizontal rule" =: horizontalRule =?> "----" + , testGroup "tables" + [ "table without header" =: + let rows = [[para $ text "Para 1.1", para $ text "Para 1.2"] + ,[para $ text "Para 2.1", para $ text "Para 2.2"]] + in simpleTable [] rows + =?> + unlines [ "Para 1.1 | Para 1.2" + , "Para 2.1 | Para 2.2" + ] + , "table with header" =: + let headers = [plain $ text "header 1", plain $ text "header 2"] + rows = [[para $ text "Para 1.1", para $ text "Para 1.2"] + ,[para $ text "Para 2.1", para $ text "Para 2.2"]] + in simpleTable headers rows + =?> + unlines [ "header 1 || header 2" + , "Para 1.1 | Para 1.2" + , "Para 2.1 | Para 2.2" + ] + , "table with header and caption" =: + let caption = text "Table 1" + headers = [plain $ text "header 1", plain $ text "header 2"] + rows = [[para $ text "Para 1.1", para $ text "Para 1.2"] + ,[para $ text "Para 2.1", para $ text "Para 2.2"]] + in table caption mempty headers rows + =?> unlines [ "header 1 || header 2" + , "Para 1.1 | Para 1.2" + , "Para 2.1 | Para 2.2" + , "|+ Table 1 +|" + ] + ] + -- Div is trivial + -- Null is trivial + ] + , testGroup "inline elements" + [ testGroup "string" + [ "string" =: str "foo" =?> "foo" + , "escape footnote" =: str "[1]" =?> "<verbatim>[1]</verbatim>" + , "escape verbatim close tag" =: str "foo</verbatim>bar" + =?> "<verbatim>foo<</verbatim><verbatim>/verbatim>bar</verbatim>" + , "escape pipe to avoid accidental tables" =: str "foo | bar" + =?> "<verbatim>foo | bar</verbatim>" + , "escape definition list markers" =: str "::" =?> "<verbatim>::</verbatim>" + -- We don't want colons to be escaped if they can't be confused + -- with definition list item markers. + , "do not escape colon" =: str ":" =?> ":" + ] + , testGroup "emphasis" + [ "emph" =: emph (text "foo") =?> "<em>foo</em>" + , "strong" =: strong (text "foo") =?> "<strong>foo</strong>" + , "strikeout" =: strikeout (text "foo") =?> "<del>foo</del>" + ] + , "superscript" =: superscript (text "foo") =?> "<sup>foo</sup>" + , "subscript" =: subscript (text "foo") =?> "<sub>foo</sub>" + , "smallcaps" =: smallcaps (text "foo") =?> "foo" + , "single quoted" =: singleQuoted (text "foo") =?> "'foo'" + , "double quoted" =: doubleQuoted (text "foo") =?> "\"foo\"" + -- Cite is trivial + , testGroup "code" + [ "simple" =: code "foo" =?> "<code>foo</code>" + , "escape lightweight markup" =: code "foo = bar" =?> "<code><verbatim>foo = bar</verbatim></code>" + , "escape tag" =: code "<code>foo = bar</code> baz" =?> "<code><verbatim><code>foo = bar</code> baz</verbatim></code>" + ] + , testGroup "spaces" + [ "space" =: text "a" <> space <> text "b" =?> "a b" + , "soft break" =: text "a" <> softbreak <> text "b" =?> "a b" + , test (museWithOpts def{ writerWrapText = WrapPreserve }) + "preserve soft break" $ text "a" <> softbreak <> text "b" + =?> "a\nb" + , "line break" =: text "a" <> linebreak <> text "b" =?> "a<br>\nb" + ] + , testGroup "math" + [ "inline math" =: math "2^3" =?> "2<sup>3</sup>" + , "display math" =: displayMath "2^3" =?> "<verse>2<sup>3</sup></verse>" + ] + , "raw inline" + =: rawInline "html" "<mark>marked text</mark>" + =?> "<literal style=\"html\"><mark>marked text</mark></literal>" + , testGroup "links" + [ "link with description" =: link "https://example.com" "" (str "Link 1") + =?> "[[https://example.com][Link 1]]" + , "link without description" =: link "https://example.com" "" (str "https://example.com") + =?> "[[https://example.com]]" + -- Internal links in Muse include '#' + , "link to anchor" =: link "#intro" "" (str "Introduction") + =?> "[[#intro][Introduction]]" + -- According to Emacs Muse manual, links to images should be prefixed with "URL:" + , "link to image with description" =: link "1.png" "" (str "Link to image") + =?> "[[URL:1.png][Link to image]]" + , "link to image without description" =: link "1.png" "" (str "1.png") + =?> "[[URL:1.png]]" + ] + , "image" =: image "image.png" "Image 1" (str "") =?> "[[image.png][Image 1]]" + , "note" =: note (plain (text "Foo")) + =?> unlines [ "[1]" + , "" + , "[1] Foo" + ] + , "span" =: spanWith ("",["foobar"],[]) (str "Some text") + =?> "<class name=\"foobar\">Some text</class>" + , testGroup "combined" + [ "emph word before" =: + para (text "foo" <> emph (text "bar")) =?> + "foo<em>bar</em>" + , "emph word after" =: + para (emph (text "foo") <> text "bar") =?> + "<em>foo</em>bar" + , "emph quoted" =: + para (doubleQuoted (emph (text "foo"))) =?> + "\"<em>foo</em>\"" + , "strong word before" =: + para (text "foo" <> strong (text "bar")) =?> + "foo<strong>bar</strong>" + , "strong word after" =: + para (strong (text "foo") <> text "bar") =?> + "<strong>foo</strong>bar" + , "strong quoted" =: + para (singleQuoted (strong (text "foo"))) =?> + "'<strong>foo</strong>'" + ] + ] + ] diff --git a/test/tables.muse b/test/tables.muse new file mode 100644 index 000000000..afdccd476 --- /dev/null +++ b/test/tables.muse @@ -0,0 +1,46 @@ +Simple table with caption: + +Right || Left || Center || Default +12 | 12 | 12 | 12 +123 | 123 | 123 | 123 +1 | 1 | 1 | 1 +|+ Demonstration of simple table syntax. +| + +Simple table without caption: + +Right || Left || Center || Default +12 | 12 | 12 | 12 +123 | 123 | 123 | 123 +1 | 1 | 1 | 1 + +Simple table indented two spaces: + +Right || Left || Center || Default +12 | 12 | 12 | 12 +123 | 123 | 123 | 123 +1 | 1 | 1 | 1 +|+ Demonstration of simple table syntax. +| + +Multiline table with caption: + +Centered Header || Left Aligned || Right Aligned || Default aligned +First | row | 12.0 | Example of a row that spans multiple lines. +Second | row | 5.0 | Here’s another one. Note the blank line between rows. +|+ Here’s the caption. It may span multiple lines. +| + +Multiline table without caption: + +Centered Header || Left Aligned || Right Aligned || Default aligned +First | row | 12.0 | Example of a row that spans multiple lines. +Second | row | 5.0 | Here’s another one. Note the blank line between rows. + +Table without column headers: + +12 | 12 | 12 | 12 +123 | 123 | 123 | 123 +1 | 1 | 1 | 1 + +Multiline table without column headers: + +First | row | 12.0 | Example of a row that spans multiple lines. +Second | row | 5.0 | Here’s another one. Note the blank line between rows. diff --git a/test/test-pandoc.hs b/test/test-pandoc.hs index bfad1ab3d..e8575e664 100644 --- a/test/test-pandoc.hs +++ b/test/test-pandoc.hs @@ -29,6 +29,7 @@ import qualified Tests.Writers.Org import qualified Tests.Writers.Plain import qualified Tests.Writers.RST import qualified Tests.Writers.TEI +import qualified Tests.Writers.Muse import Text.Pandoc.Shared (inDirectory) tests :: [Test] @@ -48,6 +49,7 @@ tests = [ Tests.Command.tests , testGroup "Docx" Tests.Writers.Docx.tests , testGroup "RST" Tests.Writers.RST.tests , testGroup "TEI" Tests.Writers.TEI.tests + , testGroup "Muse" Tests.Writers.Muse.tests ] , testGroup "Readers" [ testGroup "LaTeX" Tests.Readers.LaTeX.tests diff --git a/test/writer.muse b/test/writer.muse new file mode 100644 index 000000000..c19cb8ab2 --- /dev/null +++ b/test/writer.muse @@ -0,0 +1,772 @@ +#author John MacFarlane +#title Pandoc Test Suite +#date July 17, 2006 + +This is a set of tests for pandoc. Most of them are adapted from John Gruber’s +markdown test suite. + +---- + +* Headers + +#headers + +** Level 2 with an [[/url][embedded link]] + +#level-2-with-an-embedded-link + +*** Level 3 with <em>emphasis</em> + +#level-3-with-emphasis + +**** Level 4 + +#level-4 + +***** Level 5 + +#level-5 + +* Level 1 + +#level-1 + +** Level 2 with <em>emphasis</em> + +#level-2-with-emphasis + +*** Level 3 + +#level-3 +with no blank line + +** Level 2 + +#level-2 +with no blank line + +---- + +* Paragraphs + +#paragraphs +Here’s a regular paragraph. + +In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. +Because a hard-wrapped line in the middle of a paragraph looked like a list +item. + +Here’s one with a bullet. <verbatim>*</verbatim> criminey. + +There should be a hard line break<br> +here. + +---- + +* Block Quotes + +#block-quotes +E-mail style: + +<quote> +This is a block quote. It is pretty short. +</quote> + +<quote> +Code in a block quote: + +<example> +sub status { + print "working"; +} +</example> + +A list: + +1. item one +2. item two + +Nested block quotes: + +<quote> +nested +</quote> + +<quote> +nested +</quote> +</quote> + +This should not be a block quote: 2 <verbatim>></verbatim> 1. + +And a following paragraph. + +---- + +* Code Blocks + +#code-blocks +Code: + +<example> +---- (should be four hyphens) + +sub status { + print "working"; +} + +this code block is indented by one tab +</example> + +And: + +<example> + this code block is indented by two tabs + +These should not be escaped: \$ \\ \> \[ \{ +</example> + +---- + +* Lists + +#lists + +** Unordered + +#unordered +Asterisks tight: + + - asterisk 1 + - asterisk 2 + - asterisk 3 + +Asterisks loose: + + - asterisk 1 + - asterisk 2 + - asterisk 3 + +Pluses tight: + + - Plus 1 + - Plus 2 + - Plus 3 + +Pluses loose: + + - Plus 1 + - Plus 2 + - Plus 3 + +Minuses tight: + + - Minus 1 + - Minus 2 + - Minus 3 + +Minuses loose: + + - Minus 1 + - Minus 2 + - Minus 3 + +** Ordered + +#ordered +Tight: + + 1. First + 2. Second + 3. Third + +and: + + 1. One + 2. Two + 3. Three + +Loose using tabs: + + 1. First + 2. Second + 3. Third + +and using spaces: + + 1. One + 2. Two + 3. Three + +Multiple paragraphs: + + 1. Item 1, graf one. + + Item 1. graf two. The quick brown fox jumped over the lazy dog’s back. + 2. Item 2. + 3. Item 3. + +** Nested + +#nested + - Tab + - Tab + - Tab + +Here’s another: + + 1. First + 2. Second: + - Fee + - Fie + - Foe + 3. Third + +Same thing but with paragraphs: + + 1. First + 2. Second: + + - Fee + - Fie + - Foe + 3. Third + +** Tabs and spaces + +#tabs-and-spaces + - this is a list item indented with tabs + - this is a list item indented with spaces + + - this is an example list item indented with tabs + - this is an example list item indented with spaces + +** Fancy list markers + +#fancy-list-markers + 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 + +---- + +* Definition Lists + +#definition-lists +Tight using spaces: + + apple :: red fruit + orange :: orange fruit + banana :: yellow fruit + +Tight using tabs: + + apple :: red fruit + orange :: orange fruit + banana :: yellow fruit + +Loose: + + apple :: red fruit + orange :: orange fruit + banana :: yellow fruit + +Multiple blocks with italics: + + <em>apple</em> :: red fruit + + contains seeds, crisp, pleasant to taste + <em>orange</em> :: orange fruit + + <example> + { orange code block } + </example> + + <quote> +orange block quote + </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 + +* HTML Blocks + +#html-blocks +Simple block on one line: + +fooAnd nested without indentation: + +foo + +barInterpreted markdown in a table: + +<literal style="html"> +<table> +</literal> + +<literal style="html"> +<tr> +</literal> + +<literal style="html"> +<td> +</literal> + +This is <em>emphasized</em> + +<literal style="html"> +</td> +</literal> + +<literal style="html"> +<td> +</literal> + +And this is <strong>strong</strong> + +<literal style="html"> +</td> +</literal> + +<literal style="html"> +</tr> +</literal> + +<literal style="html"> +</table> +</literal> + +<literal style="html"> +<script type="text/javascript">document.write('This *should not* be interpreted as markdown');</script> +</literal> + +Here’s a simple block: + +foo + +This should be a code block, though: + +<example> +<div> + foo +</div> +</example> + +As should this: + +<example> +<div>foo</div> +</example> + +Now, nested: + +fooThis should just be an HTML comment: + +<literal style="html"> +<!-- Comment --> +</literal> + +Multiline: + +<literal style="html"> +<!-- +Blah +Blah +--> +</literal> + +<literal style="html"> +<!-- + This is another comment. +--> +</literal> + +Code block: + +<example> +<!-- Comment --> +</example> + +Just plain comment, with trailing spaces on the line: + +<literal style="html"> +<!-- foo --> +</literal> + +Code: + +<example> +<hr /> +</example> + +Hr’s: + +<literal style="html"> +<hr> +</literal> + +<literal style="html"> +<hr /> +</literal> + +<literal style="html"> +<hr /> +</literal> + +<literal style="html"> +<hr> +</literal> + +<literal style="html"> +<hr /> +</literal> + +<literal style="html"> +<hr /> +</literal> + +<literal style="html"> +<hr class="foo" id="bar" /> +</literal> + +<literal style="html"> +<hr class="foo" id="bar" /> +</literal> + +<literal style="html"> +<hr class="foo" id="bar"> +</literal> + +---- + +* Inline Markup + +#inline-markup +This is <em>emphasized</em>, and so <em>is this</em>. + +This is <strong>strong</strong>, and so <strong>is this</strong>. + +An <em>[[/url][emphasized link]]</em>. + +<strong><em>This is strong and em.</em></strong> + +So is <strong><em>this</em></strong> word. + +<strong><em>This is strong and em.</em></strong> + +So is <strong><em>this</em></strong> word. + +This is code: <code><verbatim>></verbatim></code>, <code>$</code>, +<code>\</code>, <code>\$</code>, <code><verbatim><html></verbatim></code>. + +<del>This is <em>strikeout</em>.</del> + +Superscripts: a<sup>bc</sup>d a<sup><em>hello</em></sup> +a<sup>hello there</sup>. + +Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>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 + +#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>code</code>' and a +"[[http://example.com/?foo=1&bar=2][quoted link]]". + +Some dashes: one—two — three—four — five. + +Dashes between numbers: 5–7, 255–66, 1987–1999. + +Ellipses…and…and…. + +---- + +* LaTeX + +#latex + - <literal style="tex">\cite[22-23]{smith.1899}</literal> + - 2 + 2 <verbatim>=</verbatim> 4 + - <em>x</em> ∈ <em>y</em> + - <em>α</em> ∧ <em>ω</em> + - 223 + - <em>p</em>-Tree + - Here’s some display math: + <verse><verbatim>$$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$</verbatim></verse> + - Here’s one that has a line break in it: + <em>α</em> + <em>ω</em> × <em>x</em><sup>2</sup>. + +These shouldn’t be math: + + - To get the famous equation, write + <code><verbatim>$e = mc^2$</verbatim></code>. + - $22,000 is a <em>lot</em> of money. So is $34,000. (It worked if "lot" is + emphasized.) + - Shoes ($20) and socks ($5). + - Escaped <code>$</code>: $73 <em>this should be emphasized</em> 23$. + +Here’s a LaTeX table: + +<literal style="latex"> +\begin{tabular}{|l|l|}\hline +Animal & Number \\ \hline +Dog & 2 \\ +Cat & 1 \\ \hline +\end{tabular} +</literal> + +---- + +* Special Characters + +#special-characters +Here is some unicode: + + - I hat: Î + - o umlaut: ö + - section: § + - set membership: ∈ + - copyright: © + +AT&T has an ampersand in their name. + +AT&T is another way to write it. + +This & that. + +4 <verbatim><</verbatim> 5. + +6 <verbatim>></verbatim> 5. + +Backslash: \ + +Backtick: ` + +Asterisk: <verbatim>*</verbatim> + +Underscore: _ + +Left brace: { + +Right brace: } + +Left bracket: <verbatim>[</verbatim> + +Right bracket: <verbatim>]</verbatim> + +Left paren: ( + +Right paren: ) + +Greater-than: <verbatim>></verbatim> + +Hash: # + +Period: . + +Bang: ! + +Plus: + + +Minus: - + +---- + +* Links + +#links + +** Explicit + +#explicit +Just a [[/url/][URL]]. + +[[/url/][URL and title]]. + +[[/url/][URL and title]]. + +[[/url/][URL and title]]. + +[[/url/][URL and title]] + +[[/url/][URL and title]] + +[[/url/with_underscore][with_underscore]] + +[[mailto:nobody@nowhere.net][Email link]] + +[[][Empty]]. + +** Reference + +#reference +Foo [[/url/][bar]]. + +Foo [[/url/][bar]]. + +Foo [[/url/][bar]]. + +With [[/url/][embedded <verbatim>[brackets]</verbatim>]]. + +[[/url/][b]] by itself should be a link. + +Indented [[/url][once]]. + +Indented [[/url][twice]]. + +Indented [[/url][thrice]]. + +This should <verbatim>[not][]</verbatim> be a link. + +<example> +[not]: /url +</example> + +Foo [[/url/][bar]]. + +Foo [[/url/][biz]]. + +** With ampersands + +#with-ampersands +Here’s a [[http://example.com/?foo=1&bar=2][link with an ampersand in the +URL]]. + +Here’s a link with an amersand in the link text: [[http://att.com/][AT&T]]. + +Here’s an [[/script?foo=1&bar=2][inline link]]. + +Here’s an [[/script?foo=1&bar=2][inline link in pointy braces]]. + +** Autolinks + +#autolinks +With an ampersand: [[http://example.com/?foo=1&bar=2]] + + - In a list? + - [[http://example.com/]] + - It should. + +An e-mail address: [[mailto:nobody@nowhere.net][nobody@nowhere.net]] + +<quote> +Blockquoted: [[http://example.com/]] +</quote> + +Auto-links should not occur here: +<code><verbatim><http://example.com/></verbatim></code> + +<example> +or here: <http://example.com/> +</example> + +---- + +* Images + +#images +From "Voyage dans la Lune" by Georges Melies (1902): + +[[lalune.jpg][Voyage dans la Lune]] + +Here is a movie [[movie.jpg][movie]] icon. + +---- + +* Footnotes + +#footnotes +Here is a footnote reference,[1] and another.[2] This should <em>not</em> be a +footnote reference, because it contains a <verbatim>space.[^my</verbatim> +<verbatim>note]</verbatim> Here is an inline note.[3] + +<quote> +Notes can go in quotes.[4] +</quote> + + 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). + + <example> + { <code> } + </example> + + 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 <em>easier</em> to type. Inline notes may contain + [[http://google.com][links]] and <code><verbatim>]</verbatim></code> + verbatim characters, as well as <verbatim>[bracketed</verbatim> + <verbatim>text].</verbatim> + +[4] In quote. + +[5] In list. |