aboutsummaryrefslogtreecommitdiffstats
path: root/tests/php
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@gmail.com>2010-02-12 16:24:15 -0500
committerWaylan Limberg <waylan@gmail.com>2010-02-12 16:24:15 -0500
commit28caf01c8082dbed3a5ca87b070ffe5657514f01 (patch)
tree6aff8e9eb06daa4a4e5ebe6994e67f08b4397ee6 /tests/php
parent7e0b959ef2a64f2339be28f258b895d7a79003a8 (diff)
downloadmarkdown-28caf01c8082dbed3a5ca87b070ffe5657514f01.tar.gz
markdown-28caf01c8082dbed3a5ca87b070ffe5657514f01.tar.bz2
markdown-28caf01c8082dbed3a5ca87b070ffe5657514f01.zip
Moved test dir back out of markdown lib. We don't need to install the tests in everyones site-packages. We just need to distrubute them in the tarball for people to run before installing etc.
Diffstat (limited to 'tests/php')
-rw-r--r--tests/php/Auto Links.text3
-rw-r--r--tests/php/Auto Links.xhtml3
-rw-r--r--tests/php/Backslash escapes.text1
-rw-r--r--tests/php/Backslash escapes.xhtml1
-rw-r--r--tests/php/Code Spans.text6
-rw-r--r--tests/php/Code Spans.xhtml6
-rw-r--r--tests/php/Code block in a list item.text15
-rw-r--r--tests/php/Code block in a list item.xhtml18
-rw-r--r--tests/php/Code block on second line.text2
-rw-r--r--tests/php/Code block on second line.xhtml2
-rw-r--r--tests/php/Email auto links.text3
-rw-r--r--tests/php/Email auto links.xhtml3
-rw-r--r--tests/php/Emphasis.text80
-rw-r--r--tests/php/Emphasis.xhtml83
-rw-r--r--tests/php/Empty List Item.text35
-rw-r--r--tests/php/Empty List Item.xhtml47
-rw-r--r--tests/php/Headers.text9
-rw-r--r--tests/php/Headers.xhtml39
-rw-r--r--tests/php/Horizontal Rules.text29
-rw-r--r--tests/php/Horizontal Rules.xhtml30
-rw-r--r--tests/php/Inline HTML (Simple).text15
-rw-r--r--tests/php/Inline HTML (Simple).xhtml15
-rw-r--r--tests/php/Inline HTML (Span).text4
-rw-r--r--tests/php/Inline HTML (Span).xhtml4
-rw-r--r--tests/php/Inline HTML comments.text9
-rw-r--r--tests/php/Inline HTML comments.xhtml9
-rw-r--r--tests/php/Ins & del.text17
-rw-r--r--tests/php/Ins & del.xhtml17
-rw-r--r--tests/php/License339
-rw-r--r--tests/php/Links, inline style.text1
-rw-r--r--tests/php/Links, inline style.xhtml1
-rw-r--r--tests/php/MD5 Hashes.text11
-rw-r--r--tests/php/MD5 Hashes.xhtml11
-rw-r--r--tests/php/Mixed OLs and ULs.text13
-rw-r--r--tests/php/Mixed OLs and ULs.xhtml21
-rw-r--r--tests/php/Nesting.text11
-rw-r--r--tests/php/Nesting.xhtml11
-rw-r--r--tests/php/PHP-Specific Bugs.text22
-rw-r--r--tests/php/PHP-Specific Bugs.xhtml17
-rw-r--r--tests/php/Parens in URL.text14
-rw-r--r--tests/php/Parens in URL.xhtml11
-rw-r--r--tests/php/Quotes in attributes.text5
-rw-r--r--tests/php/Quotes in attributes.xhtml5
-rw-r--r--tests/php/Tight blocks.text1
-rw-r--r--tests/php/Tight blocks.xhtml21
-rw-r--r--tests/php/extra/Abbr.text31
-rw-r--r--tests/php/extra/Abbr.xhtml15
-rw-r--r--tests/php/extra/Definition Lists.text115
-rw-r--r--tests/php/extra/Definition Lists.xhtml155
-rw-r--r--tests/php/extra/Emphasis.text80
-rw-r--r--tests/php/extra/Emphasis.xhtml83
-rw-r--r--tests/php/extra/Fenced Code Blocks.text60
-rw-r--r--tests/php/extra/Fenced Code Blocks.xhtml53
-rw-r--r--tests/php/extra/Footnotes.text61
-rw-r--r--tests/php/extra/Footnotes.xhtml96
-rw-r--r--tests/php/extra/Inline HTML with Markdown content.text104
-rw-r--r--tests/php/extra/Inline HTML with Markdown content.xhtml125
-rw-r--r--tests/php/extra/Tables.text104
-rw-r--r--tests/php/extra/Tables.xhtml310
-rw-r--r--tests/php/extra/test.cfg6
-rw-r--r--tests/php/test.cfg5
61 files changed, 2423 insertions, 0 deletions
diff --git a/tests/php/Auto Links.text b/tests/php/Auto Links.text
new file mode 100644
index 0000000..4b10d32
--- /dev/null
+++ b/tests/php/Auto Links.text
@@ -0,0 +1,3 @@
+<HTTP://WWW.SOMEURL.COM>
+
+<hr@company.com> \ No newline at end of file
diff --git a/tests/php/Auto Links.xhtml b/tests/php/Auto Links.xhtml
new file mode 100644
index 0000000..259c47f
--- /dev/null
+++ b/tests/php/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/tests/php/Backslash escapes.text b/tests/php/Backslash escapes.text
new file mode 100644
index 0000000..a5e769b
--- /dev/null
+++ b/tests/php/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/tests/php/Backslash escapes.xhtml b/tests/php/Backslash escapes.xhtml
new file mode 100644
index 0000000..08fb8ef
--- /dev/null
+++ b/tests/php/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/tests/php/Code Spans.text b/tests/php/Code Spans.text
new file mode 100644
index 0000000..43f2bcf
--- /dev/null
+++ b/tests/php/Code Spans.text
@@ -0,0 +1,6 @@
+From `<!--` to `-->`
+on two lines.
+
+From `<!--`
+to `-->`
+on three lines.
diff --git a/tests/php/Code Spans.xhtml b/tests/php/Code Spans.xhtml
new file mode 100644
index 0000000..9ed0df8
--- /dev/null
+++ b/tests/php/Code Spans.xhtml
@@ -0,0 +1,6 @@
+<p>From <code>&lt;!--</code> to <code>--&gt;</code>
+on two lines.</p>
+
+<p>From <code>&lt;!--</code>
+to <code>--&gt;</code>
+on three lines.</p>
diff --git a/tests/php/Code block in a list item.text b/tests/php/Code block in a list item.text
new file mode 100644
index 0000000..5093348
--- /dev/null
+++ b/tests/php/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/tests/php/Code block in a list item.xhtml b/tests/php/Code block in a list item.xhtml
new file mode 100644
index 0000000..361c1ae
--- /dev/null
+++ b/tests/php/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/tests/php/Code block on second line.text b/tests/php/Code block on second line.text
new file mode 100644
index 0000000..b7fcd97
--- /dev/null
+++ b/tests/php/Code block on second line.text
@@ -0,0 +1,2 @@
+
+ Codeblock on second line
diff --git a/tests/php/Code block on second line.xhtml b/tests/php/Code block on second line.xhtml
new file mode 100644
index 0000000..25abb16
--- /dev/null
+++ b/tests/php/Code block on second line.xhtml
@@ -0,0 +1,2 @@
+<pre><code>Codeblock on second line
+</code></pre>
diff --git a/tests/php/Email auto links.text b/tests/php/Email auto links.text
new file mode 100644
index 0000000..a8af4ec
--- /dev/null
+++ b/tests/php/Email auto links.text
@@ -0,0 +1,3 @@
+<michel.fortin@michelf.com>
+
+International domain names: <help@tūdaliņ.lv> \ No newline at end of file
diff --git a/tests/php/Email auto links.xhtml b/tests/php/Email auto links.xhtml
new file mode 100644
index 0000000..a32c408
--- /dev/null
+++ b/tests/php/Email auto links.xhtml
@@ -0,0 +1,3 @@
+<p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;">&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;</a></p>
+
+<p>International domain names: <a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;">&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;</a></p>
diff --git a/tests/php/Emphasis.text b/tests/php/Emphasis.text
new file mode 100644
index 0000000..88e93d4
--- /dev/null
+++ b/tests/php/Emphasis.text
@@ -0,0 +1,80 @@
+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___
+
+
+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__
+
+
+
+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____
diff --git a/tests/php/Emphasis.xhtml b/tests/php/Emphasis.xhtml
new file mode 100644
index 0000000..4879070
--- /dev/null
+++ b/tests/php/Emphasis.xhtml
@@ -0,0 +1,83 @@
+<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>
+</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>
+</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> \ No newline at end of file
diff --git a/tests/php/Empty List Item.text b/tests/php/Empty List Item.text
new file mode 100644
index 0000000..3c4edba
--- /dev/null
+++ b/tests/php/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/tests/php/Empty List Item.xhtml b/tests/php/Empty List Item.xhtml
new file mode 100644
index 0000000..02d86ed
--- /dev/null
+++ b/tests/php/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/tests/php/Headers.text b/tests/php/Headers.text
new file mode 100644
index 0000000..3a39174
--- /dev/null
+++ b/tests/php/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/tests/php/Headers.xhtml b/tests/php/Headers.xhtml
new file mode 100644
index 0000000..3adb470
--- /dev/null
+++ b/tests/php/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/tests/php/Horizontal Rules.text b/tests/php/Horizontal Rules.text
new file mode 100644
index 0000000..8e2da0b
--- /dev/null
+++ b/tests/php/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/tests/php/Horizontal Rules.xhtml b/tests/php/Horizontal Rules.xhtml
new file mode 100644
index 0000000..b9170b1
--- /dev/null
+++ b/tests/php/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/tests/php/Inline HTML (Simple).text b/tests/php/Inline HTML (Simple).text
new file mode 100644
index 0000000..9177105
--- /dev/null
+++ b/tests/php/Inline HTML (Simple).text
@@ -0,0 +1,15 @@
+With some attributes:
+
+<div id="test">
+ foo
+</div>
+
+<div id="test"
+ class="nono">
+ foo
+</div>
+
+Hr's:
+
+<hr class="foo"
+ id="bar" >
diff --git a/tests/php/Inline HTML (Simple).xhtml b/tests/php/Inline HTML (Simple).xhtml
new file mode 100644
index 0000000..facfefb
--- /dev/null
+++ b/tests/php/Inline HTML (Simple).xhtml
@@ -0,0 +1,15 @@
+<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" > \ No newline at end of file
diff --git a/tests/php/Inline HTML (Span).text b/tests/php/Inline HTML (Span).text
new file mode 100644
index 0000000..19028bb
--- /dev/null
+++ b/tests/php/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/tests/php/Inline HTML (Span).xhtml b/tests/php/Inline HTML (Span).xhtml
new file mode 100644
index 0000000..4d18aff
--- /dev/null
+++ b/tests/php/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/tests/php/Inline HTML comments.text b/tests/php/Inline HTML comments.text
new file mode 100644
index 0000000..d57d00a
--- /dev/null
+++ b/tests/php/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/tests/php/Inline HTML comments.xhtml b/tests/php/Inline HTML comments.xhtml
new file mode 100644
index 0000000..b45f014
--- /dev/null
+++ b/tests/php/Inline HTML comments.xhtml
@@ -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/tests/php/Ins & del.text b/tests/php/Ins & del.text
new file mode 100644
index 0000000..2d54c66
--- /dev/null
+++ b/tests/php/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/tests/php/Ins & del.xhtml b/tests/php/Ins & del.xhtml
new file mode 100644
index 0000000..60e8c5f
--- /dev/null
+++ b/tests/php/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/tests/php/License b/tests/php/License
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/tests/php/License
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/tests/php/Links, inline style.text b/tests/php/Links, inline style.text
new file mode 100644
index 0000000..600a044
--- /dev/null
+++ b/tests/php/Links, inline style.text
@@ -0,0 +1 @@
+[silly URL w/ angle brackets](<?}]*+|&)>).
diff --git a/tests/php/Links, inline style.xhtml b/tests/php/Links, inline style.xhtml
new file mode 100644
index 0000000..d3e4d11
--- /dev/null
+++ b/tests/php/Links, inline style.xhtml
@@ -0,0 +1 @@
+<p><a href="?}]*+|&amp;)">silly URL w/ angle brackets</a>.</p>
diff --git a/tests/php/MD5 Hashes.text b/tests/php/MD5 Hashes.text
new file mode 100644
index 0000000..7e03221
--- /dev/null
+++ b/tests/php/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/tests/php/MD5 Hashes.xhtml b/tests/php/MD5 Hashes.xhtml
new file mode 100644
index 0000000..894e4aa
--- /dev/null
+++ b/tests/php/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>&lt;p&gt;test&lt;/p&gt;</code> is:</p>
+
+<p>6205333b793f34273d75379350b36826</p>
diff --git a/tests/php/Mixed OLs and ULs.text b/tests/php/Mixed OLs and ULs.text
new file mode 100644
index 0000000..cecde21
--- /dev/null
+++ b/tests/php/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/tests/php/Mixed OLs and ULs.xhtml b/tests/php/Mixed OLs and ULs.xhtml
new file mode 100644
index 0000000..0872aaa
--- /dev/null
+++ b/tests/php/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/tests/php/Nesting.text b/tests/php/Nesting.text
new file mode 100644
index 0000000..791538c
--- /dev/null
+++ b/tests/php/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/tests/php/Nesting.xhtml b/tests/php/Nesting.xhtml
new file mode 100644
index 0000000..37845d3
--- /dev/null
+++ b/tests/php/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/tests/php/PHP-Specific Bugs.text b/tests/php/PHP-Specific Bugs.text
new file mode 100644
index 0000000..246b60d
--- /dev/null
+++ b/tests/php/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/tests/php/PHP-Specific Bugs.xhtml b/tests/php/PHP-Specific Bugs.xhtml
new file mode 100644
index 0000000..c982417
--- /dev/null
+++ b/tests/php/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/tests/php/Parens in URL.text b/tests/php/Parens in URL.text
new file mode 100644
index 0000000..bb7be4f
--- /dev/null
+++ b/tests/php/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/tests/php/Parens in URL.xhtml b/tests/php/Parens in URL.xhtml
new file mode 100644
index 0000000..a81aa02
--- /dev/null
+++ b/tests/php/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/tests/php/Quotes in attributes.text b/tests/php/Quotes in attributes.text
new file mode 100644
index 0000000..9792286
--- /dev/null
+++ b/tests/php/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/tests/php/Quotes in attributes.xhtml b/tests/php/Quotes in attributes.xhtml
new file mode 100644
index 0000000..e3fcfd2
--- /dev/null
+++ b/tests/php/Quotes in attributes.xhtml
@@ -0,0 +1,5 @@
+<p><a href="/&quot;style=&quot;color:red">Test</a>
+<a href="/'style='color:red">Test</a></p>
+
+<p><img src="/&quot;style=&quot;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/tests/php/Tight blocks.text b/tests/php/Tight blocks.text
new file mode 100644
index 0000000..ae4cdcb
--- /dev/null
+++ b/tests/php/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/tests/php/Tight blocks.xhtml b/tests/php/Tight blocks.xhtml
new file mode 100644
index 0000000..8655430
--- /dev/null
+++ b/tests/php/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/tests/php/extra/Abbr.text b/tests/php/extra/Abbr.text
new file mode 100644
index 0000000..ae72f4e
--- /dev/null
+++ b/tests/php/extra/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/tests/php/extra/Abbr.xhtml b/tests/php/extra/Abbr.xhtml
new file mode 100644
index 0000000..8beaa2e
--- /dev/null
+++ b/tests/php/extra/Abbr.xhtml
@@ -0,0 +1,15 @@
+<p>Some text about <abbr title="Hyper Text Markup Language">HTML</abbr>, <abbr title="Standard Generalized Markup Language">SGML</abbr> and <abbr title="Hyper Text Markup Language version 4">HTML4</abbr>.</p>
+
+<p>Let's talk about the <abbr title="United States of America">U.S.A.</abbr>, (<abbr title="États-Unis d'Amérique">É.U.</abbr> or <abbr title="États-Unis d'Amérique">É.-U. d'A.</abbr> in French).</p>
+
+<p>And here we have a <abbr title="Compact Disk">CD</abbr>, some CDs, and some other <abbr title="Compact Disk">CD</abbr>'s.</p>
+
+<p>Let's transfert documents through <abbr title="Transmission Control Protocol">TCP</abbr>/<abbr title="Internet Protocol">IP</abbr>, using <abbr title="Transmission Control Protocol">TCP</abbr> packets.</p>
+
+<hr />
+
+<p>Bienvenue sur <a href="http://www.bidulecms.com" title="Bidule CMS"><abbr title="Content Management System">CMS</abbr></a>.</p>
+
+<hr />
+
+<p><abbr title="Abbreviation &quot;Testing&quot; Correct 'Character' &lt; Escapes &gt;">ATCCE</abbr></p>
diff --git a/tests/php/extra/Definition Lists.text b/tests/php/extra/Definition Lists.text
new file mode 100644
index 0000000..5b3bdb6
--- /dev/null
+++ b/tests/php/extra/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/tests/php/extra/Definition Lists.xhtml b/tests/php/extra/Definition Lists.xhtml
new file mode 100644
index 0000000..f99f456
--- /dev/null
+++ b/tests/php/extra/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/tests/php/extra/Emphasis.text b/tests/php/extra/Emphasis.text
new file mode 100644
index 0000000..88e93d4
--- /dev/null
+++ b/tests/php/extra/Emphasis.text
@@ -0,0 +1,80 @@
+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___
+
+
+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__
+
+
+
+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____
diff --git a/tests/php/extra/Emphasis.xhtml b/tests/php/extra/Emphasis.xhtml
new file mode 100644
index 0000000..1fa8218
--- /dev/null
+++ b/tests/php/extra/Emphasis.xhtml
@@ -0,0 +1,83 @@
+<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>
+</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>
+</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>
diff --git a/tests/php/extra/Fenced Code Blocks.text b/tests/php/extra/Fenced Code Blocks.text
new file mode 100644
index 0000000..f2400ff
--- /dev/null
+++ b/tests/php/extra/Fenced Code Blocks.text
@@ -0,0 +1,60 @@
+~~~
+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
+~~~ \ No newline at end of file
diff --git a/tests/php/extra/Fenced Code Blocks.xhtml b/tests/php/extra/Fenced Code Blocks.xhtml
new file mode 100644
index 0000000..518908c
--- /dev/null
+++ b/tests/php/extra/Fenced Code Blocks.xhtml
@@ -0,0 +1,53 @@
+<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>
diff --git a/tests/php/extra/Footnotes.text b/tests/php/extra/Footnotes.text
new file mode 100644
index 0000000..40192e9
--- /dev/null
+++ b/tests/php/extra/Footnotes.text
@@ -0,0 +1,61 @@
+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://www.michelf.com/
+
+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 should not have a footnote marker since
+the footnote has already been used before.[^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 as it is refered
+ 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!
diff --git a/tests/php/extra/Footnotes.xhtml b/tests/php/extra/Footnotes.xhtml
new file mode 100644
index 0000000..e33639d
--- /dev/null
+++ b/tests/php/extra/Footnotes.xhtml
@@ -0,0 +1,96 @@
+<p>This is the first paragraph.<sup id="fnref:first"><a href="#fn:first" rel="footnote">1</a></sup></p>
+
+<ul>
+<li>List item one.<sup id="fnref:second"><a href="#fn:second" rel="footnote">2</a></sup></li>
+<li>List item two.<sup id="fnref:third"><a href="#fn:third" rel="footnote">3</a></sup></li>
+</ul>
+
+<h1>Header<sup id="fnref:fourth"><a href="#fn:fourth" rel="footnote">4</a></sup></h1>
+
+<p>Some paragraph with a footnote<sup id="fnref:1"><a href="#fn:1" rel="footnote">5</a></sup>, and another<sup id="fnref:2"><a href="#fn:2" rel="footnote">6</a></sup>.</p>
+
+<p>Another paragraph with a named footnote<sup id="fnref:fn-name"><a href="#fn:fn-name" rel="footnote">7</a></sup>.</p>
+
+<p>This paragraph should not have a footnote marker since
+the footnote is undefined.[^3]</p>
+
+<p>This paragraph should not have a footnote marker since
+the footnote has already been used before.[^1]</p>
+
+<p>This paragraph links to a footnote with plenty of
+block-level content.<sup id="fnref:block"><a href="#fn:block" rel="footnote">8</a></sup></p>
+
+<p>This paragraph host the footnote reference within a
+footnote test<sup id="fnref:reference"><a href="#fn:reference" rel="footnote">9</a></sup>.</p>
+
+<hr />
+
+<p>Testing unusual footnote name<sup id="fnref:1$^!&quot;'"><a href="#fn:1$^!&quot;'" rel="footnote">10</a></sup>.</p>
+
+<div class="footnotes">
+<hr />
+<ol>
+
+<li id="fn:first">
+<p>This is the first note.&#160;<a href="#fnref:first" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:second">
+<p>This is the second note.&#160;<a href="#fnref:second" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:third">
+<p>This is the third note, defined out of order.&#160;<a href="#fnref:third" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:fourth">
+<p>This is the fourth note.&#160;<a href="#fnref:fourth" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:1">
+<p>Content for fifth footnote.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:2">
+<p>Content for sixth footnote spaning on
+three lines, with some span-level markup like
+<em>emphasis</em>, a <a href="http://www.michelf.com/">link</a>.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:fn-name">
+<p>Footnote beginning on the line next to the marker.&#160;<a href="#fnref:fn-name" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:block">
+<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" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:reference">
+<p>This footnote has a footnote of its own.<sup id="fnref:nested"><a href="#fn:nested" rel="footnote">11</a></sup>&#160;<a href="#fnref:reference" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:1$^!&quot;'">
+<p>Haha!&#160;<a href="#fnref:1$^!&quot;'" rev="footnote">&#8617;</a></p>
+</li>
+
+<li id="fn:nested">
+<p>This footnote should appear even though as it is refered
+from another footnote. But [^reference] should be litteral
+since the footnote with that name has already been used.&#160;<a href="#fnref:nested" rev="footnote">&#8617;</a></p>
+</li>
+
+</ol>
+</div>
diff --git a/tests/php/extra/Inline HTML with Markdown content.text b/tests/php/extra/Inline HTML with Markdown content.text
new file mode 100644
index 0000000..1eb5450
--- /dev/null
+++ b/tests/php/extra/Inline HTML with Markdown content.text
@@ -0,0 +1,104 @@
+# 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>
+
+## 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/tests/php/extra/Inline HTML with Markdown content.xhtml b/tests/php/extra/Inline HTML with Markdown content.xhtml
new file mode 100644
index 0000000..4751f78
--- /dev/null
+++ b/tests/php/extra/Inline HTML with Markdown content.xhtml
@@ -0,0 +1,125 @@
+<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>&lt;div&gt;</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>&lt;/div&gt;</code>s in Markdown code span and block</h2>
+
+<div>
+ <div>
+
+<p>This is a code block however:</p>
+
+<pre><code>&lt;/div&gt;
+</code></pre>
+
+<p>Funny isn't it? Here is a code span: <code>&lt;/div&gt;</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>&lt;/p&gt;</code> are allowed though.
+</p>
+
+<p><em>Hello</em> <em>world</em></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> \ No newline at end of file
diff --git a/tests/php/extra/Tables.text b/tests/php/extra/Tables.text
new file mode 100644
index 0000000..71b93ca
--- /dev/null
+++ b/tests/php/extra/Tables.text
@@ -0,0 +1,104 @@
+# 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
+
diff --git a/tests/php/extra/Tables.xhtml b/tests/php/extra/Tables.xhtml
new file mode 100644
index 0000000..e36286c
--- /dev/null
+++ b/tests/php/extra/Tables.xhtml
@@ -0,0 +1,310 @@
+<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> \ No newline at end of file
diff --git a/tests/php/extra/test.cfg b/tests/php/extra/test.cfg
new file mode 100644
index 0000000..9c10984
--- /dev/null
+++ b/tests/php/extra/test.cfg
@@ -0,0 +1,6 @@
+[DEFAULT]
+extensions=extra
+normalize=1
+input_ext=.text
+output_ext=.xhtml
+skip=1
diff --git a/tests/php/test.cfg b/tests/php/test.cfg
new file mode 100644
index 0000000..645d72b
--- /dev/null
+++ b/tests/php/test.cfg
@@ -0,0 +1,5 @@
+[DEFAULT]
+normalize=1
+input_ext=.text
+output_ext=.xhtml
+skip=1