aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@dev.westell.com>2010-02-22 22:59:20 -0500
committerWaylan Limberg <waylan@dev.westell.com>2010-02-22 22:59:20 -0500
commitb9458647a471561cf121edc03b2b8fd5aadff316 (patch)
tree21810589a1197d8c14ad825ee202b11b979eaaad /tests
parentb96331c66b8421d10f9e040758c82badf97191b1 (diff)
parent3eb86a20f0b20e44b34087c16e20ff40cead7420 (diff)
downloadmarkdown-b9458647a471561cf121edc03b2b8fd5aadff316.tar.gz
markdown-b9458647a471561cf121edc03b2b8fd5aadff316.tar.bz2
markdown-b9458647a471561cf121edc03b2b8fd5aadff316.zip
Merge branch 'tests'
Diffstat (limited to 'tests')
-rw-r--r--tests/__init__.py118
-rw-r--r--tests/basic/amps-and-angle-encoding.html (renamed from tests/markdown-test/amps-and-angle-encoding.html)0
-rw-r--r--tests/basic/amps-and-angle-encoding.txt (renamed from tests/markdown-test/amps-and-angle-encoding.txt)0
-rw-r--r--tests/basic/angle-links-and-img.html (renamed from tests/markdown-test/angle-links-and-img.html)0
-rw-r--r--tests/basic/angle-links-and-img.txt (renamed from tests/markdown-test/angle-links-and-img.txt)0
-rw-r--r--tests/basic/auto-links.html (renamed from tests/markdown-test/auto-links.html)0
-rw-r--r--tests/basic/auto-links.txt (renamed from tests/markdown-test/auto-links.txt)0
-rw-r--r--tests/basic/backlash-escapes.html (renamed from tests/markdown-test/backlash-escapes.html)0
-rw-r--r--tests/basic/backlash-escapes.txt (renamed from tests/markdown-test/backlash-escapes.txt)0
-rw-r--r--tests/basic/benchmark.dat (renamed from tests/markdown-test/benchmark.dat)0
-rw-r--r--tests/basic/blockquotes-with-code-blocks.html (renamed from tests/markdown-test/blockquotes-with-code-blocks.html)0
-rw-r--r--tests/basic/blockquotes-with-code-blocks.txt (renamed from tests/markdown-test/blockquotes-with-code-blocks.txt)0
-rw-r--r--tests/basic/codeblock-in-list.html (renamed from tests/markdown-test/codeblock-in-list.html)0
-rw-r--r--tests/basic/codeblock-in-list.txt (renamed from tests/markdown-test/codeblock-in-list.txt)0
-rw-r--r--tests/basic/hard-wrapped.html (renamed from tests/markdown-test/hard-wrapped.html)0
-rw-r--r--tests/basic/hard-wrapped.txt (renamed from tests/markdown-test/hard-wrapped.txt)0
-rw-r--r--tests/basic/horizontal-rules.html (renamed from tests/markdown-test/horizontal-rules.html)0
-rw-r--r--tests/basic/horizontal-rules.txt (renamed from tests/markdown-test/horizontal-rules.txt)0
-rw-r--r--tests/basic/inline-html-advanced.html (renamed from tests/markdown-test/inline-html-advanced.html)0
-rw-r--r--tests/basic/inline-html-advanced.txt (renamed from tests/markdown-test/inline-html-advanced.txt)0
-rw-r--r--tests/basic/inline-html-comments.html (renamed from tests/markdown-test/inline-html-comments.html)0
-rw-r--r--tests/basic/inline-html-comments.txt (renamed from tests/markdown-test/inline-html-comments.txt)0
-rw-r--r--tests/basic/inline-html-simple.html (renamed from tests/markdown-test/inline-html-simple.html)0
-rw-r--r--tests/basic/inline-html-simple.txt (renamed from tests/markdown-test/inline-html-simple.txt)0
-rw-r--r--tests/basic/links-inline.html (renamed from tests/markdown-test/links-inline.html)0
-rw-r--r--tests/basic/links-inline.txt (renamed from tests/markdown-test/links-inline.txt)0
-rw-r--r--tests/basic/links-reference.html (renamed from tests/markdown-test/links-reference.html)0
-rw-r--r--tests/basic/links-reference.txt (renamed from tests/markdown-test/links-reference.txt)0
-rw-r--r--tests/basic/literal-quotes.html (renamed from tests/markdown-test/literal-quotes.html)0
-rw-r--r--tests/basic/literal-quotes.txt (renamed from tests/markdown-test/literal-quotes.txt)0
-rw-r--r--tests/basic/markdown-documentation-basics.html (renamed from tests/markdown-test/markdown-documentation-basics.html)0
-rw-r--r--tests/basic/markdown-documentation-basics.txt (renamed from tests/markdown-test/markdown-documentation-basics.txt)0
-rw-r--r--tests/basic/markdown-syntax.html (renamed from tests/extensions-x-def_list/markdown-syntax.html)10
-rw-r--r--tests/basic/markdown-syntax.txt (renamed from tests/extensions-x-def_list/markdown-syntax.txt)0
-rw-r--r--tests/basic/nested-blockquotes.html (renamed from tests/markdown-test/nested-blockquotes.html)0
-rw-r--r--tests/basic/nested-blockquotes.txt (renamed from tests/markdown-test/nested-blockquotes.txt)0
-rw-r--r--tests/basic/ordered-and-unordered-list.html (renamed from tests/markdown-test/ordered-and-unordered-list.html)0
-rw-r--r--tests/basic/ordered-and-unordered-list.txt (renamed from tests/markdown-test/ordered-and-unordered-list.txt)0
-rw-r--r--tests/basic/strong-and-em-together.html (renamed from tests/markdown-test/strong-and-em-together.html)0
-rw-r--r--tests/basic/strong-and-em-together.txt (renamed from tests/markdown-test/strong-and-em-together.txt)0
-rw-r--r--tests/basic/tabs.html (renamed from tests/markdown-test/tabs.html)4
-rw-r--r--tests/basic/tabs.txt (renamed from tests/markdown-test/tabs.txt)0
-rw-r--r--tests/basic/tidyness.html (renamed from tests/markdown-test/tidyness.html)0
-rw-r--r--tests/basic/tidyness.txt (renamed from tests/markdown-test/tidyness.txt)0
-rw-r--r--tests/extensions-x-wikilinks/wikilinks.html6
-rw-r--r--tests/extensions/codehilite.html (renamed from tests/extensions-x-codehilite/code.html)4
-rw-r--r--tests/extensions/codehilite.txt (renamed from tests/extensions-x-codehilite/code.txt)0
-rw-r--r--tests/extensions/extra/abbr.html (renamed from tests/extensions-x-abbr/abbr.html)0
-rw-r--r--tests/extensions/extra/abbr.txt (renamed from tests/extensions-x-abbr/abbr.txt)0
-rw-r--r--tests/extensions/extra/footnote.html (renamed from tests/extensions-x-footnotes/footnote.html)0
-rw-r--r--tests/extensions/extra/footnote.txt (renamed from tests/extensions-x-footnotes/footnote.txt)0
-rw-r--r--tests/extensions/extra/loose_def_list.html (renamed from tests/extensions-x-def_list/loose_def_list.html)0
-rw-r--r--tests/extensions/extra/loose_def_list.txt (renamed from tests/extensions-x-def_list/loose_def_list.txt)0
-rw-r--r--tests/extensions/extra/markdown-syntax.html (renamed from tests/markdown-test/markdown-syntax.html)10
-rw-r--r--tests/extensions/extra/markdown-syntax.txt (renamed from tests/markdown-test/markdown-syntax.txt)0
-rw-r--r--tests/extensions/extra/named_markers.html (renamed from tests/extensions-x-footnotes/named_markers.html)0
-rw-r--r--tests/extensions/extra/named_markers.txt (renamed from tests/extensions-x-footnotes/named_markers.txt)0
-rw-r--r--tests/extensions/extra/raw-html.html (renamed from tests/extensions-x-extra/raw-html.html)0
-rw-r--r--tests/extensions/extra/raw-html.txt (renamed from tests/extensions-x-extra/raw-html.txt)0
-rw-r--r--tests/extensions/extra/simple_def-lists.html (renamed from tests/extensions-x-def_list/simple_def-lists.html)0
-rw-r--r--tests/extensions/extra/simple_def-lists.txt (renamed from tests/extensions-x-def_list/simple_def-lists.txt)0
-rw-r--r--tests/extensions/extra/tables.html (renamed from tests/extensions-x-tables/tables.html)0
-rw-r--r--tests/extensions/extra/tables.txt (renamed from tests/extensions-x-tables/tables.txt)0
-rw-r--r--tests/extensions/extra/test.cfg17
-rw-r--r--tests/extensions/test.cfg17
-rw-r--r--tests/extensions/toc.html (renamed from tests/extensions-x-toc/syntax-toc.html)10
-rw-r--r--tests/extensions/toc.txt (renamed from tests/extensions-x-toc/syntax-toc.txt)0
-rw-r--r--tests/extensions/toc_invalid.html (renamed from tests/extensions-x-toc/invalid.html)0
-rw-r--r--tests/extensions/toc_invalid.txt (renamed from tests/extensions-x-toc/invalid.txt)0
-rw-r--r--tests/extensions/toc_nested.html (renamed from tests/extensions-x-toc/nested.html)0
-rw-r--r--tests/extensions/toc_nested.txt (renamed from tests/extensions-x-toc/nested.txt)0
-rw-r--r--tests/extensions/toc_nested2.html (renamed from tests/extensions-x-toc/nested2.html)0
-rw-r--r--tests/extensions/toc_nested2.txt (renamed from tests/extensions-x-toc/nested2.txt)0
-rw-r--r--tests/extensions/wikilinks.html9
-rw-r--r--tests/extensions/wikilinks.txt (renamed from tests/extensions-x-wikilinks/wikilinks.txt)0
-rw-r--r--tests/html4/test.cfg2
-rw-r--r--tests/misc/em-around-links.html13
-rw-r--r--tests/misc/multi-paragraph-block-quote.html2
-rw-r--r--tests/misc/tabs-in-lists.html2
-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
-rw-r--r--tests/pl/Tests_2004/Amps and angle encoding.html17
-rw-r--r--tests/pl/Tests_2004/Amps and angle encoding.text21
-rw-r--r--tests/pl/Tests_2004/Auto links.html18
-rw-r--r--tests/pl/Tests_2004/Auto links.text13
-rw-r--r--tests/pl/Tests_2004/Backslash escapes.html102
-rw-r--r--tests/pl/Tests_2004/Backslash escapes.text104
-rw-r--r--tests/pl/Tests_2004/Blockquotes with code blocks.html15
-rw-r--r--tests/pl/Tests_2004/Blockquotes with code blocks.text11
-rw-r--r--tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.html8
-rw-r--r--tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.text8
-rw-r--r--tests/pl/Tests_2004/Horizontal rules.html71
-rw-r--r--tests/pl/Tests_2004/Horizontal rules.text67
-rw-r--r--tests/pl/Tests_2004/Inline HTML (Advanced).html14
-rw-r--r--tests/pl/Tests_2004/Inline HTML (Advanced).text14
-rw-r--r--tests/pl/Tests_2004/Inline HTML (Simple).html72
-rw-r--r--tests/pl/Tests_2004/Inline HTML (Simple).text69
-rw-r--r--tests/pl/Tests_2004/Inline HTML comments.html13
-rw-r--r--tests/pl/Tests_2004/Inline HTML comments.text13
-rw-r--r--tests/pl/Tests_2004/Links, inline style.html9
-rw-r--r--tests/pl/Tests_2004/Links, inline style.text9
-rw-r--r--tests/pl/Tests_2004/Links, reference style.html18
-rw-r--r--tests/pl/Tests_2004/Links, reference style.text31
-rw-r--r--tests/pl/Tests_2004/Literal quotes in titles.html3
-rw-r--r--tests/pl/Tests_2004/Literal quotes in titles.text7
-rw-r--r--tests/pl/Tests_2004/Markdown Documentation - Basics.html314
-rw-r--r--tests/pl/Tests_2004/Markdown Documentation - Basics.text306
-rw-r--r--tests/pl/Tests_2004/Markdown Documentation - Syntax.html942
-rw-r--r--tests/pl/Tests_2004/Markdown Documentation - Syntax.text888
-rw-r--r--tests/pl/Tests_2004/Nested blockquotes.html9
-rw-r--r--tests/pl/Tests_2004/Nested blockquotes.text5
-rw-r--r--tests/pl/Tests_2004/Ordered and unordered lists.html137
-rw-r--r--tests/pl/Tests_2004/Ordered and unordered lists.text122
-rw-r--r--tests/pl/Tests_2004/Strong and em together.html7
-rw-r--r--tests/pl/Tests_2004/Strong and em together.text7
-rw-r--r--tests/pl/Tests_2004/Tabs.html25
-rw-r--r--tests/pl/Tests_2004/Tabs.text21
-rw-r--r--tests/pl/Tests_2004/Tidyness.html8
-rw-r--r--tests/pl/Tests_2004/Tidyness.text5
-rw-r--r--tests/pl/Tests_2004/Yuri-Attributes.html28
-rw-r--r--tests/pl/Tests_2004/Yuri-Attributes.text19
-rw-r--r--tests/pl/Tests_2004/Yuri-Email.html18
-rw-r--r--tests/pl/Tests_2004/Yuri-Email.text7
-rw-r--r--tests/pl/Tests_2004/Yuri-Footnotes.html46
-rw-r--r--tests/pl/Tests_2004/Yuri-Footnotes.text32
-rw-r--r--tests/pl/Tests_2004/Yuri-Links-in-Headers.html15
-rw-r--r--tests/pl/Tests_2004/Yuri-Links-in-Headers.text18
-rw-r--r--tests/pl/Tests_2004/test.cfg10
-rw-r--r--tests/pl/Tests_2007/Amps and angle encoding.html17
-rw-r--r--tests/pl/Tests_2007/Amps and angle encoding.text21
-rw-r--r--tests/pl/Tests_2007/Auto links.html18
-rw-r--r--tests/pl/Tests_2007/Auto links.text13
-rw-r--r--tests/pl/Tests_2007/Backslash escapes.html118
-rw-r--r--tests/pl/Tests_2007/Backslash escapes.text120
-rw-r--r--tests/pl/Tests_2007/Blockquotes with code blocks.html15
-rw-r--r--tests/pl/Tests_2007/Blockquotes with code blocks.text11
-rw-r--r--tests/pl/Tests_2007/Code Blocks.html18
-rw-r--r--tests/pl/Tests_2007/Code Blocks.text14
-rw-r--r--tests/pl/Tests_2007/Code Spans.html5
-rw-r--r--tests/pl/Tests_2007/Code Spans.text5
-rw-r--r--tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.html8
-rw-r--r--tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.text8
-rw-r--r--tests/pl/Tests_2007/Horizontal rules.html71
-rw-r--r--tests/pl/Tests_2007/Horizontal rules.text67
-rw-r--r--tests/pl/Tests_2007/Images.html21
-rw-r--r--tests/pl/Tests_2007/Images.text26
-rw-r--r--tests/pl/Tests_2007/Inline HTML (Advanced).html30
-rw-r--r--tests/pl/Tests_2007/Inline HTML (Advanced).text30
-rw-r--r--tests/pl/Tests_2007/Inline HTML (Simple).html72
-rw-r--r--tests/pl/Tests_2007/Inline HTML (Simple).text69
-rw-r--r--tests/pl/Tests_2007/Inline HTML comments.html13
-rw-r--r--tests/pl/Tests_2007/Inline HTML comments.text13
-rw-r--r--tests/pl/Tests_2007/Links, inline style.html23
-rw-r--r--tests/pl/Tests_2007/Links, inline style.text24
-rw-r--r--tests/pl/Tests_2007/Links, reference style.html52
-rw-r--r--tests/pl/Tests_2007/Links, reference style.text71
-rw-r--r--tests/pl/Tests_2007/Links, shortcut references.html9
-rw-r--r--tests/pl/Tests_2007/Links, shortcut references.text20
-rw-r--r--tests/pl/Tests_2007/Literal quotes in titles.html3
-rw-r--r--tests/pl/Tests_2007/Literal quotes in titles.text7
-rw-r--r--tests/pl/Tests_2007/Markdown Documentation - Basics.html314
-rw-r--r--tests/pl/Tests_2007/Markdown Documentation - Basics.text306
-rw-r--r--tests/pl/Tests_2007/Markdown Documentation - Syntax.html942
-rw-r--r--tests/pl/Tests_2007/Markdown Documentation - Syntax.text888
-rw-r--r--tests/pl/Tests_2007/Nested blockquotes.html9
-rw-r--r--tests/pl/Tests_2007/Nested blockquotes.text5
-rw-r--r--tests/pl/Tests_2007/Ordered and unordered lists.html148
-rw-r--r--tests/pl/Tests_2007/Ordered and unordered lists.text131
-rw-r--r--tests/pl/Tests_2007/Strong and em together.html7
-rw-r--r--tests/pl/Tests_2007/Strong and em together.text7
-rw-r--r--tests/pl/Tests_2007/Tabs.html25
-rw-r--r--tests/pl/Tests_2007/Tabs.text21
-rw-r--r--tests/pl/Tests_2007/Tidyness.html8
-rw-r--r--tests/pl/Tests_2007/Tidyness.text5
-rw-r--r--tests/pl/Tests_2007/test.cfg5
-rw-r--r--tests/plugins.py115
-rw-r--r--tests/safe_mode/remove.html34
-rw-r--r--tests/safe_mode/remove.txt69
-rw-r--r--tests/safe_mode/replace.html34
-rw-r--r--tests/safe_mode/replace.txt69
-rw-r--r--tests/safe_mode/test.cfg8
-rw-r--r--tests/test_apis.py214
-rw-r--r--tests/util.py15
242 files changed, 10719 insertions, 35 deletions
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..bad2a37
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,118 @@
+import os
+import markdown
+import codecs
+import difflib
+try:
+ import nose
+except ImportError:
+ raise ImportError, "The nose testing framework is required to run " \
+ "Python-Markdown tests. Run `easy_install nose` " \
+ "to install the latest version."
+import util
+from plugins import HtmlOutput, Markdown
+try:
+ import tidy
+except ImportError:
+ tidy = None
+
+
+test_dir = os.path.abspath(os.path.dirname(__file__))
+
+def relpath(path, start=test_dir):
+ """ reimplement relpath for python 2.3-2.5 from 2.6 """
+ if not path:
+ raise ValueError('no path secified')
+ start_list = os.path.abspath(start).split(os.path.sep)
+ path_list = os.path.abspath(path).split(os.path.sep)
+ # Work out how much of the filepath is shared by start and path.
+ i = len(os.path.commonprefix([start_list, path_list]))
+ rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:]
+ if not rel_list:
+ return test_dir
+ return os.path.join(*rel_list)
+
+def get_section(file, config):
+ """ Get name of config section for given file. """
+ filename = os.path.basename(file)
+ if config.has_section(filename):
+ return filename
+ else:
+ return 'DEFAULT'
+
+def get_args(file, config):
+ """ Get args to pass to markdown from config for a given file. """
+ args = {}
+ section = get_section(file, config)
+ for key in ['extensions', 'safe_mode', 'output_format']:
+ args[key] = config.get(section, key)
+ return args
+
+def normalize(text):
+ """ Normalize whitespace for a string of html using tidy. """
+ return str(tidy.parseString(text.encode('utf-8'),
+ drop_empty_paras=0,
+ fix_backslash=0,
+ fix_bad_comments=0,
+ fix_uri=0,
+ join_styles=0,
+ lower_literals=0,
+ merge_divs=0,
+ output_xhtml=1,
+ quote_ampersand=0,
+ show_body_only=1,
+ char_encoding='utf8',
+ newline='LF')).decode('string-escape')
+
+class CheckSyntax(object):
+ def __init__(self, description=None):
+ if description:
+ self.description = 'TestSyntax: "%s"' % description
+
+ def __call__(self, file, config):
+ """ Compare expected output to actual output and report result. """
+ cfg_section = get_section(file, config)
+ if config.getboolean(cfg_section, 'skip'):
+ raise nose.plugins.skip.SkipTest, 'Test skipped per config.'
+ input_file = file + config.get(cfg_section, 'input_ext')
+ input = codecs.open(input_file, encoding="utf-8").read()
+ output_file = file + config.get(cfg_section, 'output_ext')
+ expected_output = codecs.open(output_file, encoding="utf-8").read()
+ output = markdown.markdown(input, **get_args(file, config))
+ if tidy and config.getboolean(cfg_section, 'normalize'):
+ # Normalize whitespace before comparing.
+ expected_output = normalize(expected_output)
+ output = normalize(output)
+ elif config.getboolean(cfg_section, 'normalize'):
+ # Tidy is not available. Skip this test.
+ raise nose.plugins.skip.SkipTest, 'Test skipped. Tidy not available in system.'
+ diff = [l for l in difflib.unified_diff(expected_output.splitlines(True),
+ output.splitlines(True),
+ output_file,
+ 'actual_output.html',
+ n=3)]
+ if diff:
+ raise util.MarkdownSyntaxError('Output from "%s" failed to match expected '
+ 'output.\n\n%s' % (input_file, ''.join(diff)))
+
+def TestSyntax():
+ for dir_name, sub_dirs, files in os.walk(test_dir):
+ # Get dir specific config settings.
+ config = util.CustomConfigParser({'extensions': '',
+ 'safe_mode': False,
+ 'output_format': 'xhtml1',
+ 'normalize': '0',
+ 'skip': '0',
+ 'input_ext': '.txt',
+ 'output_ext': '.html'})
+ config.read(os.path.join(dir_name, 'test.cfg'))
+ # Loop through files and generate tests.
+ for file in files:
+ root, ext = os.path.splitext(file)
+ if ext == config.get(get_section(file, config), 'input_ext'):
+ path = os.path.join(dir_name, root)
+ check_syntax = CheckSyntax(description=relpath(path, test_dir))
+ yield check_syntax, path, config
+
+def run():
+ nose.main(addplugins=[HtmlOutput(), Markdown()])
+
diff --git a/tests/markdown-test/amps-and-angle-encoding.html b/tests/basic/amps-and-angle-encoding.html
index 2c466c1..2c466c1 100644
--- a/tests/markdown-test/amps-and-angle-encoding.html
+++ b/tests/basic/amps-and-angle-encoding.html
diff --git a/tests/markdown-test/amps-and-angle-encoding.txt b/tests/basic/amps-and-angle-encoding.txt
index 0e9527f..0e9527f 100644
--- a/tests/markdown-test/amps-and-angle-encoding.txt
+++ b/tests/basic/amps-and-angle-encoding.txt
diff --git a/tests/markdown-test/angle-links-and-img.html b/tests/basic/angle-links-and-img.html
index 1ca3b0b..1ca3b0b 100644
--- a/tests/markdown-test/angle-links-and-img.html
+++ b/tests/basic/angle-links-and-img.html
diff --git a/tests/markdown-test/angle-links-and-img.txt b/tests/basic/angle-links-and-img.txt
index 1dbf404..1dbf404 100644
--- a/tests/markdown-test/angle-links-and-img.txt
+++ b/tests/basic/angle-links-and-img.txt
diff --git a/tests/markdown-test/auto-links.html b/tests/basic/auto-links.html
index 7481fe2..7481fe2 100644
--- a/tests/markdown-test/auto-links.html
+++ b/tests/basic/auto-links.html
diff --git a/tests/markdown-test/auto-links.txt b/tests/basic/auto-links.txt
index a188b40..a188b40 100644
--- a/tests/markdown-test/auto-links.txt
+++ b/tests/basic/auto-links.txt
diff --git a/tests/markdown-test/backlash-escapes.html b/tests/basic/backlash-escapes.html
index 876775f..876775f 100644
--- a/tests/markdown-test/backlash-escapes.html
+++ b/tests/basic/backlash-escapes.html
diff --git a/tests/markdown-test/backlash-escapes.txt b/tests/basic/backlash-escapes.txt
index 16447a0..16447a0 100644
--- a/tests/markdown-test/backlash-escapes.txt
+++ b/tests/basic/backlash-escapes.txt
diff --git a/tests/markdown-test/benchmark.dat b/tests/basic/benchmark.dat
index 3d549dd..3d549dd 100644
--- a/tests/markdown-test/benchmark.dat
+++ b/tests/basic/benchmark.dat
diff --git a/tests/markdown-test/blockquotes-with-code-blocks.html b/tests/basic/blockquotes-with-code-blocks.html
index 5fc98b1..5fc98b1 100644
--- a/tests/markdown-test/blockquotes-with-code-blocks.html
+++ b/tests/basic/blockquotes-with-code-blocks.html
diff --git a/tests/markdown-test/blockquotes-with-code-blocks.txt b/tests/basic/blockquotes-with-code-blocks.txt
index c31d171..c31d171 100644
--- a/tests/markdown-test/blockquotes-with-code-blocks.txt
+++ b/tests/basic/blockquotes-with-code-blocks.txt
diff --git a/tests/markdown-test/codeblock-in-list.html b/tests/basic/codeblock-in-list.html
index 49edd56..49edd56 100644
--- a/tests/markdown-test/codeblock-in-list.html
+++ b/tests/basic/codeblock-in-list.html
diff --git a/tests/markdown-test/codeblock-in-list.txt b/tests/basic/codeblock-in-list.txt
index 87d4e3b..87d4e3b 100644
--- a/tests/markdown-test/codeblock-in-list.txt
+++ b/tests/basic/codeblock-in-list.txt
diff --git a/tests/markdown-test/hard-wrapped.html b/tests/basic/hard-wrapped.html
index e28e900..e28e900 100644
--- a/tests/markdown-test/hard-wrapped.html
+++ b/tests/basic/hard-wrapped.html
diff --git a/tests/markdown-test/hard-wrapped.txt b/tests/basic/hard-wrapped.txt
index f8a5b27..f8a5b27 100644
--- a/tests/markdown-test/hard-wrapped.txt
+++ b/tests/basic/hard-wrapped.txt
diff --git a/tests/markdown-test/horizontal-rules.html b/tests/basic/horizontal-rules.html
index 478e8c5..478e8c5 100644
--- a/tests/markdown-test/horizontal-rules.html
+++ b/tests/basic/horizontal-rules.html
diff --git a/tests/markdown-test/horizontal-rules.txt b/tests/basic/horizontal-rules.txt
index 1594bda..1594bda 100644
--- a/tests/markdown-test/horizontal-rules.txt
+++ b/tests/basic/horizontal-rules.txt
diff --git a/tests/markdown-test/inline-html-advanced.html b/tests/basic/inline-html-advanced.html
index af1dec1..af1dec1 100644
--- a/tests/markdown-test/inline-html-advanced.html
+++ b/tests/basic/inline-html-advanced.html
diff --git a/tests/markdown-test/inline-html-advanced.txt b/tests/basic/inline-html-advanced.txt
index 9d71ddc..9d71ddc 100644
--- a/tests/markdown-test/inline-html-advanced.txt
+++ b/tests/basic/inline-html-advanced.txt
diff --git a/tests/markdown-test/inline-html-comments.html b/tests/basic/inline-html-comments.html
index 0d4cad9..0d4cad9 100644
--- a/tests/markdown-test/inline-html-comments.html
+++ b/tests/basic/inline-html-comments.html
diff --git a/tests/markdown-test/inline-html-comments.txt b/tests/basic/inline-html-comments.txt
index 41d830d..41d830d 100644
--- a/tests/markdown-test/inline-html-comments.txt
+++ b/tests/basic/inline-html-comments.txt
diff --git a/tests/markdown-test/inline-html-simple.html b/tests/basic/inline-html-simple.html
index cb10451..cb10451 100644
--- a/tests/markdown-test/inline-html-simple.html
+++ b/tests/basic/inline-html-simple.html
diff --git a/tests/markdown-test/inline-html-simple.txt b/tests/basic/inline-html-simple.txt
index 14aa2dc..14aa2dc 100644
--- a/tests/markdown-test/inline-html-simple.txt
+++ b/tests/basic/inline-html-simple.txt
diff --git a/tests/markdown-test/links-inline.html b/tests/basic/links-inline.html
index 707937a..707937a 100644
--- a/tests/markdown-test/links-inline.html
+++ b/tests/basic/links-inline.html
diff --git a/tests/markdown-test/links-inline.txt b/tests/basic/links-inline.txt
index 4d0c1c2..4d0c1c2 100644
--- a/tests/markdown-test/links-inline.txt
+++ b/tests/basic/links-inline.txt
diff --git a/tests/markdown-test/links-reference.html b/tests/basic/links-reference.html
index 165c71a..165c71a 100644
--- a/tests/markdown-test/links-reference.html
+++ b/tests/basic/links-reference.html
diff --git a/tests/markdown-test/links-reference.txt b/tests/basic/links-reference.txt
index b2fa734..b2fa734 100644
--- a/tests/markdown-test/links-reference.txt
+++ b/tests/basic/links-reference.txt
diff --git a/tests/markdown-test/literal-quotes.html b/tests/basic/literal-quotes.html
index 0342589..0342589 100644
--- a/tests/markdown-test/literal-quotes.html
+++ b/tests/basic/literal-quotes.html
diff --git a/tests/markdown-test/literal-quotes.txt b/tests/basic/literal-quotes.txt
index 29d0e42..29d0e42 100644
--- a/tests/markdown-test/literal-quotes.txt
+++ b/tests/basic/literal-quotes.txt
diff --git a/tests/markdown-test/markdown-documentation-basics.html b/tests/basic/markdown-documentation-basics.html
index 3bcaea9..3bcaea9 100644
--- a/tests/markdown-test/markdown-documentation-basics.html
+++ b/tests/basic/markdown-documentation-basics.html
diff --git a/tests/markdown-test/markdown-documentation-basics.txt b/tests/basic/markdown-documentation-basics.txt
index 486055c..486055c 100644
--- a/tests/markdown-test/markdown-documentation-basics.txt
+++ b/tests/basic/markdown-documentation-basics.txt
diff --git a/tests/extensions-x-def_list/markdown-syntax.html b/tests/basic/markdown-syntax.html
index 2f63b4b..038c9d1 100644
--- a/tests/extensions-x-def_list/markdown-syntax.html
+++ b/tests/basic/markdown-syntax.html
@@ -484,12 +484,12 @@ on a line by itself:</p>
<p>That is:</p>
<ul>
<li>Square brackets containing the link identifier (optionally
-indented from the left margin using up to three spaces);</li>
+ indented from the left margin using up to three spaces);</li>
<li>followed by a colon;</li>
<li>followed by one or more spaces (or tabs);</li>
<li>followed by the URL for the link;</li>
<li>optionally followed by a title attribute for the link, enclosed
-in double or single quotes.</li>
+ in double or single quotes.</li>
</ul>
<p>The link URL may, optionally, be surrounded by angle brackets:</p>
<pre><code>[id]: &lt;http://example.com/&gt; "Optional Title Here"
@@ -660,10 +660,10 @@ for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
<ul>
<li>An exclamation mark: <code>!</code>;</li>
<li>followed by a set of square brackets, containing the <code>alt</code>
-attribute text for the image;</li>
+ attribute text for the image;</li>
<li>followed by a set of parentheses, containing the URL or path to
-the image, and an optional <code>title</code> attribute enclosed in double
-or single quotes.</li>
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
</ul>
<p>Reference-style image syntax looks like this:</p>
<pre><code>![Alt text][id]
diff --git a/tests/extensions-x-def_list/markdown-syntax.txt b/tests/basic/markdown-syntax.txt
index dabd75c..dabd75c 100644
--- a/tests/extensions-x-def_list/markdown-syntax.txt
+++ b/tests/basic/markdown-syntax.txt
diff --git a/tests/markdown-test/nested-blockquotes.html b/tests/basic/nested-blockquotes.html
index f1b017e..f1b017e 100644
--- a/tests/markdown-test/nested-blockquotes.html
+++ b/tests/basic/nested-blockquotes.html
diff --git a/tests/markdown-test/nested-blockquotes.txt b/tests/basic/nested-blockquotes.txt
index ed3c624..ed3c624 100644
--- a/tests/markdown-test/nested-blockquotes.txt
+++ b/tests/basic/nested-blockquotes.txt
diff --git a/tests/markdown-test/ordered-and-unordered-list.html b/tests/basic/ordered-and-unordered-list.html
index 090c43c..090c43c 100644
--- a/tests/markdown-test/ordered-and-unordered-list.html
+++ b/tests/basic/ordered-and-unordered-list.html
diff --git a/tests/markdown-test/ordered-and-unordered-list.txt b/tests/basic/ordered-and-unordered-list.txt
index 621db58..621db58 100644
--- a/tests/markdown-test/ordered-and-unordered-list.txt
+++ b/tests/basic/ordered-and-unordered-list.txt
diff --git a/tests/markdown-test/strong-and-em-together.html b/tests/basic/strong-and-em-together.html
index 7bf5163..7bf5163 100644
--- a/tests/markdown-test/strong-and-em-together.html
+++ b/tests/basic/strong-and-em-together.html
diff --git a/tests/markdown-test/strong-and-em-together.txt b/tests/basic/strong-and-em-together.txt
index 95ee690..95ee690 100644
--- a/tests/markdown-test/strong-and-em-together.txt
+++ b/tests/basic/strong-and-em-together.txt
diff --git a/tests/markdown-test/tabs.html b/tests/basic/tabs.html
index b26391b..3c11f14 100644
--- a/tests/markdown-test/tabs.html
+++ b/tests/basic/tabs.html
@@ -1,11 +1,11 @@
<ul>
<li>
<p>this is a list item
-indented with tabs</p>
+ indented with tabs</p>
</li>
<li>
<p>this is a list item
-indented with spaces</p>
+ indented with spaces</p>
</li>
</ul>
<p>Code:</p>
diff --git a/tests/markdown-test/tabs.txt b/tests/basic/tabs.txt
index 589d113..589d113 100644
--- a/tests/markdown-test/tabs.txt
+++ b/tests/basic/tabs.txt
diff --git a/tests/markdown-test/tidyness.html b/tests/basic/tidyness.html
index 52b2eaf..52b2eaf 100644
--- a/tests/markdown-test/tidyness.html
+++ b/tests/basic/tidyness.html
diff --git a/tests/markdown-test/tidyness.txt b/tests/basic/tidyness.txt
index 5f18b8d..5f18b8d 100644
--- a/tests/markdown-test/tidyness.txt
+++ b/tests/basic/tidyness.txt
diff --git a/tests/extensions-x-wikilinks/wikilinks.html b/tests/extensions-x-wikilinks/wikilinks.html
deleted file mode 100644
index 1a38535..0000000
--- a/tests/extensions-x-wikilinks/wikilinks.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<p>Some text with a <a class="wikilink" href="/WikiLink/">WikiLink</a>.</p>
-<p>A link with <a class="wikilink" href="/white_space_and_underscores/">white space and_underscores</a> and a empty one.</p>
-<p>And a <a href="http://example.com/RealLink">RealLink</a>.</p>
-<p><a href="http://example.com/And_A_AutoLink">http://example.com/And_A_AutoLink</a></p>
-<p>And a <a href="/MarkdownLink/" title="A MarkdownLink">MarkdownLink</a> for
-completeness.</p> \ No newline at end of file
diff --git a/tests/extensions-x-codehilite/code.html b/tests/extensions/codehilite.html
index 6a8ee91..366682e 100644
--- a/tests/extensions-x-codehilite/code.html
+++ b/tests/extensions/codehilite.html
@@ -1,10 +1,10 @@
<p>Some text</p>
-<table class="codehilitetable"><tr><td class="linenos"><pre>1
+<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
-6</pre></td><td class="code"><div class="codehilite"><pre><span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pattern</span><span class="p">)</span> <span class="p">:</span>
+6</pre></div></td><td class="code"><div class="codehilite"><pre><span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pattern</span><span class="p">)</span> <span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pattern</span> <span class="o">=</span> <span class="n">pattern</span>
<span class="bp">self</span><span class="o">.</span><span class="n">compiled_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;^(.*)</span><span class="si">%s</span><span class="s">(.*)$&quot;</span> <span class="o">%</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
diff --git a/tests/extensions-x-codehilite/code.txt b/tests/extensions/codehilite.txt
index 6c62e6a..6c62e6a 100644
--- a/tests/extensions-x-codehilite/code.txt
+++ b/tests/extensions/codehilite.txt
diff --git a/tests/extensions-x-abbr/abbr.html b/tests/extensions/extra/abbr.html
index 456524e..456524e 100644
--- a/tests/extensions-x-abbr/abbr.html
+++ b/tests/extensions/extra/abbr.html
diff --git a/tests/extensions-x-abbr/abbr.txt b/tests/extensions/extra/abbr.txt
index 991bf15..991bf15 100644
--- a/tests/extensions-x-abbr/abbr.txt
+++ b/tests/extensions/extra/abbr.txt
diff --git a/tests/extensions-x-footnotes/footnote.html b/tests/extensions/extra/footnote.html
index 6556dab..6556dab 100644
--- a/tests/extensions-x-footnotes/footnote.html
+++ b/tests/extensions/extra/footnote.html
diff --git a/tests/extensions-x-footnotes/footnote.txt b/tests/extensions/extra/footnote.txt
index 07188d0..07188d0 100644
--- a/tests/extensions-x-footnotes/footnote.txt
+++ b/tests/extensions/extra/footnote.txt
diff --git a/tests/extensions-x-def_list/loose_def_list.html b/tests/extensions/extra/loose_def_list.html
index 98fdec8..98fdec8 100644
--- a/tests/extensions-x-def_list/loose_def_list.html
+++ b/tests/extensions/extra/loose_def_list.html
diff --git a/tests/extensions-x-def_list/loose_def_list.txt b/tests/extensions/extra/loose_def_list.txt
index 24cd6a4..24cd6a4 100644
--- a/tests/extensions-x-def_list/loose_def_list.txt
+++ b/tests/extensions/extra/loose_def_list.txt
diff --git a/tests/markdown-test/markdown-syntax.html b/tests/extensions/extra/markdown-syntax.html
index 2f63b4b..038c9d1 100644
--- a/tests/markdown-test/markdown-syntax.html
+++ b/tests/extensions/extra/markdown-syntax.html
@@ -484,12 +484,12 @@ on a line by itself:</p>
<p>That is:</p>
<ul>
<li>Square brackets containing the link identifier (optionally
-indented from the left margin using up to three spaces);</li>
+ indented from the left margin using up to three spaces);</li>
<li>followed by a colon;</li>
<li>followed by one or more spaces (or tabs);</li>
<li>followed by the URL for the link;</li>
<li>optionally followed by a title attribute for the link, enclosed
-in double or single quotes.</li>
+ in double or single quotes.</li>
</ul>
<p>The link URL may, optionally, be surrounded by angle brackets:</p>
<pre><code>[id]: &lt;http://example.com/&gt; "Optional Title Here"
@@ -660,10 +660,10 @@ for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
<ul>
<li>An exclamation mark: <code>!</code>;</li>
<li>followed by a set of square brackets, containing the <code>alt</code>
-attribute text for the image;</li>
+ attribute text for the image;</li>
<li>followed by a set of parentheses, containing the URL or path to
-the image, and an optional <code>title</code> attribute enclosed in double
-or single quotes.</li>
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
</ul>
<p>Reference-style image syntax looks like this:</p>
<pre><code>![Alt text][id]
diff --git a/tests/markdown-test/markdown-syntax.txt b/tests/extensions/extra/markdown-syntax.txt
index dabd75c..dabd75c 100644
--- a/tests/markdown-test/markdown-syntax.txt
+++ b/tests/extensions/extra/markdown-syntax.txt
diff --git a/tests/extensions-x-footnotes/named_markers.html b/tests/extensions/extra/named_markers.html
index 6996b5f..6996b5f 100644
--- a/tests/extensions-x-footnotes/named_markers.html
+++ b/tests/extensions/extra/named_markers.html
diff --git a/tests/extensions-x-footnotes/named_markers.txt b/tests/extensions/extra/named_markers.txt
index d246524..d246524 100644
--- a/tests/extensions-x-footnotes/named_markers.txt
+++ b/tests/extensions/extra/named_markers.txt
diff --git a/tests/extensions-x-extra/raw-html.html b/tests/extensions/extra/raw-html.html
index b2a7c4d..b2a7c4d 100644
--- a/tests/extensions-x-extra/raw-html.html
+++ b/tests/extensions/extra/raw-html.html
diff --git a/tests/extensions-x-extra/raw-html.txt b/tests/extensions/extra/raw-html.txt
index 284fe0c..284fe0c 100644
--- a/tests/extensions-x-extra/raw-html.txt
+++ b/tests/extensions/extra/raw-html.txt
diff --git a/tests/extensions-x-def_list/simple_def-lists.html b/tests/extensions/extra/simple_def-lists.html
index 278e1ec..278e1ec 100644
--- a/tests/extensions-x-def_list/simple_def-lists.html
+++ b/tests/extensions/extra/simple_def-lists.html
diff --git a/tests/extensions-x-def_list/simple_def-lists.txt b/tests/extensions/extra/simple_def-lists.txt
index 20c028a..20c028a 100644
--- a/tests/extensions-x-def_list/simple_def-lists.txt
+++ b/tests/extensions/extra/simple_def-lists.txt
diff --git a/tests/extensions-x-tables/tables.html b/tests/extensions/extra/tables.html
index c931e6a..c931e6a 100644
--- a/tests/extensions-x-tables/tables.html
+++ b/tests/extensions/extra/tables.html
diff --git a/tests/extensions-x-tables/tables.txt b/tests/extensions/extra/tables.txt
index 64917ab..64917ab 100644
--- a/tests/extensions-x-tables/tables.txt
+++ b/tests/extensions/extra/tables.txt
diff --git a/tests/extensions/extra/test.cfg b/tests/extensions/extra/test.cfg
new file mode 100644
index 0000000..74893f0
--- /dev/null
+++ b/tests/extensions/extra/test.cfg
@@ -0,0 +1,17 @@
+[DEFAULT]
+extensions=extra
+
+[loose_def_list]
+extensions=def_list
+
+[simple_def-lists]
+extensions=def_list
+
+[abbr]
+extensions=abbr
+
+[footnotes]
+extensions=footnotes
+
+[tables]
+extensions=tables
diff --git a/tests/extensions/test.cfg b/tests/extensions/test.cfg
new file mode 100644
index 0000000..6208201
--- /dev/null
+++ b/tests/extensions/test.cfg
@@ -0,0 +1,17 @@
+[codehilite]
+extensions=codehilite
+
+[toc]
+extensions=toc
+
+[toc_invalid]
+extensions=toc
+
+[toc_nested]
+extensions=toc
+
+[toc_nested2]
+extensions=toc
+
+[wikilinks]
+extensions=wikilinks
diff --git a/tests/extensions-x-toc/syntax-toc.html b/tests/extensions/toc.html
index eea5347..3559d45 100644
--- a/tests/extensions-x-toc/syntax-toc.html
+++ b/tests/extensions/toc.html
@@ -461,12 +461,12 @@ on a line by itself:</p>
<p>That is:</p>
<ul>
<li>Square brackets containing the link identifier (optionally
-indented from the left margin using up to three spaces);</li>
+ indented from the left margin using up to three spaces);</li>
<li>followed by a colon;</li>
<li>followed by one or more spaces (or tabs);</li>
<li>followed by the URL for the link;</li>
<li>optionally followed by a title attribute for the link, enclosed
-in double or single quotes.</li>
+ in double or single quotes.</li>
</ul>
<p>The link URL may, optionally, be surrounded by angle brackets:</p>
<pre><code>[id]: &lt;http://example.com/&gt; "Optional Title Here"
@@ -634,10 +634,10 @@ for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
<ul>
<li>An exclamation mark: <code>!</code>;</li>
<li>followed by a set of square brackets, containing the <code>alt</code>
-attribute text for the image;</li>
+ attribute text for the image;</li>
<li>followed by a set of parentheses, containing the URL or path to
-the image, and an optional <code>title</code> attribute enclosed in double
-or single quotes.</li>
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
</ul>
<p>Reference-style image syntax looks like this:</p>
<pre><code>![Alt text][id]
diff --git a/tests/extensions-x-toc/syntax-toc.txt b/tests/extensions/toc.txt
index f297200..f297200 100644
--- a/tests/extensions-x-toc/syntax-toc.txt
+++ b/tests/extensions/toc.txt
diff --git a/tests/extensions-x-toc/invalid.html b/tests/extensions/toc_invalid.html
index 41a3b1f..41a3b1f 100644
--- a/tests/extensions-x-toc/invalid.html
+++ b/tests/extensions/toc_invalid.html
diff --git a/tests/extensions-x-toc/invalid.txt b/tests/extensions/toc_invalid.txt
index f6c4ec4..f6c4ec4 100644
--- a/tests/extensions-x-toc/invalid.txt
+++ b/tests/extensions/toc_invalid.txt
diff --git a/tests/extensions-x-toc/nested.html b/tests/extensions/toc_nested.html
index a8a1583..a8a1583 100644
--- a/tests/extensions-x-toc/nested.html
+++ b/tests/extensions/toc_nested.html
diff --git a/tests/extensions-x-toc/nested.txt b/tests/extensions/toc_nested.txt
index 9b515f9..9b515f9 100644
--- a/tests/extensions-x-toc/nested.txt
+++ b/tests/extensions/toc_nested.txt
diff --git a/tests/extensions-x-toc/nested2.html b/tests/extensions/toc_nested2.html
index bf87716..bf87716 100644
--- a/tests/extensions-x-toc/nested2.html
+++ b/tests/extensions/toc_nested2.html
diff --git a/tests/extensions-x-toc/nested2.txt b/tests/extensions/toc_nested2.txt
index 9db4d8c..9db4d8c 100644
--- a/tests/extensions-x-toc/nested2.txt
+++ b/tests/extensions/toc_nested2.txt
diff --git a/tests/extensions/wikilinks.html b/tests/extensions/wikilinks.html
new file mode 100644
index 0000000..a76a693
--- /dev/null
+++ b/tests/extensions/wikilinks.html
@@ -0,0 +1,9 @@
+<p>Some text with a <a class="wikilink" href="/WikiLink/">WikiLink</a>.</p>
+<p>A link with <a class="wikilink" href="/white_space_and_underscores/">white space and_underscores</a> and a empty one.</p>
+<p>Another with <a class="wikilink" href="/double_spaces/">double spaces</a> and <a class="wikilink" href="/double__underscores/">double__underscores</a> and
+one that <a class="wikilink" href="/has_emphasis_inside/">has <em>emphasis</em> inside</a> and one <a class="wikilink" href="/with_multiple_underscores/">with_multiple_underscores</a>
+and one that is <em><a class="wikilink" href="/emphasised/">emphasised</a></em>.</p>
+<p>And a <a href="http://example.com/RealLink">RealLink</a>.</p>
+<p><a href="http://example.com/And_A_AutoLink">http://example.com/And_A_AutoLink</a></p>
+<p>And a <a href="/MarkdownLink/" title="A MarkdownLink">MarkdownLink</a> for
+completeness.</p> \ No newline at end of file
diff --git a/tests/extensions-x-wikilinks/wikilinks.txt b/tests/extensions/wikilinks.txt
index 8e6911b..8e6911b 100644
--- a/tests/extensions-x-wikilinks/wikilinks.txt
+++ b/tests/extensions/wikilinks.txt
diff --git a/tests/html4/test.cfg b/tests/html4/test.cfg
new file mode 100644
index 0000000..a3fc498
--- /dev/null
+++ b/tests/html4/test.cfg
@@ -0,0 +1,2 @@
+[DEFAULT]
+output_format=html4
diff --git a/tests/misc/em-around-links.html b/tests/misc/em-around-links.html
index 06bfa8e..fafac28 100644
--- a/tests/misc/em-around-links.html
+++ b/tests/misc/em-around-links.html
@@ -1,16 +1,13 @@
<h1>Title</h1>
-
<ul>
- <li><em><a href="http://www.freewisdom.org/projects/python-markdown/">Python in Markdown</a> by some
+<li><em><a href="http://www.freewisdom.org/projects/python-markdown/">Python in Markdown</a> by some
great folks</em> - This <em>does</em> work as expected.</li>
- <li><em><a href="http://www.freewisdom.org/projects/python-markdown/">Python in Markdown</a> by some
+<li><em><a href="http://www.freewisdom.org/projects/python-markdown/">Python in Markdown</a> by some
great folks</em> - This <em>does</em> work as expected.</li>
- <li><a href="http://www.freewisdom.org/projects/python-markdown/"><em>Python in Markdown</em></a> by some
+<li><a href="http://www.freewisdom.org/projects/python-markdown/"><em>Python in Markdown</em></a> by some
great folks - This <em>does</em> work as expected.</li>
- <li><a href="http://www.freewisdom.org/projects/python-markdown/"><em>Python in Markdown</em></a> <em>by some
+<li><a href="http://www.freewisdom.org/projects/python-markdown/"><em>Python in Markdown</em></a> <em>by some
great folks</em> - This <em>does</em> work as expected.</li>
</ul>
-
<p><em><a href="http://www.freewisdom.org/projects/python-markdown/">Python in Markdown</a> by some
- great folks</em> - This <em>does</em> work as expected.</p>
-
+great folks</em> - This <em>does</em> work as expected.</p> \ No newline at end of file
diff --git a/tests/misc/multi-paragraph-block-quote.html b/tests/misc/multi-paragraph-block-quote.html
index e13986a..f01b5e4 100644
--- a/tests/misc/multi-paragraph-block-quote.html
+++ b/tests/misc/multi-paragraph-block-quote.html
@@ -1,6 +1,6 @@
<blockquote>
<p>This is line one of paragraph one
- This is line two of paragraph one</p>
+This is line two of paragraph one</p>
<p>This is line one of paragraph two</p>
<p>This is another blockquote.</p>
</blockquote> \ No newline at end of file
diff --git a/tests/misc/tabs-in-lists.html b/tests/misc/tabs-in-lists.html
index a1a92ec..fdb7cb6 100644
--- a/tests/misc/tabs-in-lists.html
+++ b/tests/misc/tabs-in-lists.html
@@ -19,7 +19,7 @@
<p>Now a list with 4 spaces and some text:</p>
<ul>
<li>A
-abcdef</li>
+ abcdef</li>
<li>B</li>
</ul>
<p>Now with a tab and an extra space:</p>
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
diff --git a/tests/pl/Tests_2004/Amps and angle encoding.html b/tests/pl/Tests_2004/Amps and angle encoding.html
new file mode 100644
index 0000000..9606860
--- /dev/null
+++ b/tests/pl/Tests_2004/Amps and angle encoding.html
@@ -0,0 +1,17 @@
+<p>AT&amp;T has an ampersand in their name.</p>
+
+<p>AT&amp;T is another way to write it.</p>
+
+<p>This &amp; that.</p>
+
+<p>4 &lt; 5.</p>
+
+<p>6 > 5.</p>
+
+<p>Here's a <a href="http://example.com/?foo=1&amp;bar=2">link</a> with an ampersand in the URL.</p>
+
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&amp;T">AT&amp;T</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
diff --git a/tests/pl/Tests_2004/Amps and angle encoding.text b/tests/pl/Tests_2004/Amps and angle encoding.text
new file mode 100644
index 0000000..0e9527f
--- /dev/null
+++ b/tests/pl/Tests_2004/Amps and angle encoding.text
@@ -0,0 +1,21 @@
+AT&T has an ampersand in their name.
+
+AT&amp;T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/ "AT&T" \ No newline at end of file
diff --git a/tests/pl/Tests_2004/Auto links.html b/tests/pl/Tests_2004/Auto links.html
new file mode 100644
index 0000000..f8df985
--- /dev/null
+++ b/tests/pl/Tests_2004/Auto links.html
@@ -0,0 +1,18 @@
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+
+<p>With an ampersand: <a href="http://example.com/?foo=1&amp;bar=2">http://example.com/?foo=1&amp;bar=2</a></p>
+
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+
+<blockquote>
+ <p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+
+<p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p>
+
+<pre><code>or here: &lt;http://example.com/&gt;
+</code></pre>
diff --git a/tests/pl/Tests_2004/Auto links.text b/tests/pl/Tests_2004/Auto links.text
new file mode 100644
index 0000000..abbc488
--- /dev/null
+++ b/tests/pl/Tests_2004/Auto links.text
@@ -0,0 +1,13 @@
+Link: <http://example.com/>.
+
+With an ampersand: <http://example.com/?foo=1&bar=2>
+
+* In a list?
+* <http://example.com/>
+* It should.
+
+> Blockquoted: <http://example.com/>
+
+Auto-links should not occur here: `<http://example.com/>`
+
+ or here: <http://example.com/> \ No newline at end of file
diff --git a/tests/pl/Tests_2004/Backslash escapes.html b/tests/pl/Tests_2004/Backslash escapes.html
new file mode 100644
index 0000000..77823c3
--- /dev/null
+++ b/tests/pl/Tests_2004/Backslash escapes.html
@@ -0,0 +1,102 @@
+<p>These should all get escaped:</p>
+
+<p>Backslash: \</p>
+
+<p>Backtick: `</p>
+
+<p>Asterisk: *</p>
+
+<p>Underscore: _</p>
+
+<p>Left brace: {</p>
+
+<p>Right brace: }</p>
+
+<p>Left bracket: [</p>
+
+<p>Right bracket: ]</p>
+
+<p>Left paren: (</p>
+
+<p>Right paren: )</p>
+
+<p>Greater-than: ></p>
+
+<p>Hash: #</p>
+
+<p>Period: .</p>
+
+<p>Bang: !</p>
+
+<p>Plus: +</p>
+
+<p>Minus: -</p>
+
+<p>These should not, because they occur within a code block:</p>
+
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \&gt;
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+
+<p>Nor should these, which occur in code spans:</p>
+
+<p>Backslash: <code>\\</code></p>
+
+<p>Backtick: <code>\`</code></p>
+
+<p>Asterisk: <code>\*</code></p>
+
+<p>Underscore: <code>\_</code></p>
+
+<p>Left brace: <code>\{</code></p>
+
+<p>Right brace: <code>\}</code></p>
+
+<p>Left bracket: <code>\[</code></p>
+
+<p>Right bracket: <code>\]</code></p>
+
+<p>Left paren: <code>\(</code></p>
+
+<p>Right paren: <code>\)</code></p>
+
+<p>Greater-than: <code>\&gt;</code></p>
+
+<p>Hash: <code>\#</code></p>
+
+<p>Period: <code>\.</code></p>
+
+<p>Bang: <code>\!</code></p>
+
+<p>Plus: <code>\+</code></p>
+
+<p>Minus: <code>\-</code></p>
diff --git a/tests/pl/Tests_2004/Backslash escapes.text b/tests/pl/Tests_2004/Backslash escapes.text
new file mode 100644
index 0000000..16447a0
--- /dev/null
+++ b/tests/pl/Tests_2004/Backslash escapes.text
@@ -0,0 +1,104 @@
+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: `\-`
diff --git a/tests/pl/Tests_2004/Blockquotes with code blocks.html b/tests/pl/Tests_2004/Blockquotes with code blocks.html
new file mode 100644
index 0000000..990202a
--- /dev/null
+++ b/tests/pl/Tests_2004/Blockquotes with code blocks.html
@@ -0,0 +1,15 @@
+<blockquote>
+ <p>Example:</p>
+
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+
+ <p>Or:</p>
+
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
diff --git a/tests/pl/Tests_2004/Blockquotes with code blocks.text b/tests/pl/Tests_2004/Blockquotes with code blocks.text
new file mode 100644
index 0000000..c31d171
--- /dev/null
+++ b/tests/pl/Tests_2004/Blockquotes with code blocks.text
@@ -0,0 +1,11 @@
+> Example:
+>
+> sub status {
+> print "working";
+> }
+>
+> Or:
+>
+> sub status {
+> return "working";
+> }
diff --git a/tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.html b/tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.html
new file mode 100644
index 0000000..e21ac79
--- /dev/null
+++ b/tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.html
@@ -0,0 +1,8 @@
+<p>In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.</p>
+
+<p>Here's one with a bullet.
+* criminey.</p>
diff --git a/tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.text b/tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.text
new file mode 100644
index 0000000..f8a5b27
--- /dev/null
+++ b/tests/pl/Tests_2004/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/tests/pl/Tests_2004/Horizontal rules.html b/tests/pl/Tests_2004/Horizontal rules.html
new file mode 100644
index 0000000..2dc2ab6
--- /dev/null
+++ b/tests/pl/Tests_2004/Horizontal rules.html
@@ -0,0 +1,71 @@
+<p>Dashes:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>---
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>- - -
+</code></pre>
+
+<p>Asterisks:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>***
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>* * *
+</code></pre>
+
+<p>Underscores:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>___
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>_ _ _
+</code></pre>
diff --git a/tests/pl/Tests_2004/Horizontal rules.text b/tests/pl/Tests_2004/Horizontal rules.text
new file mode 100644
index 0000000..1594bda
--- /dev/null
+++ b/tests/pl/Tests_2004/Horizontal rules.text
@@ -0,0 +1,67 @@
+Dashes:
+
+---
+
+ ---
+
+ ---
+
+ ---
+
+ ---
+
+- - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+ ***
+
+ ***
+
+ ***
+
+* * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+ ___
+
+ ___
+
+ ___
+
+_ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
diff --git a/tests/pl/Tests_2004/Inline HTML (Advanced).html b/tests/pl/Tests_2004/Inline HTML (Advanced).html
new file mode 100644
index 0000000..1972d87
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML (Advanced).html
@@ -0,0 +1,14 @@
+<p>Simple block on one line:</p>
+
+<div>foo</div>
+
+<p>And nested without indentation:</p>
+
+<div>
+<div>
+<div>
+foo
+</div>
+</div>
+<div>bar</div>
+</div>
diff --git a/tests/pl/Tests_2004/Inline HTML (Advanced).text b/tests/pl/Tests_2004/Inline HTML (Advanced).text
new file mode 100644
index 0000000..9d71ddc
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML (Advanced).text
@@ -0,0 +1,14 @@
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+</div>
+<div>bar</div>
+</div>
diff --git a/tests/pl/Tests_2004/Inline HTML (Simple).html b/tests/pl/Tests_2004/Inline HTML (Simple).html
new file mode 100644
index 0000000..6bf78f8
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML (Simple).html
@@ -0,0 +1,72 @@
+<p>Here's a simple block:</p>
+
+<div>
+ foo
+</div>
+
+<p>This should be a code block, though:</p>
+
+<pre><code>&lt;div&gt;
+ foo
+&lt;/div&gt;
+</code></pre>
+
+<p>As should this:</p>
+
+<pre><code>&lt;div&gt;foo&lt;/div&gt;
+</code></pre>
+
+<p>Now, nested:</p>
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+<p>This should just be an HTML comment:</p>
+
+<!-- Comment -->
+
+<p>Multiline:</p>
+
+<!--
+Blah
+Blah
+-->
+
+<p>Code block:</p>
+
+<pre><code>&lt;!-- Comment --&gt;
+</code></pre>
+
+<p>Just plain comment, with trailing spaces on the line:</p>
+
+<!-- foo -->
+
+<p>Code:</p>
+
+<pre><code>&lt;hr /&gt;
+</code></pre>
+
+<p>Hr's:</p>
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
diff --git a/tests/pl/Tests_2004/Inline HTML (Simple).text b/tests/pl/Tests_2004/Inline HTML (Simple).text
new file mode 100644
index 0000000..14aa2dc
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML (Simple).text
@@ -0,0 +1,69 @@
+Here's a simple block:
+
+<div>
+ foo
+</div>
+
+This should be a code block, though:
+
+ <div>
+ foo
+ </div>
+
+As should this:
+
+ <div>foo</div>
+
+Now, nested:
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+ <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+ <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+
diff --git a/tests/pl/Tests_2004/Inline HTML comments.html b/tests/pl/Tests_2004/Inline HTML comments.html
new file mode 100644
index 0000000..3f167a1
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML comments.html
@@ -0,0 +1,13 @@
+<p>Paragraph one.</p>
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+<p>Paragraph two.</p>
+
+<!-- one comment block -- -- with two comments -->
+
+<p>The end.</p>
diff --git a/tests/pl/Tests_2004/Inline HTML comments.text b/tests/pl/Tests_2004/Inline HTML comments.text
new file mode 100644
index 0000000..41d830d
--- /dev/null
+++ b/tests/pl/Tests_2004/Inline HTML comments.text
@@ -0,0 +1,13 @@
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
diff --git a/tests/pl/Tests_2004/Links, inline style.html b/tests/pl/Tests_2004/Links, inline style.html
new file mode 100644
index 0000000..bdfabb5
--- /dev/null
+++ b/tests/pl/Tests_2004/Links, inline style.html
@@ -0,0 +1,9 @@
+<p>Just a <a href="/url/">URL</a>.</p>
+
+<p><a href="/url/" title="title">URL and title</a>.</p>
+
+<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p>
+
+<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p>
+
+<p><a href="">Empty</a>.</p>
diff --git a/tests/pl/Tests_2004/Links, inline style.text b/tests/pl/Tests_2004/Links, inline style.text
new file mode 100644
index 0000000..4d0c1c2
--- /dev/null
+++ b/tests/pl/Tests_2004/Links, inline style.text
@@ -0,0 +1,9 @@
+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").
+
+[Empty]().
diff --git a/tests/pl/Tests_2004/Links, reference style.html b/tests/pl/Tests_2004/Links, reference style.html
new file mode 100644
index 0000000..cf4d833
--- /dev/null
+++ b/tests/pl/Tests_2004/Links, reference style.html
@@ -0,0 +1,18 @@
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>With <a href="/url/">embedded [brackets]</a>.</p>
+
+<p>Indented <a href="/url">once</a>.</p>
+
+<p>Indented <a href="/url">twice</a>.</p>
+
+<p>Indented <a href="/url">thrice</a>.</p>
+
+<p>Indented [four][] times.</p>
+
+<pre><code>[four]: /url
+</code></pre>
diff --git a/tests/pl/Tests_2004/Links, reference style.text b/tests/pl/Tests_2004/Links, reference style.text
new file mode 100644
index 0000000..b2fa734
--- /dev/null
+++ b/tests/pl/Tests_2004/Links, reference style.text
@@ -0,0 +1,31 @@
+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/
diff --git a/tests/pl/Tests_2004/Literal quotes in titles.html b/tests/pl/Tests_2004/Literal quotes in titles.html
new file mode 100644
index 0000000..611c1ac
--- /dev/null
+++ b/tests/pl/Tests_2004/Literal quotes in titles.html
@@ -0,0 +1,3 @@
+<p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
diff --git a/tests/pl/Tests_2004/Literal quotes in titles.text b/tests/pl/Tests_2004/Literal quotes in titles.text
new file mode 100644
index 0000000..29d0e42
--- /dev/null
+++ b/tests/pl/Tests_2004/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/tests/pl/Tests_2004/Markdown Documentation - Basics.html b/tests/pl/Tests_2004/Markdown Documentation - Basics.html
new file mode 100644
index 0000000..d5bdbb2
--- /dev/null
+++ b/tests/pl/Tests_2004/Markdown Documentation - Basics.html
@@ -0,0 +1,314 @@
+<h1>Markdown: Basics</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<h2>Getting the Gist of Markdown's Formatting Syntax</h2>
+
+<p>This page offers a brief overview of what it's like to use Markdown.
+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.</p>
+
+<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.</p>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<h2>Paragraphs, Headers, Blockquotes</h2>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.
+Setext-style headers for <code>&lt;h1&gt;</code> and <code>&lt;h2&gt;</code> are created by
+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.
+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.</p>
+
+<p>Blockquotes are indicated using email-style '<code>&gt;</code>' angle brackets.</p>
+
+<p>Markdown:</p>
+
+<pre><code>A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+&gt; This is a blockquote.
+&gt;
+&gt; This is the second paragraph in the blockquote.
+&gt;
+&gt; ## This is an H2 in a blockquote
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;h1&gt;A First Level Header&lt;/h1&gt;
+
+&lt;h2&gt;A Second Level Header&lt;/h2&gt;
+
+&lt;p&gt;Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.&lt;/p&gt;
+
+&lt;p&gt;The quick brown fox jumped over the lazy
+dog's back.&lt;/p&gt;
+
+&lt;h3&gt;Header 3&lt;/h3&gt;
+
+&lt;blockquote&gt;
+ &lt;p&gt;This is a blockquote.&lt;/p&gt;
+
+ &lt;p&gt;This is the second paragraph in the blockquote.&lt;/p&gt;
+
+ &lt;h2&gt;This is an H2 in a blockquote&lt;/h2&gt;
+&lt;/blockquote&gt;
+</code></pre>
+
+<h3>Phrase Emphasis</h3>
+
+<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>
+
+<p>Markdown:</p>
+
+<pre><code>Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;Some of these words &lt;em&gt;are emphasized&lt;/em&gt;.
+Some of these words &lt;em&gt;are emphasized also&lt;/em&gt;.&lt;/p&gt;
+
+&lt;p&gt;Use two asterisks for &lt;strong&gt;strong emphasis&lt;/strong&gt;.
+Or, if you prefer, &lt;strong&gt;use two underscores instead&lt;/strong&gt;.&lt;/p&gt;
+</code></pre>
+
+<h2>Lists</h2>
+
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
+
+<pre><code>* Candy.
+* Gum.
+* Booze.
+</code></pre>
+
+<p>this:</p>
+
+<pre><code>+ Candy.
++ Gum.
++ Booze.
+</code></pre>
+
+<p>and this:</p>
+
+<pre><code>- Candy.
+- Gum.
+- Booze.
+</code></pre>
+
+<p>all produce the same output:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;Candy.&lt;/li&gt;
+&lt;li&gt;Gum.&lt;/li&gt;
+&lt;li&gt;Booze.&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:</p>
+
+<pre><code>1. Red
+2. Green
+3. Blue
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;ol&gt;
+&lt;li&gt;Red&lt;/li&gt;
+&lt;li&gt;Green&lt;/li&gt;
+&lt;li&gt;Blue&lt;/li&gt;
+&lt;/ol&gt;
+</code></pre>
+
+<p>If you put blank lines between items, you'll get <code>&lt;p&gt;</code> tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:</p>
+
+<pre><code>* A list item.
+
+ With multiple paragraphs.
+
+* Another item in the list.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;A list item.&lt;/p&gt;
+&lt;p&gt;With multiple paragraphs.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Another item in the list.&lt;/p&gt;&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<h3>Links</h3>
+
+<p>Markdown supports two styles for creating links: <em>inline</em> and
+<em>reference</em>. With both styles, you use square brackets to delimit the
+text you want to turn into a link.</p>
+
+<p>Inline-style links use parentheses immediately after the link text.
+For example:</p>
+
+<pre><code>This is an [example link](http://example.com/).
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;This is an &lt;a href="http://example.com/"&gt;
+example link&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>Optionally, you may include a title attribute in the parentheses:</p>
+
+<pre><code>This is an [example link](http://example.com/ "With a Title").
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;This is an &lt;a href="http://example.com/" title="With a Title"&gt;
+example link&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:</p>
+
+<pre><code>I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/ "Google"
+[2]: http://search.yahoo.com/ "Yahoo Search"
+[3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href="http://google.com/"
+title="Google"&gt;Google&lt;/a&gt; than from &lt;a href="http://search.yahoo.com/"
+title="Yahoo Search"&gt;Yahoo&lt;/a&gt; or &lt;a href="http://search.msn.com/"
+title="MSN Search"&gt;MSN&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are <em>not</em> case sensitive:</p>
+
+<pre><code>I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I start my morning with a cup of coffee and
+&lt;a href="http://www.nytimes.com/"&gt;The New York Times&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<h3>Images</h3>
+
+<p>Image syntax is very much like link syntax.</p>
+
+<p>Inline (titles are optional):</p>
+
+<pre><code>![alt text](/path/to/img.jpg "Title")
+</code></pre>
+
+<p>Reference-style:</p>
+
+<pre><code>![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+</code></pre>
+
+<p>Both of the above examples produce the same output:</p>
+
+<pre><code>&lt;img src="/path/to/img.jpg" alt="alt text" title="Title" /&gt;
+</code></pre>
+
+<h3>Code</h3>
+
+<p>In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> or
+<code>&gt;</code>) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:</p>
+
+<pre><code>I strongly recommend against using any `&lt;blink&gt;` tags.
+
+I wish SmartyPants used named entities like `&amp;mdash;`
+instead of decimal-encoded entites like `&amp;#8212;`.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I strongly recommend against using any
+&lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
+
+&lt;p&gt;I wish SmartyPants used named entities like
+&lt;code&gt;&amp;amp;mdash;&lt;/code&gt; instead of decimal-encoded
+entites like &lt;code&gt;&amp;amp;#8212;&lt;/code&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, <code>&amp;</code>, <code>&lt;</code>,
+and <code>&gt;</code> characters will be escaped automatically.</p>
+
+<p>Markdown:</p>
+
+<pre><code>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+ &lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+ &lt;/blockquote&gt;
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;&amp;lt;blockquote&amp;gt;
+ &amp;lt;p&amp;gt;For example.&amp;lt;/p&amp;gt;
+&amp;lt;/blockquote&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
diff --git a/tests/pl/Tests_2004/Markdown Documentation - Basics.text b/tests/pl/Tests_2004/Markdown Documentation - Basics.text
new file mode 100644
index 0000000..486055c
--- /dev/null
+++ b/tests/pl/Tests_2004/Markdown Documentation - Basics.text
@@ -0,0 +1,306 @@
+Markdown: Basics
+================
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+
+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 `<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/tests/pl/Tests_2004/Markdown Documentation - Syntax.html b/tests/pl/Tests_2004/Markdown Documentation - Syntax.html
new file mode 100644
index 0000000..5c01306
--- /dev/null
+++ b/tests/pl/Tests_2004/Markdown Documentation - Syntax.html
@@ -0,0 +1,942 @@
+<h1>Markdown: Syntax</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a>
+<ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul></li>
+<li><a href="#block">Block Elements</a>
+<ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul></li>
+<li><a href="#span">Span Elements</a>
+<ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul></li>
+<li><a href="#misc">Miscellaneous</a>
+<ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul></li>
+</ul>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<hr />
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+
+<p>The only restrictions are that block-level HTML elements -- e.g. <code>&lt;div&gt;</code>,
+<code>&lt;table&gt;</code>, <code>&lt;pre&gt;</code>, <code>&lt;p&gt;</code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code>&lt;p&gt;</code> tags around HTML block-level tags.</p>
+
+<p>For example, to add an HTML table to a Markdown article:</p>
+
+<pre><code>This is a regular paragraph.
+
+&lt;table&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Foo&lt;/td&gt;
+ &lt;/tr&gt;
+&lt;/table&gt;
+
+This is another regular paragraph.
+</code></pre>
+
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+
+<p>Span-level HTML tags -- e.g. <code>&lt;span&gt;</code>, <code>&lt;cite&gt;</code>, or <code>&lt;del&gt;</code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code>&lt;a&gt;</code> or <code>&lt;img&gt;</code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code>&lt;</code>
+and <code>&amp;</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&amp;lt;</code>, and
+<code>&amp;amp;</code>.</p>
+
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&amp;T', you need to write '<code>AT&amp;amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+
+<p>you need to encode the URL as:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;amp;q=larry+bird
+</code></pre>
+
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;amp;</code>.</p>
+
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+
+<pre><code>&amp;copy;
+</code></pre>
+
+<p>and Markdown will leave it alone. But if you write:</p>
+
+<pre><code>AT&amp;T
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>AT&amp;amp;T
+</code></pre>
+
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+
+<pre><code>4 &lt; 5
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>4 &amp;lt; 5
+</code></pre>
+
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code>&lt;</code>
+and <code>&amp;</code> in your example code needs to be escaped.)</p>
+
+<hr />
+
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code>&lt;br /&gt;</code> tag.</p>
+
+<p>When you <em>do</em> want to insert a <code>&lt;br /&gt;</code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+
+<p>Yes, this takes a tad more effort to create a <code>&lt;br /&gt;</code>, but a simplistic
+"every line break is a <code>&lt;br /&gt;</code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>&gt;</code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>&gt;</code> before every line:</p>
+
+<pre><code>&gt; This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+&gt; consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+&gt; Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+&gt;
+&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+&gt; id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Markdown allows you to be lazy and only put the <code>&gt;</code> before the first
+line of a hard-wrapped paragraph:</p>
+
+<pre><code>&gt; 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.
+
+&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>&gt;</code>:</p>
+
+<pre><code>&gt; This is the first level of quoting.
+&gt;
+&gt; &gt; This is nested blockquote.
+&gt;
+&gt; Back to the first level.
+</code></pre>
+
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+
+<pre><code>&gt; ## This is a header.
+&gt;
+&gt; 1. This is the first list item.
+&gt; 2. This is the second list item.
+&gt;
+&gt; Here's some example code:
+&gt;
+&gt; return shell_exec("echo $input | $markdown_script");
+</code></pre>
+
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+
+<p>is equivalent to:</p>
+
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+
+<p>and:</p>
+
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+
+<p>Ordered lists use numbers followed by periods:</p>
+
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+
+<pre><code>&lt;ol&gt;
+&lt;li&gt;Bird&lt;/li&gt;
+&lt;li&gt;McHale&lt;/li&gt;
+&lt;li&gt;Parish&lt;/li&gt;
+&lt;/ol&gt;
+</code></pre>
+
+<p>If you instead wrote the list in Markdown like this:</p>
+
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+
+<p>or even:</p>
+
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>But if you want to be lazy, you don't have to:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code>&lt;p&gt;</code> tags in the HTML output. For example, this input:</p>
+
+<pre><code>* Bird
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;Bird&lt;/li&gt;
+&lt;li&gt;Magic&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>But this:</p>
+
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Bird&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Magic&lt;/p&gt;&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+
+<p>To put a blockquote within a list item, the blockquote's <code>&gt;</code>
+delimiters need to be indented:</p>
+
+<pre><code>* A list item with a blockquote:
+
+ &gt; This is a blockquote
+ &gt; inside a list item.
+</code></pre>
+
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+
+<pre><code>* A list item with a code block:
+
+ &lt;code goes here&gt;
+</code></pre>
+
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+
+<pre><code>1986. What a great season.
+</code></pre>
+
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+
+<pre><code>1986\. What a great season.
+</code></pre>
+
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code>&lt;pre&gt;</code> and <code>&lt;code&gt;</code> tags.</p>
+
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+
+<p>Markdown will generate:</p>
+
+<pre><code>&lt;p&gt;This is a normal paragraph:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;This is a code block.
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;p&gt;Here is an example of AppleScript:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;tell application "Foo"
+ beep
+end tell
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+
+<p>Within a code block, ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> and <code>&gt;</code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+
+<pre><code> &lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+ &lt;/div&gt;
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;pre&gt;&lt;code&gt;&amp;lt;div class="footer"&amp;gt;
+ &amp;amp;copy; 2004 Foo Corporation
+&amp;lt;/div&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code>&lt;hr /&gt;</code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+
+<hr />
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+
+<p>In both styles, the link text is delimited by [square brackets].</p>
+
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+
+<p>Will produce:</p>
+
+<pre><code>&lt;p&gt;This is &lt;a href="http://example.com/" title="Title"&gt;
+an example&lt;/a&gt; inline link.&lt;/p&gt;
+
+&lt;p&gt;&lt;a href="http://example.net/"&gt;This link&lt;/a&gt; has no
+title attribute.&lt;/p&gt;
+</code></pre>
+
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+
+<p>You can optionally use a space to separate the sets of brackets:</p>
+
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>Square brackets containing the link identifier (optionally
+indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+in double or single quotes.</li>
+</ul>
+
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+
+<pre><code>[id]: &lt;http://example.com/&gt; "Optional Title Here"
+</code></pre>
+
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+
+<p>are equivalent.</p>
+
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+
+<pre><code>[Google][]
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Google]: http://google.com/
+</code></pre>
+
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+
+<p>Here's an example of reference links in action:</p>
+
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Using the implicit link name shortcut, you could instead write:</p>
+
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Both of the above examples will produce the following HTML output:</p>
+
+<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href="http://google.com/"
+title="Google"&gt;Google&lt;/a&gt; than from
+&lt;a href="http://search.yahoo.com/" title="Yahoo Search"&gt;Yahoo&lt;/a&gt;
+or &lt;a href="http://search.msn.com/" title="MSN Search"&gt;MSN&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code>&lt;em&gt;</code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code>&lt;strong&gt;</code> tag. E.g., this input:</p>
+
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;em&gt;single asterisks&lt;/em&gt;
+
+&lt;em&gt;single underscores&lt;/em&gt;
+
+&lt;strong&gt;double asterisks&lt;/strong&gt;
+
+&lt;strong&gt;double underscores&lt;/strong&gt;
+</code></pre>
+
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+
+<p>Emphasis can be used in the middle of a word:</p>
+
+<pre><code>un*fucking*believable
+</code></pre>
+
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+
+<pre><code>Use the `printf()` function.
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;p&gt;Use the &lt;code&gt;printf()&lt;/code&gt; function.&lt;/p&gt;
+</code></pre>
+
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+
+<p>which will produce this:</p>
+
+<pre><code>&lt;p&gt;&lt;code&gt;There is a literal backtick (`) here.&lt;/code&gt;&lt;/p&gt;
+</code></pre>
+
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;p&gt;A single backtick in a code span: &lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
+
+&lt;p&gt;A backtick-delimited string in a code span: &lt;code&gt;`foo`&lt;/code&gt;&lt;/p&gt;
+</code></pre>
+
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+
+<pre><code>Please don't use any `&lt;blink&gt;` tags.
+</code></pre>
+
+<p>into:</p>
+
+<pre><code>&lt;p&gt;Please don't use any &lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
+</code></pre>
+
+<p>You can write this:</p>
+
+<pre><code>`&amp;#8212;` is the decimal-encoded equivalent of `&amp;mdash;`.
+</code></pre>
+
+<p>to produce:</p>
+
+<pre><code>&lt;p&gt;&lt;code&gt;&amp;amp;#8212;&lt;/code&gt; is the decimal-encoded
+equivalent of &lt;code&gt;&amp;amp;mdash;&lt;/code&gt;.&lt;/p&gt;
+</code></pre>
+
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+
+<p>Inline image syntax looks like this:</p>
+
+<pre><code>![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+the image, and an optional <code>title</code> attribute enclosed in double
+or single quotes.</li>
+</ul>
+
+<p>Reference-style image syntax looks like this:</p>
+
+<pre><code>![Alt text][id]
+</code></pre>
+
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code>&lt;img&gt;</code> tags.</p>
+
+<hr />
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+
+<pre><code>&lt;http://example.com/&gt;
+</code></pre>
+
+<p>Markdown will turn this into:</p>
+
+<pre><code>&lt;a href="http://example.com/"&gt;http://example.com/&lt;/a&gt;
+</code></pre>
+
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+
+<pre><code>&lt;address@example.com&gt;
+</code></pre>
+
+<p>into something like this:</p>
+
+<pre><code>&lt;a href="&amp;#x6D;&amp;#x61;i&amp;#x6C;&amp;#x74;&amp;#x6F;:&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;
+&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;
+&amp;#109;"&gt;&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;
+&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt;
+</code></pre>
+
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code>&lt;em&gt;</code> tag), you can backslashes
+before the asterisks, like this:</p>
+
+<pre><code>\*literal asterisks\*
+</code></pre>
+
+<p>Markdown provides backslash escapes for the following characters:</p>
+
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
diff --git a/tests/pl/Tests_2004/Markdown Documentation - Syntax.text b/tests/pl/Tests_2004/Markdown Documentation - Syntax.text
new file mode 100644
index 0000000..dabd75c
--- /dev/null
+++ b/tests/pl/Tests_2004/Markdown Documentation - Syntax.text
@@ -0,0 +1,888 @@
+Markdown: Syntax
+================
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+
+* [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
+
+* * *
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+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.
+
+
+
+<h3 id="html">Inline HTML</h3>
+
+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.
+
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+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](#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.)
+
+
+* * *
+
+
+<h2 id="block">Block Elements</h2>
+
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+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][bq] and multi-paragraph [list items][l]
+work best -- and look better -- when you format them with hard breaks.
+
+ [bq]: #blockquote
+ [l]: #list
+
+
+
+<h3 id="header">Headers</h3>
+
+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 ######
+
+
+<h3 id="blockquote">Blockquotes</h3>
+
+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.
+
+
+<h3 id="list">Lists</h3>
+
+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.
+
+
+
+<h3 id="precode">Code Blocks</h3>
+
+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.
+
+
+
+<h3 id="hr">Horizontal Rules</h3>
+
+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:
+
+ * * *
+
+ ***
+
+ *****
+
+ - - -
+
+ ---------------------------------------
+
+ _ _ _
+
+
+* * *
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+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.
+
+
+<h3 id="em">Emphasis</h3>
+
+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\*
+
+
+
+<h3 id="code">Code</h3>
+
+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>
+
+
+
+<h3 id="img">Images</h3>
+
+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.
+
+
+* * *
+
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+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.)
+
+
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+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/tests/pl/Tests_2004/Nested blockquotes.html b/tests/pl/Tests_2004/Nested blockquotes.html
new file mode 100644
index 0000000..d8ec7f8
--- /dev/null
+++ b/tests/pl/Tests_2004/Nested blockquotes.html
@@ -0,0 +1,9 @@
+<blockquote>
+ <p>foo</p>
+
+ <blockquote>
+ <p>bar</p>
+ </blockquote>
+
+ <p>foo</p>
+</blockquote>
diff --git a/tests/pl/Tests_2004/Nested blockquotes.text b/tests/pl/Tests_2004/Nested blockquotes.text
new file mode 100644
index 0000000..ed3c624
--- /dev/null
+++ b/tests/pl/Tests_2004/Nested blockquotes.text
@@ -0,0 +1,5 @@
+> foo
+>
+> > bar
+>
+> foo
diff --git a/tests/pl/Tests_2004/Ordered and unordered lists.html b/tests/pl/Tests_2004/Ordered and unordered lists.html
new file mode 100644
index 0000000..ce85c3a
--- /dev/null
+++ b/tests/pl/Tests_2004/Ordered and unordered lists.html
@@ -0,0 +1,137 @@
+<h2>Unordered</h2>
+
+<p>Asterisks tight:</p>
+
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+
+<p>Asterisks loose:</p>
+
+<ul>
+<li><p>asterisk 1</p></li>
+<li><p>asterisk 2</p></li>
+<li><p>asterisk 3</p></li>
+</ul>
+
+<hr />
+
+<p>Pluses tight:</p>
+
+<ul>
+<li>Plus 1</li>
+<li>Plus 2</li>
+<li>Plus 3</li>
+</ul>
+
+<p>Pluses loose:</p>
+
+<ul>
+<li><p>Plus 1</p></li>
+<li><p>Plus 2</p></li>
+<li><p>Plus 3</p></li>
+</ul>
+
+<hr />
+
+<p>Minuses tight:</p>
+
+<ul>
+<li>Minus 1</li>
+<li>Minus 2</li>
+<li>Minus 3</li>
+</ul>
+
+<p>Minuses loose:</p>
+
+<ul>
+<li><p>Minus 1</p></li>
+<li><p>Minus 2</p></li>
+<li><p>Minus 3</p></li>
+</ul>
+
+<h2>Ordered</h2>
+
+<p>Tight:</p>
+
+<ol>
+<li>First</li>
+<li>Second</li>
+<li>Third</li>
+</ol>
+
+<p>and:</p>
+
+<ol>
+<li>One</li>
+<li>Two</li>
+<li>Three</li>
+</ol>
+
+<p>Loose using tabs:</p>
+
+<ol>
+<li><p>First</p></li>
+<li><p>Second</p></li>
+<li><p>Third</p></li>
+</ol>
+
+<p>and using spaces:</p>
+
+<ol>
+<li><p>One</p></li>
+<li><p>Two</p></li>
+<li><p>Three</p></li>
+</ol>
+
+<p>Multiple paragraphs:</p>
+
+<ol>
+<li><p>Item 1, graf one.</p>
+
+<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's
+back.</p></li>
+<li><p>Item 2.</p></li>
+<li><p>Item 3.</p></li>
+</ol>
+
+<h2>Nested</h2>
+
+<ul>
+<li>Tab
+<ul>
+<li>Tab
+<ul>
+<li>Tab</li>
+</ul></li>
+</ul></li>
+</ul>
+
+<p>Here's another:</p>
+
+<ol>
+<li>First</li>
+<li>Second:
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul></li>
+<li>Third</li>
+</ol>
+
+<p>Same thing but with paragraphs:</p>
+
+<ol>
+<li><p>First</p></li>
+<li><p>Second:</p>
+
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul></li>
+<li><p>Third</p></li>
+</ol>
diff --git a/tests/pl/Tests_2004/Ordered and unordered lists.text b/tests/pl/Tests_2004/Ordered and unordered lists.text
new file mode 100644
index 0000000..621db58
--- /dev/null
+++ b/tests/pl/Tests_2004/Ordered and unordered lists.text
@@ -0,0 +1,122 @@
+## 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
diff --git a/tests/pl/Tests_2004/Strong and em together.html b/tests/pl/Tests_2004/Strong and em together.html
new file mode 100644
index 0000000..71ec78c
--- /dev/null
+++ b/tests/pl/Tests_2004/Strong and em together.html
@@ -0,0 +1,7 @@
+<p><strong><em>This is strong and em.</em></strong></p>
+
+<p>So is <strong><em>this</em></strong> word.</p>
+
+<p><strong><em>This is strong and em.</em></strong></p>
+
+<p>So is <strong><em>this</em></strong> word.</p>
diff --git a/tests/pl/Tests_2004/Strong and em together.text b/tests/pl/Tests_2004/Strong and em together.text
new file mode 100644
index 0000000..95ee690
--- /dev/null
+++ b/tests/pl/Tests_2004/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/tests/pl/Tests_2004/Tabs.html b/tests/pl/Tests_2004/Tabs.html
new file mode 100644
index 0000000..3301ba8
--- /dev/null
+++ b/tests/pl/Tests_2004/Tabs.html
@@ -0,0 +1,25 @@
+<ul>
+<li><p>this is a list item
+indented with tabs</p></li>
+<li><p>this is a list item
+indented with spaces</p></li>
+</ul>
+
+<p>Code:</p>
+
+<pre><code>this code block is indented by one tab
+</code></pre>
+
+<p>And:</p>
+
+<pre><code> this code block is indented by two tabs
+</code></pre>
+
+<p>And:</p>
+
+<pre><code>+ this is an example list item
+ indented with tabs
+
++ this is an example list item
+ indented with spaces
+</code></pre>
diff --git a/tests/pl/Tests_2004/Tabs.text b/tests/pl/Tests_2004/Tabs.text
new file mode 100644
index 0000000..589d113
--- /dev/null
+++ b/tests/pl/Tests_2004/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/tests/pl/Tests_2004/Tidyness.html b/tests/pl/Tests_2004/Tidyness.html
new file mode 100644
index 0000000..f2a8ce7
--- /dev/null
+++ b/tests/pl/Tests_2004/Tidyness.html
@@ -0,0 +1,8 @@
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
diff --git a/tests/pl/Tests_2004/Tidyness.text b/tests/pl/Tests_2004/Tidyness.text
new file mode 100644
index 0000000..5f18b8d
--- /dev/null
+++ b/tests/pl/Tests_2004/Tidyness.text
@@ -0,0 +1,5 @@
+> A list within a blockquote:
+>
+> * asterisk 1
+> * asterisk 2
+> * asterisk 3
diff --git a/tests/pl/Tests_2004/Yuri-Attributes.html b/tests/pl/Tests_2004/Yuri-Attributes.html
new file mode 100644
index 0000000..057da2f
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Attributes.html
@@ -0,0 +1,28 @@
+
+
+<h1 id="lorem"> Lorem ipsum </h1>
+<p>Dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna aliqua.
+</p>
+<ul>
+ <li><p class="first_item">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
+ nisi ut aliquip ex ea commodo consequat.
+</p>
+
+ </li>
+
+ <li><p>Duis aute irure dolor in reprehenderit in voluptate velit esse
+ cillum dolore eu fugiat nulla pariatur2. Excepteur sint occaecat
+ cupidatat non proident, sunt in culpa qui officia deserunt mollit
+ anim id est laborum.
+</p>
+
+ </li>
+</ul>
+<p>Duis aute <strong type="term">irure</strong> dolor in reprehenderit in voluptate
+ velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+ mollit anim id est laborum.
+</p>
+
+
diff --git a/tests/pl/Tests_2004/Yuri-Attributes.text b/tests/pl/Tests_2004/Yuri-Attributes.text
new file mode 100644
index 0000000..8ee512d
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Attributes.text
@@ -0,0 +1,19 @@
+
+Lorem ipsum {@id=lorem}
+=================================
+
+Dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
+
+* Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
+ nisi ut aliquip ex ea commodo consequat.{@class=first_item}
+
+* Duis aute irure dolor in reprehenderit in voluptate velit esse
+ cillum dolore eu fugiat nulla pariatur2. Excepteur sint occaecat
+ cupidatat non proident, sunt in culpa qui officia deserunt mollit
+ anim id est laborum.
+
+Duis aute **irure{@type=term}** dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+mollit anim id est laborum.
diff --git a/tests/pl/Tests_2004/Yuri-Email.html b/tests/pl/Tests_2004/Yuri-Email.html
new file mode 100644
index 0000000..bf1d149
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Email.html
@@ -0,0 +1,18 @@
+
+<p>Lorem ipsum <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#121;&#117;&#114;&#105;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#111;&#114;&#103;">&#121;&#117;&#114;&#105;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#111;&#114;&#103;</a>, etc.
+</p>
+<ul>
+ <li>
+ An email address in a list
+ </li>
+
+ <li>
+ <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#121;&#117;&#114;&#105;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#111;&#114;&#103;">&#121;&#117;&#114;&#105;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#111;&#114;&#103;</a>
+ </li>
+
+ <li>
+ Another item.
+ </li>
+</ul>
+
+
diff --git a/tests/pl/Tests_2004/Yuri-Email.text b/tests/pl/Tests_2004/Yuri-Email.text
new file mode 100644
index 0000000..8f9c779
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Email.text
@@ -0,0 +1,7 @@
+Lorem ipsum <yuri@domain.org>, etc.
+
+* An email address in a list
+* <yuri@domain.org>
+* Another item.
+
+
diff --git a/tests/pl/Tests_2004/Yuri-Footnotes.html b/tests/pl/Tests_2004/Yuri-Footnotes.html
new file mode 100644
index 0000000..cadb040
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Footnotes.html
@@ -0,0 +1,46 @@
+
+<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua<sup><a href="#fn1-903162597" id="fnr1-903162597">1</a></sup>. Ut enim ad minim
+ veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+ commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+ velit esse cillum dolore eu fugiat nulla pariatur<sup><a href="#fn2-903162597" id="fnr2-903162597">2</a></sup>. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+ mollit anim id est laborum.
+</p>
+<ul>
+ <li>
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore<sup><a href="#fn3-903162597" id="fnr3-903162597">3</a></sup> magna aliqua.
+ </li>
+</ul>
+<p>Duis aute irure dolor in reprehenderit in voluptate
+ velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+ mollit anim id est laborum.
+</p>
+
+<div class="footnote"><hr/><ol>
+ <li id="fn1-903162597">
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem
+ accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
+ quae ab illo inventore veritatis et quasi architecto beatae vitae
+ dicta sunt explicabo.<a href="#fnr1-903162597" class="footnoteBackLink" title="Jump back to footnote 1 in the text">&#8617;</a>
+ </li>
+
+ <li id="fn2-903162597">
+ Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit
+ aut fugit, sed quia consequuntur magni dolores eos qui ratione
+ voluptatem sequi nesciunt. <p> Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
+ consectetur, adipisci velit, sed quia non numquam eius modi
+ tempora incidunt ut labore et dolore magnam aliquam quaerat
+ voluptatem. <a href="#fnr2-903162597" class="footnoteBackLink" title="Jump back to footnote 1 in the text">&#8617;</a>
+</p>
+
+ </li>
+
+ <li id="fn3-903162597">
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat. <a href="#fnr3-903162597" class="footnoteBackLink" title="Jump back to footnote 1 in the text">&#8617;</a>
+ </li>
+</ol>
+</div>
diff --git a/tests/pl/Tests_2004/Yuri-Footnotes.text b/tests/pl/Tests_2004/Yuri-Footnotes.text
new file mode 100644
index 0000000..16fe402
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Footnotes.text
@@ -0,0 +1,32 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua[^2]. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur[^1]. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+mollit anim id est laborum.
+
+[^1]: Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit
+ aut fugit, sed quia consequuntur magni dolores eos qui ratione
+ voluptatem sequi nesciunt.
+
+ Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
+ consectetur, adipisci velit, sed quia non numquam eius modi
+ tempora incidunt ut labore et dolore magnam aliquam quaerat
+ voluptatem.
+
+[^2]: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
+ accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
+ quae ab illo inventore veritatis et quasi architecto beatae vitae
+ dicta sunt explicabo.
+
+* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore[^foo] magna aliqua.
+
+[^foo]: Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat.
+
+Duis aute irure dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+mollit anim id est laborum.
diff --git a/tests/pl/Tests_2004/Yuri-Links-in-Headers.html b/tests/pl/Tests_2004/Yuri-Links-in-Headers.html
new file mode 100644
index 0000000..6afc56e
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Links-in-Headers.html
@@ -0,0 +1,15 @@
+<h2>A plain header</h2>
+
+<p>Let's first have a plain header</p>
+
+<h1>An underlined header</h1>
+
+<p>(That's also useful)</p>
+
+<h1>A header with a <a href="http://www.link.com">link</a></h1>
+
+<p>First with a hash</p>
+
+<h2>Another with a <a href="http://www.link.com/">link</a></h2>
+
+<p>This time underlined</p>
diff --git a/tests/pl/Tests_2004/Yuri-Links-in-Headers.text b/tests/pl/Tests_2004/Yuri-Links-in-Headers.text
new file mode 100644
index 0000000..d06a9e1
--- /dev/null
+++ b/tests/pl/Tests_2004/Yuri-Links-in-Headers.text
@@ -0,0 +1,18 @@
+## A plain header
+
+Let's first have a plain header
+
+An underlined header
+====================
+
+(That's also useful)
+
+# A header with a [link](http://www.link.com)
+
+First with a hash
+
+Another with a [link][a]
+------------------------
+This time underlined
+
+[a]: http://www.link.com/
diff --git a/tests/pl/Tests_2004/test.cfg b/tests/pl/Tests_2004/test.cfg
new file mode 100644
index 0000000..d3850f4
--- /dev/null
+++ b/tests/pl/Tests_2004/test.cfg
@@ -0,0 +1,10 @@
+[DEFAULT]
+input_ext=.text
+normalize=1
+# comment out next line to run these tests
+#skip=1
+
+[Yuri-Footnotes]
+extensions=footnotes
+skip=1
+
diff --git a/tests/pl/Tests_2007/Amps and angle encoding.html b/tests/pl/Tests_2007/Amps and angle encoding.html
new file mode 100644
index 0000000..9606860
--- /dev/null
+++ b/tests/pl/Tests_2007/Amps and angle encoding.html
@@ -0,0 +1,17 @@
+<p>AT&amp;T has an ampersand in their name.</p>
+
+<p>AT&amp;T is another way to write it.</p>
+
+<p>This &amp; that.</p>
+
+<p>4 &lt; 5.</p>
+
+<p>6 > 5.</p>
+
+<p>Here's a <a href="http://example.com/?foo=1&amp;bar=2">link</a> with an ampersand in the URL.</p>
+
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&amp;T">AT&amp;T</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
diff --git a/tests/pl/Tests_2007/Amps and angle encoding.text b/tests/pl/Tests_2007/Amps and angle encoding.text
new file mode 100644
index 0000000..0e9527f
--- /dev/null
+++ b/tests/pl/Tests_2007/Amps and angle encoding.text
@@ -0,0 +1,21 @@
+AT&T has an ampersand in their name.
+
+AT&amp;T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/ "AT&T" \ No newline at end of file
diff --git a/tests/pl/Tests_2007/Auto links.html b/tests/pl/Tests_2007/Auto links.html
new file mode 100644
index 0000000..f8df985
--- /dev/null
+++ b/tests/pl/Tests_2007/Auto links.html
@@ -0,0 +1,18 @@
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+
+<p>With an ampersand: <a href="http://example.com/?foo=1&amp;bar=2">http://example.com/?foo=1&amp;bar=2</a></p>
+
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+
+<blockquote>
+ <p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+
+<p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p>
+
+<pre><code>or here: &lt;http://example.com/&gt;
+</code></pre>
diff --git a/tests/pl/Tests_2007/Auto links.text b/tests/pl/Tests_2007/Auto links.text
new file mode 100644
index 0000000..abbc488
--- /dev/null
+++ b/tests/pl/Tests_2007/Auto links.text
@@ -0,0 +1,13 @@
+Link: <http://example.com/>.
+
+With an ampersand: <http://example.com/?foo=1&bar=2>
+
+* In a list?
+* <http://example.com/>
+* It should.
+
+> Blockquoted: <http://example.com/>
+
+Auto-links should not occur here: `<http://example.com/>`
+
+ or here: <http://example.com/> \ No newline at end of file
diff --git a/tests/pl/Tests_2007/Backslash escapes.html b/tests/pl/Tests_2007/Backslash escapes.html
new file mode 100644
index 0000000..29870da
--- /dev/null
+++ b/tests/pl/Tests_2007/Backslash escapes.html
@@ -0,0 +1,118 @@
+<p>These should all get escaped:</p>
+
+<p>Backslash: \</p>
+
+<p>Backtick: `</p>
+
+<p>Asterisk: *</p>
+
+<p>Underscore: _</p>
+
+<p>Left brace: {</p>
+
+<p>Right brace: }</p>
+
+<p>Left bracket: [</p>
+
+<p>Right bracket: ]</p>
+
+<p>Left paren: (</p>
+
+<p>Right paren: )</p>
+
+<p>Greater-than: ></p>
+
+<p>Hash: #</p>
+
+<p>Period: .</p>
+
+<p>Bang: !</p>
+
+<p>Plus: +</p>
+
+<p>Minus: -</p>
+
+<p>These should not, because they occur within a code block:</p>
+
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \&gt;
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+
+<p>Nor should these, which occur in code spans:</p>
+
+<p>Backslash: <code>\\</code></p>
+
+<p>Backtick: <code>\`</code></p>
+
+<p>Asterisk: <code>\*</code></p>
+
+<p>Underscore: <code>\_</code></p>
+
+<p>Left brace: <code>\{</code></p>
+
+<p>Right brace: <code>\}</code></p>
+
+<p>Left bracket: <code>\[</code></p>
+
+<p>Right bracket: <code>\]</code></p>
+
+<p>Left paren: <code>\(</code></p>
+
+<p>Right paren: <code>\)</code></p>
+
+<p>Greater-than: <code>\&gt;</code></p>
+
+<p>Hash: <code>\#</code></p>
+
+<p>Period: <code>\.</code></p>
+
+<p>Bang: <code>\!</code></p>
+
+<p>Plus: <code>\+</code></p>
+
+<p>Minus: <code>\-</code></p>
+
+
+<p>These should get escaped, even though they're matching pairs for
+other Markdown constructs:</p>
+
+<p>*asterisks*</p>
+
+<p>_underscores_</p>
+
+<p>`backticks`</p>
+
+<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p>
+
+<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>
+
+<p>This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.</p>
diff --git a/tests/pl/Tests_2007/Backslash escapes.text b/tests/pl/Tests_2007/Backslash escapes.text
new file mode 100644
index 0000000..5b014cb
--- /dev/null
+++ b/tests/pl/Tests_2007/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 <span attr='`ticks`'>bar</span>.
+
+This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.
diff --git a/tests/pl/Tests_2007/Blockquotes with code blocks.html b/tests/pl/Tests_2007/Blockquotes with code blocks.html
new file mode 100644
index 0000000..990202a
--- /dev/null
+++ b/tests/pl/Tests_2007/Blockquotes with code blocks.html
@@ -0,0 +1,15 @@
+<blockquote>
+ <p>Example:</p>
+
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+
+ <p>Or:</p>
+
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
diff --git a/tests/pl/Tests_2007/Blockquotes with code blocks.text b/tests/pl/Tests_2007/Blockquotes with code blocks.text
new file mode 100644
index 0000000..c31d171
--- /dev/null
+++ b/tests/pl/Tests_2007/Blockquotes with code blocks.text
@@ -0,0 +1,11 @@
+> Example:
+>
+> sub status {
+> print "working";
+> }
+>
+> Or:
+>
+> sub status {
+> return "working";
+> }
diff --git a/tests/pl/Tests_2007/Code Blocks.html b/tests/pl/Tests_2007/Code Blocks.html
new file mode 100644
index 0000000..32703f5
--- /dev/null
+++ b/tests/pl/Tests_2007/Code Blocks.html
@@ -0,0 +1,18 @@
+<pre><code>code block on the first line
+</code></pre>
+
+<p>Regular text.</p>
+
+<pre><code>code block indented by spaces
+</code></pre>
+
+<p>Regular text.</p>
+
+<pre><code>the lines in this block
+all contain trailing spaces
+</code></pre>
+
+<p>Regular Text.</p>
+
+<pre><code>code block on the last line
+</code></pre>
diff --git a/tests/pl/Tests_2007/Code Blocks.text b/tests/pl/Tests_2007/Code Blocks.text
new file mode 100644
index 0000000..b54b092
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Code Spans.html b/tests/pl/Tests_2007/Code Spans.html
new file mode 100644
index 0000000..b057457
--- /dev/null
+++ b/tests/pl/Tests_2007/Code Spans.html
@@ -0,0 +1,5 @@
+<p><code>&lt;test a="</code> content of attribute <code>"&gt;</code></p>
+
+<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>
+
+<p>Here's how you put <code>`backticks`</code> in a code span.</p>
diff --git a/tests/pl/Tests_2007/Code Spans.text b/tests/pl/Tests_2007/Code Spans.text
new file mode 100644
index 0000000..5c229c7
--- /dev/null
+++ b/tests/pl/Tests_2007/Code Spans.text
@@ -0,0 +1,5 @@
+`<test a="` content of attribute `">`
+
+Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span>
+
+Here's how you put `` `backticks` `` in a code span. \ No newline at end of file
diff --git a/tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.html b/tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.html
new file mode 100644
index 0000000..e21ac79
--- /dev/null
+++ b/tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.html
@@ -0,0 +1,8 @@
+<p>In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.</p>
+
+<p>Here's one with a bullet.
+* criminey.</p>
diff --git a/tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.text b/tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.text
new file mode 100644
index 0000000..f8a5b27
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Horizontal rules.html b/tests/pl/Tests_2007/Horizontal rules.html
new file mode 100644
index 0000000..2dc2ab6
--- /dev/null
+++ b/tests/pl/Tests_2007/Horizontal rules.html
@@ -0,0 +1,71 @@
+<p>Dashes:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>---
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>- - -
+</code></pre>
+
+<p>Asterisks:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>***
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>* * *
+</code></pre>
+
+<p>Underscores:</p>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>___
+</code></pre>
+
+<hr />
+
+<hr />
+
+<hr />
+
+<hr />
+
+<pre><code>_ _ _
+</code></pre>
diff --git a/tests/pl/Tests_2007/Horizontal rules.text b/tests/pl/Tests_2007/Horizontal rules.text
new file mode 100644
index 0000000..1594bda
--- /dev/null
+++ b/tests/pl/Tests_2007/Horizontal rules.text
@@ -0,0 +1,67 @@
+Dashes:
+
+---
+
+ ---
+
+ ---
+
+ ---
+
+ ---
+
+- - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+ ***
+
+ ***
+
+ ***
+
+* * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+ ___
+
+ ___
+
+ ___
+
+_ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
diff --git a/tests/pl/Tests_2007/Images.html b/tests/pl/Tests_2007/Images.html
new file mode 100644
index 0000000..217f028
--- /dev/null
+++ b/tests/pl/Tests_2007/Images.html
@@ -0,0 +1,21 @@
+<p><img src="/path/to/img.jpg" alt="Alt text" title="" /></p>
+
+<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title" /></p>
+
+<p>Inline within a paragraph: <a href="/url/">alt text</a>.</p>
+
+<p><img src="/url/" alt="alt text" title="title preceded by two spaces" /></p>
+
+<p><img src="/url/" alt="alt text" title="title has spaces afterward" /></p>
+
+<p><img src="/url/" alt="alt text" title="" /></p>
+
+<p><img src="/url/" alt="alt text" title="with a title" />.</p>
+
+<p><img src="" alt="Empty" title="" /></p>
+
+<p><img src="http://example.com/(parens).jpg" alt="this is a stupid URL" title="" /></p>
+
+<p><img src="/url/" alt="alt text" /></p>
+
+<p><img src="/url/" alt="alt text" title="Title here" /></p>
diff --git a/tests/pl/Tests_2007/Images.text b/tests/pl/Tests_2007/Images.text
new file mode 100644
index 0000000..5707590
--- /dev/null
+++ b/tests/pl/Tests_2007/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](</url/>)
+
+![alt text](</url/> "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/tests/pl/Tests_2007/Inline HTML (Advanced).html b/tests/pl/Tests_2007/Inline HTML (Advanced).html
new file mode 100644
index 0000000..884f14c
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML (Advanced).html
@@ -0,0 +1,30 @@
+<p>Simple block on one line:</p>
+
+<div>foo</div>
+
+<p>And nested without indentation:</p>
+
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+
+<p>And with attributes:</p>
+
+<div>
+ <div id="foo">
+ </div>
+</div>
+
+<p>This was broken in 1.0.2b7:</p>
+
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
diff --git a/tests/pl/Tests_2007/Inline HTML (Advanced).text b/tests/pl/Tests_2007/Inline HTML (Advanced).text
new file mode 100644
index 0000000..3633f81
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML (Advanced).text
@@ -0,0 +1,30 @@
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+
+And with attributes:
+
+<div>
+ <div id="foo">
+ </div>
+</div>
+
+This was broken in 1.0.2b7:
+
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
diff --git a/tests/pl/Tests_2007/Inline HTML (Simple).html b/tests/pl/Tests_2007/Inline HTML (Simple).html
new file mode 100644
index 0000000..6bf78f8
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML (Simple).html
@@ -0,0 +1,72 @@
+<p>Here's a simple block:</p>
+
+<div>
+ foo
+</div>
+
+<p>This should be a code block, though:</p>
+
+<pre><code>&lt;div&gt;
+ foo
+&lt;/div&gt;
+</code></pre>
+
+<p>As should this:</p>
+
+<pre><code>&lt;div&gt;foo&lt;/div&gt;
+</code></pre>
+
+<p>Now, nested:</p>
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+<p>This should just be an HTML comment:</p>
+
+<!-- Comment -->
+
+<p>Multiline:</p>
+
+<!--
+Blah
+Blah
+-->
+
+<p>Code block:</p>
+
+<pre><code>&lt;!-- Comment --&gt;
+</code></pre>
+
+<p>Just plain comment, with trailing spaces on the line:</p>
+
+<!-- foo -->
+
+<p>Code:</p>
+
+<pre><code>&lt;hr /&gt;
+</code></pre>
+
+<p>Hr's:</p>
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
diff --git a/tests/pl/Tests_2007/Inline HTML (Simple).text b/tests/pl/Tests_2007/Inline HTML (Simple).text
new file mode 100644
index 0000000..14aa2dc
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML (Simple).text
@@ -0,0 +1,69 @@
+Here's a simple block:
+
+<div>
+ foo
+</div>
+
+This should be a code block, though:
+
+ <div>
+ foo
+ </div>
+
+As should this:
+
+ <div>foo</div>
+
+Now, nested:
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+ <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+ <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+
diff --git a/tests/pl/Tests_2007/Inline HTML comments.html b/tests/pl/Tests_2007/Inline HTML comments.html
new file mode 100644
index 0000000..3f167a1
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML comments.html
@@ -0,0 +1,13 @@
+<p>Paragraph one.</p>
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+<p>Paragraph two.</p>
+
+<!-- one comment block -- -- with two comments -->
+
+<p>The end.</p>
diff --git a/tests/pl/Tests_2007/Inline HTML comments.text b/tests/pl/Tests_2007/Inline HTML comments.text
new file mode 100644
index 0000000..41d830d
--- /dev/null
+++ b/tests/pl/Tests_2007/Inline HTML comments.text
@@ -0,0 +1,13 @@
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
diff --git a/tests/pl/Tests_2007/Links, inline style.html b/tests/pl/Tests_2007/Links, inline style.html
new file mode 100644
index 0000000..9f351ef
--- /dev/null
+++ b/tests/pl/Tests_2007/Links, inline style.html
@@ -0,0 +1,23 @@
+<p>Just a <a href="/url/">URL</a>.</p>
+
+<p><a href="/url/" title="title">URL and title</a>.</p>
+
+<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p>
+
+<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p>
+
+<p><a href="/url/" title="title has spaces afterward">URL and title</a>.</p>
+
+<p><a href="/url/">URL wrapped in angle brackets</a>.</p>
+
+<p><a href="/url/" title="Here's the title">URL w/ angle brackets + title</a>.</p>
+
+<p><a href="">Empty</a>.</p>
+
+<p><a href="http://en.wikipedia.org/wiki/WIMP_(computing)">With parens in the URL</a></p>
+
+<p>(With outer parens and <a href="/foo(bar)">parens in url</a>)</p>
+
+<p><a href="/foo(bar)" title="and a title">With parens in the URL</a></p>
+
+<p>(With outer parens and <a href="/foo(bar)" title="and a title">parens in url</a>)</p>
diff --git a/tests/pl/Tests_2007/Links, inline style.text b/tests/pl/Tests_2007/Links, inline style.text
new file mode 100644
index 0000000..aba9658
--- /dev/null
+++ b/tests/pl/Tests_2007/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/>).
+
+[URL w/ angle brackets + title](</url/> "Here's the title").
+
+[Empty]().
+
+[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing))
+
+(With outer parens and [parens in url](/foo(bar)))
+
+
+[With parens in the URL](/foo(bar) "and a title")
+
+(With outer parens and [parens in url](/foo(bar) "and a title"))
diff --git a/tests/pl/Tests_2007/Links, reference style.html b/tests/pl/Tests_2007/Links, reference style.html
new file mode 100644
index 0000000..8e70c32
--- /dev/null
+++ b/tests/pl/Tests_2007/Links, reference style.html
@@ -0,0 +1,52 @@
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+
+<p>With <a href="/url/">embedded [brackets]</a>.</p>
+
+<p>Indented <a href="/url">once</a>.</p>
+
+<p>Indented <a href="/url">twice</a>.</p>
+
+<p>Indented <a href="/url">thrice</a>.</p>
+
+<p>Indented [four][] times.</p>
+
+<pre><code>[four]: /url
+</code></pre>
+
+<hr />
+
+<p><a href="foo">this</a> should work</p>
+
+<p>So should <a href="foo">this</a>.</p>
+
+<p>And <a href="foo">this</a>.</p>
+
+<p>And <a href="foo">this</a>.</p>
+
+<p>And <a href="foo">this</a>.</p>
+
+<p>But not [that] [].</p>
+
+<p>Nor [that][].</p>
+
+<p>Nor [that].</p>
+
+<p>[Something in brackets like <a href="foo">this</a> should work]</p>
+
+<p>[Same with <a href="foo">this</a>.]</p>
+
+<p>In this case, <a href="/somethingelse/">this</a> points to something else.</p>
+
+<p>Backslashing should suppress [this] and [this].</p>
+
+<hr />
+
+<p>Here's one where the <a href="/url/">link
+breaks</a> across lines.</p>
+
+<p>Here's another where the <a href="/url/">link
+breaks</a> across lines, but with a line-ending space.</p>
diff --git a/tests/pl/Tests_2007/Links, reference style.text b/tests/pl/Tests_2007/Links, reference style.text
new file mode 100644
index 0000000..341ec88
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Links, shortcut references.html b/tests/pl/Tests_2007/Links, shortcut references.html
new file mode 100644
index 0000000..bf81e93
--- /dev/null
+++ b/tests/pl/Tests_2007/Links, shortcut references.html
@@ -0,0 +1,9 @@
+<p>This is the <a href="/simple">simple case</a>.</p>
+
+<p>This one has a <a href="/foo">line
+break</a>.</p>
+
+<p>This one has a <a href="/foo">line
+break</a> with a line-ending space.</p>
+
+<p><a href="/that">this</a> and the <a href="/other">other</a></p>
diff --git a/tests/pl/Tests_2007/Links, shortcut references.text b/tests/pl/Tests_2007/Links, shortcut references.text
new file mode 100644
index 0000000..8c44c98
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Literal quotes in titles.html b/tests/pl/Tests_2007/Literal quotes in titles.html
new file mode 100644
index 0000000..611c1ac
--- /dev/null
+++ b/tests/pl/Tests_2007/Literal quotes in titles.html
@@ -0,0 +1,3 @@
+<p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
diff --git a/tests/pl/Tests_2007/Literal quotes in titles.text b/tests/pl/Tests_2007/Literal quotes in titles.text
new file mode 100644
index 0000000..29d0e42
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Markdown Documentation - Basics.html b/tests/pl/Tests_2007/Markdown Documentation - Basics.html
new file mode 100644
index 0000000..d5bdbb2
--- /dev/null
+++ b/tests/pl/Tests_2007/Markdown Documentation - Basics.html
@@ -0,0 +1,314 @@
+<h1>Markdown: Basics</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<h2>Getting the Gist of Markdown's Formatting Syntax</h2>
+
+<p>This page offers a brief overview of what it's like to use Markdown.
+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.</p>
+
+<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.</p>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<h2>Paragraphs, Headers, Blockquotes</h2>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.
+Setext-style headers for <code>&lt;h1&gt;</code> and <code>&lt;h2&gt;</code> are created by
+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.
+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.</p>
+
+<p>Blockquotes are indicated using email-style '<code>&gt;</code>' angle brackets.</p>
+
+<p>Markdown:</p>
+
+<pre><code>A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+&gt; This is a blockquote.
+&gt;
+&gt; This is the second paragraph in the blockquote.
+&gt;
+&gt; ## This is an H2 in a blockquote
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;h1&gt;A First Level Header&lt;/h1&gt;
+
+&lt;h2&gt;A Second Level Header&lt;/h2&gt;
+
+&lt;p&gt;Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.&lt;/p&gt;
+
+&lt;p&gt;The quick brown fox jumped over the lazy
+dog's back.&lt;/p&gt;
+
+&lt;h3&gt;Header 3&lt;/h3&gt;
+
+&lt;blockquote&gt;
+ &lt;p&gt;This is a blockquote.&lt;/p&gt;
+
+ &lt;p&gt;This is the second paragraph in the blockquote.&lt;/p&gt;
+
+ &lt;h2&gt;This is an H2 in a blockquote&lt;/h2&gt;
+&lt;/blockquote&gt;
+</code></pre>
+
+<h3>Phrase Emphasis</h3>
+
+<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>
+
+<p>Markdown:</p>
+
+<pre><code>Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;Some of these words &lt;em&gt;are emphasized&lt;/em&gt;.
+Some of these words &lt;em&gt;are emphasized also&lt;/em&gt;.&lt;/p&gt;
+
+&lt;p&gt;Use two asterisks for &lt;strong&gt;strong emphasis&lt;/strong&gt;.
+Or, if you prefer, &lt;strong&gt;use two underscores instead&lt;/strong&gt;.&lt;/p&gt;
+</code></pre>
+
+<h2>Lists</h2>
+
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
+
+<pre><code>* Candy.
+* Gum.
+* Booze.
+</code></pre>
+
+<p>this:</p>
+
+<pre><code>+ Candy.
++ Gum.
++ Booze.
+</code></pre>
+
+<p>and this:</p>
+
+<pre><code>- Candy.
+- Gum.
+- Booze.
+</code></pre>
+
+<p>all produce the same output:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;Candy.&lt;/li&gt;
+&lt;li&gt;Gum.&lt;/li&gt;
+&lt;li&gt;Booze.&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:</p>
+
+<pre><code>1. Red
+2. Green
+3. Blue
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;ol&gt;
+&lt;li&gt;Red&lt;/li&gt;
+&lt;li&gt;Green&lt;/li&gt;
+&lt;li&gt;Blue&lt;/li&gt;
+&lt;/ol&gt;
+</code></pre>
+
+<p>If you put blank lines between items, you'll get <code>&lt;p&gt;</code> tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:</p>
+
+<pre><code>* A list item.
+
+ With multiple paragraphs.
+
+* Another item in the list.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;A list item.&lt;/p&gt;
+&lt;p&gt;With multiple paragraphs.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Another item in the list.&lt;/p&gt;&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<h3>Links</h3>
+
+<p>Markdown supports two styles for creating links: <em>inline</em> and
+<em>reference</em>. With both styles, you use square brackets to delimit the
+text you want to turn into a link.</p>
+
+<p>Inline-style links use parentheses immediately after the link text.
+For example:</p>
+
+<pre><code>This is an [example link](http://example.com/).
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;This is an &lt;a href="http://example.com/"&gt;
+example link&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>Optionally, you may include a title attribute in the parentheses:</p>
+
+<pre><code>This is an [example link](http://example.com/ "With a Title").
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;This is an &lt;a href="http://example.com/" title="With a Title"&gt;
+example link&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:</p>
+
+<pre><code>I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/ "Google"
+[2]: http://search.yahoo.com/ "Yahoo Search"
+[3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href="http://google.com/"
+title="Google"&gt;Google&lt;/a&gt; than from &lt;a href="http://search.yahoo.com/"
+title="Yahoo Search"&gt;Yahoo&lt;/a&gt; or &lt;a href="http://search.msn.com/"
+title="MSN Search"&gt;MSN&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are <em>not</em> case sensitive:</p>
+
+<pre><code>I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I start my morning with a cup of coffee and
+&lt;a href="http://www.nytimes.com/"&gt;The New York Times&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<h3>Images</h3>
+
+<p>Image syntax is very much like link syntax.</p>
+
+<p>Inline (titles are optional):</p>
+
+<pre><code>![alt text](/path/to/img.jpg "Title")
+</code></pre>
+
+<p>Reference-style:</p>
+
+<pre><code>![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+</code></pre>
+
+<p>Both of the above examples produce the same output:</p>
+
+<pre><code>&lt;img src="/path/to/img.jpg" alt="alt text" title="Title" /&gt;
+</code></pre>
+
+<h3>Code</h3>
+
+<p>In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> or
+<code>&gt;</code>) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:</p>
+
+<pre><code>I strongly recommend against using any `&lt;blink&gt;` tags.
+
+I wish SmartyPants used named entities like `&amp;mdash;`
+instead of decimal-encoded entites like `&amp;#8212;`.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;I strongly recommend against using any
+&lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
+
+&lt;p&gt;I wish SmartyPants used named entities like
+&lt;code&gt;&amp;amp;mdash;&lt;/code&gt; instead of decimal-encoded
+entites like &lt;code&gt;&amp;amp;#8212;&lt;/code&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, <code>&amp;</code>, <code>&lt;</code>,
+and <code>&gt;</code> characters will be escaped automatically.</p>
+
+<p>Markdown:</p>
+
+<pre><code>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+ &lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+ &lt;/blockquote&gt;
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code>&lt;p&gt;If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;&amp;lt;blockquote&amp;gt;
+ &amp;lt;p&amp;gt;For example.&amp;lt;/p&amp;gt;
+&amp;lt;/blockquote&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
diff --git a/tests/pl/Tests_2007/Markdown Documentation - Basics.text b/tests/pl/Tests_2007/Markdown Documentation - Basics.text
new file mode 100644
index 0000000..486055c
--- /dev/null
+++ b/tests/pl/Tests_2007/Markdown Documentation - Basics.text
@@ -0,0 +1,306 @@
+Markdown: Basics
+================
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+
+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 `<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/tests/pl/Tests_2007/Markdown Documentation - Syntax.html b/tests/pl/Tests_2007/Markdown Documentation - Syntax.html
new file mode 100644
index 0000000..5c01306
--- /dev/null
+++ b/tests/pl/Tests_2007/Markdown Documentation - Syntax.html
@@ -0,0 +1,942 @@
+<h1>Markdown: Syntax</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a>
+<ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul></li>
+<li><a href="#block">Block Elements</a>
+<ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul></li>
+<li><a href="#span">Span Elements</a>
+<ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul></li>
+<li><a href="#misc">Miscellaneous</a>
+<ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul></li>
+</ul>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<hr />
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+
+<p>The only restrictions are that block-level HTML elements -- e.g. <code>&lt;div&gt;</code>,
+<code>&lt;table&gt;</code>, <code>&lt;pre&gt;</code>, <code>&lt;p&gt;</code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code>&lt;p&gt;</code> tags around HTML block-level tags.</p>
+
+<p>For example, to add an HTML table to a Markdown article:</p>
+
+<pre><code>This is a regular paragraph.
+
+&lt;table&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Foo&lt;/td&gt;
+ &lt;/tr&gt;
+&lt;/table&gt;
+
+This is another regular paragraph.
+</code></pre>
+
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+
+<p>Span-level HTML tags -- e.g. <code>&lt;span&gt;</code>, <code>&lt;cite&gt;</code>, or <code>&lt;del&gt;</code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code>&lt;a&gt;</code> or <code>&lt;img&gt;</code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code>&lt;</code>
+and <code>&amp;</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&amp;lt;</code>, and
+<code>&amp;amp;</code>.</p>
+
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&amp;T', you need to write '<code>AT&amp;amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+
+<p>you need to encode the URL as:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;amp;q=larry+bird
+</code></pre>
+
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;amp;</code>.</p>
+
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+
+<pre><code>&amp;copy;
+</code></pre>
+
+<p>and Markdown will leave it alone. But if you write:</p>
+
+<pre><code>AT&amp;T
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>AT&amp;amp;T
+</code></pre>
+
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+
+<pre><code>4 &lt; 5
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>4 &amp;lt; 5
+</code></pre>
+
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code>&lt;</code>
+and <code>&amp;</code> in your example code needs to be escaped.)</p>
+
+<hr />
+
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code>&lt;br /&gt;</code> tag.</p>
+
+<p>When you <em>do</em> want to insert a <code>&lt;br /&gt;</code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+
+<p>Yes, this takes a tad more effort to create a <code>&lt;br /&gt;</code>, but a simplistic
+"every line break is a <code>&lt;br /&gt;</code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>&gt;</code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>&gt;</code> before every line:</p>
+
+<pre><code>&gt; This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+&gt; consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+&gt; Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+&gt;
+&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+&gt; id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Markdown allows you to be lazy and only put the <code>&gt;</code> before the first
+line of a hard-wrapped paragraph:</p>
+
+<pre><code>&gt; 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.
+
+&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>&gt;</code>:</p>
+
+<pre><code>&gt; This is the first level of quoting.
+&gt;
+&gt; &gt; This is nested blockquote.
+&gt;
+&gt; Back to the first level.
+</code></pre>
+
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+
+<pre><code>&gt; ## This is a header.
+&gt;
+&gt; 1. This is the first list item.
+&gt; 2. This is the second list item.
+&gt;
+&gt; Here's some example code:
+&gt;
+&gt; return shell_exec("echo $input | $markdown_script");
+</code></pre>
+
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+
+<p>is equivalent to:</p>
+
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+
+<p>and:</p>
+
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+
+<p>Ordered lists use numbers followed by periods:</p>
+
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+
+<pre><code>&lt;ol&gt;
+&lt;li&gt;Bird&lt;/li&gt;
+&lt;li&gt;McHale&lt;/li&gt;
+&lt;li&gt;Parish&lt;/li&gt;
+&lt;/ol&gt;
+</code></pre>
+
+<p>If you instead wrote the list in Markdown like this:</p>
+
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+
+<p>or even:</p>
+
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>But if you want to be lazy, you don't have to:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code>&lt;p&gt;</code> tags in the HTML output. For example, this input:</p>
+
+<pre><code>* Bird
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;Bird&lt;/li&gt;
+&lt;li&gt;Magic&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>But this:</p>
+
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Bird&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Magic&lt;/p&gt;&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+
+<p>To put a blockquote within a list item, the blockquote's <code>&gt;</code>
+delimiters need to be indented:</p>
+
+<pre><code>* A list item with a blockquote:
+
+ &gt; This is a blockquote
+ &gt; inside a list item.
+</code></pre>
+
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+
+<pre><code>* A list item with a code block:
+
+ &lt;code goes here&gt;
+</code></pre>
+
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+
+<pre><code>1986. What a great season.
+</code></pre>
+
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+
+<pre><code>1986\. What a great season.
+</code></pre>
+
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code>&lt;pre&gt;</code> and <code>&lt;code&gt;</code> tags.</p>
+
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+
+<p>Markdown will generate:</p>
+
+<pre><code>&lt;p&gt;This is a normal paragraph:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;This is a code block.
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;p&gt;Here is an example of AppleScript:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code&gt;tell application "Foo"
+ beep
+end tell
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+
+<p>Within a code block, ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> and <code>&gt;</code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+
+<pre><code> &lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+ &lt;/div&gt;
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code>&lt;pre&gt;&lt;code&gt;&amp;lt;div class="footer"&amp;gt;
+ &amp;amp;copy; 2004 Foo Corporation
+&amp;lt;/div&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code>&lt;hr /&gt;</code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+
+<hr />
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+
+<p>In both styles, the link text is delimited by [square brackets].</p>
+
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+
+<p>Will produce:</p>
+
+<pre><code>&lt;p&gt;This is &lt;a href="http://example.com/" title="Title"&gt;
+an example&lt;/a&gt; inline link.&lt;/p&gt;
+
+&lt;p&gt;&lt;a href="http://example.net/"&gt;This link&lt;/a&gt; has no
+title attribute.&lt;/p&gt;
+</code></pre>
+
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+
+<p>You can optionally use a space to separate the sets of brackets:</p>
+
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>Square brackets containing the link identifier (optionally
+indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+in double or single quotes.</li>
+</ul>
+
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+
+<pre><code>[id]: &lt;http://example.com/&gt; "Optional Title Here"
+</code></pre>
+
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+
+<p>are equivalent.</p>
+
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+
+<pre><code>[Google][]
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Google]: http://google.com/
+</code></pre>
+
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+
+<p>Here's an example of reference links in action:</p>
+
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Using the implicit link name shortcut, you could instead write:</p>
+
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Both of the above examples will produce the following HTML output:</p>
+
+<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href="http://google.com/"
+title="Google"&gt;Google&lt;/a&gt; than from
+&lt;a href="http://search.yahoo.com/" title="Yahoo Search"&gt;Yahoo&lt;/a&gt;
+or &lt;a href="http://search.msn.com/" title="MSN Search"&gt;MSN&lt;/a&gt;.&lt;/p&gt;
+</code></pre>
+
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code>&lt;em&gt;</code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code>&lt;strong&gt;</code> tag. E.g., this input:</p>
+
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;em&gt;single asterisks&lt;/em&gt;
+
+&lt;em&gt;single underscores&lt;/em&gt;
+
+&lt;strong&gt;double asterisks&lt;/strong&gt;
+
+&lt;strong&gt;double underscores&lt;/strong&gt;
+</code></pre>
+
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+
+<p>Emphasis can be used in the middle of a word:</p>
+
+<pre><code>un*fucking*believable
+</code></pre>
+
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+
+<pre><code>Use the `printf()` function.
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;p&gt;Use the &lt;code&gt;printf()&lt;/code&gt; function.&lt;/p&gt;
+</code></pre>
+
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+
+<p>which will produce this:</p>
+
+<pre><code>&lt;p&gt;&lt;code&gt;There is a literal backtick (`) here.&lt;/code&gt;&lt;/p&gt;
+</code></pre>
+
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code>&lt;p&gt;A single backtick in a code span: &lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
+
+&lt;p&gt;A backtick-delimited string in a code span: &lt;code&gt;`foo`&lt;/code&gt;&lt;/p&gt;
+</code></pre>
+
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+
+<pre><code>Please don't use any `&lt;blink&gt;` tags.
+</code></pre>
+
+<p>into:</p>
+
+<pre><code>&lt;p&gt;Please don't use any &lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
+</code></pre>
+
+<p>You can write this:</p>
+
+<pre><code>`&amp;#8212;` is the decimal-encoded equivalent of `&amp;mdash;`.
+</code></pre>
+
+<p>to produce:</p>
+
+<pre><code>&lt;p&gt;&lt;code&gt;&amp;amp;#8212;&lt;/code&gt; is the decimal-encoded
+equivalent of &lt;code&gt;&amp;amp;mdash;&lt;/code&gt;.&lt;/p&gt;
+</code></pre>
+
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+
+<p>Inline image syntax looks like this:</p>
+
+<pre><code>![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+the image, and an optional <code>title</code> attribute enclosed in double
+or single quotes.</li>
+</ul>
+
+<p>Reference-style image syntax looks like this:</p>
+
+<pre><code>![Alt text][id]
+</code></pre>
+
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code>&lt;img&gt;</code> tags.</p>
+
+<hr />
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+
+<pre><code>&lt;http://example.com/&gt;
+</code></pre>
+
+<p>Markdown will turn this into:</p>
+
+<pre><code>&lt;a href="http://example.com/"&gt;http://example.com/&lt;/a&gt;
+</code></pre>
+
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+
+<pre><code>&lt;address@example.com&gt;
+</code></pre>
+
+<p>into something like this:</p>
+
+<pre><code>&lt;a href="&amp;#x6D;&amp;#x61;i&amp;#x6C;&amp;#x74;&amp;#x6F;:&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;
+&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;
+&amp;#109;"&gt;&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;
+&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt;
+</code></pre>
+
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code>&lt;em&gt;</code> tag), you can backslashes
+before the asterisks, like this:</p>
+
+<pre><code>\*literal asterisks\*
+</code></pre>
+
+<p>Markdown provides backslash escapes for the following characters:</p>
+
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
diff --git a/tests/pl/Tests_2007/Markdown Documentation - Syntax.text b/tests/pl/Tests_2007/Markdown Documentation - Syntax.text
new file mode 100644
index 0000000..57360a1
--- /dev/null
+++ b/tests/pl/Tests_2007/Markdown Documentation - Syntax.text
@@ -0,0 +1,888 @@
+Markdown: Syntax
+================
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+
+* [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
+
+* * *
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+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.
+
+
+
+<h3 id="html">Inline HTML</h3>
+
+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.
+
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+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](#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.)
+
+
+* * *
+
+
+<h2 id="block">Block Elements</h2>
+
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+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][bq] and multi-paragraph [list items][l]
+work best -- and look better -- when you format them with hard breaks.
+
+ [bq]: #blockquote
+ [l]: #list
+
+
+
+<h3 id="header">Headers</h3>
+
+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 ######
+
+
+<h3 id="blockquote">Blockquotes</h3>
+
+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.
+
+
+<h3 id="list">Lists</h3>
+
+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.
+
+
+
+<h3 id="precode">Code Blocks</h3>
+
+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.
+
+
+
+<h3 id="hr">Horizontal Rules</h3>
+
+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:
+
+ * * *
+
+ ***
+
+ *****
+
+ - - -
+
+ ---------------------------------------
+
+ _ _ _
+
+
+* * *
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+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.
+
+
+<h3 id="em">Emphasis</h3>
+
+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\*
+
+
+
+<h3 id="code">Code</h3>
+
+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>
+
+
+
+<h3 id="img">Images</h3>
+
+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.
+
+
+* * *
+
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+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.)
+
+
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+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/tests/pl/Tests_2007/Nested blockquotes.html b/tests/pl/Tests_2007/Nested blockquotes.html
new file mode 100644
index 0000000..d8ec7f8
--- /dev/null
+++ b/tests/pl/Tests_2007/Nested blockquotes.html
@@ -0,0 +1,9 @@
+<blockquote>
+ <p>foo</p>
+
+ <blockquote>
+ <p>bar</p>
+ </blockquote>
+
+ <p>foo</p>
+</blockquote>
diff --git a/tests/pl/Tests_2007/Nested blockquotes.text b/tests/pl/Tests_2007/Nested blockquotes.text
new file mode 100644
index 0000000..ed3c624
--- /dev/null
+++ b/tests/pl/Tests_2007/Nested blockquotes.text
@@ -0,0 +1,5 @@
+> foo
+>
+> > bar
+>
+> foo
diff --git a/tests/pl/Tests_2007/Ordered and unordered lists.html b/tests/pl/Tests_2007/Ordered and unordered lists.html
new file mode 100644
index 0000000..ba71eab
--- /dev/null
+++ b/tests/pl/Tests_2007/Ordered and unordered lists.html
@@ -0,0 +1,148 @@
+<h2>Unordered</h2>
+
+<p>Asterisks tight:</p>
+
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+
+<p>Asterisks loose:</p>
+
+<ul>
+<li><p>asterisk 1</p></li>
+<li><p>asterisk 2</p></li>
+<li><p>asterisk 3</p></li>
+</ul>
+
+<hr />
+
+<p>Pluses tight:</p>
+
+<ul>
+<li>Plus 1</li>
+<li>Plus 2</li>
+<li>Plus 3</li>
+</ul>
+
+<p>Pluses loose:</p>
+
+<ul>
+<li><p>Plus 1</p></li>
+<li><p>Plus 2</p></li>
+<li><p>Plus 3</p></li>
+</ul>
+
+<hr />
+
+<p>Minuses tight:</p>
+
+<ul>
+<li>Minus 1</li>
+<li>Minus 2</li>
+<li>Minus 3</li>
+</ul>
+
+<p>Minuses loose:</p>
+
+<ul>
+<li><p>Minus 1</p></li>
+<li><p>Minus 2</p></li>
+<li><p>Minus 3</p></li>
+</ul>
+
+<h2>Ordered</h2>
+
+<p>Tight:</p>
+
+<ol>
+<li>First</li>
+<li>Second</li>
+<li>Third</li>
+</ol>
+
+<p>and:</p>
+
+<ol>
+<li>One</li>
+<li>Two</li>
+<li>Three</li>
+</ol>
+
+<p>Loose using tabs:</p>
+
+<ol>
+<li><p>First</p></li>
+<li><p>Second</p></li>
+<li><p>Third</p></li>
+</ol>
+
+<p>and using spaces:</p>
+
+<ol>
+<li><p>One</p></li>
+<li><p>Two</p></li>
+<li><p>Three</p></li>
+</ol>
+
+<p>Multiple paragraphs:</p>
+
+<ol>
+<li><p>Item 1, graf one.</p>
+
+<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's
+back.</p></li>
+<li><p>Item 2.</p></li>
+<li><p>Item 3.</p></li>
+</ol>
+
+<h2>Nested</h2>
+
+<ul>
+<li>Tab
+<ul>
+<li>Tab
+<ul>
+<li>Tab</li>
+</ul></li>
+</ul></li>
+</ul>
+
+<p>Here's another:</p>
+
+<ol>
+<li>First</li>
+<li>Second:
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul></li>
+<li>Third</li>
+</ol>
+
+<p>Same thing but with paragraphs:</p>
+
+<ol>
+<li><p>First</p></li>
+<li><p>Second:</p>
+
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul></li>
+<li><p>Third</p></li>
+</ol>
+
+
+<p>This was an error in Markdown 1.0.1:</p>
+
+<ul>
+<li><p>this</p>
+
+<ul><li>sub</li></ul>
+
+<p>that</p></li>
+</ul>
diff --git a/tests/pl/Tests_2007/Ordered and unordered lists.text b/tests/pl/Tests_2007/Ordered and unordered lists.text
new file mode 100644
index 0000000..7f3b497
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Strong and em together.html b/tests/pl/Tests_2007/Strong and em together.html
new file mode 100644
index 0000000..71ec78c
--- /dev/null
+++ b/tests/pl/Tests_2007/Strong and em together.html
@@ -0,0 +1,7 @@
+<p><strong><em>This is strong and em.</em></strong></p>
+
+<p>So is <strong><em>this</em></strong> word.</p>
+
+<p><strong><em>This is strong and em.</em></strong></p>
+
+<p>So is <strong><em>this</em></strong> word.</p>
diff --git a/tests/pl/Tests_2007/Strong and em together.text b/tests/pl/Tests_2007/Strong and em together.text
new file mode 100644
index 0000000..95ee690
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Tabs.html b/tests/pl/Tests_2007/Tabs.html
new file mode 100644
index 0000000..3301ba8
--- /dev/null
+++ b/tests/pl/Tests_2007/Tabs.html
@@ -0,0 +1,25 @@
+<ul>
+<li><p>this is a list item
+indented with tabs</p></li>
+<li><p>this is a list item
+indented with spaces</p></li>
+</ul>
+
+<p>Code:</p>
+
+<pre><code>this code block is indented by one tab
+</code></pre>
+
+<p>And:</p>
+
+<pre><code> this code block is indented by two tabs
+</code></pre>
+
+<p>And:</p>
+
+<pre><code>+ this is an example list item
+ indented with tabs
+
++ this is an example list item
+ indented with spaces
+</code></pre>
diff --git a/tests/pl/Tests_2007/Tabs.text b/tests/pl/Tests_2007/Tabs.text
new file mode 100644
index 0000000..589d113
--- /dev/null
+++ b/tests/pl/Tests_2007/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/tests/pl/Tests_2007/Tidyness.html b/tests/pl/Tests_2007/Tidyness.html
new file mode 100644
index 0000000..f2a8ce7
--- /dev/null
+++ b/tests/pl/Tests_2007/Tidyness.html
@@ -0,0 +1,8 @@
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
diff --git a/tests/pl/Tests_2007/Tidyness.text b/tests/pl/Tests_2007/Tidyness.text
new file mode 100644
index 0000000..5f18b8d
--- /dev/null
+++ b/tests/pl/Tests_2007/Tidyness.text
@@ -0,0 +1,5 @@
+> A list within a blockquote:
+>
+> * asterisk 1
+> * asterisk 2
+> * asterisk 3
diff --git a/tests/pl/Tests_2007/test.cfg b/tests/pl/Tests_2007/test.cfg
new file mode 100644
index 0000000..be86b6c
--- /dev/null
+++ b/tests/pl/Tests_2007/test.cfg
@@ -0,0 +1,5 @@
+[DEFAULT]
+input_ext=.text
+normalize=1
+# comment out next line to run these tests
+skip=1
diff --git a/tests/plugins.py b/tests/plugins.py
new file mode 100644
index 0000000..6e72024
--- /dev/null
+++ b/tests/plugins.py
@@ -0,0 +1,115 @@
+import traceback
+from util import MarkdownSyntaxError
+from nose.plugins import Plugin
+from nose.plugins.errorclass import ErrorClass, ErrorClassPlugin
+
+class Markdown(ErrorClassPlugin):
+ """ Add MarkdownSyntaxError and ensure proper formatting. """
+ mdsyntax = ErrorClass(MarkdownSyntaxError,
+ label='MarkdownSyntaxError',
+ isfailure=True)
+ enabled = True
+
+ def configure(self, options, conf):
+ self.conf = conf
+
+ def addError(self, test, err):
+ """ Ensure other plugins see the error by returning nothing here. """
+ pass
+
+ def formatError(self, test, err):
+ """ Remove unnessecary and unhelpful traceback from error report. """
+ et, ev, tb = err
+ if et.__name__ == 'MarkdownSyntaxError':
+ return et, ev, ''
+ return err
+
+
+def escape(html):
+ """ Escape HTML for display as source within HTML. """
+ html = html.replace('&', '&amp;')
+ html = html.replace('<', '&lt;')
+ html = html.replace('>', '&gt;')
+ return html
+
+
+class HtmlOutput(Plugin):
+ """Output test results as ugly, unstyled html. """
+
+ name = 'html-output'
+ score = 2 # run late
+ enabled = True
+
+ def __init__(self):
+ super(HtmlOutput, self).__init__()
+ self.html = [ '<html><head>',
+ '<title>Test output</title>',
+ '</head><body>' ]
+
+ def configure(self, options, conf):
+ self.conf = conf
+
+ def addSuccess(self, test):
+ self.html.append('<span>ok</span>')
+
+ def addError(self, test, err):
+ err = self.formatErr(err)
+ self.html.append('<span>ERROR</span>')
+ self.html.append('<pre>%s</pre>' % escape(err))
+
+ def addFailure(self, test, err):
+ err = self.formatErr(err)
+ self.html.append('<span>FAIL</span>')
+ self.html.append('<pre>%s</pre>' % escape(err))
+
+ def finalize(self, result):
+ self.html.append('<div>')
+ self.html.append("Ran %d test%s" %
+ (result.testsRun, result.testsRun != 1 and "s"
+or ""))
+ self.html.append('</div>')
+ self.html.append('<div>')
+ if not result.wasSuccessful():
+ self.html.extend(['<span>FAILED (',
+ 'failures=%d ' % len(result.failures),
+ 'errors=%d' % len(result.errors)])
+ for cls in result.errorClasses.keys():
+ storage, label, isfail = result.errorClasses[cls]
+ if len(storage):
+ self.html.append(' %ss=%d' % (label, len(storage)))
+ self.html.append(')</span>')
+ else:
+ self.html.append('OK')
+ self.html.append('</div></body></html>')
+ f = open('test-output.html', 'w')
+ for l in self.html:
+ f.write(l)
+ f.close()
+
+ def formatErr(self, err):
+ exctype, value, tb = err
+ return ''.join(traceback.format_exception(exctype, value, tb))
+
+ def startContext(self, ctx):
+ try:
+ n = ctx.__name__
+ except AttributeError:
+ n = str(ctx).replace('<', '').replace('>', '')
+ self.html.extend(['<fieldset>', '<legend>', n, '</legend>'])
+ try:
+ path = ctx.__file__.replace('.pyc', '.py')
+ self.html.extend(['<div>', path, '</div>'])
+ except AttributeError:
+ pass
+
+ def stopContext(self, ctx):
+ self.html.append('</fieldset>')
+
+ def startTest(self, test):
+ self.html.extend([ '<div><span>',
+ test.shortDescription() or str(test),
+ '</span>' ])
+
+ def stopTest(self, test):
+ self.html.append('</div>')
+
diff --git a/tests/safe_mode/remove.html b/tests/safe_mode/remove.html
new file mode 100644
index 0000000..a1e1626
--- /dev/null
+++ b/tests/safe_mode/remove.html
@@ -0,0 +1,34 @@
+<p>Here's a simple block:</p>
+<p></p>
+<p>This should be a code block, though:</p>
+<pre><code>&lt;div&gt;
+ foo
+&lt;/div&gt;
+</code></pre>
+<p>As should this:</p>
+<pre><code>&lt;div&gt;foo&lt;/div&gt;
+</code></pre>
+<p>Now, nested:</p>
+<p></p>
+<p>This should just be an HTML comment:</p>
+<p></p>
+<p>Multiline:</p>
+<p></p>
+<p>Code block:</p>
+<pre><code>&lt;!-- Comment --&gt;
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<p></p>
+<p>Code:</p>
+<pre><code>&lt;hr /&gt;
+</code></pre>
+<p>Hr's:</p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p></p> \ No newline at end of file
diff --git a/tests/safe_mode/remove.txt b/tests/safe_mode/remove.txt
new file mode 100644
index 0000000..14aa2dc
--- /dev/null
+++ b/tests/safe_mode/remove.txt
@@ -0,0 +1,69 @@
+Here's a simple block:
+
+<div>
+ foo
+</div>
+
+This should be a code block, though:
+
+ <div>
+ foo
+ </div>
+
+As should this:
+
+ <div>foo</div>
+
+Now, nested:
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+ <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+ <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+
diff --git a/tests/safe_mode/replace.html b/tests/safe_mode/replace.html
new file mode 100644
index 0000000..fdf666e
--- /dev/null
+++ b/tests/safe_mode/replace.html
@@ -0,0 +1,34 @@
+<p>Here's a simple block:</p>
+<p>[HTML_REMOVED]</p>
+<p>This should be a code block, though:</p>
+<pre><code>&lt;div&gt;
+ foo
+&lt;/div&gt;
+</code></pre>
+<p>As should this:</p>
+<pre><code>&lt;div&gt;foo&lt;/div&gt;
+</code></pre>
+<p>Now, nested:</p>
+<p>[HTML_REMOVED]</p>
+<p>This should just be an HTML comment:</p>
+<p>[HTML_REMOVED]</p>
+<p>Multiline:</p>
+<p>[HTML_REMOVED]</p>
+<p>Code block:</p>
+<pre><code>&lt;!-- Comment --&gt;
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<p>[HTML_REMOVED]</p>
+<p>Code:</p>
+<pre><code>&lt;hr /&gt;
+</code></pre>
+<p>Hr's:</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p>
+<p>[HTML_REMOVED]</p> \ No newline at end of file
diff --git a/tests/safe_mode/replace.txt b/tests/safe_mode/replace.txt
new file mode 100644
index 0000000..14aa2dc
--- /dev/null
+++ b/tests/safe_mode/replace.txt
@@ -0,0 +1,69 @@
+Here's a simple block:
+
+<div>
+ foo
+</div>
+
+This should be a code block, though:
+
+ <div>
+ foo
+ </div>
+
+As should this:
+
+ <div>foo</div>
+
+Now, nested:
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+ <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+ <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+
diff --git a/tests/safe_mode/test.cfg b/tests/safe_mode/test.cfg
new file mode 100644
index 0000000..57f0b6a
--- /dev/null
+++ b/tests/safe_mode/test.cfg
@@ -0,0 +1,8 @@
+[DEFAULT]
+safe_mode=escape
+
+[remove]
+safe_mode=remove
+
+[replace]
+safe_mode=replace
diff --git a/tests/test_apis.py b/tests/test_apis.py
new file mode 100644
index 0000000..3aaa2f9
--- /dev/null
+++ b/tests/test_apis.py
@@ -0,0 +1,214 @@
+#!/usr/bin/python
+"""
+Python-Markdown Regression Tests
+================================
+
+Tests of the various APIs with the python markdown lib.
+
+"""
+
+import unittest
+from doctest import DocTestSuite
+import os
+import markdown
+
+class TestMarkdownBasics(unittest.TestCase):
+ """ Tests basics of the Markdown class. """
+
+ def setUp(self):
+ """ Create instance of Markdown. """
+ self.md = markdown.Markdown()
+
+ def testBlankInput(self):
+ """ Test blank input. """
+ self.assertEqual(self.md.convert(''), '')
+
+ def testWhitespaceOnly(self):
+ """ Test input of only whitespace. """
+ self.assertEqual(self.md.convert(' '), '')
+
+ def testSimpleInput(self):
+ """ Test simple input. """
+ self.assertEqual(self.md.convert('foo'), '<p>foo</p>')
+
+class TestBlockParser(unittest.TestCase):
+ """ Tests of the BlockParser class. """
+
+ def setUp(self):
+ """ Create instance of BlockParser. """
+ self.parser = markdown.Markdown().parser
+
+ def testParseChunk(self):
+ """ Test BlockParser.parseChunk. """
+ root = markdown.etree.Element("div")
+ text = 'foo'
+ self.parser.parseChunk(root, text)
+ self.assertEqual(markdown.etree.tostring(root), "<div><p>foo</p></div>")
+
+ def testParseDocument(self):
+ """ Test BlockParser.parseDocument. """
+ lines = ['#foo', '', 'bar', '', ' baz']
+ tree = self.parser.parseDocument(lines)
+ self.assert_(isinstance(tree, markdown.etree.ElementTree))
+ self.assert_(markdown.etree.iselement(tree.getroot()))
+ self.assertEqual(markdown.etree.tostring(tree.getroot()),
+ "<div><h1>foo</h1><p>bar</p><pre><code>baz\n</code></pre></div>")
+
+
+class TestBlockParserState(unittest.TestCase):
+ """ Tests of the State class for BlockParser. """
+
+ def setUp(self):
+ self.state = markdown.blockparser.State()
+
+ def testBlankState(self):
+ """ Test State when empty. """
+ self.assertEqual(self.state, [])
+
+ def testSetSate(self):
+ """ Test State.set(). """
+ self.state.set('a_state')
+ self.assertEqual(self.state, ['a_state'])
+ self.state.set('state2')
+ self.assertEqual(self.state, ['a_state', 'state2'])
+
+ def testIsSate(self):
+ """ Test State.isstate(). """
+ self.assertEqual(self.state.isstate('anything'), False)
+ self.state.set('a_state')
+ self.assertEqual(self.state.isstate('a_state'), True)
+ self.state.set('state2')
+ self.assertEqual(self.state.isstate('state2'), True)
+ self.assertEqual(self.state.isstate('a_state'), False)
+ self.assertEqual(self.state.isstate('missing'), False)
+
+ def testReset(self):
+ """ Test State.reset(). """
+ self.state.set('a_state')
+ self.state.reset()
+ self.assertEqual(self.state, [])
+ self.state.set('state1')
+ self.state.set('state2')
+ self.state.reset()
+ self.assertEqual(self.state, ['state1'])
+
+class TestHtmlStash(unittest.TestCase):
+ """ Test Markdown's HtmlStash. """
+
+ def setUp(self):
+ self.stash = markdown.preprocessors.HtmlStash()
+ self.placeholder = self.stash.store('foo')
+
+ def testSimpleStore(self):
+ """ Test HtmlStash.store. """
+ self.assertEqual(self.placeholder,
+ markdown.preprocessors.HTML_PLACEHOLDER % 0)
+ self.assertEqual(self.stash.html_counter, 1)
+ self.assertEqual(self.stash.rawHtmlBlocks, [('foo', False)])
+
+ def testStoreMore(self):
+ """ Test HtmlStash.store with additional blocks. """
+ placeholder = self.stash.store('bar')
+ self.assertEqual(placeholder,
+ markdown.preprocessors.HTML_PLACEHOLDER % 1)
+ self.assertEqual(self.stash.html_counter, 2)
+ self.assertEqual(self.stash.rawHtmlBlocks,
+ [('foo', False), ('bar', False)])
+
+ def testSafeStore(self):
+ """ Test HtmlStash.store with 'safe' html. """
+ self.stash.store('bar', True)
+ self.assertEqual(self.stash.rawHtmlBlocks,
+ [('foo', False), ('bar', True)])
+
+ def testReset(self):
+ """ Test HtmlStash.reset. """
+ self.stash.reset()
+ self.assertEqual(self.stash.html_counter, 0)
+ self.assertEqual(self.stash.rawHtmlBlocks, [])
+
+class TestOrderedDict(unittest.TestCase):
+ """ Test OrderedDict storage class. """
+
+ def setUp(self):
+ self.odict = markdown.odict.OrderedDict()
+ self.odict['first'] = 'This'
+ self.odict['third'] = 'a'
+ self.odict['fourth'] = 'self'
+ self.odict['fifth'] = 'test'
+
+ def testValues(self):
+ """ Test output of OrderedDict.values(). """
+ self.assertEqual(self.odict.values(), ['This', 'a', 'self', 'test'])
+
+ def testKeys(self):
+ """ Test output of OrderedDict.keys(). """
+ self.assertEqual(self.odict.keys(),
+ ['first', 'third', 'fourth', 'fifth'])
+
+ def testItems(self):
+ """ Test output of OrderedDict.items(). """
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test')])
+
+ def testAddBefore(self):
+ """ Test adding an OrderedDict item before a given key. """
+ self.odict.add('second', 'is', '<third')
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('second', 'is'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test')])
+
+ def testAddAfter(self):
+ """ Test adding an OrderDict item after a given key. """
+ self.odict.add('second', 'is', '>first')
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('second', 'is'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test')])
+
+ def testAddAfterEnd(self):
+ """ Test adding an OrderedDict item after the last key. """
+ self.odict.add('sixth', '.', '>fifth')
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test'), ('sixth', '.')])
+
+ def testAdd_begin(self):
+ """ Test adding an OrderedDict item using "_begin". """
+ self.odict.add('zero', 'CRAZY', '_begin')
+ self.assertEqual(self.odict.items(),
+ [('zero', 'CRAZY'), ('first', 'This'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test')])
+
+ def testAdd_end(self):
+ """ Test adding an OrderedDict item using "_end". """
+ self.odict.add('sixth', '.', '_end')
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test'), ('sixth', '.')])
+
+ def testAddBadLocation(self):
+ """ Test Error on bad location in OrderedDict.add(). """
+ self.assertRaises(ValueError, self.odict.add, 'sixth', '.', '<seventh')
+ self.assertRaises(ValueError, self.odict.add, 'second', 'is', 'third')
+
+ def testDeleteItem(self):
+ """ Test deletion of an OrderedDict item. """
+ del self.odict['fourth']
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'), ('fifth', 'test')])
+
+ def testChangeValue(self):
+ """ Test OrderedDict change value. """
+ self.odict['fourth'] = 'CRAZY'
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'),
+ ('fourth', 'CRAZY'), ('fifth', 'test')])
+
+ def testChangeOrder(self):
+ """ Test OrderedDict change order. """
+ self.odict.link('fourth', '<third')
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('fourth', 'self'),
+ ('third', 'a'), ('fifth', 'test')])
+
diff --git a/tests/util.py b/tests/util.py
new file mode 100644
index 0000000..aae87be
--- /dev/null
+++ b/tests/util.py
@@ -0,0 +1,15 @@
+from ConfigParser import SafeConfigParser
+
+class MarkdownSyntaxError(Exception):
+ pass
+
+
+class CustomConfigParser(SafeConfigParser):
+ def get(self, section, option):
+ value = SafeConfigParser.get(self, section, option)
+ if option == 'extensions':
+ if len(value.strip()):
+ return value.split(',')
+ else:
+ return []
+ return value