markdown 0.1.1 → 0.1.1.1
raw patch · 44 files changed
+2508/−2 lines, 44 files
Files
- markdown.cabal +5/−2
- test/Tests/Amps and angle encoding.html +17/−0
- test/Tests/Amps and angle encoding.text +21/−0
- test/Tests/Auto links.html +18/−0
- test/Tests/Auto links.text +13/−0
- test/Tests/Backslash escapes.html +118/−0
- test/Tests/Backslash escapes.text +120/−0
- test/Tests/Blockquotes with code blocks.html +15/−0
- test/Tests/Blockquotes with code blocks.text +11/−0
- test/Tests/Code Blocks.html +18/−0
- test/Tests/Code Blocks.text +14/−0
- test/Tests/Code Spans.html +5/−0
- test/Tests/Code Spans.text +5/−0
- test/Tests/Hard-wrapped paragraphs with list-like lines.html +8/−0
- test/Tests/Hard-wrapped paragraphs with list-like lines.text +8/−0
- test/Tests/Horizontal rules.html +71/−0
- test/Tests/Horizontal rules.text +67/−0
- test/Tests/Images.html +21/−0
- test/Tests/Images.text +26/−0
- test/Tests/Inline HTML (Advanced).html +30/−0
- test/Tests/Inline HTML (Advanced).text +30/−0
- test/Tests/Inline HTML (Simple).html +72/−0
- test/Tests/Inline HTML (Simple).text +69/−0
- test/Tests/Inline HTML comments.html +13/−0
- test/Tests/Inline HTML comments.text +13/−0
- test/Tests/Links, inline style.html +23/−0
- test/Tests/Links, inline style.text +24/−0
- test/Tests/Links, reference style.html +52/−0
- test/Tests/Links, reference style.text +71/−0
- test/Tests/Links, shortcut references.html +9/−0
- test/Tests/Links, shortcut references.text +20/−0
- test/Tests/Literal quotes in titles.html +3/−0
- test/Tests/Literal quotes in titles.text +7/−0
- test/Tests/Markdown Documentation - Basics.html +314/−0
- test/Tests/Markdown Documentation - Syntax.html +942/−0
- test/Tests/Nested blockquotes.html +9/−0
- test/Tests/Nested blockquotes.text +5/−0
- test/Tests/Ordered and unordered lists.html +148/−0
- test/Tests/Strong and em together.html +7/−0
- test/Tests/Strong and em together.text +7/−0
- test/Tests/Tabs.html +25/−0
- test/Tests/Tabs.text +21/−0
- test/Tests/Tidyness.html +8/−0
- test/Tests/Tidyness.text +5/−0
markdown.cabal view
@@ -1,5 +1,5 @@ Name: markdown-Version: 0.1.1+Version: 0.1.1.1 Synopsis: Convert Markdown to HTML, with XSS protection Description: This library leverages existing high-performance libraries (attoparsec, blaze-html, text, and conduit), and should integrate well with existing codebases. Homepage: https://github.com/snoyberg/markdown@@ -9,7 +9,10 @@ Maintainer: michael@snoyman.com Category: Web Build-type: Simple-Extra-source-files: test/examples/*.html, test/examples/*.md+Extra-source-files: test/examples/*.html+ , test/examples/*.md+ , test/Tests/*.html+ , test/Tests/*.text Cabal-version: >=1.8 Library
+ test/Tests/Amps and angle encoding.html view
@@ -0,0 +1,17 @@+<p>AT&T has an ampersand in their name.</p>++<p>AT&T is another way to write it.</p>++<p>This & that.</p>++<p>4 < 5.</p>++<p>6 > 5.</p>++<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p>++<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p>++<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>++<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+ test/Tests/Amps and angle encoding.text view
@@ -0,0 +1,21 @@+AT&T has an ampersand in their name.++AT&T is another way to write it.++This & that.++4 < 5.++6 > 5.++Here's a [link] [1] with an ampersand in the URL.++Here's a link with an amersand in the link text: [AT&T] [2].++Here's an inline [link](/script?foo=1&bar=2).++Here's an inline [link](</script?foo=1&bar=2>).+++[1]: http://example.com/?foo=1&bar=2+[2]: http://att.com/ "AT&T"
+ test/Tests/Auto links.html view
@@ -0,0 +1,18 @@+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>++<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p>++<ul>+<li>In a list?</li>+<li><a href="http://example.com/">http://example.com/</a></li>+<li>It should.</li>+</ul>++<blockquote>+<p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>+</blockquote>++<p>Auto-links should not occur here: <code><http://example.com/></code></p>++<pre><code>or here: <http://example.com/>+</code></pre>
+ test/Tests/Auto links.text view
@@ -0,0 +1,13 @@+Link: <http://example.com/>.++With an ampersand: <http://example.com/?foo=1&bar=2>++* In a list?+* <http://example.com/>+* It should.++> Blockquoted: <http://example.com/>++Auto-links should not occur here: `<http://example.com/>`++ or here: <http://example.com/>
+ test/Tests/Backslash escapes.html view
@@ -0,0 +1,118 @@+<p>These should all get escaped:</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: ></p>++<p>Hash: #</p>++<p>Period: .</p>++<p>Bang: !</p>++<p>Plus: +</p>++<p>Minus: -</p>++<p>These should not, because they occur within a code block:</p>++<pre><code>Backslash: \\++Backtick: \`++Asterisk: \*++Underscore: \_++Left brace: \{++Right brace: \}++Left bracket: \[++Right bracket: \]++Left paren: \(++Right paren: \)++Greater-than: \>++Hash: \#++Period: \.++Bang: \!++Plus: \+++Minus: \-+</code></pre>++<p>Nor should these, which occur in code spans:</p>++<p>Backslash: <code>\\</code></p>++<p>Backtick: <code>\`</code></p>++<p>Asterisk: <code>\*</code></p>++<p>Underscore: <code>\_</code></p>++<p>Left brace: <code>\{</code></p>++<p>Right brace: <code>\}</code></p>++<p>Left bracket: <code>\[</code></p>++<p>Right bracket: <code>\]</code></p>++<p>Left paren: <code>\(</code></p>++<p>Right paren: <code>\)</code></p>++<p>Greater-than: <code>\></code></p>++<p>Hash: <code>\#</code></p>++<p>Period: <code>\.</code></p>++<p>Bang: <code>\!</code></p>++<p>Plus: <code>\+</code></p>++<p>Minus: <code>\-</code></p>+++<p>These should get escaped, even though they're matching pairs for+other Markdown constructs:</p>++<p>*asterisks*</p>++<p>_underscores_</p>++<p>`backticks`</p>++<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p>++<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>++<p>This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.</p>
+ test/Tests/Backslash escapes.text view
@@ -0,0 +1,120 @@+These should all get escaped:++Backslash: \\++Backtick: \`++Asterisk: \*++Underscore: \_++Left brace: \{++Right brace: \}++Left bracket: \[++Right bracket: \]++Left paren: \(++Right paren: \)++Greater-than: \>++Hash: \#++Period: \.++Bang: \!++Plus: \+++Minus: \-++++These should not, because they occur within a code block:++ Backslash: \\++ Backtick: \`++ Asterisk: \*++ Underscore: \_++ Left brace: \{++ Right brace: \}++ Left bracket: \[++ Right bracket: \]++ Left paren: \(++ Right paren: \)++ Greater-than: \>++ Hash: \#++ Period: \.++ Bang: \!++ Plus: \+++ Minus: \-+++Nor should these, which occur in code spans:++Backslash: `\\`++Backtick: `` \` ``++Asterisk: `\*`++Underscore: `\_`++Left brace: `\{`++Right brace: `\}`++Left bracket: `\[`++Right bracket: `\]`++Left paren: `\(`++Right paren: `\)`++Greater-than: `\>`++Hash: `\#`++Period: `\.`++Bang: `\!`++Plus: `\+`++Minus: `\-`+++These should get escaped, even though they're matching pairs for+other Markdown constructs:++\*asterisks\*++\_underscores\_++\`backticks\`++This is a code span with a literal backslash-backtick sequence: `` \` ``++This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.++This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.
+ test/Tests/Blockquotes with code blocks.html view
@@ -0,0 +1,15 @@+<blockquote>+<p>Example:</p>++<pre><code>sub status {+ print "working";+}+</code></pre>++<p>Or:</p>++<pre><code>sub status {+ return "working";+}+</code></pre>+</blockquote>
+ test/Tests/Blockquotes with code blocks.text view
@@ -0,0 +1,11 @@+> Example:+> +> sub status {+> print "working";+> }+> +> Or:+> +> sub status {+> return "working";+> }
+ test/Tests/Code Blocks.html view
@@ -0,0 +1,18 @@+<pre><code>code block on the first line+</code></pre>++<p>Regular text.</p>++<pre><code>code block indented by spaces+</code></pre>++<p>Regular text.</p>++<pre><code>the lines in this block +all contain trailing spaces +</code></pre>++<p>Regular Text.</p>++<pre><code>code block on the last line+</code></pre>
+ test/Tests/Code Blocks.text view
@@ -0,0 +1,14 @@+ code block on the first line+ +Regular text.++ code block indented by spaces++Regular text.++ the lines in this block + all contain trailing spaces ++Regular Text.++ code block on the last line
+ test/Tests/Code Spans.html view
@@ -0,0 +1,5 @@+<p><code><test a="</code> content of attribute <code>"></code></p>++<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>++<p>Here's how you put <code>`backticks`</code> in a code span.</p>
+ test/Tests/Code Spans.text view
@@ -0,0 +1,5 @@+`<test a="` content of attribute `">`++Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span>++Here's how you put `` `backticks` `` in a code span.
+ test/Tests/Hard-wrapped paragraphs with list-like lines.html view
@@ -0,0 +1,8 @@+<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>
+ test/Tests/Hard-wrapped paragraphs with list-like lines.text view
@@ -0,0 +1,8 @@+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.
+ test/Tests/Horizontal rules.html view
@@ -0,0 +1,71 @@+<p>Dashes:</p>++<hr>++<hr>++<hr>++<hr>++<pre><code>---+</code></pre>++<hr>++<hr>++<hr>++<hr>++<pre><code>- - -+</code></pre>++<p>Asterisks:</p>++<hr>++<hr>++<hr>++<hr>++<pre><code>***+</code></pre>++<hr>++<hr>++<hr>++<hr>++<pre><code>* * *+</code></pre>++<p>Underscores:</p>++<hr>++<hr>++<hr>++<hr>++<pre><code>___+</code></pre>++<hr>++<hr>++<hr>++<hr>++<pre><code>_ _ _+</code></pre>
+ test/Tests/Horizontal rules.text view
@@ -0,0 +1,67 @@+Dashes:++---++ ---+ + ---++ ---++ ---++- - -++ - - -+ + - - -++ - - -++ - - -+++Asterisks:++***++ ***+ + ***++ ***++ ***++* * *++ * * *+ + * * *++ * * *++ * * *+++Underscores:++___++ ___+ + ___++ ___++ ___++_ _ _++ _ _ _+ + _ _ _++ _ _ _++ _ _ _
+ test/Tests/Images.html view
@@ -0,0 +1,21 @@+<p><img src="/path/to/img.jpg" alt="Alt text"></p>++<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title"></p>++<p>Inline within a paragraph: <a href="/url/">alt text</a>.</p>++<p><img src="/url/" alt="alt text" title="title preceded by two spaces"></p>++<p><img src="/url/" alt="alt text" title="title has spaces afterward"></p>++<p><img src="/url/" alt="alt text"></p>++<p><img src="/url/" alt="alt text" title="with a title">.</p>++<p><img src="" alt="Empty"></p>++<p><img src="http://example.com/(parens).jpg" alt="this is a stupid URL"></p>++<p><img src="/url/" alt="alt text"></p>++<p><img src="/url/" alt="alt text" title="Title here"></p>
+ test/Tests/Images.text view
@@ -0,0 +1,26 @@+++++Inline within a paragraph: [alt text](/url/).++++++++.++![Empty]()++.jpg)+++![alt text][foo]++ [foo]: /url/++![alt text][bar]++ [bar]: /url/ "Title here"
+ test/Tests/Inline HTML (Advanced).html view
@@ -0,0 +1,30 @@+<p>Simple block on one line:</p>++<div>foo</div>++<p>And nested without indentation:</p>++<div>+<div>+<div>+foo+</div>+<div style=">"/>+</div>+<div>bar</div>+</div>++<p>And with attributes:</p>++<div>+ <div id="foo">+ </div>+</div>++<p>This was broken in 1.0.2b7:</p>++<div class="inlinepage">+<div class="toggleableend">+foo+</div>+</div>
+ test/Tests/Inline HTML (Advanced).text view
@@ -0,0 +1,30 @@+Simple block on one line:++<div>foo</div>++And nested without indentation:++<div>+<div>+<div>+foo+</div>+<div style=">"/>+</div>+<div>bar</div>+</div>++And with attributes:++<div>+ <div id="foo">+ </div>+</div>++This was broken in 1.0.2b7:++<div class="inlinepage">+<div class="toggleableend">+foo+</div>+</div>
+ test/Tests/Inline HTML (Simple).html view
@@ -0,0 +1,72 @@+<p>Here's a simple block:</p>++<div>+ foo+</div>++<p>This should be a code block, though:</p>++<pre><code><div>+ foo+</div>+</code></pre>++<p>As should this:</p>++<pre><code><div>foo</div>+</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+-->++<p>Code block:</p>++<pre><code><!-- Comment -->+</code></pre>++<p>Just plain comment, with trailing spaces on the line:</p>++<!-- foo --> ++<p>Code:</p>++<pre><code><hr />+</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" >
+ test/Tests/Inline HTML (Simple).text view
@@ -0,0 +1,69 @@+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+-->++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" >+
+ test/Tests/Inline HTML comments.html view
@@ -0,0 +1,13 @@+<p>Paragraph one.</p>++<!-- This is a simple comment -->++<!--+ This is another comment.+-->++<p>Paragraph two.</p>++<!-- one comment block -- -- with two comments -->++<p>The end.</p>
+ test/Tests/Inline HTML comments.text view
@@ -0,0 +1,13 @@+Paragraph one.++<!-- This is a simple comment -->++<!--+ This is another comment.+-->++Paragraph two.++<!-- one comment block -- -- with two comments -->++The end.
+ test/Tests/Links, inline style.html view
@@ -0,0 +1,23 @@+<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 has spaces afterward">URL and title</a>.</p>++<p><a href="/url/">URL wrapped in angle brackets</a>.</p>++<p><a href="/url/" title="Here's the title">URL w/ angle brackets + title</a>.</p>++<p><a href="">Empty</a>.</p>++<p><a href="http://en.wikipedia.org/wiki/WIMP_(computing)">With parens in the URL</a></p>++<p>(With outer parens and <a href="/foo(bar)">parens in url</a>)</p>++<p><a href="/foo(bar)" title="and a title">With parens in the URL</a></p>++<p>(With outer parens and <a href="/foo(bar)" title="and a title">parens in url</a>)</p>
+ test/Tests/Links, inline style.text view
@@ -0,0 +1,24 @@+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 has spaces afterward" ).++[URL wrapped in angle brackets](</url/>).++[URL w/ angle brackets + title](</url/> "Here's the title").++[Empty]().++[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing))++(With outer parens and [parens in url](/foo(bar)))+++[With parens in the URL](/foo(bar) "and a title")++(With outer parens and [parens in url](/foo(bar) "and a title"))
+ test/Tests/Links, reference style.html view
@@ -0,0 +1,52 @@+<p>Foo <a href="/url/" title="Title">bar</a>.</p>++<p>Foo <a href="/url/" title="Title">bar</a>.</p>++<p>Foo <a href="/url/" title="Title">bar</a>.</p>++<p>With <a href="/url/">embedded [brackets]</a>.</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>Indented [four][] times.</p>++<pre><code>[four]: /url+</code></pre>++<hr>++<p><a href="foo">this</a> should work</p>++<p>So should <a href="foo">this</a>.</p>++<p>And <a href="foo">this</a>.</p>++<p>And <a href="foo">this</a>.</p>++<p>And <a href="foo">this</a>.</p>++<p>But not [that] [].</p>++<p>Nor [that][].</p>++<p>Nor [that].</p>++<p>[Something in brackets like <a href="foo">this</a> should work]</p>++<p>[Same with <a href="foo">this</a>.]</p>++<p>In this case, <a href="/somethingelse/">this</a> points to something else.</p>++<p>Backslashing should suppress [this] and [this].</p>++<hr>++<p>Here's one where the <a href="/url/">link+breaks</a> across lines.</p>++<p>Here's another where the <a href="/url/">link +breaks</a> across lines, but with a line-ending space.</p>
+ test/Tests/Links, reference style.text view
@@ -0,0 +1,71 @@+Foo [bar] [1].++Foo [bar][1].++Foo [bar]+[1].++[1]: /url/ "Title"+++With [embedded [brackets]] [b].+++Indented [once][].++Indented [twice][].++Indented [thrice][].++Indented [four][] times.++ [once]: /url++ [twice]: /url++ [thrice]: /url++ [four]: /url+++[b]: /url/++* * *++[this] [this] should work++So should [this][this].++And [this] [].++And [this][].++And [this].++But not [that] [].++Nor [that][].++Nor [that].++[Something in brackets like [this][] should work]++[Same with [this].]++In this case, [this](/somethingelse/) points to something else.++Backslashing should suppress \[this] and [this\].++[this]: foo+++* * *++Here's one where the [link+breaks] across lines.++Here's another where the [link +breaks] across lines, but with a line-ending space.+++[link breaks]: /url/
+ test/Tests/Links, shortcut references.html view
@@ -0,0 +1,9 @@+<p>This is the <a href="/simple">simple case</a>.</p>++<p>This one has a <a href="/foo">line+break</a>.</p>++<p>This one has a <a href="/foo">line +break</a> with a line-ending space.</p>++<p><a href="/that">this</a> and the <a href="/other">other</a></p>
+ test/Tests/Links, shortcut references.text view
@@ -0,0 +1,20 @@+This is the [simple case].++[simple case]: /simple++++This one has a [line+break].++This one has a [line +break] with a line-ending space.++[line break]: /foo+++[this] [that] and the [other]++[this]: /this+[that]: /that+[other]: /other
+ test/Tests/Literal quotes in titles.html view
@@ -0,0 +1,3 @@+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>++<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+ test/Tests/Literal quotes in titles.text view
@@ -0,0 +1,7 @@+Foo [bar][].++Foo [bar](/url/ "Title with "quotes" inside").+++ [bar]: /url/ "Title with "quotes" inside"+
+ test/Tests/Markdown Documentation - Basics.html view
@@ -0,0 +1,314 @@+<h1>Markdown: Basics</h1>++<ul id="ProjectSubmenu">+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>+ <li><a class="selected" title="Markdown Basics">Basics</a></li>+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>+</ul>++<h2>Getting the Gist of Markdown's Formatting Syntax</h2>++<p>This page offers a brief overview of what it's like to use Markdown.+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for+every feature, but Markdown should be very easy to pick up simply by+looking at a few examples of it in action. The examples on this page+are written in a before/after style, showing example syntax and the+HTML output produced by Markdown.</p>++<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a+web application that allows you type your own Markdown-formatted text+and translate it to XHTML.</p>++<p><strong>Note:</strong> This document is itself written using Markdown; you+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>++<h2>Paragraphs, Headers, Blockquotes</h2>++<p>A paragraph is simply one or more consecutive lines of text, separated+by one or more blank lines. (A blank line is any line that looks like a+blank line -- a line containing nothing spaces or tabs is considered+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>++<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.+Setext-style headers for <code><h1></code> and <code><h2></code> are created by+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the+beginning of the line -- the number of hashes equals the resulting+HTML header level.</p>++<p>Blockquotes are indicated using email-style '<code>></code>' angle brackets.</p>++<p>Markdown:</p>++<pre><code>A First Level Header+====================++A Second Level Header+---------------------++Now is the time for all good men to come to+the aid of their country. This is just a+regular paragraph.++The quick brown fox jumped over the lazy+dog's back.++### Header 3++> This is a blockquote.+> +> This is the second paragraph in the blockquote.+>+> ## This is an H2 in a blockquote+</code></pre>++<p>Output:</p>++<pre><code><h1>A First Level Header</h1>++<h2>A Second Level Header</h2>++<p>Now is the time for all good men to come to+the aid of their country. This is just a+regular paragraph.</p>++<p>The quick brown fox jumped over the lazy+dog's back.</p>++<h3>Header 3</h3>++<blockquote>+ <p>This is a blockquote.</p>++ <p>This is the second paragraph in the blockquote.</p>++ <h2>This is an H2 in a blockquote</h2>+</blockquote>+</code></pre>++<h3>Phrase Emphasis</h3>++<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>++<p>Markdown:</p>++<pre><code>Some of these words *are emphasized*.+Some of these words _are emphasized also_.++Use two asterisks for **strong emphasis**.+Or, if you prefer, __use two underscores instead__.+</code></pre>++<p>Output:</p>++<pre><code><p>Some of these words <em>are emphasized</em>.+Some of these words <em>are emphasized also</em>.</p>++<p>Use two asterisks for <strong>strong emphasis</strong>.+Or, if you prefer, <strong>use two underscores instead</strong>.</p>+</code></pre>++<h2>Lists</h2>++<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,+<code>+</code>, and <code>-</code>) as list markers. These three markers are+interchangable; this:</p>++<pre><code>* Candy.+* Gum.+* Booze.+</code></pre>++<p>this:</p>++<pre><code>+ Candy.++ Gum.++ Booze.+</code></pre>++<p>and this:</p>++<pre><code>- Candy.+- Gum.+- Booze.+</code></pre>++<p>all produce the same output:</p>++<pre><code><ul>+<li>Candy.</li>+<li>Gum.</li>+<li>Booze.</li>+</ul>+</code></pre>++<p>Ordered (numbered) lists use regular numbers, followed by periods, as+list markers:</p>++<pre><code>1. Red+2. Green+3. Blue+</code></pre>++<p>Output:</p>++<pre><code><ol>+<li>Red</li>+<li>Green</li>+<li>Blue</li>+</ol>+</code></pre>++<p>If you put blank lines between items, you'll get <code><p></code> tags for the+list item text. You can create multi-paragraph list items by indenting+the paragraphs by 4 spaces or 1 tab:</p>++<pre><code>* A list item.++ With multiple paragraphs.++* Another item in the list.+</code></pre>++<p>Output:</p>++<pre><code><ul>+<li><p>A list item.</p>+<p>With multiple paragraphs.</p></li>+<li><p>Another item in the list.</p></li>+</ul>+</code></pre>++<h3>Links</h3>++<p>Markdown supports two styles for creating links: <em>inline</em> and+<em>reference</em>. With both styles, you use square brackets to delimit the+text you want to turn into a link.</p>++<p>Inline-style links use parentheses immediately after the link text.+For example:</p>++<pre><code>This is an [example link](http://example.com/).+</code></pre>++<p>Output:</p>++<pre><code><p>This is an <a href="http://example.com/">+example link</a>.</p>+</code></pre>++<p>Optionally, you may include a title attribute in the parentheses:</p>++<pre><code>This is an [example link](http://example.com/ "With a Title").+</code></pre>++<p>Output:</p>++<pre><code><p>This is an <a href="http://example.com/" title="With a Title">+example link</a>.</p>+</code></pre>++<p>Reference-style links allow you to refer to your links by names, which+you define elsewhere in your document:</p>++<pre><code>I get 10 times more traffic from [Google][1] than from+[Yahoo][2] or [MSN][3].++[1]: http://google.com/ "Google"+[2]: http://search.yahoo.com/ "Yahoo Search"+[3]: http://search.msn.com/ "MSN Search"+</code></pre>++<p>Output:</p>++<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"+title="Google">Google</a> than from <a href="http://search.yahoo.com/"+title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"+title="MSN Search">MSN</a>.</p>+</code></pre>++<p>The title attribute is optional. Link names may contain letters,+numbers and spaces, but are <em>not</em> case sensitive:</p>++<pre><code>I start my morning with a cup of coffee and+[The New York Times][NY Times].++[ny times]: http://www.nytimes.com/+</code></pre>++<p>Output:</p>++<pre><code><p>I start my morning with a cup of coffee and+<a href="http://www.nytimes.com/">The New York Times</a>.</p>+</code></pre>++<h3>Images</h3>++<p>Image syntax is very much like link syntax.</p>++<p>Inline (titles are optional):</p>++<pre><code>+</code></pre>++<p>Reference-style:</p>++<pre><code>![alt text][id]++[id]: /path/to/img.jpg "Title"+</code></pre>++<p>Both of the above examples produce the same output:</p>++<pre><code><img src="/path/to/img.jpg" alt="alt text" title="Title" />+</code></pre>++<h3>Code</h3>++<p>In a regular paragraph, you can create code span by wrapping text in+backtick quotes. Any ampersands (<code>&</code>) and angle brackets (<code><</code> or+<code>></code>) will automatically be translated into HTML entities. This makes+it easy to use Markdown to write about HTML example code:</p>++<pre><code>I strongly recommend against using any `<blink>` tags.++I wish SmartyPants used named entities like `&mdash;`+instead of decimal-encoded entites like `&#8212;`.+</code></pre>++<p>Output:</p>++<pre><code><p>I strongly recommend against using any+<code>&lt;blink&gt;</code> tags.</p>++<p>I wish SmartyPants used named entities like+<code>&amp;mdash;</code> instead of decimal-encoded+entites like <code>&amp;#8212;</code>.</p>+</code></pre>++<p>To specify an entire block of pre-formatted code, indent every line of+the block by 4 spaces or 1 tab. Just like with code spans, <code>&</code>, <code><</code>,+and <code>></code> characters will be escaped automatically.</p>++<p>Markdown:</p>++<pre><code>If you want your page to validate under XHTML 1.0 Strict,+you've got to put paragraph tags in your blockquotes:++ <blockquote>+ <p>For example.</p>+ </blockquote>+</code></pre>++<p>Output:</p>++<pre><code><p>If you want your page to validate under XHTML 1.0 Strict,+you've got to put paragraph tags in your blockquotes:</p>++<pre><code>&lt;blockquote&gt;+ &lt;p&gt;For example.&lt;/p&gt;+&lt;/blockquote&gt;+</code></pre>+</code></pre>
+ test/Tests/Markdown Documentation - Syntax.html view
@@ -0,0 +1,942 @@+<h1>Markdown: Syntax</h1>++<ul id="ProjectSubmenu">+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>+</ul>++<ul>+<li><a href="#overview">Overview</a>+<ul>+<li><a href="#philosophy">Philosophy</a></li>+<li><a href="#html">Inline HTML</a></li>+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>+</ul></li>+<li><a href="#block">Block Elements</a>+<ul>+<li><a href="#p">Paragraphs and Line Breaks</a></li>+<li><a href="#header">Headers</a></li>+<li><a href="#blockquote">Blockquotes</a></li>+<li><a href="#list">Lists</a></li>+<li><a href="#precode">Code Blocks</a></li>+<li><a href="#hr">Horizontal Rules</a></li>+</ul></li>+<li><a href="#span">Span Elements</a>+<ul>+<li><a href="#link">Links</a></li>+<li><a href="#em">Emphasis</a></li>+<li><a href="#code">Code</a></li>+<li><a href="#img">Images</a></li>+</ul></li>+<li><a href="#misc">Miscellaneous</a>+<ul>+<li><a href="#backslash">Backslash Escapes</a></li>+<li><a href="#autolink">Automatic Links</a></li>+</ul></li>+</ul>++<p><strong>Note:</strong> This document is itself written using Markdown; you+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>++<hr />++<h2 id="overview">Overview</h2>++<h3 id="philosophy">Philosophy</h3>++<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>++<p>Readability, however, is emphasized above all else. A Markdown-formatted+document should be publishable as-is, as plain text, without looking+like it's been marked up with tags or formatting instructions. While+Markdown's syntax has been influenced by several existing text-to-HTML+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of+inspiration for Markdown's syntax is the format of plain text email.</p>++<p>To this end, Markdown's syntax is comprised entirely of punctuation+characters, which punctuation characters have been carefully chosen so+as to look like what they mean. E.g., asterisks around a word actually+look like *emphasis*. Markdown lists look like, well, lists. Even+blockquotes look like quoted passages of text, assuming you've ever+used email.</p>++<h3 id="html">Inline HTML</h3>++<p>Markdown's syntax is intended for one purpose: to be used as a+format for <em>writing</em> for the web.</p>++<p>Markdown is not a replacement for HTML, or even close to it. Its+syntax is very small, corresponding only to a very small subset of+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier+to insert HTML tags. In my opinion, HTML tags are already easy to+insert. The idea for Markdown is to make it easy to read, write, and+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>+format. Thus, Markdown's formatting syntax only addresses issues that+can be conveyed in plain text.</p>++<p>For any markup that is not covered by Markdown's syntax, you simply+use HTML itself. There's no need to preface it or delimit it to+indicate that you're switching from Markdown to HTML; you just use+the tags.</p>++<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding+content by blank lines, and the start and end tags of the block should+not be indented with tabs or spaces. Markdown is smart enough not+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>++<p>For example, to add an HTML table to a Markdown article:</p>++<pre><code>This is a regular paragraph.++<table>+ <tr>+ <td>Foo</td>+ </tr>+</table>++This is another regular paragraph.+</code></pre>++<p>Note that Markdown formatting syntax is not processed within block-level+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an+HTML block.</p>++<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be+used anywhere in a Markdown paragraph, list item, or header. If you+want, you can even use HTML tags instead of Markdown formatting; e.g. if+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's+link or image syntax, go right ahead.</p>++<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within+span-level tags.</p>++<h3 id="autoescape">Automatic Escaping for Special Characters</h3>++<p>In HTML, there are two characters that demand special treatment: <code><</code>+and <code>&</code>. Left angle brackets are used to start tags; ampersands are+used to denote HTML entities. If you want to use them as literal+characters, you must escape them as entities, e.g. <code>&lt;</code>, and+<code>&amp;</code>.</p>++<p>Ampersands in particular are bedeviling for web writers. If you want to+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to+escape ampersands within URLs. Thus, if you want to link to:</p>++<pre><code>http://images.google.com/images?num=30&q=larry+bird+</code></pre>++<p>you need to encode the URL as:</p>++<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird+</code></pre>++<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to+forget, and is probably the single most common source of HTML validation+errors in otherwise well-marked-up web sites.</p>++<p>Markdown allows you to use these characters naturally, taking care of+all the necessary escaping for you. If you use an ampersand as part of+an HTML entity, it remains unchanged; otherwise it will be translated+into <code>&amp;</code>.</p>++<p>So, if you want to include a copyright symbol in your article, you can write:</p>++<pre><code>&copy;+</code></pre>++<p>and Markdown will leave it alone. But if you write:</p>++<pre><code>AT&T+</code></pre>++<p>Markdown will translate it to:</p>++<pre><code>AT&amp;T+</code></pre>++<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use+angle brackets as delimiters for HTML tags, Markdown will treat them as+such. But if you write:</p>++<pre><code>4 < 5+</code></pre>++<p>Markdown will translate it to:</p>++<pre><code>4 &lt; 5+</code></pre>++<p>However, inside Markdown code spans and blocks, angle brackets and+ampersands are <em>always</em> encoded automatically. This makes it easy to use+Markdown to write about HTML code. (As opposed to raw HTML, which is a+terrible format for writing about HTML syntax, because every single <code><</code>+and <code>&</code> in your example code needs to be escaped.)</p>++<hr />++<h2 id="block">Block Elements</h2>++<h3 id="p">Paragraphs and Line Breaks</h3>++<p>A paragraph is simply one or more consecutive lines of text, separated+by one or more blank lines. (A blank line is any line that looks like a+blank line -- a line containing nothing but spaces or tabs is considered+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>++<p>The implication of the "one or more consecutive lines of text" rule is+that Markdown supports "hard-wrapped" text paragraphs. This differs+significantly from most other text-to-HTML formatters (including Movable+Type's "Convert Line Breaks" option) which translate every line break+character in a paragraph into a <code><br /></code> tag.</p>++<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you+end a line with two or more spaces, then type return.</p>++<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>+work best -- and look better -- when you format them with hard breaks.</p>++<h3 id="header">Headers</h3>++<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>++<p>Setext-style headers are "underlined" using equal signs (for first-level+headers) and dashes (for second-level headers). For example:</p>++<pre><code>This is an H1+=============++This is an H2+-------------+</code></pre>++<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>++<p>Atx-style headers use 1-6 hash characters at the start of the line,+corresponding to header levels 1-6. For example:</p>++<pre><code># This is an H1++## This is an H2++###### This is an H6+</code></pre>++<p>Optionally, you may "close" atx-style headers. This is purely+cosmetic -- you can use this if you think it looks better. The+closing hashes don't even need to match the number of hashes+used to open the header. (The number of opening hashes+determines the header level.) :</p>++<pre><code># This is an H1 #++## This is an H2 ##++### This is an H3 ######+</code></pre>++<h3 id="blockquote">Blockquotes</h3>++<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're+familiar with quoting passages of text in an email message, then you+know how to create a blockquote in Markdown. It looks best if you hard+wrap the text and put a <code>></code> before every line:</p>++<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.+> +> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse+> id sem consectetuer libero luctus adipiscing.+</code></pre>++<p>Markdown allows you to be lazy and only put the <code>></code> before the first+line of a hard-wrapped paragraph:</p>++<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.++> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse+id sem consectetuer libero luctus adipiscing.+</code></pre>++<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by+adding additional levels of <code>></code>:</p>++<pre><code>> This is the first level of quoting.+>+> > This is nested blockquote.+>+> Back to the first level.+</code></pre>++<p>Blockquotes can contain other Markdown elements, including headers, lists,+and code blocks:</p>++<pre><code>> ## This is a header.+> +> 1. This is the first list item.+> 2. This is the second list item.+> +> Here's some example code:+> +> return shell_exec("echo $input | $markdown_script");+</code></pre>++<p>Any decent text editor should make email-style quoting easy. For+example, with BBEdit, you can make a selection and choose Increase+Quote Level from the Text menu.</p>++<h3 id="list">Lists</h3>++<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>++<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably+-- as list markers:</p>++<pre><code>* Red+* Green+* Blue+</code></pre>++<p>is equivalent to:</p>++<pre><code>+ Red++ Green++ Blue+</code></pre>++<p>and:</p>++<pre><code>- Red+- Green+- Blue+</code></pre>++<p>Ordered lists use numbers followed by periods:</p>++<pre><code>1. Bird+2. McHale+3. Parish+</code></pre>++<p>It's important to note that the actual numbers you use to mark the+list have no effect on the HTML output Markdown produces. The HTML+Markdown produces from the above list is:</p>++<pre><code><ol>+<li>Bird</li>+<li>McHale</li>+<li>Parish</li>+</ol>+</code></pre>++<p>If you instead wrote the list in Markdown like this:</p>++<pre><code>1. Bird+1. McHale+1. Parish+</code></pre>++<p>or even:</p>++<pre><code>3. Bird+1. McHale+8. Parish+</code></pre>++<p>you'd get the exact same HTML output. The point is, if you want to,+you can use ordinal numbers in your ordered Markdown lists, so that+the numbers in your source match the numbers in your published HTML.+But if you want to be lazy, you don't have to.</p>++<p>If you do use lazy list numbering, however, you should still start the+list with the number 1. At some point in the future, Markdown may support+starting ordered lists at an arbitrary number.</p>++<p>List markers typically start at the left margin, but may be indented by+up to three spaces. List markers must be followed by one or more spaces+or a tab.</p>++<p>To make lists look nice, you can wrap items with hanging indents:</p>++<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,+ viverra nec, fringilla in, laoreet vitae, risus.+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.+ Suspendisse id sem consectetuer libero luctus adipiscing.+</code></pre>++<p>But if you want to be lazy, you don't have to:</p>++<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,+viverra nec, fringilla in, laoreet vitae, risus.+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.+Suspendisse id sem consectetuer libero luctus adipiscing.+</code></pre>++<p>If list items are separated by blank lines, Markdown will wrap the+items in <code><p></code> tags in the HTML output. For example, this input:</p>++<pre><code>* Bird+* Magic+</code></pre>++<p>will turn into:</p>++<pre><code><ul>+<li>Bird</li>+<li>Magic</li>+</ul>+</code></pre>++<p>But this:</p>++<pre><code>* Bird++* Magic+</code></pre>++<p>will turn into:</p>++<pre><code><ul>+<li><p>Bird</p></li>+<li><p>Magic</p></li>+</ul>+</code></pre>++<p>List items may consist of multiple paragraphs. Each subsequent+paragraph in a list item must be intended by either 4 spaces+or one tab:</p>++<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit+ mi posuere lectus.++ Vestibulum enim wisi, viverra nec, fringilla in, laoreet+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum+ sit amet velit.++2. Suspendisse id sem consectetuer libero luctus adipiscing.+</code></pre>++<p>It looks nice if you indent every line of the subsequent+paragraphs, but here again, Markdown will allow you to be+lazy:</p>++<pre><code>* This is a list item with two paragraphs.++ This is the second paragraph in the list item. You're+only required to indent the first line. Lorem ipsum dolor+sit amet, consectetuer adipiscing elit.++* Another item in the same list.+</code></pre>++<p>To put a blockquote within a list item, the blockquote's <code>></code>+delimiters need to be indented:</p>++<pre><code>* A list item with a blockquote:++ > This is a blockquote+ > inside a list item.+</code></pre>++<p>To put a code block within a list item, the code block needs+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>++<pre><code>* A list item with a code block:++ <code goes here>+</code></pre>++<p>It's worth noting that it's possible to trigger an ordered list by+accident, by writing something like this:</p>++<pre><code>1986. What a great season.+</code></pre>++<p>In other words, a <em>number-period-space</em> sequence at the beginning of a+line. To avoid this, you can backslash-escape the period:</p>++<pre><code>1986\. What a great season.+</code></pre>++<h3 id="precode">Code Blocks</h3>++<p>Pre-formatted code blocks are used for writing about programming or+markup source code. Rather than forming normal paragraphs, the lines+of a code block are interpreted literally. Markdown wraps a code block+in both <code><pre></code> and <code><code></code> tags.</p>++<p>To produce a code block in Markdown, simply indent every line of the+block by at least 4 spaces or 1 tab. For example, given this input:</p>++<pre><code>This is a normal paragraph:++ This is a code block.+</code></pre>++<p>Markdown will generate:</p>++<pre><code><p>This is a normal paragraph:</p>++<pre><code>This is a code block.+</code></pre>+</code></pre>++<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each+line of the code block. For example, this:</p>++<pre><code>Here is an example of AppleScript:++ tell application "Foo"+ beep+ end tell+</code></pre>++<p>will turn into:</p>++<pre><code><p>Here is an example of AppleScript:</p>++<pre><code>tell application "Foo"+ beep+end tell+</code></pre>+</code></pre>++<p>A code block continues until it reaches a line that is not indented+(or the end of the article).</p>++<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)+are automatically converted into HTML entities. This makes it very+easy to include example HTML source code using Markdown -- just paste+it and indent it, and Markdown will handle the hassle of encoding the+ampersands and angle brackets. For example, this:</p>++<pre><code> <div class="footer">+ &copy; 2004 Foo Corporation+ </div>+</code></pre>++<p>will turn into:</p>++<pre><code><pre><code>&lt;div class="footer"&gt;+ &amp;copy; 2004 Foo Corporation+&lt;/div&gt;+</code></pre>+</code></pre>++<p>Regular Markdown syntax is not processed within code blocks. E.g.,+asterisks are just literal asterisks within a code block. This means+it's also easy to use Markdown to write about Markdown's own syntax.</p>++<h3 id="hr">Horizontal Rules</h3>++<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or+more hyphens, asterisks, or underscores on a line by themselves. If you+wish, you may use spaces between the hyphens or asterisks. Each of the+following lines will produce a horizontal rule:</p>++<pre><code>* * *++***++*****++- - -++---------------------------------------++_ _ _+</code></pre>++<hr />++<h2 id="span">Span Elements</h2>++<h3 id="link">Links</h3>++<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>++<p>In both styles, the link text is delimited by [square brackets].</p>++<p>To create an inline link, use a set of regular parentheses immediately+after the link text's closing square bracket. Inside the parentheses,+put the URL where you want the link to point, along with an <em>optional</em>+title for the link, surrounded in quotes. For example:</p>++<pre><code>This is [an example](http://example.com/ "Title") inline link.++[This link](http://example.net/) has no title attribute.+</code></pre>++<p>Will produce:</p>++<pre><code><p>This is <a href="http://example.com/" title="Title">+an example</a> inline link.</p>++<p><a href="http://example.net/">This link</a> has no+title attribute.</p>+</code></pre>++<p>If you're referring to a local resource on the same server, you can+use relative paths:</p>++<pre><code>See my [About](/about/) page for details.+</code></pre>++<p>Reference-style links use a second set of square brackets, inside+which you place a label of your choosing to identify the link:</p>++<pre><code>This is [an example][id] reference-style link.+</code></pre>++<p>You can optionally use a space to separate the sets of brackets:</p>++<pre><code>This is [an example] [id] reference-style link.+</code></pre>++<p>Then, anywhere in the document, you define your link label like this,+on a line by itself:</p>++<pre><code>[id]: http://example.com/ "Optional Title Here"+</code></pre>++<p>That is:</p>++<ul>+<li>Square brackets containing the link identifier (optionally+indented from the left margin using up to three spaces);</li>+<li>followed by a colon;</li>+<li>followed by one or more spaces (or tabs);</li>+<li>followed by the URL for the link;</li>+<li>optionally followed by a title attribute for the link, enclosed+in double or single quotes.</li>+</ul>++<p>The link URL may, optionally, be surrounded by angle brackets:</p>++<pre><code>[id]: <http://example.com/> "Optional Title Here"+</code></pre>++<p>You can put the title attribute on the next line and use extra spaces+or tabs for padding, which tends to look better with longer URLs:</p>++<pre><code>[id]: http://example.com/longish/path/to/resource/here+ "Optional Title Here"+</code></pre>++<p>Link definitions are only used for creating links during Markdown+processing, and are stripped from your document in the HTML output.</p>++<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>++<pre><code>[link text][a]+[link text][A]+</code></pre>++<p>are equivalent.</p>++<p>The <em>implicit link name</em> shortcut allows you to omit the name of the+link, in which case the link text itself is used as the name.+Just use an empty set of square brackets -- e.g., to link the word+"Google" to the google.com web site, you could simply write:</p>++<pre><code>[Google][]+</code></pre>++<p>And then define the link:</p>++<pre><code>[Google]: http://google.com/+</code></pre>++<p>Because link names may contain spaces, this shortcut even works for+multiple words in the link text:</p>++<pre><code>Visit [Daring Fireball][] for more information.+</code></pre>++<p>And then define the link:</p>++<pre><code>[Daring Fireball]: http://daringfireball.net/+</code></pre>++<p>Link definitions can be placed anywhere in your Markdown document. I+tend to put them immediately after each paragraph in which they're+used, but if you want, you can put them all at the end of your+document, sort of like footnotes.</p>++<p>Here's an example of reference links in action:</p>++<pre><code>I get 10 times more traffic from [Google] [1] than from+[Yahoo] [2] or [MSN] [3].++ [1]: http://google.com/ "Google"+ [2]: http://search.yahoo.com/ "Yahoo Search"+ [3]: http://search.msn.com/ "MSN Search"+</code></pre>++<p>Using the implicit link name shortcut, you could instead write:</p>++<pre><code>I get 10 times more traffic from [Google][] than from+[Yahoo][] or [MSN][].++ [google]: http://google.com/ "Google"+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"+ [msn]: http://search.msn.com/ "MSN Search"+</code></pre>++<p>Both of the above examples will produce the following HTML output:</p>++<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"+title="Google">Google</a> than from+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>+</code></pre>++<p>For comparison, here is the same paragraph written using+Markdown's inline link style:</p>++<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or+[MSN](http://search.msn.com/ "MSN Search").+</code></pre>++<p>The point of reference-style links is not that they're easier to+write. The point is that with reference-style links, your document+source is vastly more readable. Compare the above examples: using+reference-style links, the paragraph itself is only 81 characters+long; with inline-style links, it's 176 characters; and as raw HTML,+it's 234 characters. In the raw HTML, there's more markup than there+is text.</p>++<p>With Markdown's reference-style links, a source document much more+closely resembles the final output, as rendered in a browser. By+allowing you to move the markup-related metadata out of the paragraph,+you can add links without interrupting the narrative flow of your+prose.</p>++<h3 id="em">Emphasis</h3>++<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML+<code><strong></code> tag. E.g., this input:</p>++<pre><code>*single asterisks*++_single underscores_++**double asterisks**++__double underscores__+</code></pre>++<p>will produce:</p>++<pre><code><em>single asterisks</em>++<em>single underscores</em>++<strong>double asterisks</strong>++<strong>double underscores</strong>+</code></pre>++<p>You can use whichever style you prefer; the lone restriction is that+the same character must be used to open and close an emphasis span.</p>++<p>Emphasis can be used in the middle of a word:</p>++<pre><code>un*fucking*believable+</code></pre>++<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a+literal asterisk or underscore.</p>++<p>To produce a literal asterisk or underscore at a position where it+would otherwise be used as an emphasis delimiter, you can backslash+escape it:</p>++<pre><code>\*this text is surrounded by literal asterisks\*+</code></pre>++<h3 id="code">Code</h3>++<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).+Unlike a pre-formatted code block, a code span indicates code within a+normal paragraph. For example:</p>++<pre><code>Use the `printf()` function.+</code></pre>++<p>will produce:</p>++<pre><code><p>Use the <code>printf()</code> function.</p>+</code></pre>++<p>To include a literal backtick character within a code span, you can use+multiple backticks as the opening and closing delimiters:</p>++<pre><code>``There is a literal backtick (`) here.``+</code></pre>++<p>which will produce this:</p>++<pre><code><p><code>There is a literal backtick (`) here.</code></p>+</code></pre>++<p>The backtick delimiters surrounding a code span may include spaces --+one after the opening, one before the closing. This allows you to place+literal backtick characters at the beginning or end of a code span:</p>++<pre><code>A single backtick in a code span: `` ` ``++A backtick-delimited string in a code span: `` `foo` ``+</code></pre>++<p>will produce:</p>++<pre><code><p>A single backtick in a code span: <code>`</code></p>++<p>A backtick-delimited string in a code span: <code>`foo`</code></p>+</code></pre>++<p>With a code span, ampersands and angle brackets are encoded as HTML+entities automatically, which makes it easy to include example HTML+tags. Markdown will turn this:</p>++<pre><code>Please don't use any `<blink>` tags.+</code></pre>++<p>into:</p>++<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>+</code></pre>++<p>You can write this:</p>++<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.+</code></pre>++<p>to produce:</p>++<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded+equivalent of <code>&amp;mdash;</code>.</p>+</code></pre>++<h3 id="img">Images</h3>++<p>Admittedly, it's fairly difficult to devise a "natural" syntax for+placing images into a plain text document format.</p>++<p>Markdown uses an image syntax that is intended to resemble the syntax+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>++<p>Inline image syntax looks like this:</p>++<pre><code>+++</code></pre>++<p>That is:</p>++<ul>+<li>An exclamation mark: <code>!</code>;</li>+<li>followed by a set of square brackets, containing the <code>alt</code>+attribute text for the image;</li>+<li>followed by a set of parentheses, containing the URL or path to+the image, and an optional <code>title</code> attribute enclosed in double+or single quotes.</li>+</ul>++<p>Reference-style image syntax looks like this:</p>++<pre><code>![Alt text][id]+</code></pre>++<p>Where "id" is the name of a defined image reference. Image references+are defined using syntax identical to link references:</p>++<pre><code>[id]: url/to/image "Optional title attribute"+</code></pre>++<p>As of this writing, Markdown has no syntax for specifying the+dimensions of an image; if this is important to you, you can simply+use regular HTML <code><img></code> tags.</p>++<hr />++<h2 id="misc">Miscellaneous</h2>++<h3 id="autolink">Automatic Links</h3>++<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>++<pre><code><http://example.com/>+</code></pre>++<p>Markdown will turn this into:</p>++<pre><code><a href="http://example.com/">http://example.com/</a>+</code></pre>++<p>Automatic links for email addresses work similarly, except that+Markdown will also perform a bit of randomized decimal and hex+entity-encoding to help obscure your address from address-harvesting+spambots. For example, Markdown will turn this:</p>++<pre><code><address@example.com>+</code></pre>++<p>into something like this:</p>++<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>+</code></pre>++<p>which will render in a browser as a clickable link to "address@example.com".</p>++<p>(This sort of entity-encoding trick will indeed fool many, if not+most, address-harvesting bots, but it definitely won't fool all of+them. It's better than nothing, but an address published in this way+will probably eventually start receiving spam.)</p>++<h3 id="backslash">Backslash Escapes</h3>++<p>Markdown allows you to use backslash escapes to generate literal+characters which would otherwise have special meaning in Markdown's+formatting syntax. For example, if you wanted to surround a word with+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes+before the asterisks, like this:</p>++<pre><code>\*literal asterisks\*+</code></pre>++<p>Markdown provides backslash escapes for the following characters:</p>++<pre><code>\ backslash+` backtick+* asterisk+_ underscore+{} curly braces+[] square brackets+() parentheses+# hash mark++ plus sign+- minus sign (hyphen)+. dot+! exclamation mark+</code></pre>
+ test/Tests/Nested blockquotes.html view
@@ -0,0 +1,9 @@+<blockquote>+<p>foo</p>++<blockquote>+<p>bar</p>+</blockquote>++<p>foo</p>+</blockquote>
+ test/Tests/Nested blockquotes.text view
@@ -0,0 +1,5 @@+> foo+>+> > bar+>+> foo
+ test/Tests/Ordered and unordered lists.html view
@@ -0,0 +1,148 @@+<h2>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>++<hr>++<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>++<hr>++<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>Ordered</h2>++<p>Tight:</p>++<ol>+<li>First</li>+<li>Second</li>+<li>Third</li>+</ol>++<p>and:</p>++<ol>+<li>One</li>+<li>Two</li>+<li>Three</li>+</ol>++<p>Loose using tabs:</p>++<ol>+<li><p>First</p></li>+<li><p>Second</p></li>+<li><p>Third</p></li>+</ol>++<p>and using spaces:</p>++<ol>+<li><p>One</p></li>+<li><p>Two</p></li>+<li><p>Three</p></li>+</ol>++<p>Multiple paragraphs:</p>++<ol>+<li><p>Item 1, graf one.</p>++<p>Item 2. 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>Nested</h2>++<ul>+<li><p>Tab</p>+<ul>+<li><p>Tab</p>+<ul>+<li>Tab</li>+</ul></li>+</ul></li>+</ul>++<p>Here's another:</p>++<ol>+<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>+<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>+++<p>This was an error in Markdown 1.0.1:</p>++<ul>+<li><p>this</p>++<ul><li>sub</li></ul>++<p>that</p></li>+</ul>
+ test/Tests/Strong and em together.html view
@@ -0,0 +1,7 @@+<p><b><i>This is strong and em.</i></b></p>++<p>So is <b><i>this</i></b> word.</p>++<p><b><i>This is strong and em.</i></b></p>++<p>So is <b><i>this</i></b> word.</p>
+ test/Tests/Strong and em together.text view
@@ -0,0 +1,7 @@+***This is strong and em.***++So is ***this*** word.++___This is strong and em.___++So is ___this___ word.
+ test/Tests/Tabs.html view
@@ -0,0 +1,25 @@+<ul>+<li><p>this is a list item+indented with tabs</p></li>+<li><p>this is a list item+indented with spaces</p></li>+</ul>++<p>Code:</p>++<pre><code>this code block is indented by one tab+</code></pre>++<p>And:</p>++<pre><code> this code block is indented by two tabs+</code></pre>++<p>And:</p>++<pre><code>+ this is an example list item+ indented with tabs+++ this is an example list item+ indented with spaces+</code></pre>
+ test/Tests/Tabs.text view
@@ -0,0 +1,21 @@++ this is a list item+ indented with tabs+++ this is a list item+ indented with spaces++Code:++ this code block is indented by one tab++And:++ this code block is indented by two tabs++And:++ + this is an example list item+ indented with tabs+ + + this is an example list item+ indented with spaces
+ test/Tests/Tidyness.html view
@@ -0,0 +1,8 @@+<blockquote>+<p>A list within a blockquote:</p>+<ul>+<li>asterisk 1</li>+<li>asterisk 2</li>+<li>asterisk 3</li>+</ul>+</blockquote>
+ test/Tests/Tidyness.text view
@@ -0,0 +1,5 @@+> A list within a blockquote:+> +> * asterisk 1+> * asterisk 2+> * asterisk 3