From 3cfd0562e6663b2917d9e76284bb555c79e78907 Mon Sep 17 00:00:00 2001 From: Michael Butler Date: Sat, 27 Jan 2018 12:01:31 -0500 Subject: [PATCH 1/7] Change spaces to tabs in Readme.php --- Readme.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Readme.php b/Readme.php index e473d73..e2db753 100644 --- a/Readme.php +++ b/Readme.php @@ -21,13 +21,13 @@ $html = Markdown::defaultTransform($text); ?> - - PHP Markdown Lib - Readme - - + + PHP Markdown Lib - Readme + + - + From 4bedb1b063c7ab81c9081981cece985b12613b92 Mon Sep 17 00:00:00 2001 From: Michael Butler Date: Sat, 27 Jan 2018 13:49:47 -0500 Subject: [PATCH 2/7] Require PHP 5.7 --- composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer.json b/composer.json index 6b1993d..28d2b16 100644 --- a/composer.json +++ b/composer.json @@ -22,5 +22,8 @@ }, "autoload": { "psr-4": { "Michelf\\": "Michelf/" } + }, + "require-dev": { + "phpunit/phpunit": "^5.7" } } From 1bd48d37181c1c715c7418f308537c3d6d994679 Mon Sep 17 00:00:00 2001 From: Michael Butler Date: Sat, 27 Jan 2018 13:50:00 -0500 Subject: [PATCH 3/7] Add PHPUnit xml --- phpunit.xml.dist | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 phpunit.xml.dist diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..8f2dab5 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,24 @@ + + + + + ./test/unit/ + + + ./test/integration/ + + + + + + Michelf + + + From 777b997bcade0b1ea3bb023c02606b963c764510 Mon Sep 17 00:00:00 2001 From: Michael Butler Date: Sat, 27 Jan 2018 13:51:14 -0500 Subject: [PATCH 4/7] Add mdtest resources and unit tests --- test/bootstrap.php | 6 + test/helpers/MarkdownTestHelper.php | 36 + test/integration/MarkdownTest.php | 8 + test/integration/PhpMarkdownExtraTest.php | 8 + test/integration/PhpMarkdownTest.php | 93 ++ .../Amps and angle encoding.text | 21 + .../Amps and angle encoding.xhtml | 17 + .../resources/markdown.mdtest/Auto links.text | 13 + .../markdown.mdtest/Auto links.xhtml | 18 + .../markdown.mdtest/Backslash escapes.text | 120 +++ .../markdown.mdtest/Backslash escapes.xhtml | 118 +++ .../Blockquotes with code blocks.text | 11 + .../Blockquotes with code blocks.xhtml | 15 + .../markdown.mdtest/Code Blocks.text | 14 + .../markdown.mdtest/Code Blocks.xhtml | 18 + .../resources/markdown.mdtest/Code Spans.text | 5 + .../markdown.mdtest/Code Spans.xhtml | 5 + ...apped paragraphs with list-like lines.text | 8 + ...pped paragraphs with list-like lines.xhtml | 8 + .../markdown.mdtest/Horizontal rules.text | 67 ++ .../markdown.mdtest/Horizontal rules.xhtml | 71 ++ test/resources/markdown.mdtest/Images.text | 26 + test/resources/markdown.mdtest/Images.xhtml | 21 + .../Inline HTML (Advanced).text | 30 + .../Inline HTML (Advanced).xhtml | 30 + .../markdown.mdtest/Inline HTML (Simple).html | 72 ++ .../markdown.mdtest/Inline HTML (Simple).text | 69 ++ .../markdown.mdtest/Inline HTML comments.html | 13 + .../markdown.mdtest/Inline HTML comments.text | 13 + .../markdown.mdtest/Links, inline style.text | 24 + .../markdown.mdtest/Links, inline style.xhtml | 23 + .../Links, reference style.text | 71 ++ .../Links, reference style.xhtml | 52 + .../Links, shortcut references.text | 20 + .../Links, shortcut references.xhtml | 9 + .../Literal quotes in titles.text | 7 + .../Literal quotes in titles.xhtml | 3 + .../Markdown Documentation - Basics.text | 306 ++++++ .../Markdown Documentation - Basics.xhtml | 314 ++++++ .../Markdown Documentation - Syntax.text | 888 +++++++++++++++++ .../Markdown Documentation - Syntax.xhtml | 942 ++++++++++++++++++ .../markdown.mdtest/Nested blockquotes.text | 5 + .../markdown.mdtest/Nested blockquotes.xhtml | 9 + .../Ordered and unordered lists.text | 131 +++ .../Ordered and unordered lists.xhtml | 148 +++ .../Strong and em together.text | 7 + .../Strong and em together.xhtml | 7 + test/resources/markdown.mdtest/Tabs.text | 21 + test/resources/markdown.mdtest/Tabs.xhtml | 25 + test/resources/markdown.mdtest/Tidyness.text | 5 + test/resources/markdown.mdtest/Tidyness.xhtml | 8 + .../php-markdown-extra.mdtest/Abbr.text | 31 + .../php-markdown-extra.mdtest/Abbr.xhtml | 15 + ...tick Fenced Code Blocks Special Cases.text | 69 ++ ...ick Fenced Code Blocks Special Cases.xhtml | 61 ++ .../Backtick Fenced Code Blocks.text | 123 +++ .../Backtick Fenced Code Blocks.xhtml | 109 ++ .../Definition Lists.text | 115 +++ .../Definition Lists.xhtml | 155 +++ .../php-markdown-extra.mdtest/Emphasis.text | 100 ++ .../php-markdown-extra.mdtest/Emphasis.xhtml | 106 ++ .../php-markdown-extra.mdtest/Footnotes.text | 70 ++ .../php-markdown-extra.mdtest/Footnotes.xhtml | 103 ++ .../Headers with attributes.text | 41 + .../Headers with attributes.xhtml | 37 + .../Inline HTML with Markdown content.text | 110 ++ .../Inline HTML with Markdown content.xhtml | 131 +++ .../Link & Image Attributes.text | 10 + .../Link & Image Attributes.xhtml | 8 + .../php-markdown-extra.mdtest/Tables.text | 113 +++ .../php-markdown-extra.mdtest/Tables.xhtml | 333 +++++++ ...ilde Fenced Code Blocks Special Cases.text | 69 ++ ...lde Fenced Code Blocks Special Cases.xhtml | 61 ++ .../Tilde Fenced Code Blocks.text | 123 +++ .../Tilde Fenced Code Blocks.xhtml | 109 ++ .../php-markdown.mdtest/Adjacent Lists.text | 10 + .../php-markdown.mdtest/Adjacent Lists.xhtml | 19 + .../php-markdown.mdtest/Auto Links.text | 3 + .../php-markdown.mdtest/Auto Links.xhtml | 3 + .../Backslash escapes.text | 1 + .../Backslash escapes.xhtml | 1 + .../php-markdown.mdtest/Code Spans.text | 6 + .../php-markdown.mdtest/Code Spans.xhtml | 6 + .../Code block in a list item.text | 15 + .../Code block in a list item.xhtml | 18 + .../Code block on second line.text | 2 + .../Code block on second line.xhtml | 2 + .../Code block regressions.text | 15 + .../Code block regressions.xhtml | 18 + .../php-markdown.mdtest/Email auto links.text | 24 + .../Email auto links.xhtml | 23 + .../php-markdown.mdtest/Emphasis.text | 101 ++ .../php-markdown.mdtest/Emphasis.xhtml | 105 ++ .../php-markdown.mdtest/Empty List Item.text | 35 + .../php-markdown.mdtest/Empty List Item.xhtml | 47 + .../php-markdown.mdtest/Headers.text | 9 + .../php-markdown.mdtest/Headers.xhtml | 39 + .../php-markdown.mdtest/Horizontal Rules.text | 29 + .../Horizontal Rules.xhtml | 30 + .../Inline HTML (Simple).html | 25 + .../Inline HTML (Simple).text | 25 + .../Inline HTML (Span).text | 4 + .../Inline HTML (Span).xhtml | 4 + .../Inline HTML comments.html | 9 + .../Inline HTML comments.text | 9 + .../php-markdown.mdtest/Ins & del.text | 17 + .../php-markdown.mdtest/Ins & del.xhtml | 17 + .../Links, inline style.text | 9 + .../Links, inline style.xhtml | 7 + .../php-markdown.mdtest/MD5 Hashes.text | 11 + .../php-markdown.mdtest/MD5 Hashes.xhtml | 11 + .../Mixed OLs and ULs.text | 13 + .../Mixed OLs and ULs.xhtml | 21 + .../php-markdown.mdtest/Nesting.text | 11 + .../php-markdown.mdtest/Nesting.xhtml | 11 + .../PHP-Specific Bugs.text | 22 + .../PHP-Specific Bugs.xhtml | 17 + .../php-markdown.mdtest/Parens in URL.text | 14 + .../php-markdown.mdtest/Parens in URL.xhtml | 11 + .../Quotes in attributes.text | 5 + .../Quotes in attributes.xhtml | 5 + .../php-markdown.mdtest/Tight blocks.text | 1 + .../php-markdown.mdtest/Tight blocks.xhtml | 21 + .../php-markdown.mdtest/XML empty tag.text | 2 + .../php-markdown.mdtest/XML empty tag.xhtml | 2 + 125 files changed, 7046 insertions(+) create mode 100644 test/bootstrap.php create mode 100644 test/helpers/MarkdownTestHelper.php create mode 100644 test/integration/MarkdownTest.php create mode 100644 test/integration/PhpMarkdownExtraTest.php create mode 100644 test/integration/PhpMarkdownTest.php create mode 100644 test/resources/markdown.mdtest/Amps and angle encoding.text create mode 100644 test/resources/markdown.mdtest/Amps and angle encoding.xhtml create mode 100644 test/resources/markdown.mdtest/Auto links.text create mode 100644 test/resources/markdown.mdtest/Auto links.xhtml create mode 100644 test/resources/markdown.mdtest/Backslash escapes.text create mode 100644 test/resources/markdown.mdtest/Backslash escapes.xhtml create mode 100644 test/resources/markdown.mdtest/Blockquotes with code blocks.text create mode 100644 test/resources/markdown.mdtest/Blockquotes with code blocks.xhtml create mode 100644 test/resources/markdown.mdtest/Code Blocks.text create mode 100644 test/resources/markdown.mdtest/Code Blocks.xhtml create mode 100644 test/resources/markdown.mdtest/Code Spans.text create mode 100644 test/resources/markdown.mdtest/Code Spans.xhtml create mode 100644 test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.text create mode 100644 test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.xhtml create mode 100644 test/resources/markdown.mdtest/Horizontal rules.text create mode 100644 test/resources/markdown.mdtest/Horizontal rules.xhtml create mode 100644 test/resources/markdown.mdtest/Images.text create mode 100644 test/resources/markdown.mdtest/Images.xhtml create mode 100644 test/resources/markdown.mdtest/Inline HTML (Advanced).text create mode 100644 test/resources/markdown.mdtest/Inline HTML (Advanced).xhtml create mode 100644 test/resources/markdown.mdtest/Inline HTML (Simple).html create mode 100644 test/resources/markdown.mdtest/Inline HTML (Simple).text create mode 100644 test/resources/markdown.mdtest/Inline HTML comments.html create mode 100644 test/resources/markdown.mdtest/Inline HTML comments.text create mode 100644 test/resources/markdown.mdtest/Links, inline style.text create mode 100644 test/resources/markdown.mdtest/Links, inline style.xhtml create mode 100644 test/resources/markdown.mdtest/Links, reference style.text create mode 100644 test/resources/markdown.mdtest/Links, reference style.xhtml create mode 100755 test/resources/markdown.mdtest/Links, shortcut references.text create mode 100755 test/resources/markdown.mdtest/Links, shortcut references.xhtml create mode 100644 test/resources/markdown.mdtest/Literal quotes in titles.text create mode 100644 test/resources/markdown.mdtest/Literal quotes in titles.xhtml create mode 100644 test/resources/markdown.mdtest/Markdown Documentation - Basics.text create mode 100644 test/resources/markdown.mdtest/Markdown Documentation - Basics.xhtml create mode 100644 test/resources/markdown.mdtest/Markdown Documentation - Syntax.text create mode 100644 test/resources/markdown.mdtest/Markdown Documentation - Syntax.xhtml create mode 100644 test/resources/markdown.mdtest/Nested blockquotes.text create mode 100644 test/resources/markdown.mdtest/Nested blockquotes.xhtml create mode 100644 test/resources/markdown.mdtest/Ordered and unordered lists.text create mode 100644 test/resources/markdown.mdtest/Ordered and unordered lists.xhtml create mode 100644 test/resources/markdown.mdtest/Strong and em together.text create mode 100644 test/resources/markdown.mdtest/Strong and em together.xhtml create mode 100644 test/resources/markdown.mdtest/Tabs.text create mode 100644 test/resources/markdown.mdtest/Tabs.xhtml create mode 100644 test/resources/markdown.mdtest/Tidyness.text create mode 100644 test/resources/markdown.mdtest/Tidyness.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Abbr.text create mode 100644 test/resources/php-markdown-extra.mdtest/Abbr.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.text create mode 100644 test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.text create mode 100644 test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Definition Lists.text create mode 100644 test/resources/php-markdown-extra.mdtest/Definition Lists.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Emphasis.text create mode 100644 test/resources/php-markdown-extra.mdtest/Emphasis.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Footnotes.text create mode 100644 test/resources/php-markdown-extra.mdtest/Footnotes.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Headers with attributes.text create mode 100644 test/resources/php-markdown-extra.mdtest/Headers with attributes.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.text create mode 100644 test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Link & Image Attributes.text create mode 100644 test/resources/php-markdown-extra.mdtest/Link & Image Attributes.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Tables.text create mode 100644 test/resources/php-markdown-extra.mdtest/Tables.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.text create mode 100644 test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.xhtml create mode 100644 test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.text create mode 100644 test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.xhtml create mode 100644 test/resources/php-markdown.mdtest/Adjacent Lists.text create mode 100644 test/resources/php-markdown.mdtest/Adjacent Lists.xhtml create mode 100644 test/resources/php-markdown.mdtest/Auto Links.text create mode 100644 test/resources/php-markdown.mdtest/Auto Links.xhtml create mode 100644 test/resources/php-markdown.mdtest/Backslash escapes.text create mode 100644 test/resources/php-markdown.mdtest/Backslash escapes.xhtml create mode 100644 test/resources/php-markdown.mdtest/Code Spans.text create mode 100644 test/resources/php-markdown.mdtest/Code Spans.xhtml create mode 100644 test/resources/php-markdown.mdtest/Code block in a list item.text create mode 100644 test/resources/php-markdown.mdtest/Code block in a list item.xhtml create mode 100644 test/resources/php-markdown.mdtest/Code block on second line.text create mode 100644 test/resources/php-markdown.mdtest/Code block on second line.xhtml create mode 100644 test/resources/php-markdown.mdtest/Code block regressions.text create mode 100644 test/resources/php-markdown.mdtest/Code block regressions.xhtml create mode 100644 test/resources/php-markdown.mdtest/Email auto links.text create mode 100644 test/resources/php-markdown.mdtest/Email auto links.xhtml create mode 100644 test/resources/php-markdown.mdtest/Emphasis.text create mode 100644 test/resources/php-markdown.mdtest/Emphasis.xhtml create mode 100644 test/resources/php-markdown.mdtest/Empty List Item.text create mode 100644 test/resources/php-markdown.mdtest/Empty List Item.xhtml create mode 100644 test/resources/php-markdown.mdtest/Headers.text create mode 100644 test/resources/php-markdown.mdtest/Headers.xhtml create mode 100644 test/resources/php-markdown.mdtest/Horizontal Rules.text create mode 100644 test/resources/php-markdown.mdtest/Horizontal Rules.xhtml create mode 100644 test/resources/php-markdown.mdtest/Inline HTML (Simple).html create mode 100644 test/resources/php-markdown.mdtest/Inline HTML (Simple).text create mode 100644 test/resources/php-markdown.mdtest/Inline HTML (Span).text create mode 100644 test/resources/php-markdown.mdtest/Inline HTML (Span).xhtml create mode 100644 test/resources/php-markdown.mdtest/Inline HTML comments.html create mode 100644 test/resources/php-markdown.mdtest/Inline HTML comments.text create mode 100644 test/resources/php-markdown.mdtest/Ins & del.text create mode 100644 test/resources/php-markdown.mdtest/Ins & del.xhtml create mode 100644 test/resources/php-markdown.mdtest/Links, inline style.text create mode 100644 test/resources/php-markdown.mdtest/Links, inline style.xhtml create mode 100644 test/resources/php-markdown.mdtest/MD5 Hashes.text create mode 100644 test/resources/php-markdown.mdtest/MD5 Hashes.xhtml create mode 100644 test/resources/php-markdown.mdtest/Mixed OLs and ULs.text create mode 100644 test/resources/php-markdown.mdtest/Mixed OLs and ULs.xhtml create mode 100644 test/resources/php-markdown.mdtest/Nesting.text create mode 100644 test/resources/php-markdown.mdtest/Nesting.xhtml create mode 100644 test/resources/php-markdown.mdtest/PHP-Specific Bugs.text create mode 100644 test/resources/php-markdown.mdtest/PHP-Specific Bugs.xhtml create mode 100644 test/resources/php-markdown.mdtest/Parens in URL.text create mode 100644 test/resources/php-markdown.mdtest/Parens in URL.xhtml create mode 100644 test/resources/php-markdown.mdtest/Quotes in attributes.text create mode 100644 test/resources/php-markdown.mdtest/Quotes in attributes.xhtml create mode 100644 test/resources/php-markdown.mdtest/Tight blocks.text create mode 100644 test/resources/php-markdown.mdtest/Tight blocks.xhtml create mode 100644 test/resources/php-markdown.mdtest/XML empty tag.text create mode 100644 test/resources/php-markdown.mdtest/XML empty tag.xhtml diff --git a/test/bootstrap.php b/test/bootstrap.php new file mode 100644 index 0000000..a7b3507 --- /dev/null +++ b/test/bootstrap.php @@ -0,0 +1,6 @@ +assertSame( + $expectedHtml, + $result, + "Markdown in $inputPath converts exactly to expected $htmlPath" + ); + } + + /** + * @return array + */ + public function dataProviderForMarkdownExtra() { + $dir = TEST_RESOURCES_ROOT . '/php-markdown-extra.mdtest'; + return MarkdownTestHelper::getInputOutputPaths($dir); + } + + /** + * @dataProvider dataProviderForMarkdownExtra + * + * @param string $inputPath Input markdown path + * @param string $htmlPath File path of expected transformed output (X)HTML + * + * @return void + */ + public function testTransformingOfMarkdownExtra($inputPath, $htmlPath) { + $inputMarkdown = file_get_contents($inputPath); + $expectedHtml = file_get_contents($htmlPath); + $result = Markdown::defaultTransform($inputMarkdown); + + $this->assertSame( + $expectedHtml, + $result, + "Markdown in $inputPath converts exactly to expected $htmlPath" + ); + } + + /** + * @return array + */ + public function dataProviderForRegularMarkdown() + { + $dir = TEST_RESOURCES_ROOT . '/markdown.mdtest'; + return MarkdownTestHelper::getInputOutputPaths($dir); + } + + /** + * @dataProvider dataProviderForRegularMarkdown + * + * @param string $inputPath Input markdown path + * @param string $htmlPath File path of expected transformed output (X)HTML + * + * @return void + */ + public function testTransformingOfRegularMarkdown($inputPath, $htmlPath) + { + $inputMarkdown = file_get_contents($inputPath); + $expectedHtml = file_get_contents($htmlPath); + $result = Markdown::defaultTransform($inputMarkdown); + + $this->assertSame( + $expectedHtml, + $result, + "Markdown in $inputPath converts exactly to expected $htmlPath" + ); + } +} diff --git a/test/resources/markdown.mdtest/Amps and angle encoding.text b/test/resources/markdown.mdtest/Amps and angle encoding.text new file mode 100644 index 0000000..0e9527f --- /dev/null +++ b/test/resources/markdown.mdtest/Amps and angle encoding.text @@ -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](). + + +[1]: http://example.com/?foo=1&bar=2 +[2]: http://att.com/ "AT&T" \ No newline at end of file diff --git a/test/resources/markdown.mdtest/Amps and angle encoding.xhtml b/test/resources/markdown.mdtest/Amps and angle encoding.xhtml new file mode 100644 index 0000000..9606860 --- /dev/null +++ b/test/resources/markdown.mdtest/Amps and angle encoding.xhtml @@ -0,0 +1,17 @@ +

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 with an ampersand in the URL.

+ +

Here's a link with an amersand in the link text: AT&T.

+ +

Here's an inline link.

+ +

Here's an inline link.

diff --git a/test/resources/markdown.mdtest/Auto links.text b/test/resources/markdown.mdtest/Auto links.text new file mode 100644 index 0000000..abbc488 --- /dev/null +++ b/test/resources/markdown.mdtest/Auto links.text @@ -0,0 +1,13 @@ +Link: . + +With an ampersand: + +* In a list? +* +* It should. + +> Blockquoted: + +Auto-links should not occur here: `` + + or here: \ No newline at end of file diff --git a/test/resources/markdown.mdtest/Auto links.xhtml b/test/resources/markdown.mdtest/Auto links.xhtml new file mode 100644 index 0000000..f8df985 --- /dev/null +++ b/test/resources/markdown.mdtest/Auto links.xhtml @@ -0,0 +1,18 @@ +

Link: http://example.com/.

+ +

With an ampersand: http://example.com/?foo=1&bar=2

+ + + +
+

Blockquoted: http://example.com/

+
+ +

Auto-links should not occur here: <http://example.com/>

+ +
or here: <http://example.com/>
+
diff --git a/test/resources/markdown.mdtest/Backslash escapes.text b/test/resources/markdown.mdtest/Backslash escapes.text new file mode 100644 index 0000000..5b014cb --- /dev/null +++ b/test/resources/markdown.mdtest/Backslash escapes.text @@ -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 bar. + +This is a tag with backslashes bar. diff --git a/test/resources/markdown.mdtest/Backslash escapes.xhtml b/test/resources/markdown.mdtest/Backslash escapes.xhtml new file mode 100644 index 0000000..29870da --- /dev/null +++ b/test/resources/markdown.mdtest/Backslash escapes.xhtml @@ -0,0 +1,118 @@ +

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 bar.

+ +

This is a tag with backslashes bar.

diff --git a/test/resources/markdown.mdtest/Blockquotes with code blocks.text b/test/resources/markdown.mdtest/Blockquotes with code blocks.text new file mode 100644 index 0000000..c31d171 --- /dev/null +++ b/test/resources/markdown.mdtest/Blockquotes with code blocks.text @@ -0,0 +1,11 @@ +> Example: +> +> sub status { +> print "working"; +> } +> +> Or: +> +> sub status { +> return "working"; +> } diff --git a/test/resources/markdown.mdtest/Blockquotes with code blocks.xhtml b/test/resources/markdown.mdtest/Blockquotes with code blocks.xhtml new file mode 100644 index 0000000..990202a --- /dev/null +++ b/test/resources/markdown.mdtest/Blockquotes with code blocks.xhtml @@ -0,0 +1,15 @@ +
+

Example:

+ +
sub status {
+    print "working";
+}
+
+ +

Or:

+ +
sub status {
+    return "working";
+}
+
+
diff --git a/test/resources/markdown.mdtest/Code Blocks.text b/test/resources/markdown.mdtest/Code Blocks.text new file mode 100644 index 0000000..b54b092 --- /dev/null +++ b/test/resources/markdown.mdtest/Code Blocks.text @@ -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 \ No newline at end of file diff --git a/test/resources/markdown.mdtest/Code Blocks.xhtml b/test/resources/markdown.mdtest/Code Blocks.xhtml new file mode 100644 index 0000000..32703f5 --- /dev/null +++ b/test/resources/markdown.mdtest/Code Blocks.xhtml @@ -0,0 +1,18 @@ +
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
+
diff --git a/test/resources/markdown.mdtest/Code Spans.text b/test/resources/markdown.mdtest/Code Spans.text new file mode 100644 index 0000000..5c229c7 --- /dev/null +++ b/test/resources/markdown.mdtest/Code Spans.text @@ -0,0 +1,5 @@ +`` + +Fix for backticks within HTML tag: like this + +Here's how you put `` `backticks` `` in a code span. \ No newline at end of file diff --git a/test/resources/markdown.mdtest/Code Spans.xhtml b/test/resources/markdown.mdtest/Code Spans.xhtml new file mode 100644 index 0000000..b057457 --- /dev/null +++ b/test/resources/markdown.mdtest/Code Spans.xhtml @@ -0,0 +1,5 @@ +

<test a=" content of attribute ">

+ +

Fix for backticks within HTML tag: like this

+ +

Here's how you put `backticks` in a code span.

diff --git a/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.text b/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.text new file mode 100644 index 0000000..f8a5b27 --- /dev/null +++ b/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.text @@ -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. diff --git a/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.xhtml b/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.xhtml new file mode 100644 index 0000000..e21ac79 --- /dev/null +++ b/test/resources/markdown.mdtest/Hard-wrapped paragraphs with list-like lines.xhtml @@ -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.

diff --git a/test/resources/markdown.mdtest/Horizontal rules.text b/test/resources/markdown.mdtest/Horizontal rules.text new file mode 100644 index 0000000..1594bda --- /dev/null +++ b/test/resources/markdown.mdtest/Horizontal rules.text @@ -0,0 +1,67 @@ +Dashes: + +--- + + --- + + --- + + --- + + --- + +- - - + + - - - + + - - - + + - - - + + - - - + + +Asterisks: + +*** + + *** + + *** + + *** + + *** + +* * * + + * * * + + * * * + + * * * + + * * * + + +Underscores: + +___ + + ___ + + ___ + + ___ + + ___ + +_ _ _ + + _ _ _ + + _ _ _ + + _ _ _ + + _ _ _ diff --git a/test/resources/markdown.mdtest/Horizontal rules.xhtml b/test/resources/markdown.mdtest/Horizontal rules.xhtml new file mode 100644 index 0000000..2dc2ab6 --- /dev/null +++ b/test/resources/markdown.mdtest/Horizontal rules.xhtml @@ -0,0 +1,71 @@ +

Dashes:

+ +
+ +
+ +
+ +
+ +
---
+
+ +
+ +
+ +
+ +
+ +
- - -
+
+ +

Asterisks:

+ +
+ +
+ +
+ +
+ +
***
+
+ +
+ +
+ +
+ +
+ +
* * *
+
+ +

Underscores:

+ +
+ +
+ +
+ +
+ +
___
+
+ +
+ +
+ +
+ +
+ +
_ _ _
+
diff --git a/test/resources/markdown.mdtest/Images.text b/test/resources/markdown.mdtest/Images.text new file mode 100644 index 0000000..5707590 --- /dev/null +++ b/test/resources/markdown.mdtest/Images.text @@ -0,0 +1,26 @@ +![Alt text](/path/to/img.jpg) + +![Alt text](/path/to/img.jpg "Optional title") + +Inline within a paragraph: [alt text](/url/). + +![alt text](/url/ "title preceded by two spaces") + +![alt text](/url/ "title has spaces afterward" ) + +![alt text]() + +![alt text]( "with a title"). + +![Empty]() + +![this is a stupid URL](http://example.com/(parens).jpg) + + +![alt text][foo] + + [foo]: /url/ + +![alt text][bar] + + [bar]: /url/ "Title here" \ No newline at end of file diff --git a/test/resources/markdown.mdtest/Images.xhtml b/test/resources/markdown.mdtest/Images.xhtml new file mode 100644 index 0000000..925bc14 --- /dev/null +++ b/test/resources/markdown.mdtest/Images.xhtml @@ -0,0 +1,21 @@ +

Alt text

+ +

Alt text

+ +

Inline within a paragraph: alt text.

+ +

alt text

+ +

alt text

+ +

alt text

+ +

alt text.

+ +

Empty

+ +

this is a stupid URL

+ +

alt text

+ +

alt text

diff --git a/test/resources/markdown.mdtest/Inline HTML (Advanced).text b/test/resources/markdown.mdtest/Inline HTML (Advanced).text new file mode 100644 index 0000000..3633f81 --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML (Advanced).text @@ -0,0 +1,30 @@ +Simple block on one line: + +
foo
+ +And nested without indentation: + +
+
+
+foo +
+
+
+
bar
+
+ +And with attributes: + +
+
+
+
+ +This was broken in 1.0.2b7: + +
+
+foo +
+
diff --git a/test/resources/markdown.mdtest/Inline HTML (Advanced).xhtml b/test/resources/markdown.mdtest/Inline HTML (Advanced).xhtml new file mode 100644 index 0000000..884f14c --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML (Advanced).xhtml @@ -0,0 +1,30 @@ +

Simple block on one line:

+ +
foo
+ +

And nested without indentation:

+ +
+
+
+foo +
+
+
+
bar
+
+ +

And with attributes:

+ +
+
+
+
+ +

This was broken in 1.0.2b7:

+ +
+
+foo +
+
diff --git a/test/resources/markdown.mdtest/Inline HTML (Simple).html b/test/resources/markdown.mdtest/Inline HTML (Simple).html new file mode 100644 index 0000000..6bf78f8 --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML (Simple).html @@ -0,0 +1,72 @@ +

Here's a simple block:

+ +
+ foo +
+ +

This should be a code block, though:

+ +
<div>
+    foo
+</div>
+
+ +

As should this:

+ +
<div>foo</div>
+
+ +

Now, nested:

+ +
+
+
+ foo +
+
+
+ +

This should just be an HTML comment:

+ + + +

Multiline:

+ + + +

Code block:

+ +
<!-- Comment -->
+
+ +

Just plain comment, with trailing spaces on the line:

+ + + +

Code:

+ +
<hr />
+
+ +

Hr's:

+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
diff --git a/test/resources/markdown.mdtest/Inline HTML (Simple).text b/test/resources/markdown.mdtest/Inline HTML (Simple).text new file mode 100644 index 0000000..14aa2dc --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML (Simple).text @@ -0,0 +1,69 @@ +Here's a simple block: + +
+ foo +
+ +This should be a code block, though: + +
+ foo +
+ +As should this: + +
foo
+ +Now, nested: + +
+
+
+ foo +
+
+
+ +This should just be an HTML comment: + + + +Multiline: + + + +Code block: + + + +Just plain comment, with trailing spaces on the line: + + + +Code: + +
+ +Hr's: + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/test/resources/markdown.mdtest/Inline HTML comments.html b/test/resources/markdown.mdtest/Inline HTML comments.html new file mode 100644 index 0000000..3f167a1 --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML comments.html @@ -0,0 +1,13 @@ +

Paragraph one.

+ + + + + +

Paragraph two.

+ + + +

The end.

diff --git a/test/resources/markdown.mdtest/Inline HTML comments.text b/test/resources/markdown.mdtest/Inline HTML comments.text new file mode 100644 index 0000000..41d830d --- /dev/null +++ b/test/resources/markdown.mdtest/Inline HTML comments.text @@ -0,0 +1,13 @@ +Paragraph one. + + + + + +Paragraph two. + + + +The end. diff --git a/test/resources/markdown.mdtest/Links, inline style.text b/test/resources/markdown.mdtest/Links, inline style.text new file mode 100644 index 0000000..aba9658 --- /dev/null +++ b/test/resources/markdown.mdtest/Links, inline style.text @@ -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 w/ angle brackets + title]( "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")) diff --git a/test/resources/markdown.mdtest/Links, inline style.xhtml b/test/resources/markdown.mdtest/Links, inline style.xhtml new file mode 100644 index 0000000..9f351ef --- /dev/null +++ b/test/resources/markdown.mdtest/Links, inline style.xhtml @@ -0,0 +1,23 @@ +

Just a URL.

+ +

URL and title.

+ +

URL and title.

+ +

URL and title.

+ +

URL and title.

+ +

URL wrapped in angle brackets.

+ +

URL w/ angle brackets + title.

+ +

Empty.

+ +

With parens in the URL

+ +

(With outer parens and parens in url)

+ +

With parens in the URL

+ +

(With outer parens and parens in url)

diff --git a/test/resources/markdown.mdtest/Links, reference style.text b/test/resources/markdown.mdtest/Links, reference style.text new file mode 100644 index 0000000..341ec88 --- /dev/null +++ b/test/resources/markdown.mdtest/Links, reference style.text @@ -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/ diff --git a/test/resources/markdown.mdtest/Links, reference style.xhtml b/test/resources/markdown.mdtest/Links, reference style.xhtml new file mode 100644 index 0000000..8e70c32 --- /dev/null +++ b/test/resources/markdown.mdtest/Links, reference style.xhtml @@ -0,0 +1,52 @@ +

Foo bar.

+ +

Foo bar.

+ +

Foo bar.

+ +

With embedded [brackets].

+ +

Indented once.

+ +

Indented twice.

+ +

Indented thrice.

+ +

Indented [four][] times.

+ +
[four]: /url
+
+ +
+ +

this should work

+ +

So should 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 points to something else.

+ +

Backslashing should suppress [this] and [this].

+ +
+ +

Here's one where the link +breaks across lines.

+ +

Here's another where the link +breaks across lines, but with a line-ending space.

diff --git a/test/resources/markdown.mdtest/Links, shortcut references.text b/test/resources/markdown.mdtest/Links, shortcut references.text new file mode 100755 index 0000000..8c44c98 --- /dev/null +++ b/test/resources/markdown.mdtest/Links, shortcut references.text @@ -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 diff --git a/test/resources/markdown.mdtest/Links, shortcut references.xhtml b/test/resources/markdown.mdtest/Links, shortcut references.xhtml new file mode 100755 index 0000000..bf81e93 --- /dev/null +++ b/test/resources/markdown.mdtest/Links, shortcut references.xhtml @@ -0,0 +1,9 @@ +

This is the simple case.

+ +

This one has a line +break.

+ +

This one has a line +break with a line-ending space.

+ +

this and the other

diff --git a/test/resources/markdown.mdtest/Literal quotes in titles.text b/test/resources/markdown.mdtest/Literal quotes in titles.text new file mode 100644 index 0000000..29d0e42 --- /dev/null +++ b/test/resources/markdown.mdtest/Literal quotes in titles.text @@ -0,0 +1,7 @@ +Foo [bar][]. + +Foo [bar](/url/ "Title with "quotes" inside"). + + + [bar]: /url/ "Title with "quotes" inside" + diff --git a/test/resources/markdown.mdtest/Literal quotes in titles.xhtml b/test/resources/markdown.mdtest/Literal quotes in titles.xhtml new file mode 100644 index 0000000..611c1ac --- /dev/null +++ b/test/resources/markdown.mdtest/Literal quotes in titles.xhtml @@ -0,0 +1,3 @@ +

Foo bar.

+ +

Foo bar.

diff --git a/test/resources/markdown.mdtest/Markdown Documentation - Basics.text b/test/resources/markdown.mdtest/Markdown Documentation - Basics.text new file mode 100644 index 0000000..486055c --- /dev/null +++ b/test/resources/markdown.mdtest/Markdown Documentation - Basics.text @@ -0,0 +1,306 @@ +Markdown: Basics +================ + + + + +Getting the Gist of Markdown's Formatting Syntax +------------------------------------------------ + +This page offers a brief overview of what it's like to use Markdown. +The [syntax page] [s] 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. + +It's also helpful to simply try Markdown out; the [Dingus] [d] is a +web application that allows you type your own Markdown-formatted text +and translate it to XHTML. + +**Note:** This document is itself written using Markdown; you +can [see the source for it by adding '.text' to the URL] [src]. + + [s]: /projects/markdown/syntax "Markdown Syntax" + [d]: /projects/markdown/dingus "Markdown Dingus" + [src]: /projects/markdown/basics.text + + +## Paragraphs, Headers, Blockquotes ## + +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. + +Markdown offers two styles of headers: *Setext* and *atx*. +Setext-style headers for `

` and `

` are created by +"underlining" with equal signs (`=`) and hyphens (`-`), respectively. +To create an atx-style header, you put 1-6 hash marks (`#`) at the +beginning of the line -- the number of hashes equals the resulting +HTML header level. + +Blockquotes are indicated using email-style '`>`' angle brackets. + +Markdown: + + 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 + + +Output: + +

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

+
+ + + +### Phrase Emphasis ### + +Markdown uses asterisks and underscores to indicate spans of emphasis. + +Markdown: + + 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__. + +Output: + +

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.

+ + + +## Lists ## + +Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`, +`+`, and `-`) as list markers. These three markers are +interchangable; this: + + * Candy. + * Gum. + * Booze. + +this: + + + Candy. + + Gum. + + Booze. + +and this: + + - Candy. + - Gum. + - Booze. + +all produce the same output: + +
    +
  • Candy.
  • +
  • Gum.
  • +
  • Booze.
  • +
+ +Ordered (numbered) lists use regular numbers, followed by periods, as +list markers: + + 1. Red + 2. Green + 3. Blue + +Output: + +
    +
  1. Red
  2. +
  3. Green
  4. +
  5. Blue
  6. +
+ +If you put blank lines between items, you'll get `

` tags for the +list item text. You can create multi-paragraph list items by indenting +the paragraphs by 4 spaces or 1 tab: + + * A list item. + + With multiple paragraphs. + + * Another item in the list. + +Output: + +

    +
  • A list item.

    +

    With multiple paragraphs.

  • +
  • Another item in the list.

  • +
+ + + +### Links ### + +Markdown supports two styles for creating links: *inline* and +*reference*. With both styles, you use square brackets to delimit the +text you want to turn into a link. + +Inline-style links use parentheses immediately after the link text. +For example: + + This is an [example link](http://example.com/). + +Output: + +

This is an + example link.

+ +Optionally, you may include a title attribute in the parentheses: + + This is an [example link](http://example.com/ "With a Title"). + +Output: + +

This is an + example link.

+ +Reference-style links allow you to refer to your links by names, which +you define elsewhere in your document: + + 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" + +Output: + +

I get 10 times more traffic from Google than from Yahoo or MSN.

+ +The title attribute is optional. Link names may contain letters, +numbers and spaces, but are *not* case sensitive: + + I start my morning with a cup of coffee and + [The New York Times][NY Times]. + + [ny times]: http://www.nytimes.com/ + +Output: + +

I start my morning with a cup of coffee and + The New York Times.

+ + +### Images ### + +Image syntax is very much like link syntax. + +Inline (titles are optional): + + ![alt text](/path/to/img.jpg "Title") + +Reference-style: + + ![alt text][id] + + [id]: /path/to/img.jpg "Title" + +Both of the above examples produce the same output: + + alt text + + + +### Code ### + +In a regular paragraph, you can create code span by wrapping text in +backtick quotes. Any ampersands (`&`) and angle brackets (`<` or +`>`) will automatically be translated into HTML entities. This makes +it easy to use Markdown to write about HTML example code: + + I strongly recommend against using any `` tags. + + I wish SmartyPants used named entities like `—` + instead of decimal-encoded entites like `—`. + +Output: + +

I strongly recommend against using any + <blink> tags.

+ +

I wish SmartyPants used named entities like + &mdash; instead of decimal-encoded + entites like &#8212;.

+ + +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, `&`, `<`, +and `>` characters will be escaped automatically. + +Markdown: + + If you want your page to validate under XHTML 1.0 Strict, + you've got to put paragraph tags in your blockquotes: + +
+

For example.

+
+ +Output: + +

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>
+    
diff --git a/test/resources/markdown.mdtest/Markdown Documentation - Basics.xhtml b/test/resources/markdown.mdtest/Markdown Documentation - Basics.xhtml new file mode 100644 index 0000000..d5bdbb2 --- /dev/null +++ b/test/resources/markdown.mdtest/Markdown Documentation - Basics.xhtml @@ -0,0 +1,314 @@ +

Markdown: Basics

+ + + +

Getting the Gist of Markdown's Formatting Syntax

+ +

This page offers a brief overview of what it's like to use Markdown. +The syntax page 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.

+ +

It's also helpful to simply try Markdown out; the Dingus is a +web application that allows you type your own Markdown-formatted text +and translate it to XHTML.

+ +

Note: This document is itself written using Markdown; you +can see the source for it by adding '.text' to the URL.

+ +

Paragraphs, Headers, Blockquotes

+ +

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.

+ +

Markdown offers two styles of headers: Setext and atx. +Setext-style headers for <h1> and <h2> are created by +"underlining" with equal signs (=) and hyphens (-), respectively. +To create an atx-style header, you put 1-6 hash marks (#) at the +beginning of the line -- the number of hashes equals the resulting +HTML header level.

+ +

Blockquotes are indicated using email-style '>' angle brackets.

+ +

Markdown:

+ +
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
+
+ +

Output:

+ +
<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>
+
+ +

Phrase Emphasis

+ +

Markdown uses asterisks and underscores to indicate spans of emphasis.

+ +

Markdown:

+ +
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__.
+
+ +

Output:

+ +
<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>
+
+ +

Lists

+ +

Unordered (bulleted) lists use asterisks, pluses, and hyphens (*, ++, and -) as list markers. These three markers are +interchangable; this:

+ +
*   Candy.
+*   Gum.
+*   Booze.
+
+ +

this:

+ +
+   Candy.
++   Gum.
++   Booze.
+
+ +

and this:

+ +
-   Candy.
+-   Gum.
+-   Booze.
+
+ +

all produce the same output:

+ +
<ul>
+<li>Candy.</li>
+<li>Gum.</li>
+<li>Booze.</li>
+</ul>
+
+ +

Ordered (numbered) lists use regular numbers, followed by periods, as +list markers:

+ +
1.  Red
+2.  Green
+3.  Blue
+
+ +

Output:

+ +
<ol>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ol>
+
+ +

If you put blank lines between items, you'll get <p> tags for the +list item text. You can create multi-paragraph list items by indenting +the paragraphs by 4 spaces or 1 tab:

+ +
*   A list item.
+
+    With multiple paragraphs.
+
+*   Another item in the list.
+
+ +

Output:

+ +
<ul>
+<li><p>A list item.</p>
+<p>With multiple paragraphs.</p></li>
+<li><p>Another item in the list.</p></li>
+</ul>
+
+ +

Links

+ +

Markdown supports two styles for creating links: inline and +reference. With both styles, you use square brackets to delimit the +text you want to turn into a link.

+ +

Inline-style links use parentheses immediately after the link text. +For example:

+ +
This is an [example link](http://example.com/).
+
+ +

Output:

+ +
<p>This is an <a href="http://example.com/">
+example link</a>.</p>
+
+ +

Optionally, you may include a title attribute in the parentheses:

+ +
This is an [example link](http://example.com/ "With a Title").
+
+ +

Output:

+ +
<p>This is an <a href="http://example.com/" title="With a Title">
+example link</a>.</p>
+
+ +

Reference-style links allow you to refer to your links by names, which +you define elsewhere in your document:

+ +
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"
+
+ +

Output:

+ +
<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>
+
+ +

The title attribute is optional. Link names may contain letters, +numbers and spaces, but are not case sensitive:

+ +
I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+
+ +

Output:

+ +
<p>I start my morning with a cup of coffee and
+<a href="http://www.nytimes.com/">The New York Times</a>.</p>
+
+ +

Images

+ +

Image syntax is very much like link syntax.

+ +

Inline (titles are optional):

+ +
![alt text](/path/to/img.jpg "Title")
+
+ +

Reference-style:

+ +
![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+
+ +

Both of the above examples produce the same output:

+ +
<img src="/path/to/img.jpg" alt="alt text" title="Title" />
+
+ +

Code

+ +

In a regular paragraph, you can create code span by wrapping text in +backtick quotes. Any ampersands (&) and angle brackets (< or +>) will automatically be translated into HTML entities. This makes +it easy to use Markdown to write about HTML example code:

+ +
I strongly recommend against using any `<blink>` tags.
+
+I wish SmartyPants used named entities like `&mdash;`
+instead of decimal-encoded entites like `&#8212;`.
+
+ +

Output:

+ +
<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>
+
+ +

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, &, <, +and > characters will be escaped automatically.

+ +

Markdown:

+ +
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>
+
+ +

Output:

+ +
<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>
+
diff --git a/test/resources/markdown.mdtest/Markdown Documentation - Syntax.text b/test/resources/markdown.mdtest/Markdown Documentation - Syntax.text new file mode 100644 index 0000000..57360a1 --- /dev/null +++ b/test/resources/markdown.mdtest/Markdown Documentation - Syntax.text @@ -0,0 +1,888 @@ +Markdown: Syntax +================ + + + + +* [Overview](#overview) + * [Philosophy](#philosophy) + * [Inline HTML](#html) + * [Automatic Escaping for Special Characters](#autoescape) +* [Block Elements](#block) + * [Paragraphs and Line Breaks](#p) + * [Headers](#header) + * [Blockquotes](#blockquote) + * [Lists](#list) + * [Code Blocks](#precode) + * [Horizontal Rules](#hr) +* [Span Elements](#span) + * [Links](#link) + * [Emphasis](#em) + * [Code](#code) + * [Images](#img) +* [Miscellaneous](#misc) + * [Backslash Escapes](#backslash) + * [Automatic Links](#autolink) + + +**Note:** This document is itself written using Markdown; you +can [see the source for it by adding '.text' to the URL][src]. + + [src]: /projects/markdown/syntax.text + +* * * + +

Overview

+ +

Philosophy

+ +Markdown is intended to be as easy-to-read and easy-to-write as is feasible. + +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 [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], +[Grutatext] [5], and [EtText] [6] -- the single biggest source of +inspiration for Markdown's syntax is the format of plain text email. + + [1]: http://docutils.sourceforge.net/mirror/setext.html + [2]: http://www.aaronsw.com/2002/atx/ + [3]: http://textism.com/tools/textile/ + [4]: http://docutils.sourceforge.net/rst.html + [5]: http://www.triptico.com/software/grutatxt.html + [6]: http://ettext.taint.org/doc/ + +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. + + + +

Inline HTML

+ +Markdown's syntax is intended for one purpose: to be used as a +format for *writing* for the web. + +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 *not* 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 *publishing* format; Markdown is a *writing* +format. Thus, Markdown's formatting syntax only addresses issues that +can be conveyed in plain text. + +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. + +The only restrictions are that block-level HTML elements -- e.g. `
`, +``, `
`, `

`, 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) `

` tags around HTML block-level tags. + +For example, to add an HTML table to a Markdown article: + + This is a regular paragraph. + +

+ + + +
Foo
+ + This is another regular paragraph. + +Note that Markdown formatting syntax is not processed within block-level +HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an +HTML block. + +Span-level HTML tags -- e.g. ``, ``, or `` -- 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 `` or `` tags instead of Markdown's +link or image syntax, go right ahead. + +Unlike block-level HTML tags, Markdown syntax *is* processed within +span-level tags. + + +

Automatic Escaping for Special Characters

+ +In HTML, there are two characters that demand special treatment: `<` +and `&`. 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. `<`, and +`&`. + +Ampersands in particular are bedeviling for web writers. If you want to +write about 'AT&T', you need to write '`AT&T`'. You even need to +escape ampersands within URLs. Thus, if you want to link to: + + http://images.google.com/images?num=30&q=larry+bird + +you need to encode the URL as: + + http://images.google.com/images?num=30&q=larry+bird + +in your anchor tag `href` 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. + +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 `&`. + +So, if you want to include a copyright symbol in your article, you can write: + + © + +and Markdown will leave it alone. But if you write: + + AT&T + +Markdown will translate it to: + + AT&T + +Similarly, because Markdown supports [inline HTML](#html), if you use +angle brackets as delimiters for HTML tags, Markdown will treat them as +such. But if you write: + + 4 < 5 + +Markdown will translate it to: + + 4 < 5 + +However, inside Markdown code spans and blocks, angle brackets and +ampersands are *always* 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 `<` +and `&` in your example code needs to be escaped.) + + +* * * + + +

Block Elements

+ + +

Paragraphs and Line Breaks

+ +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. + +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 `
` tag. + +When you *do* want to insert a `
` break tag using Markdown, you +end a line with two or more spaces, then type return. + +Yes, this takes a tad more effort to create a `
`, but a simplistic +"every line break is a `
`" rule wouldn't work for Markdown. +Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] +work best -- and look better -- when you format them with hard breaks. + + [bq]: #blockquote + [l]: #list + + + + + +Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. + +Setext-style headers are "underlined" using equal signs (for first-level +headers) and dashes (for second-level headers). For example: + + This is an H1 + ============= + + This is an H2 + ------------- + +Any number of underlining `=`'s or `-`'s will work. + +Atx-style headers use 1-6 hash characters at the start of the line, +corresponding to header levels 1-6. For example: + + # This is an H1 + + ## This is an H2 + + ###### This is an H6 + +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.) : + + # This is an H1 # + + ## This is an H2 ## + + ### This is an H3 ###### + + +

Blockquotes

+ +Markdown uses email-style `>` 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 `>` before every line: + + > 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. + +Markdown allows you to be lazy and only put the `>` before the first +line of a hard-wrapped paragraph: + + > 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. + +Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by +adding additional levels of `>`: + + > This is the first level of quoting. + > + > > This is nested blockquote. + > + > Back to the first level. + +Blockquotes can contain other Markdown elements, including headers, lists, +and code blocks: + + > ## 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"); + +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. + + +

Lists

+ +Markdown supports ordered (numbered) and unordered (bulleted) lists. + +Unordered lists use asterisks, pluses, and hyphens -- interchangably +-- as list markers: + + * Red + * Green + * Blue + +is equivalent to: + + + Red + + Green + + Blue + +and: + + - Red + - Green + - Blue + +Ordered lists use numbers followed by periods: + + 1. Bird + 2. McHale + 3. Parish + +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: + +
    +
  1. Bird
  2. +
  3. McHale
  4. +
  5. Parish
  6. +
+ +If you instead wrote the list in Markdown like this: + + 1. Bird + 1. McHale + 1. Parish + +or even: + + 3. Bird + 1. McHale + 8. Parish + +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. + +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. + +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. + +To make lists look nice, you can wrap items with hanging indents: + + * 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. + +But if you want to be lazy, you don't have to: + + * 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. + +If list items are separated by blank lines, Markdown will wrap the +items in `

` tags in the HTML output. For example, this input: + + * Bird + * Magic + +will turn into: + +

    +
  • Bird
  • +
  • Magic
  • +
+ +But this: + + * Bird + + * Magic + +will turn into: + +
    +
  • Bird

  • +
  • Magic

  • +
+ +List items may consist of multiple paragraphs. Each subsequent +paragraph in a list item must be intended by either 4 spaces +or one tab: + + 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. + +It looks nice if you indent every line of the subsequent +paragraphs, but here again, Markdown will allow you to be +lazy: + + * 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. + +To put a blockquote within a list item, the blockquote's `>` +delimiters need to be indented: + + * A list item with a blockquote: + + > This is a blockquote + > inside a list item. + +To put a code block within a list item, the code block needs +to be indented *twice* -- 8 spaces or two tabs: + + * A list item with a code block: + + + + +It's worth noting that it's possible to trigger an ordered list by +accident, by writing something like this: + + 1986. What a great season. + +In other words, a *number-period-space* sequence at the beginning of a +line. To avoid this, you can backslash-escape the period: + + 1986\. What a great season. + + + +

Code Blocks

+ +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 `
` and `` tags.
+
+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:
+
+    This is a normal paragraph:
+
+        This is a code block.
+
+Markdown will generate:
+
+    

This is a normal paragraph:

+ +
This is a code block.
+    
+ +One level of indentation -- 4 spaces or 1 tab -- is removed from each +line of the code block. For example, this: + + Here is an example of AppleScript: + + tell application "Foo" + beep + end tell + +will turn into: + +

Here is an example of AppleScript:

+ +
tell application "Foo"
+        beep
+    end tell
+    
+ +A code block continues until it reaches a line that is not indented +(or the end of the article). + +Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) +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: + + + +will turn into: + +
<div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+    
+ +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. + + + +

Horizontal Rules

+ +You can produce a horizontal rule tag (`
`) 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: + + * * * + + *** + + ***** + + - - - + + --------------------------------------- + + _ _ _ + + +* * * + +

Span Elements

+ + + +Markdown supports two style of links: *inline* and *reference*. + +In both styles, the link text is delimited by [square brackets]. + +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 *optional* +title for the link, surrounded in quotes. For example: + + This is [an example](http://example.com/ "Title") inline link. + + [This link](http://example.net/) has no title attribute. + +Will produce: + +

This is + an example inline link.

+ +

This link has no + title attribute.

+ +If you're referring to a local resource on the same server, you can +use relative paths: + + See my [About](/about/) page for details. + +Reference-style links use a second set of square brackets, inside +which you place a label of your choosing to identify the link: + + This is [an example][id] reference-style link. + +You can optionally use a space to separate the sets of brackets: + + This is [an example] [id] reference-style link. + +Then, anywhere in the document, you define your link label like this, +on a line by itself: + + [id]: http://example.com/ "Optional Title Here" + +That is: + +* Square brackets containing the link identifier (optionally + indented from the left margin using up to three spaces); +* followed by a colon; +* followed by one or more spaces (or tabs); +* followed by the URL for the link; +* optionally followed by a title attribute for the link, enclosed + in double or single quotes. + +The link URL may, optionally, be surrounded by angle brackets: + + [id]: "Optional Title Here" + +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: + + [id]: http://example.com/longish/path/to/resource/here + "Optional Title Here" + +Link definitions are only used for creating links during Markdown +processing, and are stripped from your document in the HTML output. + +Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links: + + [link text][a] + [link text][A] + +are equivalent. + +The *implicit link name* 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: + + [Google][] + +And then define the link: + + [Google]: http://google.com/ + +Because link names may contain spaces, this shortcut even works for +multiple words in the link text: + + Visit [Daring Fireball][] for more information. + +And then define the link: + + [Daring Fireball]: http://daringfireball.net/ + +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. + +Here's an example of reference links in action: + + 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" + +Using the implicit link name shortcut, you could instead write: + + 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" + +Both of the above examples will produce the following HTML output: + +

I get 10 times more traffic from Google than from + Yahoo + or MSN.

+ +For comparison, here is the same paragraph written using +Markdown's inline link style: + + 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"). + +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. + +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. + + +

Emphasis

+ +Markdown treats asterisks (`*`) and underscores (`_`) as indicators of +emphasis. Text wrapped with one `*` or `_` will be wrapped with an +HTML `` tag; double `*`'s or `_`'s will be wrapped with an HTML +`` tag. E.g., this input: + + *single asterisks* + + _single underscores_ + + **double asterisks** + + __double underscores__ + +will produce: + + single asterisks + + single underscores + + double asterisks + + double underscores + +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. + +Emphasis can be used in the middle of a word: + + un*fucking*believable + +But if you surround an `*` or `_` with spaces, it'll be treated as a +literal asterisk or underscore. + +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: + + \*this text is surrounded by literal asterisks\* + + + +

Code

+ +To indicate a span of code, wrap it with backtick quotes (`` ` ``). +Unlike a pre-formatted code block, a code span indicates code within a +normal paragraph. For example: + + Use the `printf()` function. + +will produce: + +

Use the printf() function.

+ +To include a literal backtick character within a code span, you can use +multiple backticks as the opening and closing delimiters: + + ``There is a literal backtick (`) here.`` + +which will produce this: + +

There is a literal backtick (`) here.

+ +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: + + A single backtick in a code span: `` ` `` + + A backtick-delimited string in a code span: `` `foo` `` + +will produce: + +

A single backtick in a code span: `

+ +

A backtick-delimited string in a code span: `foo`

+ +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: + + Please don't use any `` tags. + +into: + +

Please don't use any <blink> tags.

+ +You can write this: + + `—` is the decimal-encoded equivalent of `—`. + +to produce: + +

&#8212; is the decimal-encoded + equivalent of &mdash;.

+ + + +

Images

+ +Admittedly, it's fairly difficult to devise a "natural" syntax for +placing images into a plain text document format. + +Markdown uses an image syntax that is intended to resemble the syntax +for links, allowing for two styles: *inline* and *reference*. + +Inline image syntax looks like this: + + ![Alt text](/path/to/img.jpg) + + ![Alt text](/path/to/img.jpg "Optional title") + +That is: + +* An exclamation mark: `!`; +* followed by a set of square brackets, containing the `alt` + attribute text for the image; +* followed by a set of parentheses, containing the URL or path to + the image, and an optional `title` attribute enclosed in double + or single quotes. + +Reference-style image syntax looks like this: + + ![Alt text][id] + +Where "id" is the name of a defined image reference. Image references +are defined using syntax identical to link references: + + [id]: url/to/image "Optional title attribute" + +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 `` tags. + + +* * * + + +

Miscellaneous

+ + + +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: + + + +Markdown will turn this into: + + http://example.com/ + +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: + + + +into something like this: + + address@exa + mple.com + +which will render in a browser as a clickable link to "address@example.com". + +(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.) + + + +

Backslash Escapes

+ +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 `` tag), you can backslashes +before the asterisks, like this: + + \*literal asterisks\* + +Markdown provides backslash escapes for the following characters: + + \ backslash + ` backtick + * asterisk + _ underscore + {} curly braces + [] square brackets + () parentheses + # hash mark + + plus sign + - minus sign (hyphen) + . dot + ! exclamation mark + diff --git a/test/resources/markdown.mdtest/Markdown Documentation - Syntax.xhtml b/test/resources/markdown.mdtest/Markdown Documentation - Syntax.xhtml new file mode 100644 index 0000000..5c01306 --- /dev/null +++ b/test/resources/markdown.mdtest/Markdown Documentation - Syntax.xhtml @@ -0,0 +1,942 @@ +

Markdown: Syntax

+ + + + + +

Note: This document is itself written using Markdown; you +can see the source for it by adding '.text' to the URL.

+ +
+ +

Overview

+ +

Philosophy

+ +

Markdown is intended to be as easy-to-read and easy-to-write as is feasible.

+ +

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 Setext, atx, Textile, reStructuredText, +Grutatext, and EtText -- the single biggest source of +inspiration for Markdown's syntax is the format of plain text email.

+ +

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.

+ +

Inline HTML

+ +

Markdown's syntax is intended for one purpose: to be used as a +format for writing for the web.

+ +

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 not 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 publishing format; Markdown is a writing +format. Thus, Markdown's formatting syntax only addresses issues that +can be conveyed in plain text.

+ +

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.

+ +

The only restrictions are that block-level HTML elements -- e.g. <div>, +<table>, <pre>, <p>, 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) <p> tags around HTML block-level tags.

+ +

For example, to add an HTML table to a Markdown article:

+ +
This is a regular paragraph.
+
+<table>
+    <tr>
+        <td>Foo</td>
+    </tr>
+</table>
+
+This is another regular paragraph.
+
+ +

Note that Markdown formatting syntax is not processed within block-level +HTML tags. E.g., you can't use Markdown-style *emphasis* inside an +HTML block.

+ +

Span-level HTML tags -- e.g. <span>, <cite>, or <del> -- 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 <a> or <img> tags instead of Markdown's +link or image syntax, go right ahead.

+ +

Unlike block-level HTML tags, Markdown syntax is processed within +span-level tags.

+ +

Automatic Escaping for Special Characters

+ +

In HTML, there are two characters that demand special treatment: < +and &. 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. &lt;, and +&amp;.

+ +

Ampersands in particular are bedeviling for web writers. If you want to +write about 'AT&T', you need to write 'AT&amp;T'. You even need to +escape ampersands within URLs. Thus, if you want to link to:

+ +
http://images.google.com/images?num=30&q=larry+bird
+
+ +

you need to encode the URL as:

+ +
http://images.google.com/images?num=30&amp;q=larry+bird
+
+ +

in your anchor tag href 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.

+ +

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 &amp;.

+ +

So, if you want to include a copyright symbol in your article, you can write:

+ +
&copy;
+
+ +

and Markdown will leave it alone. But if you write:

+ +
AT&T
+
+ +

Markdown will translate it to:

+ +
AT&amp;T
+
+ +

Similarly, because Markdown supports inline HTML, if you use +angle brackets as delimiters for HTML tags, Markdown will treat them as +such. But if you write:

+ +
4 < 5
+
+ +

Markdown will translate it to:

+ +
4 &lt; 5
+
+ +

However, inside Markdown code spans and blocks, angle brackets and +ampersands are always 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 < +and & in your example code needs to be escaped.)

+ +
+ +

Block Elements

+ +

Paragraphs and Line Breaks

+ +

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.

+ +

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 <br /> tag.

+ +

When you do want to insert a <br /> break tag using Markdown, you +end a line with two or more spaces, then type return.

+ +

Yes, this takes a tad more effort to create a <br />, but a simplistic +"every line break is a <br />" rule wouldn't work for Markdown. +Markdown's email-style blockquoting and multi-paragraph list items +work best -- and look better -- when you format them with hard breaks.

+ + + +

Markdown supports two styles of headers, Setext and atx.

+ +

Setext-style headers are "underlined" using equal signs (for first-level +headers) and dashes (for second-level headers). For example:

+ +
This is an H1
+=============
+
+This is an H2
+-------------
+
+ +

Any number of underlining ='s or -'s will work.

+ +

Atx-style headers use 1-6 hash characters at the start of the line, +corresponding to header levels 1-6. For example:

+ +
# This is an H1
+
+## This is an H2
+
+###### This is an H6
+
+ +

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.) :

+ +
# This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+
+ +

Blockquotes

+ +

Markdown uses email-style > 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 > before every line:

+ +
> 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.
+
+ +

Markdown allows you to be lazy and only put the > before the first +line of a hard-wrapped paragraph:

+ +
> 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.
+
+ +

Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by +adding additional levels of >:

+ +
> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+ +

Blockquotes can contain other Markdown elements, including headers, lists, +and code blocks:

+ +
> ## 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");
+
+ +

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.

+ +

Lists

+ +

Markdown supports ordered (numbered) and unordered (bulleted) lists.

+ +

Unordered lists use asterisks, pluses, and hyphens -- interchangably +-- as list markers:

+ +
*   Red
+*   Green
+*   Blue
+
+ +

is equivalent to:

+ +
+   Red
++   Green
++   Blue
+
+ +

and:

+ +
-   Red
+-   Green
+-   Blue
+
+ +

Ordered lists use numbers followed by periods:

+ +
1.  Bird
+2.  McHale
+3.  Parish
+
+ +

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:

+ +
<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+
+ +

If you instead wrote the list in Markdown like this:

+ +
1.  Bird
+1.  McHale
+1.  Parish
+
+ +

or even:

+ +
3. Bird
+1. McHale
+8. Parish
+
+ +

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.

+ +

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.

+ +

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.

+ +

To make lists look nice, you can wrap items with hanging indents:

+ +
*   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.
+
+ +

But if you want to be lazy, you don't have to:

+ +
*   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.
+
+ +

If list items are separated by blank lines, Markdown will wrap the +items in <p> tags in the HTML output. For example, this input:

+ +
*   Bird
+*   Magic
+
+ +

will turn into:

+ +
<ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+
+ +

But this:

+ +
*   Bird
+
+*   Magic
+
+ +

will turn into:

+ +
<ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+
+ +

List items may consist of multiple paragraphs. Each subsequent +paragraph in a list item must be intended by either 4 spaces +or one tab:

+ +
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.
+
+ +

It looks nice if you indent every line of the subsequent +paragraphs, but here again, Markdown will allow you to be +lazy:

+ +
*   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.
+
+ +

To put a blockquote within a list item, the blockquote's > +delimiters need to be indented:

+ +
*   A list item with a blockquote:
+
+    > This is a blockquote
+    > inside a list item.
+
+ +

To put a code block within a list item, the code block needs +to be indented twice -- 8 spaces or two tabs:

+ +
*   A list item with a code block:
+
+        <code goes here>
+
+ +

It's worth noting that it's possible to trigger an ordered list by +accident, by writing something like this:

+ +
1986. What a great season.
+
+ +

In other words, a number-period-space sequence at the beginning of a +line. To avoid this, you can backslash-escape the period:

+ +
1986\. What a great season.
+
+ +

Code Blocks

+ +

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 <pre> and <code> tags.

+ +

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:

+ +
This is a normal paragraph:
+
+    This is a code block.
+
+ +

Markdown will generate:

+ +
<p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+
+ +

One level of indentation -- 4 spaces or 1 tab -- is removed from each +line of the code block. For example, this:

+ +
Here is an example of AppleScript:
+
+    tell application "Foo"
+        beep
+    end tell
+
+ +

will turn into:

+ +
<p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+    beep
+end tell
+</code></pre>
+
+ +

A code block continues until it reaches a line that is not indented +(or the end of the article).

+ +

Within a code block, ampersands (&) and angle brackets (< and >) +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:

+ +
    <div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+
+ +

will turn into:

+ +
<pre><code>&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+
+ +

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.

+ +

Horizontal Rules

+ +

You can produce a horizontal rule tag (<hr />) 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:

+ +
* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+
+ +
+ +

Span Elements

+ + + +

Markdown supports two style of links: inline and reference.

+ +

In both styles, the link text is delimited by [square brackets].

+ +

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 optional +title for the link, surrounded in quotes. For example:

+ +
This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+
+ +

Will produce:

+ +
<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>
+
+ +

If you're referring to a local resource on the same server, you can +use relative paths:

+ +
See my [About](/about/) page for details.
+
+ +

Reference-style links use a second set of square brackets, inside +which you place a label of your choosing to identify the link:

+ +
This is [an example][id] reference-style link.
+
+ +

You can optionally use a space to separate the sets of brackets:

+ +
This is [an example] [id] reference-style link.
+
+ +

Then, anywhere in the document, you define your link label like this, +on a line by itself:

+ +
[id]: http://example.com/  "Optional Title Here"
+
+ +

That is:

+ +
    +
  • Square brackets containing the link identifier (optionally +indented from the left margin using up to three spaces);
  • +
  • followed by a colon;
  • +
  • followed by one or more spaces (or tabs);
  • +
  • followed by the URL for the link;
  • +
  • optionally followed by a title attribute for the link, enclosed +in double or single quotes.
  • +
+ +

The link URL may, optionally, be surrounded by angle brackets:

+ +
[id]: <http://example.com/>  "Optional Title Here"
+
+ +

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:

+ +
[id]: http://example.com/longish/path/to/resource/here
+    "Optional Title Here"
+
+ +

Link definitions are only used for creating links during Markdown +processing, and are stripped from your document in the HTML output.

+ +

Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are not case sensitive. E.g. these two links:

+ +
[link text][a]
+[link text][A]
+
+ +

are equivalent.

+ +

The implicit link name 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:

+ +
[Google][]
+
+ +

And then define the link:

+ +
[Google]: http://google.com/
+
+ +

Because link names may contain spaces, this shortcut even works for +multiple words in the link text:

+ +
Visit [Daring Fireball][] for more information.
+
+ +

And then define the link:

+ +
[Daring Fireball]: http://daringfireball.net/
+
+ +

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.

+ +

Here's an example of reference links in action:

+ +
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"
+
+ +

Using the implicit link name shortcut, you could instead write:

+ +
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"
+
+ +

Both of the above examples will produce the following HTML output:

+ +
<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>
+
+ +

For comparison, here is the same paragraph written using +Markdown's inline link style:

+ +
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").
+
+ +

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.

+ +

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.

+ +

Emphasis

+ +

Markdown treats asterisks (*) and underscores (_) as indicators of +emphasis. Text wrapped with one * or _ will be wrapped with an +HTML <em> tag; double *'s or _'s will be wrapped with an HTML +<strong> tag. E.g., this input:

+ +
*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+
+ +

will produce:

+ +
<em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+
+ +

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.

+ +

Emphasis can be used in the middle of a word:

+ +
un*fucking*believable
+
+ +

But if you surround an * or _ with spaces, it'll be treated as a +literal asterisk or underscore.

+ +

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:

+ +
\*this text is surrounded by literal asterisks\*
+
+ +

Code

+ +

To indicate a span of code, wrap it with backtick quotes (`). +Unlike a pre-formatted code block, a code span indicates code within a +normal paragraph. For example:

+ +
Use the `printf()` function.
+
+ +

will produce:

+ +
<p>Use the <code>printf()</code> function.</p>
+
+ +

To include a literal backtick character within a code span, you can use +multiple backticks as the opening and closing delimiters:

+ +
``There is a literal backtick (`) here.``
+
+ +

which will produce this:

+ +
<p><code>There is a literal backtick (`) here.</code></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:

+ +
A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+
+ +

will produce:

+ +
<p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></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:

+ +
Please don't use any `<blink>` tags.
+
+ +

into:

+ +
<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+
+ +

You can write this:

+ +
`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+
+ +

to produce:

+ +
<p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+
+ +

Images

+ +

Admittedly, it's fairly difficult to devise a "natural" syntax for +placing images into a plain text document format.

+ +

Markdown uses an image syntax that is intended to resemble the syntax +for links, allowing for two styles: inline and reference.

+ +

Inline image syntax looks like this:

+ +
![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+
+ +

That is:

+ +
    +
  • An exclamation mark: !;
  • +
  • followed by a set of square brackets, containing the alt +attribute text for the image;
  • +
  • followed by a set of parentheses, containing the URL or path to +the image, and an optional title attribute enclosed in double +or single quotes.
  • +
+ +

Reference-style image syntax looks like this:

+ +
![Alt text][id]
+
+ +

Where "id" is the name of a defined image reference. Image references +are defined using syntax identical to link references:

+ +
[id]: url/to/image  "Optional title attribute"
+
+ +

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 <img> tags.

+ +
+ +

Miscellaneous

+ + + +

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:

+ +
<http://example.com/>
+
+ +

Markdown will turn this into:

+ +
<a href="http://example.com/">http://example.com/</a>
+
+ +

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:

+ +
<address@example.com>
+
+ +

into something like this:

+ +
<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>
+
+ +

which will render in a browser as a clickable link to "address@example.com".

+ +

(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.)

+ +

Backslash Escapes

+ +

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 <em> tag), you can backslashes +before the asterisks, like this:

+ +
\*literal asterisks\*
+
+ +

Markdown provides backslash escapes for the following characters:

+ +
\   backslash
+`   backtick
+*   asterisk
+_   underscore
+{}  curly braces
+[]  square brackets
+()  parentheses
+#   hash mark
++   plus sign
+-   minus sign (hyphen)
+.   dot
+!   exclamation mark
+
diff --git a/test/resources/markdown.mdtest/Nested blockquotes.text b/test/resources/markdown.mdtest/Nested blockquotes.text new file mode 100644 index 0000000..ed3c624 --- /dev/null +++ b/test/resources/markdown.mdtest/Nested blockquotes.text @@ -0,0 +1,5 @@ +> foo +> +> > bar +> +> foo diff --git a/test/resources/markdown.mdtest/Nested blockquotes.xhtml b/test/resources/markdown.mdtest/Nested blockquotes.xhtml new file mode 100644 index 0000000..d8ec7f8 --- /dev/null +++ b/test/resources/markdown.mdtest/Nested blockquotes.xhtml @@ -0,0 +1,9 @@ +
+

foo

+ +
+

bar

+
+ +

foo

+
diff --git a/test/resources/markdown.mdtest/Ordered and unordered lists.text b/test/resources/markdown.mdtest/Ordered and unordered lists.text new file mode 100644 index 0000000..7f3b497 --- /dev/null +++ b/test/resources/markdown.mdtest/Ordered and unordered lists.text @@ -0,0 +1,131 @@ +## 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 + +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 2. graf two. The quick brown fox jumped over the lazy dog's + back. + +2. Item 2. + +3. Item 3. + + + +## 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 + + +This was an error in Markdown 1.0.1: + +* this + + * sub + + that diff --git a/test/resources/markdown.mdtest/Ordered and unordered lists.xhtml b/test/resources/markdown.mdtest/Ordered and unordered lists.xhtml new file mode 100644 index 0000000..ba71eab --- /dev/null +++ b/test/resources/markdown.mdtest/Ordered and unordered lists.xhtml @@ -0,0 +1,148 @@ +

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

+ +

Tight:

+ +
    +
  1. First
  2. +
  3. Second
  4. +
  5. Third
  6. +
+ +

and:

+ +
    +
  1. One
  2. +
  3. Two
  4. +
  5. Three
  6. +
+ +

Loose using tabs:

+ +
    +
  1. First

  2. +
  3. Second

  4. +
  5. Third

  6. +
+ +

and using spaces:

+ +
    +
  1. One

  2. +
  3. Two

  4. +
  5. Three

  6. +
+ +

Multiple paragraphs:

+ +
    +
  1. Item 1, graf one.

    + +

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

  2. +
  3. Item 2.

  4. +
  5. Item 3.

  6. +
+ +

Nested

+ +
    +
  • Tab +
      +
    • Tab +
        +
      • Tab
      • +
    • +
  • +
+ +

Here's another:

+ +
    +
  1. First
  2. +
  3. Second: +
      +
    • Fee
    • +
    • Fie
    • +
    • Foe
    • +
  4. +
  5. Third
  6. +
+ +

Same thing but with paragraphs:

+ +
    +
  1. First

  2. +
  3. Second:

    + +
      +
    • Fee
    • +
    • Fie
    • +
    • Foe
    • +
  4. +
  5. Third

  6. +
+ + +

This was an error in Markdown 1.0.1:

+ +
    +
  • this

    + +
    • sub
    + +

    that

  • +
diff --git a/test/resources/markdown.mdtest/Strong and em together.text b/test/resources/markdown.mdtest/Strong and em together.text new file mode 100644 index 0000000..95ee690 --- /dev/null +++ b/test/resources/markdown.mdtest/Strong and em together.text @@ -0,0 +1,7 @@ +***This is strong and em.*** + +So is ***this*** word. + +___This is strong and em.___ + +So is ___this___ word. diff --git a/test/resources/markdown.mdtest/Strong and em together.xhtml b/test/resources/markdown.mdtest/Strong and em together.xhtml new file mode 100644 index 0000000..71ec78c --- /dev/null +++ b/test/resources/markdown.mdtest/Strong and em together.xhtml @@ -0,0 +1,7 @@ +

This is strong and em.

+ +

So is this word.

+ +

This is strong and em.

+ +

So is this word.

diff --git a/test/resources/markdown.mdtest/Tabs.text b/test/resources/markdown.mdtest/Tabs.text new file mode 100644 index 0000000..589d113 --- /dev/null +++ b/test/resources/markdown.mdtest/Tabs.text @@ -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 diff --git a/test/resources/markdown.mdtest/Tabs.xhtml b/test/resources/markdown.mdtest/Tabs.xhtml new file mode 100644 index 0000000..3301ba8 --- /dev/null +++ b/test/resources/markdown.mdtest/Tabs.xhtml @@ -0,0 +1,25 @@ +
    +
  • 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
+
diff --git a/test/resources/markdown.mdtest/Tidyness.text b/test/resources/markdown.mdtest/Tidyness.text new file mode 100644 index 0000000..5f18b8d --- /dev/null +++ b/test/resources/markdown.mdtest/Tidyness.text @@ -0,0 +1,5 @@ +> A list within a blockquote: +> +> * asterisk 1 +> * asterisk 2 +> * asterisk 3 diff --git a/test/resources/markdown.mdtest/Tidyness.xhtml b/test/resources/markdown.mdtest/Tidyness.xhtml new file mode 100644 index 0000000..f2a8ce7 --- /dev/null +++ b/test/resources/markdown.mdtest/Tidyness.xhtml @@ -0,0 +1,8 @@ +
+

A list within a blockquote:

+
    +
  • asterisk 1
  • +
  • asterisk 2
  • +
  • asterisk 3
  • +
+
diff --git a/test/resources/php-markdown-extra.mdtest/Abbr.text b/test/resources/php-markdown-extra.mdtest/Abbr.text new file mode 100644 index 0000000..ae72f4e --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Abbr.text @@ -0,0 +1,31 @@ +Some text about HTML, SGML and HTML4. + +Let's talk about the U.S.A., (É.U. or É.-U. d'A. in French). + +*[HTML4]: Hyper Text Markup Language version 4 +*[HTML]: Hyper Text Markup Language +*[SGML]: Standard Generalized Markup Language +*[U.S.A.]: United States of America +*[É.U.] : États-Unis d'Amérique +*[É.-U. d'A.] : États-Unis d'Amérique + +And here we have a CD, some CDs, and some other CD's. + +*[CD]: Compact Disk + +Let's transfert documents through TCP/IP, using TCP packets. + +*[IP]: Internet Protocol +*[TCP]: Transmission Control Protocol + + --- + +Bienvenue sur [CMS](http://www.bidulecms.com "Bidule CMS"). + +*[CMS]: Content Management System + + --- + +ATCCE + +*[ATCCE]: Abbreviation "Testing" Correct 'Character' < Escapes > \ No newline at end of file diff --git a/test/resources/php-markdown-extra.mdtest/Abbr.xhtml b/test/resources/php-markdown-extra.mdtest/Abbr.xhtml new file mode 100644 index 0000000..8beaa2e --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Abbr.xhtml @@ -0,0 +1,15 @@ +

Some text about HTML, SGML and HTML4.

+ +

Let's talk about the U.S.A., (É.U. or É.-U. d'A. in French).

+ +

And here we have a CD, some CDs, and some other CD's.

+ +

Let's transfert documents through TCP/IP, using TCP packets.

+ +
+ +

Bienvenue sur CMS.

+ +
+ +

ATCCE

diff --git a/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.text b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.text new file mode 100644 index 0000000..106a3ad --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.text @@ -0,0 +1,69 @@ +``` .html +
    +
  • Code block first in file
  • +
  • doesn't work under some circumstances
  • +
+``` + +As above: checking for bad interractions with the HTML block parser: + +``` html +
+``` + +Some *markdown* `formatting`. + +``` html +
+``` + +Some *markdown* + +``` +
+ +``` + +``` +function test(); +``` + +
+ + +</div> + +<div markdown="1"> +``` +<html> + <title> +``` +</div> + +Two code blocks with no blank line between them: + +``` +<div> +``` +``` +<div> +``` + +Testing *confusion* with code spans at the HTML block parser: + +``` +<div>```</div> +``` + +Testing mixing with title code blocks + +``` +<p>``` +~~~ +<p>``` +``` +~~~ +<p>``` +``` +<p>``` +~~~ diff --git a/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.xhtml b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.xhtml new file mode 100644 index 0000000..c66ec31 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks Special Cases.xhtml @@ -0,0 +1,61 @@ +<pre><code class="html"><ul> + <li>Code block first in file</li> + <li>doesn't work under some circumstances</li> +</ul> +</code></pre> + +<p>As above: checking for bad interractions with the HTML block parser:</p> + +<pre><code class="html"><div> +</code></pre> + +<p>Some <em>markdown</em><code>formatting</code>.</p> + +<pre><code class="html"></div> +</code></pre> + +<p>Some <em>markdown</em></p> + +<pre><code><div> + <html> +</code></pre> + +<pre><code>function test(); +</code></pre> + +<div> +<pre><code><html> + <title> +</code></pre> +</div> + +<div> +<pre><code><html> + <title> +</code></pre> +</div> + +<p>Two code blocks with no blank line between them:</p> + +<pre><code><div> +</code></pre> + +<pre><code><div> +</code></pre> + +<p>Testing <em>confusion</em> with code spans at the HTML block parser:</p> + +<pre><code><div>```</div> +</code></pre> + +<p>Testing mixing with title code blocks</p> + +<pre><code><p>``` +~~~ +<p>``` +</code></pre> + +<pre><code><p>``` +``` +<p>``` +</code></pre> diff --git a/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.text b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.text new file mode 100644 index 0000000..78b7fa4 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.text @@ -0,0 +1,123 @@ +``` +<Fenced> +``` + +Code block starting and ending with empty lines: +``` + + +<Fenced> + + +``` + +Indented code block containing fenced code block sample: + + ``` + <Fenced> + ``` + +Fenced code block with indented code block sample: + +``` +Some text + + Indented code block sample code +``` + +Fenced code block with long markers: + +`````````````````` +Fenced +`````````````````` + +Fenced code block with fenced code block markers of different length in it: + +```` +In code block +``` +Still in code block +````` +Still in code block +```` + +Fenced code block with Markdown header and horizontal rule: + +``` +#test +--- +``` + +Fenced code block with link definitions, footnote definition and +abbreviation definitions: + +``` +[example]: http://example.com/ + +[^1]: Footnote def + +*[HTML]: HyperText Markup Language +``` + +* In a list item with smalish indent: + + ````` + #!/bin/sh + # + # Preload driver binary + LD_PRELOAD=libusb-driver.so $0.bin $* + ````` + +With HTML content. + +````` +<b>bold</b> +````` + +Bug with block level elements in this case: +``` + <div> + </div> +``` + +Indented code block of a fenced code block: + + ``` + haha! + ``` + +With class: + +`````html +<b>bold</b> +````` + +````` html +<b>bold</b> +````` + +`````.html +<b>bold</b> +````` + +````` .html +<b>bold</b> +````` + +With extra attribute block: + +`````{.html} +<b>bold</b> +````` + +````` {.html #codeid} +<b>bold</b> +````` + +````` .html{.bold} +<div> +````` + +`````` .html {#codeid} +</div> +`````` \ No newline at end of file diff --git a/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.xhtml b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.xhtml new file mode 100644 index 0000000..ef23e1f --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Backtick Fenced Code Blocks.xhtml @@ -0,0 +1,109 @@ +<pre><code><Fenced> +</code></pre> + +<p>Code block starting and ending with empty lines:</p> + +<pre><code><br /><br /><Fenced> + + +</code></pre> + +<p>Indented code block containing fenced code block sample:</p> + +<pre><code>``` +<Fenced> +``` +</code></pre> + +<p>Fenced code block with indented code block sample:</p> + +<pre><code>Some text + + Indented code block sample code +</code></pre> + +<p>Fenced code block with long markers:</p> + +<pre><code>Fenced +</code></pre> + +<p>Fenced code block with fenced code block markers of different length in it:</p> + +<pre><code>In code block +``` +Still in code block +````` +Still in code block +</code></pre> + +<p>Fenced code block with Markdown header and horizontal rule:</p> + +<pre><code>#test +--- +</code></pre> + +<p>Fenced code block with link definitions, footnote definition and +abbreviation definitions:</p> + +<pre><code>[example]: http://example.com/ + +[^1]: Footnote def + +*[HTML]: HyperText Markup Language +</code></pre> + +<ul> +<li><p>In a list item with smalish indent:</p> + +<pre><code>#!/bin/sh +# +# Preload driver binary +LD_PRELOAD=libusb-driver.so $0.bin $* +</code></pre> +</li> +</ul> + +<p>With HTML content.</p> + +<pre><code><b>bold</b> +</code></pre> + +<p>Bug with block level elements in this case:</p> +<pre><code> <div> + </div> +</code></pre> + +<p>Indented code block of a fenced code block:</p> + +<pre><code>``` +haha! +``` +</code></pre> + +<p>With class:</p> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<p>With extra attribute block:</p> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html" id="codeid"><b>bold</b> +</code></pre> + +<pre><code class="html bold"><div> +</code></pre> + +<pre><code class="html" id="codeid"></div> +</code></pre> diff --git a/test/resources/php-markdown-extra.mdtest/Definition Lists.text b/test/resources/php-markdown-extra.mdtest/Definition Lists.text new file mode 100644 index 0000000..5b3bdb6 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Definition Lists.text @@ -0,0 +1,115 @@ +A simple definition list: + +Term 1 +: Definition 1 + +Term 2 +: Definition 2 + +With multiple terms: + +Term 1 +Term 2 +: Definition 1 + +Term 3 +Term 4 +: Definition 2 + +With multiple definitions: + +Term 1 +: Definition 1 +: Definition 2 + +Term 2 +: Definition 3 +: Definition 4 + +With multiple lines per definition: + +Term 1 +: Definition 1 line 1 ... +Definition 1 line 2 +: Definition 2 line 1 ... +Definition 2 line 2 + +Term 2 +: Definition 3 line 2 ... + Definition 3 line 2 +: Definition 4 line 2 ... + Definition 4 line 2 + +With paragraphs: + +Term 1 + +: Definition 1 (paragraph) + +Term 2 + +: Definition 2 (paragraph) + +With multiple paragraphs: + +Term 1 + +: Definition 1 paragraph 1 line 1 ... + Definition 1 paragraph 1 line 2 + + Definition 1 paragraph 2 line 1 ... + Definition 1 paragraph 2 line 2 + +Term 2 + +: Definition 1 paragraph 1 line 1 ... +Definition 1 paragraph 1 line 2 (lazy) + + Definition 1 paragraph 2 line 1 ... +Definition 1 paragraph 2 line 2 (lazy) + +* * * + +A mix: + +Term 1 +Term 2 + +: Definition 1 paragraph 1 line 1 ... +Definition 1 paragraph 1 line 2 (lazy) + + Definition 1 paragraph 2 line 1 ... + Definition 1 paragraph 2 line 2 + +: Definition 2 paragraph 1 line 1 ... +Definition 2 paragraph 1 line 2 (lazy) + +Term 3 +: Definition 3 (no paragraph) +: Definition 4 (no paragraph) +: Definition 5 line 1 ... + Definition 5 line 2 (no paragraph) + +: Definition 6 paragraph 1 line 1 ... +Definition 6 paragraph 1 line 2 +: Definition 7 (no paragraph) +: Definition 8 paragraph 1 line 1 (forced paragraph) ... + Definition 8 paragraph 1 line 2 + + Definition 8 paragraph 2 line 1 + +Term 4 +: Definition 9 paragraph 1 line 1 (forced paragraph) ... + Definition 9 paragraph 1 line 2 + + Definition 9 paragraph 2 line 1 +: Definition 10 (no paragraph) + +* * * + +Special cases: + +Term + +: code block + as first element of a definition \ No newline at end of file diff --git a/test/resources/php-markdown-extra.mdtest/Definition Lists.xhtml b/test/resources/php-markdown-extra.mdtest/Definition Lists.xhtml new file mode 100644 index 0000000..f99f456 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Definition Lists.xhtml @@ -0,0 +1,155 @@ +<p>A simple definition list:</p> + +<dl> +<dt>Term 1</dt> +<dd>Definition 1</dd> + +<dt>Term 2</dt> +<dd>Definition 2</dd> +</dl> + +<p>With multiple terms:</p> + +<dl> +<dt>Term 1</dt> +<dt>Term 2</dt> +<dd>Definition 1</dd> + +<dt>Term 3</dt> +<dt>Term 4</dt> +<dd>Definition 2</dd> +</dl> + +<p>With multiple definitions:</p> + +<dl> +<dt>Term 1</dt> +<dd>Definition 1</dd> + +<dd>Definition 2</dd> + +<dt>Term 2</dt> +<dd>Definition 3</dd> + +<dd>Definition 4</dd> +</dl> + +<p>With multiple lines per definition:</p> + +<dl> +<dt>Term 1</dt> +<dd>Definition 1 line 1 ... +Definition 1 line 2</dd> + +<dd>Definition 2 line 1 ... +Definition 2 line 2</dd> + +<dt>Term 2</dt> +<dd>Definition 3 line 2 ... +Definition 3 line 2</dd> + +<dd>Definition 4 line 2 ... +Definition 4 line 2</dd> +</dl> + +<p>With paragraphs:</p> + +<dl> +<dt>Term 1</dt> +<dd> +<p>Definition 1 (paragraph)</p> +</dd> + +<dt>Term 2</dt> +<dd> +<p>Definition 2 (paragraph)</p> +</dd> +</dl> + +<p>With multiple paragraphs:</p> + +<dl> +<dt>Term 1</dt> +<dd> +<p>Definition 1 paragraph 1 line 1 ... +Definition 1 paragraph 1 line 2</p> + +<p>Definition 1 paragraph 2 line 1 ... +Definition 1 paragraph 2 line 2</p> +</dd> + +<dt>Term 2</dt> +<dd> +<p>Definition 1 paragraph 1 line 1 ... +Definition 1 paragraph 1 line 2 (lazy)</p> + +<p>Definition 1 paragraph 2 line 1 ... +Definition 1 paragraph 2 line 2 (lazy)</p> +</dd> +</dl> + +<hr /> + +<p>A mix:</p> + +<dl> +<dt>Term 1</dt> +<dt>Term 2</dt> +<dd> +<p>Definition 1 paragraph 1 line 1 ... +Definition 1 paragraph 1 line 2 (lazy)</p> + +<p>Definition 1 paragraph 2 line 1 ... +Definition 1 paragraph 2 line 2</p> +</dd> + +<dd> +<p>Definition 2 paragraph 1 line 1 ... +Definition 2 paragraph 1 line 2 (lazy)</p> +</dd> + +<dt>Term 3</dt> +<dd>Definition 3 (no paragraph)</dd> + +<dd>Definition 4 (no paragraph)</dd> + +<dd>Definition 5 line 1 ... +Definition 5 line 2 (no paragraph)</dd> + +<dd> +<p>Definition 6 paragraph 1 line 1 ... +Definition 6 paragraph 1 line 2</p> +</dd> + +<dd>Definition 7 (no paragraph)</dd> + +<dd> +<p>Definition 8 paragraph 1 line 1 (forced paragraph) ... +Definition 8 paragraph 1 line 2</p> + +<p>Definition 8 paragraph 2 line 1</p> +</dd> + +<dt>Term 4</dt> +<dd> +<p>Definition 9 paragraph 1 line 1 (forced paragraph) ... +Definition 9 paragraph 1 line 2</p> + +<p>Definition 9 paragraph 2 line 1</p> +</dd> + +<dd>Definition 10 (no paragraph)</dd> +</dl> + +<hr /> + +<p>Special cases:</p> + +<dl> +<dt>Term</dt> +<dd> +<pre><code>code block +as first element of a definition +</code></pre> +</dd> +</dl> diff --git a/test/resources/php-markdown-extra.mdtest/Emphasis.text b/test/resources/php-markdown-extra.mdtest/Emphasis.text new file mode 100644 index 0000000..816859c --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Emphasis.text @@ -0,0 +1,100 @@ +Combined emphasis: + +1. ***test test*** +2. ___test test___ +3. *test **test*** +4. **test *test*** +5. ***test* test** +6. ***test** test* +7. ***test* test** +8. **test *test*** +9. *test **test*** +10. _test __test___ +11. __test _test___ +12. ___test_ test__ +13. ___test__ test_ +14. ___test_ test__ +15. __test _test___ +16. _test __test___ +17. *test __test__* +18. **test _test_** +19. **_test_ test** +20. *__test__ test* +21. **_test_ test** +22. **test _test_** +23. *test __test__* +24. _test **test**_ +25. __test *test*__ +26. __*test* test__ +27. _**test** test_ +28. __*test* test__ +29. __test *test*__ +30. _test **test**_ + + +Incorrect nesting: + +1. *test **test* test** +2. _test __test_ test__ +3. **test *test** test* +4. __test _test__ test_ +5. *test *test* test* +6. _test _test_ test_ +7. **test **test** test** +8. __test __test__ test__ +9. _**some text_** +10. *__some text*__ +11. **_some text**_ +12. *__some text*__ + +No emphasis: + +1. test* test *test +2. test** test **test +3. test_ test _test +4. test__ test __test + + + +Middle-word emphasis (asterisks): + +1. *a*b +2. a*b* +3. a*b*c +4. **a**b +5. a**b** +6. a**b**c + + +Middle-word emphasis (underscore): + +1. _a_b +2. a_b_ +3. a_b_c +4. __a__b +5. a__b__ +6. a__b__c + +my_precious_file.txt + + +## Tricky Cases + +E**. **Test** TestTestTest + +E**. **Test** Test Test Test + + +## Overlong emphasis + +Name: ____________ +Organization: ____ +Region/Country: __ + +_____Cut here_____ + +____Cut here____ + +# Regression + +_**Note**_: This _is emphasis_. diff --git a/test/resources/php-markdown-extra.mdtest/Emphasis.xhtml b/test/resources/php-markdown-extra.mdtest/Emphasis.xhtml new file mode 100644 index 0000000..315280f --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Emphasis.xhtml @@ -0,0 +1,106 @@ +<p>Combined emphasis:</p> + +<ol> +<li><strong><em>test test</em></strong></li> +<li><strong><em>test test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +</ol> + +<p>Incorrect nesting:</p> + +<ol> +<li>*test <strong>test* test</strong></li> +<li>_test <strong>test_ test</strong></li> +<li><strong>test *test</strong> test*</li> +<li><strong>test _test</strong> test_</li> +<li><em>test *test</em> test*</li> +<li><em>test _test</em> test_</li> +<li><strong>test **test</strong> test**</li> +<li><strong>test __test</strong> test__</li> +<li>_<strong>some text_</strong></li> +<li>*<strong>some text*</strong></li> +<li><strong>_some text</strong>_</li> +<li>*<strong>some text*</strong></li> +</ol> + +<p>No emphasis:</p> + +<ol> +<li>test* test *test</li> +<li>test** test **test</li> +<li>test_ test _test</li> +<li>test__ test __test</li> +</ol> + +<p>Middle-word emphasis (asterisks):</p> + +<ol> +<li><em>a</em>b</li> +<li>a<em>b</em></li> +<li>a<em>b</em>c</li> +<li><strong>a</strong>b</li> +<li>a<strong>b</strong></li> +<li>a<strong>b</strong>c</li> +</ol> + +<p>Middle-word emphasis (underscore):</p> + +<ol> +<li>_a_b</li> +<li>a_b_</li> +<li>a_b_c</li> +<li>__a__b</li> +<li>a__b__</li> +<li>a__b__c</li> +</ol> + +<p>my_precious_file.txt</p> + +<h2>Tricky Cases</h2> + +<p>E**. <strong>Test</strong> TestTestTest</p> + +<p>E**. <strong>Test</strong> Test Test Test</p> + + +<h2>Overlong emphasis</h2> + +<p>Name: ____________<br /> +Organization: ____<br /> +Region/Country: __</p> + +<p>_____Cut here_____</p> + +<p>____Cut here____</p> + + +<h1>Regression</h1> + +<p><em><strong>Note</strong></em>: This <em>is emphasis</em>.</p> \ No newline at end of file diff --git a/test/resources/php-markdown-extra.mdtest/Footnotes.text b/test/resources/php-markdown-extra.mdtest/Footnotes.text new file mode 100644 index 0000000..95b5ea8 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Footnotes.text @@ -0,0 +1,70 @@ +This is the first paragraph.[^first] + +[^first]: This is the first note. + +* List item one.[^second] +* List item two.[^third] + +[^third]: This is the third note, defined out of order. +[^second]: This is the second note. +[^fourth]: This is the fourth note. + +# Header[^fourth] + +Some paragraph with a footnote[^1], and another[^2]. + +[^1]: Content for fifth footnote. +[^2]: Content for sixth footnote spaning on + three lines, with some span-level markup like + _emphasis_, a [link][]. + +[link]: http://michelf.ca/ + +Another paragraph with a named footnote[^fn-name]. + +[^fn-name]: + Footnote beginning on the line next to the marker. + +This paragraph should not have a footnote marker since +the footnote is undefined.[^3] + +This paragraph has a second footnote marker to footnote number one.[^1] + +This paragraph links to a footnote with plenty of +block-level content.[^block] + +[^block]: + Paragraph. + + * List item + + > Blockquote + + Code block + +This paragraph host the footnote reference within a +footnote test[^reference]. + +[^reference]: + This footnote has a footnote of its own.[^nested] + +[^nested]: + This footnote should appear even though it is referenced + from another footnote. But [^reference] should be litteral + since the footnote with that name has already been used. + + - - - + +Testing unusual footnote name[^1$^!"']. + +[^1$^!"']: Haha! + + - - - + +Footnotes mixed with images[^image-mixed] +![1800 Travel][img6] +![1830 Travel][img7] + +[img6]: images/MGR-1800-travel.jpeg "Travel Speeds in 1800" +[^image-mixed]: Footnote Content +[img7]: images/MGR-1830-travel.jpeg "Travel Speeds in 1830" diff --git a/test/resources/php-markdown-extra.mdtest/Footnotes.xhtml b/test/resources/php-markdown-extra.mdtest/Footnotes.xhtml new file mode 100644 index 0000000..fe0a464 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Footnotes.xhtml @@ -0,0 +1,103 @@ +<p>This is the first paragraph.<sup id="fnref:first"><a href="#fn:first" class="footnote-ref" role="doc-noteref">1</a></sup></p> + +<ul> +<li>List item one.<sup id="fnref:second"><a href="#fn:second" class="footnote-ref" role="doc-noteref">2</a></sup></li> +<li>List item two.<sup id="fnref:third"><a href="#fn:third" class="footnote-ref" role="doc-noteref">3</a></sup></li> +</ul> + +<h1>Header<sup id="fnref:fourth"><a href="#fn:fourth" class="footnote-ref" role="doc-noteref">4</a></sup></h1> + +<p>Some paragraph with a footnote<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">5</a></sup>, and another<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">6</a></sup>.</p> + +<p>Another paragraph with a named footnote<sup id="fnref:fn-name"><a href="#fn:fn-name" class="footnote-ref" role="doc-noteref">7</a></sup>.</p> + +<p>This paragraph should not have a footnote marker since +the footnote is undefined.[^3]</p> + +<p>This paragraph has a second footnote marker to footnote number one.<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">5</a></sup></p> + +<p>This paragraph links to a footnote with plenty of +block-level content.<sup id="fnref:block"><a href="#fn:block" class="footnote-ref" role="doc-noteref">8</a></sup></p> + +<p>This paragraph host the footnote reference within a +footnote test<sup id="fnref:reference"><a href="#fn:reference" class="footnote-ref" role="doc-noteref">9</a></sup>.</p> + +<hr /> + +<p>Testing unusual footnote name<sup id="fnref:1$^!"'"><a href="#fn:1$^!"'" class="footnote-ref" role="doc-noteref">10</a></sup>.</p> + +<hr /> + +<p>Footnotes mixed with images<sup id="fnref:image-mixed"><a class="footnote-ref" role="doc-noteref" href="#fn:image-mixed">11</a></sup><img alt="1800 Travel" src="images/MGR-1800-travel.jpeg" title="Travel Speeds in 1800"/><img alt="1830 Travel" src="images/MGR-1830-travel.jpeg" title="Travel Speeds in 1830"/></p> + +<div class="footnotes" role="doc-endnotes"> +<hr /> +<ol> + +<li id="fn:first" role="doc-endnote"> +<p>This is the first note. <a href="#fnref:first" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:second" role="doc-endnote"> +<p>This is the second note. <a href="#fnref:second" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:third" role="doc-endnote"> +<p>This is the third note, defined out of order. <a href="#fnref:third" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:fourth" role="doc-endnote"> +<p>This is the fourth note. <a href="#fnref:fourth" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:1" role="doc-endnote"> +<p>Content for fifth footnote. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a> <a href="#fnref2:1" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:2" role="doc-endnote"> +<p>Content for sixth footnote spaning on +three lines, with some span-level markup like +<em>emphasis</em>, a <a href="http://michelf.ca/">link</a>. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:fn-name" role="doc-endnote"> +<p>Footnote beginning on the line next to the marker. <a href="#fnref:fn-name" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:block" role="doc-endnote"> +<p>Paragraph.</p> + +<ul> +<li>List item</li> +</ul> + +<blockquote> + <p>Blockquote</p> +</blockquote> + +<pre><code>Code block +</code></pre> + +<p><a href="#fnref:block" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:reference" role="doc-endnote"> +<p>This footnote has a footnote of its own.<sup id="fnref:nested"><a href="#fn:nested" class="footnote-ref" role="doc-noteref">12</a></sup> <a href="#fnref:reference" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:1$^!"'" role="doc-endnote"> +<p>Haha! <a href="#fnref:1$^!"'" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +<li id="fn:image-mixed" role="doc-endnote"> +<p>Footnote Content <a class="footnote-backref" role="doc-backlink" href="#fnref:image-mixed">↩︎</a></p> +</li> + +<li id="fn:nested" role="doc-endnote"> +<p>This footnote should appear even though it is referenced +from another footnote. But [^reference] should be litteral +since the footnote with that name has already been used. <a href="#fnref:nested" class="footnote-backref" role="doc-backlink">↩︎</a></p> +</li> + +</ol> +</div> diff --git a/test/resources/php-markdown-extra.mdtest/Headers with attributes.text b/test/resources/php-markdown-extra.mdtest/Headers with attributes.text new file mode 100644 index 0000000..4242136 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Headers with attributes.text @@ -0,0 +1,41 @@ +Header {#id1} +====== + +Header { #id2} +------ + +### Header {#id3 } +#### Header ## { #id4 } + + - - - + +Header {.cl} +====== + +Header { .cl} +------ + +### Header {.cl } +#### Header ## { .cl } + + - - - + +Header {.cl.class} +====== + +Header { .cl .class} +------ + +### Header {.cl .class } +#### Header ## { .cl.class } + + - - - + +Header {#id5.cl.class} +====== + +Header { #id6 .cl .class} +------ + +### Header {.cl.class#id7 } +#### Header ## { .cl.class#id8 } diff --git a/test/resources/php-markdown-extra.mdtest/Headers with attributes.xhtml b/test/resources/php-markdown-extra.mdtest/Headers with attributes.xhtml new file mode 100644 index 0000000..ce7139b --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Headers with attributes.xhtml @@ -0,0 +1,37 @@ +<h1 id="id1">Header</h1> + +<h2 id="id2">Header</h2> + +<h3 id="id3">Header</h3> + +<h4 id="id4">Header</h4> + +<hr /> + +<h1 class="cl">Header</h1> + +<h2 class="cl">Header</h2> + +<h3 class="cl">Header</h3> + +<h4 class="cl">Header</h4> + +<hr /> + +<h1 class="cl class">Header</h1> + +<h2 class="cl class">Header</h2> + +<h3 class="cl class">Header</h3> + +<h4 class="cl class">Header</h4> + +<hr /> + +<h1 class="cl class" id="id5">Header</h1> + +<h2 class="cl class" id="id6">Header</h2> + +<h3 class="cl class" id="id7">Header</h3> + +<h4 class="cl class" id="id8">Header</h4> diff --git a/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.text b/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.text new file mode 100644 index 0000000..b49b9b5 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.text @@ -0,0 +1,110 @@ +# Markdown inside code blocks + +<div markdown="1"> +foo +</div> + +<div markdown='1'> +foo +</div> + +<div markdown=1> +foo +</div> + +<table> +<tr><td markdown="1">test _emphasis_ (span)</td></tr> +</table> + +<table> +<tr><td markdown="span">test _emphasis_ (span)</td></tr> +</table> + +<table> +<tr><td markdown="block">test _emphasis_ (block)</td></tr> +</table> + +## More complicated + +<table> +<tr><td markdown="1"> +* this is _not_ a list item</td></tr> +<tr><td markdown="span"> +* this is _not_ a list item</td></tr> +<tr><td markdown="block"> +* this _is_ a list item +</td></tr> +</table> + +## With indent + +<div> + <div markdown="1"> + This text is no code block: if it was, the + closing `<div>` would be too and the HTML block + would be invalid. + + Markdown content in HTML blocks is assumed to be + indented the same as the block opening tag. + + **This should be the third paragraph after the header.** + </div> +</div> + +## Code block with rogue `</div>`s in Markdown code span and block + +<div> + <div markdown="1"> + + This is a code block however: + + </div> + + Funny isn't it? Here is a code span: `</div>`. + + </div> +</div> + +<div> + <div markdown="1"> + * List item, not a code block + +Some text + + This is a code block. + </div> +</div> + +## No code block in markdown span mode + +<p markdown="1"> + This is not a code block since Markdown parse paragraph + content as span. Code spans like `</p>` are allowed though. +</p> + +<p markdown="1">_Hello_ _world_</p> + +<p markdown="1" class="poem"> +line 1 +line 2 +line 3 +</p> + +## Preserving attributes and tags on more than one line: + +<p class="test" markdown="1" +id="12"> +Some _span_ content. +</p> + + +## Header confusion bug + +<table class="canvas"> +<tr> +<td id="main" markdown="1">Hello World! +============ + +Hello World!</td> +</tr> +</table> diff --git a/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.xhtml b/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.xhtml new file mode 100644 index 0000000..06a1fca --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Inline HTML with Markdown content.xhtml @@ -0,0 +1,131 @@ +<h1>Markdown inside code blocks</h1> + +<div> + +<p>foo</p> + +</div> + +<div> + +<p>foo</p> + +</div> + +<div> + +<p>foo</p> + +</div> + +<table> +<tr><td>test <em>emphasis</em> (span)</td></tr> +</table> + +<table> +<tr><td>test <em>emphasis</em> (span)</td></tr> +</table> + +<table> +<tr><td> + +<p>test <em>emphasis</em> (block)</p> + +</td></tr> +</table> + +<h2>More complicated</h2> + +<table> +<tr><td> +* this is <em>not</em> a list item</td></tr> +<tr><td> +* this is <em>not</em> a list item</td></tr> +<tr><td> + +<ul> +<li>this <em>is</em> a list item</li> +</ul> + +</td></tr> +</table> + +<h2>With indent</h2> + +<div> + <div> + +<p>This text is no code block: if it was, the +closing <code><div></code> would be too and the HTML block +would be invalid.</p> + +<p>Markdown content in HTML blocks is assumed to be +indented the same as the block opening tag.</p> + +<p><strong>This should be the third paragraph after the header.</strong></p> + +</div> +</div> + +<h2>Code block with rogue <code></div></code>s in Markdown code span and block</h2> + +<div> + <div> + +<p>This is a code block however:</p> + +<pre><code></div> +</code></pre> + +<p>Funny isn't it? Here is a code span: <code></div></code>.</p> + +</div> +</div> + +<div> + <div> + +<ul> +<li>List item, not a code block</li> +</ul> + +<p>Some text</p> + +<pre><code>This is a code block. +</code></pre> + +</div> +</div> + +<h2>No code block in markdown span mode</h2> + +<p> + This is not a code block since Markdown parse paragraph + content as span. Code spans like <code></p></code> are allowed though. +</p> + +<p><em>Hello</em> <em>world</em></p> + +<p class="poem"> +line 1<br /> +line 2<br /> +line 3 +</p> + +<h2>Preserving attributes and tags on more than one line:</h2> + +<p class="test" +id="12"> +Some <em>span</em> content. +</p> + +<h2>Header confusion bug</h2> + +<table class="canvas"> +<tr> +<td id="main">Hello World! +============ + +Hello World!</td> +</tr> +</table> diff --git a/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.text b/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.text new file mode 100644 index 0000000..ee9b729 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.text @@ -0,0 +1,10 @@ +This is an [inline link](/url "title"){.class #inline-link}. + +This is a [reference link][refid]. + +This is an ![inline image](/img "title"){.class #inline-img}. + +This is a ![reference image][refid]. + +[refid]: /path/to/something (Title) { .class #ref data-key=val } + diff --git a/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.xhtml b/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.xhtml new file mode 100644 index 0000000..a59c0a4 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Link & Image Attributes.xhtml @@ -0,0 +1,8 @@ +<p>This is an <a href="/url" title="title" class="class" id="inline-link">inline link</a>.</p> + +<p>This is a <a href="/path/to/something" title="Title" class="class" id="ref" data-key="val">reference link</a>.</p> + +<p>This is an <img alt="inline image" src="/img" title="title" class="class" id="inline-img" />.</p> + +<p>This is a <img alt="reference image" src="/path/to/something" title="Title" class="class" id="ref" data-key="val" />.</p> + diff --git a/test/resources/php-markdown-extra.mdtest/Tables.text b/test/resources/php-markdown-extra.mdtest/Tables.text new file mode 100644 index 0000000..d60daac --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tables.text @@ -0,0 +1,113 @@ +# Simple tables + +Header 1 | Header 2 +--------- | --------- +Cell 1 | Cell 2 +Cell 3 | Cell 4 + +With leading pipes: + +| Header 1 | Header 2 +| --------- | --------- +| Cell 1 | Cell 2 +| Cell 3 | Cell 4 + +With tailing pipes: + +Header 1 | Header 2 | +--------- | --------- | +Cell 1 | Cell 2 | +Cell 3 | Cell 4 | + +With leading and tailing pipes: + +| Header 1 | Header 2 | +| --------- | --------- | +| Cell 1 | Cell 2 | +| Cell 3 | Cell 4 | + +* * * + +# One-column one-row table + +With leading pipes: + +| Header +| ------- +| Cell + +With tailing pipes: + +Header | +------- | +Cell | + +With leading and tailing pipes: + +| Header | +| ------- | +| Cell | + +* * * + +Table alignement: + +| Default | Right | Center | Left | +| --------- |:--------- |:---------:| ---------:| +| Long Cell | Long Cell | Long Cell | Long Cell | +| Cell | Cell | Cell | Cell | + +Table alignement (alternate spacing): + +| Default | Right | Center | Left | +| --------- | :-------- | :-------: | --------: | +| Long Cell | Long Cell | Long Cell | Long Cell | +| Cell | Cell | Cell | Cell | + +* * * + +# Empty cells + +| Header 1 | Header 2 | +| --------- | --------- | +| A | B | +| C | | + +Header 1 | Header 2 +--------- | --------- +A | B + | D + +* * * + +# Missing tailing pipe + +Header 1 | Header 2 +--------- | --------- | +Cell | Cell | +Cell | Cell | + +Header 1 | Header 2 | +--------- | --------- +Cell | Cell | +Cell | Cell | + +Header 1 | Header 2 | +--------- | --------- | +Cell | Cell +Cell | Cell | + +Header 1 | Header 2 | +--------- | --------- | +Cell | Cell | +Cell | Cell + +* * * + +# Too many pipes in rows + +| Header 1 | Header 2 | +| --------- +| Cell | Cell | Extra cell? | +| Cell | Cell | Extra cell? | + diff --git a/test/resources/php-markdown-extra.mdtest/Tables.xhtml b/test/resources/php-markdown-extra.mdtest/Tables.xhtml new file mode 100644 index 0000000..87fe8b3 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tables.xhtml @@ -0,0 +1,333 @@ +<h1>Simple tables</h1> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell 1</td> + <td>Cell 2</td> +</tr> +<tr> + <td>Cell 3</td> + <td>Cell 4</td> +</tr> +</tbody> +</table> + +<p>With leading pipes:</p> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell 1</td> + <td>Cell 2</td> +</tr> +<tr> + <td>Cell 3</td> + <td>Cell 4</td> +</tr> +</tbody> +</table> + +<p>With tailing pipes:</p> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell 1</td> + <td>Cell 2</td> +</tr> +<tr> + <td>Cell 3</td> + <td>Cell 4</td> +</tr> +</tbody> +</table> + +<p>With leading and tailing pipes:</p> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell 1</td> + <td>Cell 2</td> +</tr> +<tr> + <td>Cell 3</td> + <td>Cell 4</td> +</tr> +</tbody> +</table> + +<hr /> + +<h1>One-column one-row table</h1> + +<p>With leading pipes:</p> + +<table> +<thead> +<tr> + <th>Header</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> +</tr> +</tbody> +</table> + +<p>With tailing pipes:</p> + +<table> +<thead> +<tr> + <th>Header</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> +</tr> +</tbody> +</table> + +<p>With leading and tailing pipes:</p> + +<table> +<thead> +<tr> + <th>Header</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> +</tr> +</tbody> +</table> + +<hr /> + +<p>Table alignement:</p> + +<table> +<thead> +<tr> + <th>Default</th> + <th align="left">Right</th> + <th align="center">Center</th> + <th align="right">Left</th> +</tr> +</thead> +<tbody> +<tr> + <td>Long Cell</td> + <td align="left">Long Cell</td> + <td align="center">Long Cell</td> + <td align="right">Long Cell</td> +</tr> +<tr> + <td>Cell</td> + <td align="left">Cell</td> + <td align="center">Cell</td> + <td align="right">Cell</td> +</tr> +</tbody> +</table> + +<p>Table alignement (alternate spacing):</p> + +<table> +<thead> +<tr> + <th>Default</th> + <th align="left">Right</th> + <th align="center">Center</th> + <th align="right">Left</th> +</tr> +</thead> +<tbody> +<tr> + <td>Long Cell</td> + <td align="left">Long Cell</td> + <td align="center">Long Cell</td> + <td align="right">Long Cell</td> +</tr> +<tr> + <td>Cell</td> + <td align="left">Cell</td> + <td align="center">Cell</td> + <td align="right">Cell</td> +</tr> +</tbody> +</table> + +<hr /> + +<h1>Empty cells</h1> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>A</td> + <td>B</td> +</tr> +<tr> + <td>C</td> + <td></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>A</td> + <td>B</td> +</tr> +<tr> + <td></td> + <td>D</td> +</tr> +</tbody> +</table> + +<hr /> + +<h1>Missing tailing pipe</h1> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +<tr> + <td>Cell</td> + <td>Cell</td> +</tr> +</tbody> +</table> + +<hr /> + +<h1>Too many pipes in rows</h1> + +<table> +<thead> +<tr> + <th>Header 1</th> + <th>Header 2</th> +</tr> +</thead> +<tbody> +<tr> + <td>Cell</td> + <td>Cell | Extra cell?</td> +</tr> +<tr> + <td>Cell</td> + <td>Cell | Extra cell?</td> +</tr> +</tbody> +</table> diff --git a/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.text b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.text new file mode 100644 index 0000000..01504a4 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.text @@ -0,0 +1,69 @@ +~~~ .html +<ul> + <li>Code block first in file</li> + <li>doesn't work under some circumstances</li> +</ul> +~~~ + +As above: checking for bad interractions with the HTML block parser: + +~~~ html +<div> +~~~ + +Some *markdown* `formatting`. + +~~~ html +</div> +~~~ + +Some *markdown* + +~~~ +<div> + <html> +~~~ + +~~~ +function test(); +~~~ + +<div markdown="1"> + <html> + <title> +</div> + +<div markdown="1"> +~~~ +<html> + <title> +~~~ +</div> + +Two code blocks with no blank line between them: + +~~~ +<div> +~~~ +~~~ +<div> +~~~ + +Testing *confusion* with markers in the middle: + +~~~ +<div>~~~</div> +~~~ + +Testing mixing with title code blocks + +~~~ +<p>``` +``` +<p>``` +~~~ +``` +<p>``` +~~~ +<p>``` +``` diff --git a/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.xhtml b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.xhtml new file mode 100644 index 0000000..0eabd27 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks Special Cases.xhtml @@ -0,0 +1,61 @@ +<pre><code class="html"><ul> + <li>Code block first in file</li> + <li>doesn't work under some circumstances</li> +</ul> +</code></pre> + +<p>As above: checking for bad interractions with the HTML block parser:</p> + +<pre><code class="html"><div> +</code></pre> + +<p>Some <em>markdown</em><code>formatting</code>.</p> + +<pre><code class="html"></div> +</code></pre> + +<p>Some <em>markdown</em></p> + +<pre><code><div> + <html> +</code></pre> + +<pre><code>function test(); +</code></pre> + +<div> +<pre><code><html> + <title> +</code></pre> +</div> + +<div> +<pre><code><html> + <title> +</code></pre> +</div> + +<p>Two code blocks with no blank line between them:</p> + +<pre><code><div> +</code></pre> + +<pre><code><div> +</code></pre> + +<p>Testing <em>confusion</em> with markers in the middle:</p> + +<pre><code><div>~~~</div> +</code></pre> + +<p>Testing mixing with title code blocks</p> + +<pre><code><p>``` +``` +<p>``` +</code></pre> + +<pre><code><p>``` +~~~ +<p>``` +</code></pre> diff --git a/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.text b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.text new file mode 100644 index 0000000..e0d5730 --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.text @@ -0,0 +1,123 @@ +~~~ +<Fenced> +~~~ + +Code block starting and ending with empty lines: +~~~ + + +<Fenced> + + +~~~ + +Indented code block containing fenced code block sample: + + ~~~ + <Fenced> + ~~~ + +Fenced code block with indented code block sample: + +~~~ +Some text + + Indented code block sample code +~~~ + +Fenced code block with long markers: + +~~~~~~~~~~~~~~~~~~ +Fenced +~~~~~~~~~~~~~~~~~~ + +Fenced code block with fenced code block markers of different length in it: + +~~~~ +In code block +~~~ +Still in code block +~~~~~ +Still in code block +~~~~ + +Fenced code block with Markdown header and horizontal rule: + +~~~ +#test +--- +~~~ + +Fenced code block with link definitions, footnote definition and +abbreviation definitions: + +~~~ +[example]: http://example.com/ + +[^1]: Footnote def + +*[HTML]: HyperText Markup Language +~~~ + +* In a list item with smalish indent: + + ~~~~~ + #!/bin/sh + # + # Preload driver binary + LD_PRELOAD=libusb-driver.so $0.bin $* + ~~~~~ + +With HTML content. + +~~~~~ +<b>bold</b> +~~~~~ + +Bug with block level elements in this case: +~~~ + <div> + </div> +~~~ + +Indented code block of a fenced code block: + + ~~~ + haha! + ~~~ + +With class: + +~~~~~html +<b>bold</b> +~~~~~ + +~~~~~ html +<b>bold</b> +~~~~~ + +~~~~~.html +<b>bold</b> +~~~~~ + +~~~~~ .html +<b>bold</b> +~~~~~ + +With extra attribute block: + +~~~~~{.html} +<b>bold</b> +~~~~~ + +~~~~~ {.html #codeid} +<b>bold</b> +~~~~~ + +~~~~~ .html{.bold} +<div> +~~~~~ + +~~~~~ .html {#codeid} +</div> +~~~~~ \ No newline at end of file diff --git a/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.xhtml b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.xhtml new file mode 100644 index 0000000..e065a4d --- /dev/null +++ b/test/resources/php-markdown-extra.mdtest/Tilde Fenced Code Blocks.xhtml @@ -0,0 +1,109 @@ +<pre><code><Fenced> +</code></pre> + +<p>Code block starting and ending with empty lines:</p> + +<pre><code><br /><br /><Fenced> + + +</code></pre> + +<p>Indented code block containing fenced code block sample:</p> + +<pre><code>~~~ +<Fenced> +~~~ +</code></pre> + +<p>Fenced code block with indented code block sample:</p> + +<pre><code>Some text + + Indented code block sample code +</code></pre> + +<p>Fenced code block with long markers:</p> + +<pre><code>Fenced +</code></pre> + +<p>Fenced code block with fenced code block markers of different length in it:</p> + +<pre><code>In code block +~~~ +Still in code block +~~~~~ +Still in code block +</code></pre> + +<p>Fenced code block with Markdown header and horizontal rule:</p> + +<pre><code>#test +--- +</code></pre> + +<p>Fenced code block with link definitions, footnote definition and +abbreviation definitions:</p> + +<pre><code>[example]: http://example.com/ + +[^1]: Footnote def + +*[HTML]: HyperText Markup Language +</code></pre> + +<ul> +<li><p>In a list item with smalish indent:</p> + +<pre><code>#!/bin/sh +# +# Preload driver binary +LD_PRELOAD=libusb-driver.so $0.bin $* +</code></pre> +</li> +</ul> + +<p>With HTML content.</p> + +<pre><code><b>bold</b> +</code></pre> + +<p>Bug with block level elements in this case:</p> +<pre><code> <div> + </div> +</code></pre> + +<p>Indented code block of a fenced code block:</p> + +<pre><code>~~~ +haha! +~~~ +</code></pre> + +<p>With class:</p> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<p>With extra attribute block:</p> + +<pre><code class="html"><b>bold</b> +</code></pre> + +<pre><code class="html" id="codeid"><b>bold</b> +</code></pre> + +<pre><code class="html bold"><div> +</code></pre> + +<pre><code class="html" id="codeid"></div> +</code></pre> diff --git a/test/resources/php-markdown.mdtest/Adjacent Lists.text b/test/resources/php-markdown.mdtest/Adjacent Lists.text new file mode 100644 index 0000000..21876d3 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Adjacent Lists.text @@ -0,0 +1,10 @@ +* one +* two + +1. three +2. four + +* one +* two +1. three +2. four \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Adjacent Lists.xhtml b/test/resources/php-markdown.mdtest/Adjacent Lists.xhtml new file mode 100644 index 0000000..ee7dfd8 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Adjacent Lists.xhtml @@ -0,0 +1,19 @@ +<ul> +<li>one</li> +<li>two</li> +</ul> + +<ol> +<li>three</li> +<li>four</li> +</ol> + +<ul> +<li>one</li> +<li>two</li> +</ul> + +<ol> +<li>three</li> +<li>four</li> +</ol> diff --git a/test/resources/php-markdown.mdtest/Auto Links.text b/test/resources/php-markdown.mdtest/Auto Links.text new file mode 100644 index 0000000..4b10d32 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Auto Links.text @@ -0,0 +1,3 @@ +<HTTP://WWW.SOMEURL.COM> + +<hr@company.com> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Auto Links.xhtml b/test/resources/php-markdown.mdtest/Auto Links.xhtml new file mode 100644 index 0000000..259c47f --- /dev/null +++ b/test/resources/php-markdown.mdtest/Auto Links.xhtml @@ -0,0 +1,3 @@ +<p><a href="HTTP://WWW.SOMEURL.COM">HTTP://WWW.SOMEURL.COM</a></p> + +<p><a href="mailto:hr@company.com">hr@company.com</a></p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Backslash escapes.text b/test/resources/php-markdown.mdtest/Backslash escapes.text new file mode 100644 index 0000000..a5e769b --- /dev/null +++ b/test/resources/php-markdown.mdtest/Backslash escapes.text @@ -0,0 +1 @@ +Tricky combinaisons: backslash with \\-- two dashes backslash with \\> greater than \\\[test](not a link) \\\*no emphasis* \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Backslash escapes.xhtml b/test/resources/php-markdown.mdtest/Backslash escapes.xhtml new file mode 100644 index 0000000..08fb8ef --- /dev/null +++ b/test/resources/php-markdown.mdtest/Backslash escapes.xhtml @@ -0,0 +1 @@ +<p>Tricky combinaisons:</p> <p>backslash with \-- two dashes</p> <p>backslash with \> greater than</p> <p>\[test](not a link)</p> <p>\*no emphasis*</p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Code Spans.text b/test/resources/php-markdown.mdtest/Code Spans.text new file mode 100644 index 0000000..43f2bcf --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code Spans.text @@ -0,0 +1,6 @@ +From `<!--` to `-->` +on two lines. + +From `<!--` +to `-->` +on three lines. diff --git a/test/resources/php-markdown.mdtest/Code Spans.xhtml b/test/resources/php-markdown.mdtest/Code Spans.xhtml new file mode 100644 index 0000000..9ed0df8 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code Spans.xhtml @@ -0,0 +1,6 @@ +<p>From <code><!--</code> to <code>--></code> +on two lines.</p> + +<p>From <code><!--</code> +to <code>--></code> +on three lines.</p> diff --git a/test/resources/php-markdown.mdtest/Code block in a list item.text b/test/resources/php-markdown.mdtest/Code block in a list item.text new file mode 100644 index 0000000..5093348 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block in a list item.text @@ -0,0 +1,15 @@ + +* List Item: + + code block + + with a blank line + + within a list item. + +* code block + as first element of a list item + +* List Item: + + code block with whitespace on preceding line \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Code block in a list item.xhtml b/test/resources/php-markdown.mdtest/Code block in a list item.xhtml new file mode 100644 index 0000000..361c1ae --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block in a list item.xhtml @@ -0,0 +1,18 @@ +<ul> +<li><p>List Item:</p> + +<pre><code>code block + +with a blank line +</code></pre> + +<p>within a list item.</p></li> +<li><pre><code>code block +as first element of a list item +</code></pre></li> + +<li><p>List Item:</p> + +<pre><code>code block with whitespace on preceding line +</code></pre></li> +</ul> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Code block on second line.text b/test/resources/php-markdown.mdtest/Code block on second line.text new file mode 100644 index 0000000..b7fcd97 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block on second line.text @@ -0,0 +1,2 @@ + + Codeblock on second line diff --git a/test/resources/php-markdown.mdtest/Code block on second line.xhtml b/test/resources/php-markdown.mdtest/Code block on second line.xhtml new file mode 100644 index 0000000..25abb16 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block on second line.xhtml @@ -0,0 +1,2 @@ +<pre><code>Codeblock on second line +</code></pre> diff --git a/test/resources/php-markdown.mdtest/Code block regressions.text b/test/resources/php-markdown.mdtest/Code block regressions.text new file mode 100644 index 0000000..7728142 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block regressions.text @@ -0,0 +1,15 @@ + <?php + echo "hello!"; + ?> + +foo `bar` + + <?php + echo "hello!"; + +lorem ipsum + + echo "hello!"; + ?> + +lorem ipsum \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Code block regressions.xhtml b/test/resources/php-markdown.mdtest/Code block regressions.xhtml new file mode 100644 index 0000000..41234de --- /dev/null +++ b/test/resources/php-markdown.mdtest/Code block regressions.xhtml @@ -0,0 +1,18 @@ +<pre><code><?php +echo "hello!"; +?> +</code></pre> + +<p>foo <code>bar</code></p> + +<pre><code><?php +echo "hello!"; +</code></pre> + +<p>lorem ipsum</p> + +<pre><code>echo "hello!"; +?> +</code></pre> + +<p>lorem ipsum</p> diff --git a/test/resources/php-markdown.mdtest/Email auto links.text b/test/resources/php-markdown.mdtest/Email auto links.text new file mode 100644 index 0000000..592e7d5 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Email auto links.text @@ -0,0 +1,24 @@ +<michel.fortin@michelf.ca> + +International domain names: <help@tūdaliņ.lv> + + +## Some weird valid email addresses + +<abc.123@example.com> + +<1234567890@example.com> + +<_______@example.com> + +<abc+mailbox/department=shipping@example.com> + +<!#$%&'*+-/=?^_`.{|}~@example.com> (all of these characters are allowed) + +<"abc@def"@example.com> (anything goes inside quotation marks) + +<"Fred Bloggs"@example.com> + +<jsmith@[192.0.2.1]> + +<"A"@example.com> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Email auto links.xhtml b/test/resources/php-markdown.mdtest/Email auto links.xhtml new file mode 100644 index 0000000..2994823 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Email auto links.xhtml @@ -0,0 +1,23 @@ +<p><a href="mailto:michel.fortin@michelf.ca">michel.fortin@michelf.ca</a></p> + +<p>International domain names: <a href="mailto:help@tūdaliņ.lv">help@tūdaliņ.lv</a></p> + +<h2>Some weird valid email addresses</h2> + +<p><a href="mailto:abc.123@example.com">abc.123@example.com</a></p> + +<p><a href="mailto:1234567890@example.com">1234567890@example.com</a></p> + +<p><a href="mailto:_______@example.com">_______@example.com</a></p> + +<p><a href="mailto:abc+mailbox/department=shipping@example.com">abc+mailbox/department=shipping@example.com</a></p> + +<p><a href="mailto:!#$%&'*+-/=?^_`.{|}~@example.com">!#$%&'*+-/=?^_`.{|}~@example.com</a> (all of these characters are allowed)</p> + +<p><a href="mailto:"abc@def"@example.com">"abc@def"@example.com</a> (anything goes inside quotation marks)</p> + +<p><a href="mailto:"Fred Bloggs"@example.com">"Fred Bloggs"@example.com</a></p> + +<p><a href="mailto:jsmith@[192.0.2.1]">jsmith@[192.0.2.1]</a></p> + +<p><a href="mailto:"A"@example.com">"A"@example.com</a></p> diff --git a/test/resources/php-markdown.mdtest/Emphasis.text b/test/resources/php-markdown.mdtest/Emphasis.text new file mode 100644 index 0000000..ff144b8 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Emphasis.text @@ -0,0 +1,101 @@ +Combined emphasis: + +1. ***test test*** +2. ___test test___ +3. *test **test*** +4. **test *test*** +5. ***test* test** +6. ***test** test* +7. ***test* test** +8. **test *test*** +9. *test **test*** +10. _test __test___ +11. __test _test___ +12. ___test_ test__ +13. ___test__ test_ +14. ___test_ test__ +15. __test _test___ +16. _test __test___ +17. *test __test__* +18. **test _test_** +19. **_test_ test** +20. *__test__ test* +21. **_test_ test** +22. **test _test_** +23. *test __test__* +24. _test **test**_ +25. __test *test*__ +26. __*test* test__ +27. _**test** test_ +28. __*test* test__ +29. __test *test*__ +30. _test **test**_ + + +Incorrect nesting: + +1. *test **test* test** +2. _test __test_ test__ +3. **test *test** test* +4. __test _test__ test_ +5. *test *test* test* +6. _test _test_ test_ +7. **test **test** test** +8. __test __test__ test__ +9. _**some text_** +10. *__some text*__ +11. **_some text**_ +12. *__some text*__ + + +No emphasis: + +1. test* test *test +2. test** test **test +3. test_ test _test +4. test__ test __test + + + +Middle-word emphasis (asterisks): + +1. *a*b +2. a*b* +3. a*b*c +4. **a**b +5. a**b** +6. a**b**c + + +Middle-word emphasis (underscore): + +1. _a_b +2. a_b_ +3. a_b_c +4. __a__b +5. a__b__ +6. a__b__c + +my_precious_file.txt + + +## Tricky Cases + +E**. **Test** TestTestTest + +E**. **Test** Test Test Test + + +## Overlong emphasis + +Name: ____________ +Organization: ____ +Region/Country: __ + +_____Cut here_____ + +____Cut here____ + +# Regression + +_**Note**_: This _is emphasis_. diff --git a/test/resources/php-markdown.mdtest/Emphasis.xhtml b/test/resources/php-markdown.mdtest/Emphasis.xhtml new file mode 100644 index 0000000..8be015f --- /dev/null +++ b/test/resources/php-markdown.mdtest/Emphasis.xhtml @@ -0,0 +1,105 @@ +<p>Combined emphasis:</p> + +<ol> +<li><strong><em>test test</em></strong></li> +<li><strong><em>test test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +<li><em>test <strong>test</strong></em></li> +<li><strong>test <em>test</em></strong></li> +<li><strong><em>test</em> test</strong></li> +<li><em><strong>test</strong> test</em></li> +<li><strong><em>test</em> test</strong></li> +<li><strong>test <em>test</em></strong></li> +<li><em>test <strong>test</strong></em></li> +</ol> + +<p>Incorrect nesting:</p> + +<ol> +<li>*test <strong>test* test</strong></li> +<li>_test <strong>test_ test</strong></li> +<li><strong>test *test</strong> test*</li> +<li><strong>test _test</strong> test_</li> +<li><em>test *test</em> test*</li> +<li><em>test _test</em> test_</li> +<li><strong>test **test</strong> test**</li> +<li><strong>test __test</strong> test__</li> +<li>_<strong>some text_</strong></li> +<li>*<strong>some text*</strong></li> +<li><strong>_some text</strong>_</li> +<li>*<strong>some text*</strong></li> +</ol> + +<p>No emphasis:</p> + +<ol> +<li>test* test *test</li> +<li>test** test **test</li> +<li>test_ test _test</li> +<li>test__ test __test</li> +</ol> + +<p>Middle-word emphasis (asterisks):</p> + +<ol> +<li><em>a</em>b</li> +<li>a<em>b</em></li> +<li>a<em>b</em>c</li> +<li><strong>a</strong>b</li> +<li>a<strong>b</strong></li> +<li>a<strong>b</strong>c</li> +</ol> + +<p>Middle-word emphasis (underscore):</p> + +<ol> +<li><em>a</em>b</li> +<li>a<em>b</em></li> +<li>a<em>b</em>c</li> +<li><strong>a</strong>b</li> +<li>a<strong>b</strong></li> +<li>a<strong>b</strong>c</li> +</ol> + +<p>my<em>precious</em>file.txt</p> + +<h2>Tricky Cases</h2> + +<p>E**. <strong>Test</strong> TestTestTest</p> + +<p>E**. <strong>Test</strong> Test Test Test</p> + + +<h2>Overlong emphasis</h2> + +<p>Name: ____________<br /> +Organization: ____<br /> +Region/Country: __</p> + +<p>_____Cut here_____</p> + +<p>____Cut here____</p> + +<h1>Regression</h1> + +<p><em><strong>Note</strong></em>: This <em>is emphasis</em>.</p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Empty List Item.text b/test/resources/php-markdown.mdtest/Empty List Item.text new file mode 100644 index 0000000..3c4edba --- /dev/null +++ b/test/resources/php-markdown.mdtest/Empty List Item.text @@ -0,0 +1,35 @@ +With asterisks + + * List item + * + * List item + +With numbers + +1. List item +2. +3. List item + +With hyphens + +- List item +- +- List item + +With asterisks + + * List item + * List item + * + +With numbers + +1. List item +2. List item +3. + +With hyphens + +- List item +- List item +- diff --git a/test/resources/php-markdown.mdtest/Empty List Item.xhtml b/test/resources/php-markdown.mdtest/Empty List Item.xhtml new file mode 100644 index 0000000..02d86ed --- /dev/null +++ b/test/resources/php-markdown.mdtest/Empty List Item.xhtml @@ -0,0 +1,47 @@ +<p>With asterisks</p> + +<ul> +<li>List item</li> +<li></li> +<li>List item</li> +</ul> + +<p>With numbers</p> + +<ol> +<li>List item</li> +<li></li> +<li>List item</li> +</ol> + +<p>With hyphens</p> + +<ul> +<li>List item</li> +<li></li> +<li>List item</li> +</ul> + +<p>With asterisks</p> + +<ul> +<li>List item</li> +<li>List item</li> +<li></li> +</ul> + +<p>With numbers</p> + +<ol> +<li>List item</li> +<li>List item</li> +<li></li> +</ol> + +<p>With hyphens</p> + +<ul> +<li>List item</li> +<li>List item</li> +<li></li> +</ul> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Headers.text b/test/resources/php-markdown.mdtest/Headers.text new file mode 100644 index 0000000..3a39174 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Headers.text @@ -0,0 +1,9 @@ +Header ====== Header ------ ### Header + + - - - + +Header ====== Paragraph Header ------ Paragraph ### Header Paragraph + + - - - + +Paragraph Header ====== Paragraph Paragraph Header ------ Paragraph Paragraph ### Header Paragraph \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Headers.xhtml b/test/resources/php-markdown.mdtest/Headers.xhtml new file mode 100644 index 0000000..3adb470 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Headers.xhtml @@ -0,0 +1,39 @@ +<h1>Header</h1> + +<h2>Header</h2> + +<h3>Header</h3> + +<hr /> + +<h1>Header</h1> + +<p>Paragraph</p> + +<h2>Header</h2> + +<p>Paragraph</p> + +<h3>Header</h3> + +<p>Paragraph</p> + +<hr /> + +<p>Paragraph</p> + +<h1>Header</h1> + +<p>Paragraph</p> + +<p>Paragraph</p> + +<h2>Header</h2> + +<p>Paragraph</p> + +<p>Paragraph</p> + +<h3>Header</h3> + +<p>Paragraph</p> diff --git a/test/resources/php-markdown.mdtest/Horizontal Rules.text b/test/resources/php-markdown.mdtest/Horizontal Rules.text new file mode 100644 index 0000000..8e2da0b --- /dev/null +++ b/test/resources/php-markdown.mdtest/Horizontal Rules.text @@ -0,0 +1,29 @@ +Horizontal rules: + +- - - + +* * * + +*** + +--- + +___ + +Not horizontal rules (testing for a bug in 1.0.1j): + ++++ + +,,, + +=== + +??? + +AAA + +jjj + +j j j + +n n n diff --git a/test/resources/php-markdown.mdtest/Horizontal Rules.xhtml b/test/resources/php-markdown.mdtest/Horizontal Rules.xhtml new file mode 100644 index 0000000..b9170b1 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Horizontal Rules.xhtml @@ -0,0 +1,30 @@ +<p>Horizontal rules:</p> + +<hr /> + +<hr /> + +<hr /> + +<hr /> + +<hr /> + +<p>Not horizontal rules (testing for a bug in 1.0.1j):</p> + +<p>+++</p> + +<p>,,,</p> + +<p>===</p> + +<p>???</p> + +<p>AAA</p> + +<p>jjj</p> + +<p>j j j</p> + +<p>n n n</p> + diff --git a/test/resources/php-markdown.mdtest/Inline HTML (Simple).html b/test/resources/php-markdown.mdtest/Inline HTML (Simple).html new file mode 100644 index 0000000..1451d62 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML (Simple).html @@ -0,0 +1,25 @@ +<p>With some attributes:</p> + +<div id="test"> + foo +</div> + +<div id="test" + class="nono"> + foo +</div> + +<p>Hr's:</p> + +<hr class="foo" + id="bar" > + +<p>Regression:</p> + +<pre> +#test +</pre> + +<p>Hello</p> +<p>Michael</p> +<p>E.</p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Inline HTML (Simple).text b/test/resources/php-markdown.mdtest/Inline HTML (Simple).text new file mode 100644 index 0000000..359b622 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML (Simple).text @@ -0,0 +1,25 @@ +With some attributes: + +<div id="test"> + foo +</div> + +<div id="test" + class="nono"> + foo +</div> + +Hr's: + +<hr class="foo" + id="bar" > + +Regression: + +<pre> +#test +</pre> + +<p>Hello</p> +<p>Michael</p> +<p>E.</p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Inline HTML (Span).text b/test/resources/php-markdown.mdtest/Inline HTML (Span).text new file mode 100644 index 0000000..19028bb --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML (Span).text @@ -0,0 +1,4 @@ +<abbr title="` **Attribute Content Is Not A Code Span** `">ACINACS</abbr> + +<abbr title="`first backtick!">SB</abbr> +<abbr title="`second backtick!">SB</abbr> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Inline HTML (Span).xhtml b/test/resources/php-markdown.mdtest/Inline HTML (Span).xhtml new file mode 100644 index 0000000..4d18aff --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML (Span).xhtml @@ -0,0 +1,4 @@ +<p><abbr title="` **Attribute Content Is Not A Code Span** `">ACINACS</abbr></p> + +<p><abbr title="`first backtick!">SB</abbr> +<abbr title="`second backtick!">SB</abbr></p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Inline HTML comments.html b/test/resources/php-markdown.mdtest/Inline HTML comments.html new file mode 100644 index 0000000..b45f014 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML comments.html @@ -0,0 +1,9 @@ +<p>Paragraph one.</p> + +<!-- double--dash (invalid SGML comment) --> + +<p>Paragraph two.</p> + +<!-- enclosed tag </div> --> + +<p>The end.</p> diff --git a/test/resources/php-markdown.mdtest/Inline HTML comments.text b/test/resources/php-markdown.mdtest/Inline HTML comments.text new file mode 100644 index 0000000..d57d00a --- /dev/null +++ b/test/resources/php-markdown.mdtest/Inline HTML comments.text @@ -0,0 +1,9 @@ +Paragraph one. + +<!-- double--dash (invalid SGML comment) --> + +Paragraph two. + +<!-- enclosed tag </div> --> + +The end. diff --git a/test/resources/php-markdown.mdtest/Ins & del.text b/test/resources/php-markdown.mdtest/Ins & del.text new file mode 100644 index 0000000..2d54c66 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Ins & del.text @@ -0,0 +1,17 @@ +Here is a block tag ins: + +<ins> +<p>Some text</p> +</ins> + +<ins>And here it is inside a paragraph.</ins> + +And here it is <ins>in the middle of</ins> a paragraph. + +<del> +<p>Some text</p> +</del> + +<del>And here is ins as a paragraph.</del> + +And here it is <del>in the middle of</del> a paragraph. diff --git a/test/resources/php-markdown.mdtest/Ins & del.xhtml b/test/resources/php-markdown.mdtest/Ins & del.xhtml new file mode 100644 index 0000000..60e8c5f --- /dev/null +++ b/test/resources/php-markdown.mdtest/Ins & del.xhtml @@ -0,0 +1,17 @@ +<p>Here is a block tag ins:</p> + +<ins> +<p>Some text</p> +</ins> + +<p><ins>And here it is inside a paragraph.</ins></p> + +<p>And here it is <ins>in the middle of</ins> a paragraph.</p> + +<del> +<p>Some text</p> +</del> + +<p><del>And here is ins as a paragraph.</del></p> + +<p>And here it is <del>in the middle of</del> a paragraph.</p> diff --git a/test/resources/php-markdown.mdtest/Links, inline style.text b/test/resources/php-markdown.mdtest/Links, inline style.text new file mode 100644 index 0000000..1c9195b --- /dev/null +++ b/test/resources/php-markdown.mdtest/Links, inline style.text @@ -0,0 +1,9 @@ +[silly URL w/ angle brackets](<?}]*+|&)>). + +[link](<url://with spaces> "title"). + +[link][]. + +[link]: <url with spaces> "title" + +[link](<s p a c e s>) \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Links, inline style.xhtml b/test/resources/php-markdown.mdtest/Links, inline style.xhtml new file mode 100644 index 0000000..bbc06fd --- /dev/null +++ b/test/resources/php-markdown.mdtest/Links, inline style.xhtml @@ -0,0 +1,7 @@ +<p><a href="?}]*+|&)">silly URL w/ angle brackets</a>.</p> + +<p><a href="url://with spaces" title="title">link</a>.</p> + +<p><a href="url with spaces" title="title">link</a>.</p> + +<p><a href="s p a c e s">link</a></p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/MD5 Hashes.text b/test/resources/php-markdown.mdtest/MD5 Hashes.text new file mode 100644 index 0000000..7e03221 --- /dev/null +++ b/test/resources/php-markdown.mdtest/MD5 Hashes.text @@ -0,0 +1,11 @@ +# Character Escapes + +The MD5 value for `+` is "26b17225b626fb9238849fd60eabdf60". + +# HTML Blocks + +<p>test</p> + +The MD5 value for `<p>test</p>` is: + +6205333b793f34273d75379350b36826 \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/MD5 Hashes.xhtml b/test/resources/php-markdown.mdtest/MD5 Hashes.xhtml new file mode 100644 index 0000000..894e4aa --- /dev/null +++ b/test/resources/php-markdown.mdtest/MD5 Hashes.xhtml @@ -0,0 +1,11 @@ +<h1>Character Escapes</h1> + +<p>The MD5 value for <code>+</code> is "26b17225b626fb9238849fd60eabdf60".</p> + +<h1>HTML Blocks</h1> + +<p>test</p> + +<p>The MD5 value for <code><p>test</p></code> is:</p> + +<p>6205333b793f34273d75379350b36826</p> diff --git a/test/resources/php-markdown.mdtest/Mixed OLs and ULs.text b/test/resources/php-markdown.mdtest/Mixed OLs and ULs.text new file mode 100644 index 0000000..cecde21 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Mixed OLs and ULs.text @@ -0,0 +1,13 @@ +* test ++ test +- test + +1. test +2. test + +* test ++ test +- test + +1. test +2. test diff --git a/test/resources/php-markdown.mdtest/Mixed OLs and ULs.xhtml b/test/resources/php-markdown.mdtest/Mixed OLs and ULs.xhtml new file mode 100644 index 0000000..0872aaa --- /dev/null +++ b/test/resources/php-markdown.mdtest/Mixed OLs and ULs.xhtml @@ -0,0 +1,21 @@ +<ul> +<li>test</li> +<li>test</li> +<li>test</li> +</ul> + +<ol> +<li>test</li> +<li>test</li> +</ol> + +<ul> +<li>test</li> +<li>test</li> +<li>test</li> +</ul> + +<ol> +<li>test</li> +<li>test</li> +</ol> diff --git a/test/resources/php-markdown.mdtest/Nesting.text b/test/resources/php-markdown.mdtest/Nesting.text new file mode 100644 index 0000000..791538c --- /dev/null +++ b/test/resources/php-markdown.mdtest/Nesting.text @@ -0,0 +1,11 @@ +Valid nesting: + +**[Link](url)** + +[**Link**](url) + +**[**Link**](url)** + +Invalid nesting: + +[[Link](url)](url) \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Nesting.xhtml b/test/resources/php-markdown.mdtest/Nesting.xhtml new file mode 100644 index 0000000..37845d3 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Nesting.xhtml @@ -0,0 +1,11 @@ +<p>Valid nesting:</p> + +<p><strong><a href="url">Link</a></strong></p> + +<p><a href="url"><strong>Link</strong></a></p> + +<p><strong><a href="url"><strong>Link</strong></a></strong></p> + +<p>Invalid nesting:</p> + +<p><a href="url">[Link](url)</a></p> diff --git a/test/resources/php-markdown.mdtest/PHP-Specific Bugs.text b/test/resources/php-markdown.mdtest/PHP-Specific Bugs.text new file mode 100644 index 0000000..246b60d --- /dev/null +++ b/test/resources/php-markdown.mdtest/PHP-Specific Bugs.text @@ -0,0 +1,22 @@ +This tests for a bug where quotes escaped by PHP when using +`preg_replace` with the `/e` modifier must be correctly unescaped +(hence the `_UnslashQuotes` function found only in PHP Markdown). + + + +Headers below should appear exactly as they are typed (no backslash +added or removed). + +Header "quoted\" again \\"" +=========================== + +Header "quoted\" again \\"" +--------------------------- + +### Header "quoted\" again \\"" ### + + + +Test with tabs for `_Detab`: + + Code 'block' with some "tabs" and "quotes" diff --git a/test/resources/php-markdown.mdtest/PHP-Specific Bugs.xhtml b/test/resources/php-markdown.mdtest/PHP-Specific Bugs.xhtml new file mode 100644 index 0000000..c982417 --- /dev/null +++ b/test/resources/php-markdown.mdtest/PHP-Specific Bugs.xhtml @@ -0,0 +1,17 @@ +<p>This tests for a bug where quotes escaped by PHP when using +<code>preg_replace</code> with the <code>/e</code> modifier must be correctly unescaped +(hence the <code>_UnslashQuotes</code> function found only in PHP Markdown).</p> + +<p>Headers below should appear exactly as they are typed (no backslash +added or removed).</p> + +<h1>Header "quoted\" again \""</h1> + +<h2>Header "quoted\" again \""</h2> + +<h3>Header "quoted\" again \""</h3> + +<p>Test with tabs for <code>_Detab</code>:</p> + +<pre><code>Code 'block' with some "tabs" and "quotes" +</code></pre> diff --git a/test/resources/php-markdown.mdtest/Parens in URL.text b/test/resources/php-markdown.mdtest/Parens in URL.text new file mode 100644 index 0000000..bb7be4f --- /dev/null +++ b/test/resources/php-markdown.mdtest/Parens in URL.text @@ -0,0 +1,14 @@ +[Inline link 1 with parens](/url\(test\) "title"). + +[Inline link 2 with parens](</url\(test\)> "title"). + +[Inline link 3 with non-escaped parens](/url(test) "title"). + +[Inline link 4 with non-escaped parens](</url(test)> "title"). + +[Reference link 1 with parens][1]. + +[Reference link 2 with parens][2]. + + [1]: /url(test) "title" + [2]: </url(test)> "title" diff --git a/test/resources/php-markdown.mdtest/Parens in URL.xhtml b/test/resources/php-markdown.mdtest/Parens in URL.xhtml new file mode 100644 index 0000000..a81aa02 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Parens in URL.xhtml @@ -0,0 +1,11 @@ +<p><a href="/url(test)" title="title">Inline link 1 with parens</a>.</p> + +<p><a href="/url(test)" title="title">Inline link 2 with parens</a>.</p> + +<p><a href="/url(test)" title="title">Inline link 3 with non-escaped parens</a>.</p> + +<p><a href="/url(test)" title="title">Inline link 4 with non-escaped parens</a>.</p> + +<p><a href="/url(test)" title="title">Reference link 1 with parens</a>.</p> + +<p><a href="/url(test)" title="title">Reference link 2 with parens</a>.</p> \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Quotes in attributes.text b/test/resources/php-markdown.mdtest/Quotes in attributes.text new file mode 100644 index 0000000..9792286 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Quotes in attributes.text @@ -0,0 +1,5 @@ +[Test](/"style="color:red) +[Test](/'style='color:red) + +![](/"style="border-color:red;border-size:1px;border-style:solid) +![](/'style='border-color:red;border-size:1px;border-style:solid) diff --git a/test/resources/php-markdown.mdtest/Quotes in attributes.xhtml b/test/resources/php-markdown.mdtest/Quotes in attributes.xhtml new file mode 100644 index 0000000..e3fcfd2 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Quotes in attributes.xhtml @@ -0,0 +1,5 @@ +<p><a href="/"style="color:red">Test</a> +<a href="/'style='color:red">Test</a></p> + +<p><img src="/"style="border-color:red;border-size:1px;border-style:solid" alt="" /> +<img src="/'style='border-color:red;border-size:1px;border-style:solid" alt="" /></p> diff --git a/test/resources/php-markdown.mdtest/Tight blocks.text b/test/resources/php-markdown.mdtest/Tight blocks.text new file mode 100644 index 0000000..ae4cdcb --- /dev/null +++ b/test/resources/php-markdown.mdtest/Tight blocks.text @@ -0,0 +1 @@ +Paragraph and no space: * ciao Paragraph and 1 space: * ciao Paragraph and 3 spaces: * ciao Paragraph and 4 spaces: * ciao Paragraph before header: #Header Paragraph before blockquote: >Some quote. \ No newline at end of file diff --git a/test/resources/php-markdown.mdtest/Tight blocks.xhtml b/test/resources/php-markdown.mdtest/Tight blocks.xhtml new file mode 100644 index 0000000..8655430 --- /dev/null +++ b/test/resources/php-markdown.mdtest/Tight blocks.xhtml @@ -0,0 +1,21 @@ +<p>Paragraph and no space: +* ciao</p> + +<p>Paragraph and 1 space: + * ciao</p> + +<p>Paragraph and 3 spaces: + * ciao</p> + +<p>Paragraph and 4 spaces: + * ciao</p> + +<p>Paragraph before header:</p> + +<h1>Header</h1> + +<p>Paragraph before blockquote:</p> + +<blockquote> + <p>Some quote.</p> +</blockquote> diff --git a/test/resources/php-markdown.mdtest/XML empty tag.text b/test/resources/php-markdown.mdtest/XML empty tag.text new file mode 100644 index 0000000..97714ab --- /dev/null +++ b/test/resources/php-markdown.mdtest/XML empty tag.text @@ -0,0 +1,2 @@ +First line. <br/> +Second line. diff --git a/test/resources/php-markdown.mdtest/XML empty tag.xhtml b/test/resources/php-markdown.mdtest/XML empty tag.xhtml new file mode 100644 index 0000000..f5d472b --- /dev/null +++ b/test/resources/php-markdown.mdtest/XML empty tag.xhtml @@ -0,0 +1,2 @@ +<p>First line. <br/> +Second line.</p> \ No newline at end of file From 8376d3ecb87428112697a83a10712d4806815393 Mon Sep 17 00:00:00 2001 From: Michael Butler <michael@butlerpc.net> Date: Sat, 27 Jan 2018 13:58:49 -0500 Subject: [PATCH 5/7] Remove unused tests --- test/integration/MarkdownTest.php | 8 -------- test/integration/PhpMarkdownExtraTest.php | 8 -------- 2 files changed, 16 deletions(-) delete mode 100644 test/integration/MarkdownTest.php delete mode 100644 test/integration/PhpMarkdownExtraTest.php diff --git a/test/integration/MarkdownTest.php b/test/integration/MarkdownTest.php deleted file mode 100644 index e413955..0000000 --- a/test/integration/MarkdownTest.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php - -use PHPUnit\Framework\TestCase; - -class MarkdownTest extends TestCase -{ - -} \ No newline at end of file diff --git a/test/integration/PhpMarkdownExtraTest.php b/test/integration/PhpMarkdownExtraTest.php deleted file mode 100644 index d2c7cee..0000000 --- a/test/integration/PhpMarkdownExtraTest.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php - -use PHPUnit\Framework\TestCase; - -class PhpMarkdownExtraTest extends TestCase -{ - -} \ No newline at end of file From a9d785139f38820f07865fd336e7f49a4c114c39 Mon Sep 17 00:00:00 2001 From: Michael Butler <michael@butlerpc.net> Date: Sat, 27 Jan 2018 21:03:01 -0500 Subject: [PATCH 6/7] Add normalize comparisons to tests Use MarkdownExtra specifically for the Extra type tests. --- test/helpers/MarkdownTestHelper.php | 235 ++++++++++++++++++++++++++- test/integration/PhpMarkdownTest.php | 30 ++-- 2 files changed, 253 insertions(+), 12 deletions(-) diff --git a/test/helpers/MarkdownTestHelper.php b/test/helpers/MarkdownTestHelper.php index 20b58ec..545dabd 100644 --- a/test/helpers/MarkdownTestHelper.php +++ b/test/helpers/MarkdownTestHelper.php @@ -1,5 +1,7 @@ <?php +use PHPUnit\Framework\TestCase; + class MarkdownTestHelper { /** @@ -23,14 +25,243 @@ class MarkdownTestHelper /** @var SplFileInfo $inputFile */ foreach ($regexIterator as $inputFiles) { foreach ($inputFiles as $inputMarkdownPath) { + $xhtml = true; $expectedHtmlPath = substr($inputMarkdownPath, 0, -4) . 'xhtml'; if (!file_exists($expectedHtmlPath)) { $expectedHtmlPath = substr($inputMarkdownPath, 0, -4) . 'html'; + $xhtml = false; } - $dataValues[] = [$inputMarkdownPath, $expectedHtmlPath]; + $dataValues[] = [$inputMarkdownPath, $expectedHtmlPath, $xhtml]; } } return $dataValues; } -} \ No newline at end of file + + /** + * Applies PHPUnit's assertSame after normalizing both strings (e.g. ignoring whitespace differences). + * Uses logic found originally in MDTest. + * + * @param string $string1 + * @param string $string2 + * @param string $message Positive message to print when test fails (e.g. "String1 matches String2") + * @param bool $xhtml + */ + public static function assertSameNormalized($string1, $string2, $message, $xhtml = true) { + + $t_result = $string1; + $t_output = $string2; + + // DOMDocuments + if ($xhtml) { + $document = new DOMDocument(); + $doc_result = $document->loadXML('<!DOCTYPE html>' . + "<html xmlns='http://www.w3.org/1999/xhtml'>" . + "<body>$t_result</body></html>"); + + $document2 = new DOMDocument(); + $doc_output = $document2->loadXML('<!DOCTYPE html>' . + "<html xmlns='http://www.w3.org/1999/xhtml'>" . + "<body>$t_output</body></html>"); + + if ($doc_result) { + static::normalizeElementContent($document->documentElement, false); + $n_result = $document->saveXML(); + } else { + $n_result = '--- Expected Result: XML Parse Error ---'; + } + if ($doc_output) { + static::normalizeElementContent($document2->documentElement, false); + $n_output = $document2->saveXML(); + } else { + $n_output = '--- Output: XML Parse Error ---'; + } + } else { + + // '@' suppressors used because some tests have invalid HTML (multiple elements with the same id attribute) + // Perhaps isolate to a separate test and remove this? + + $document = new DOMDocument(); + $doc_result = @$document->loadHTML($t_result); + + $document2 = new DOMDocument(); + $doc_output = @$document2->loadHTML($t_output); + + if ($doc_result) { + static::normalizeElementContent($document->documentElement, false); + $n_result = $document->saveHTML(); + } else { + $n_result = '--- Expected Result: HTML Parse Error ---'; + } + + if ($doc_output) { + static::normalizeElementContent($document2->documentElement, false); + $n_output = $document2->saveHTML(); + } else { + $n_output = '--- Output: HTML Parse Error ---'; + } + } + + $n_result = preg_replace('{^.*?<body>|</body>.*?$}is', '', $n_result); + $n_output = preg_replace('{^.*?<body>|</body>.*?$}is', '', $n_output); + + $c_result = $n_result; + $c_output = $n_output; + + $c_result = trim($c_result) . "\n"; + $c_output = trim($c_output) . "\n"; + + // This will throw a test exception if the strings don't exactly match + TestCase::assertSame($c_result, $c_output, $message); + } + + /** + * @param DOMElement $element Modifies this element by reference + * @param bool $whitespace_preserve Preserve Whitespace + * @return void + */ + protected static function normalizeElementContent($element, $whitespace_preserve) { + # + # Normalize content of HTML DOM $element. The $whitespace_preserve + # argument indicates that whitespace is significant and shouldn't be + # normalized; it should be used for the content of certain elements like + # <pre> or <script>. + # + $node_list = $element->childNodes; + switch (strtolower($element->nodeName)) { + case 'body': + case 'div': + case 'blockquote': + case 'ul': + case 'ol': + case 'dl': + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + $whitespace = "\n\n"; + break; + + case 'table': + $whitespace = "\n"; + break; + + case 'pre': + case 'script': + case 'style': + case 'title': + $whitespace_preserve = true; + $whitespace = ""; + break; + + default: + $whitespace = ""; + break; + } + foreach ($node_list as $node) { + switch ($node->nodeType) { + case XML_ELEMENT_NODE: + static::normalizeElementContent($node, $whitespace_preserve); + static::normalizeElementAttributes($node); + + switch (strtolower($node->nodeName)) { + case 'p': + case 'div': + case 'hr': + case 'blockquote': + case 'ul': + case 'ol': + case 'dl': + case 'li': + case 'address': + case 'table': + case 'dd': + case 'pre': + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + $whitespace = "\n\n"; + break; + + case 'tr': + case 'td': + case 'dt': + $whitespace = "\n"; + break; + + default: + $whitespace = ""; + break; + } + + if (($whitespace === "\n\n" || $whitespace === "\n") && + $node->nextSibling && + $node->nextSibling->nodeType != XML_TEXT_NODE) { + $element->insertBefore(new DOMText($whitespace), $node->nextSibling); + } + break; + + case XML_TEXT_NODE: + if (!$whitespace_preserve) { + if (trim($node->data) === "") { + $node->data = $whitespace; + } + else { + $node->data = preg_replace('{\s+}', ' ', $node->data); + } + } + break; + } + } + if (!$whitespace_preserve && + ($whitespace === "\n\n" || $whitespace === "\n")) { + if ($element->firstChild) { + if ($element->firstChild->nodeType == XML_TEXT_NODE) { + $element->firstChild->data = + preg_replace('{^\s+}', "\n", $element->firstChild->data); + } + else { + $element->insertBefore(new DOMText("\n"), $element->firstChild); + } + } + if ($element->lastChild) { + if ($element->lastChild->nodeType == XML_TEXT_NODE) { + $element->lastChild->data = + preg_replace('{\s+$}', "\n", $element->lastChild->data); + } + else { + $element->insertBefore(new DOMText("\n"), null); + } + } + } + } + + /** + * @param DOMElement $element Modifies this element by reference + */ + protected static function normalizeElementAttributes (DOMElement $element) + { + # + # Sort attributes by name. + # + // Gather the list of attributes as an array. + $attr_list = array(); + foreach ($element->attributes as $attr_node) { + $attr_list[$attr_node->name] = $attr_node; + } + + // Sort attribute list by name. + ksort($attr_list); + + // Remove then put back each attribute following sort order. + foreach ($attr_list as $attr_node) { + $element->removeAttributeNode($attr_node); + $element->setAttributeNode($attr_node); + } + } +} diff --git a/test/integration/PhpMarkdownTest.php b/test/integration/PhpMarkdownTest.php index 9e0562e..ce73b6d 100644 --- a/test/integration/PhpMarkdownTest.php +++ b/test/integration/PhpMarkdownTest.php @@ -2,6 +2,7 @@ use PHPUnit\Framework\TestCase; use Michelf\Markdown; +use Michelf\MarkdownExtra; class PhpMarkdownTest extends TestCase { @@ -19,17 +20,20 @@ class PhpMarkdownTest extends TestCase * @param string $inputPath Input markdown path * @param string $htmlPath File path of expected transformed output (X)HTML * + * @param bool $xhtml True if XHTML. Otherwise, HTML is assumed. + * * @return void */ - public function testTransformingOfPhpMarkdown($inputPath, $htmlPath) { + public function testTransformingOfPhpMarkdown($inputPath, $htmlPath, $xhtml = false) { $inputMarkdown = file_get_contents($inputPath); $expectedHtml = file_get_contents($htmlPath); $result = Markdown::defaultTransform($inputMarkdown); - $this->assertSame( + MarkdownTestHelper::assertSameNormalized( $expectedHtml, $result, - "Markdown in $inputPath converts exactly to expected $htmlPath" + "Markdown in $inputPath converts exactly to expected $htmlPath", + $xhtml ); } @@ -47,17 +51,20 @@ class PhpMarkdownTest extends TestCase * @param string $inputPath Input markdown path * @param string $htmlPath File path of expected transformed output (X)HTML * + * @param bool $xhtml True if XHTML. Otherwise, HTML is assumed. + * * @return void */ - public function testTransformingOfMarkdownExtra($inputPath, $htmlPath) { + public function testTransformingOfMarkdownExtra($inputPath, $htmlPath, $xhtml = false) { $inputMarkdown = file_get_contents($inputPath); $expectedHtml = file_get_contents($htmlPath); - $result = Markdown::defaultTransform($inputMarkdown); + $result = MarkdownExtra::defaultTransform($inputMarkdown); - $this->assertSame( + MarkdownTestHelper::assertSameNormalized( $expectedHtml, $result, - "Markdown in $inputPath converts exactly to expected $htmlPath" + "Markdown in $inputPath converts exactly to expected $htmlPath", + $xhtml ); } @@ -76,18 +83,21 @@ class PhpMarkdownTest extends TestCase * @param string $inputPath Input markdown path * @param string $htmlPath File path of expected transformed output (X)HTML * + * @param bool $xhtml True if XHTML. Otherwise, HTML is assumed. + * * @return void */ - public function testTransformingOfRegularMarkdown($inputPath, $htmlPath) + public function testTransformingOfRegularMarkdown($inputPath, $htmlPath, $xhtml = false) { $inputMarkdown = file_get_contents($inputPath); $expectedHtml = file_get_contents($htmlPath); $result = Markdown::defaultTransform($inputMarkdown); - $this->assertSame( + MarkdownTestHelper::assertSameNormalized( $expectedHtml, $result, - "Markdown in $inputPath converts exactly to expected $htmlPath" + "Markdown in $inputPath converts exactly to expected $htmlPath", + $xhtml ); } } From a1950a9273bb7e5283670faca8a89a0051ae5da7 Mon Sep 17 00:00:00 2001 From: Michael Butler <michael@butlerpc.net> Date: Sat, 17 Mar 2018 14:49:07 -0400 Subject: [PATCH 7/7] Run markdown.mdtest and php-markdown.mdtest against MarkdownExtra , except for Emphasis which is the exception --- test/integration/PhpMarkdownTest.php | 74 +++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/test/integration/PhpMarkdownTest.php b/test/integration/PhpMarkdownTest.php index ce73b6d..ded3a3d 100644 --- a/test/integration/PhpMarkdownTest.php +++ b/test/integration/PhpMarkdownTest.php @@ -7,15 +7,18 @@ use Michelf\MarkdownExtra; class PhpMarkdownTest extends TestCase { /** + * Returns all php-markdown.mdtest tests * @return array */ - public function dataProviderForRegular() { + public function dataProviderForPhpMarkdown() { $dir = TEST_RESOURCES_ROOT . '/php-markdown.mdtest'; return MarkdownTestHelper::getInputOutputPaths($dir); } /** - * @dataProvider dataProviderForRegular + * Runs php-markdown.mdtest against Markdown::defaultTransform + * + * @dataProvider dataProviderForPhpMarkdown * * @param string $inputPath Input markdown path * @param string $htmlPath File path of expected transformed output (X)HTML @@ -37,6 +40,49 @@ class PhpMarkdownTest extends TestCase ); } + /** + * Returns all php-markdown.mdtest tests EXCEPT Emphasis test. + * @return array + */ + public function dataProviderForPhpMarkdownExceptEmphasis() + { + $dir = TEST_RESOURCES_ROOT . '/php-markdown.mdtest'; + $allTests = MarkdownTestHelper::getInputOutputPaths($dir); + + foreach ($allTests as $index => $test) { + // Because MarkdownExtra treats underscore emphasis differently, this one test has to be excluded + if (preg_match('~/Emphasis\.text$~', $test[0])) { + unset($allTests[$index]); + } + } + + return array_values($allTests); + } + + /** + * Runs php-markdown.mdtest against MarkdownExtra::defaultTransform + * + * @dataProvider dataProviderForPhpMarkdownExceptEmphasis + * + * @param $inputPath + * @param $htmlPath + * @param bool $xhtml + */ + public function testPhpMarkdownMdTestWithMarkdownExtra($inputPath, $htmlPath, $xhtml = false) + { + $inputMarkdown = file_get_contents($inputPath); + $expectedHtml = file_get_contents($htmlPath); + + $result = MarkdownExtra::defaultTransform($inputMarkdown); + + MarkdownTestHelper::assertSameNormalized( + $expectedHtml, + $result, + "Markdown in $inputPath converts exactly to expected $htmlPath", + $xhtml + ); + } + /** * @return array */ @@ -100,4 +146,28 @@ class PhpMarkdownTest extends TestCase $xhtml ); } + + /** + * Runs markdown.mdtest against MarkdownExtra::defaultTransform + * + * @dataProvider dataProviderForRegularMarkdown + * + * @param $inputPath + * @param $htmlPath + * @param bool $xhtml + */ + public function testMarkdownMdTestWithMarkdownExtra($inputPath, $htmlPath, $xhtml = false) + { + $inputMarkdown = file_get_contents($inputPath); + $expectedHtml = file_get_contents($htmlPath); + + $result = MarkdownExtra::defaultTransform($inputMarkdown); + + MarkdownTestHelper::assertSameNormalized( + $expectedHtml, + $result, + "Markdown in $inputPath converts exactly to expected $htmlPath", + $xhtml + ); + } }