--- /dev/null
+Installing Python-Markdown
+==========================
+
+As an Admin/Root user on your system do:
+
+ pip install markdown
+
+Or for more specific instructions, view the documentation in `docs/install.txt`
+or on the website at <http://packages.python.org/Markdown/>.
--- /dev/null
+Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
+Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
+Copyright 2004 Manfred Stienstra (the original version)
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of the <organization> nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+INSTALL.md
+LICENSE.md
MANIFEST
+README.md
+run-tests.py
+setup.cfg
setup.py
-bin/markdown
-docs/AUTHORS
-docs/CHANGE_LOG
-docs/INSTALL
-docs/LICENSE
-docs/README
-docs/README.html
-docs/command_line.txt
+bin/markdown_py
+docs/_template.html
+docs/authors.txt
+docs/basic.css
+docs/change_log.txt
+docs/cli.txt
+docs/default.css
+docs/index.txt
+docs/install.txt
+docs/py.png
+docs/reference.txt
docs/release-2.0.1.txt
docs/release-2.0.2.txt
docs/release-2.0.txt
-docs/using_as_module.txt
-docs/writing_extensions.txt
-docs/extensions/Abbreviations.txt
-docs/extensions/CodeHilite.txt
-docs/extensions/Definition_Lists.txt
-docs/extensions/Fenced_Code_Blocks.txt
-docs/extensions/HTML_Tidy.txt
-docs/extensions/HeaderId.txt
-docs/extensions/ImageLinks.txt
-docs/extensions/Meta-Data.txt
-docs/extensions/RSS.txt
-docs/extensions/Tables.txt
-docs/extensions/Tables_of_Contents.txt
-docs/extensions/WikiLinks.txt
+docs/release-2.1.0.txt
+docs/release-2.1.1.txt
+docs/release-2.2.0.txt
+docs/siteindex.txt
+docs/test_suite.txt
+docs/extensions/abbreviations.txt
+docs/extensions/api.txt
+docs/extensions/attr_list.txt
+docs/extensions/code_hilite.txt
+docs/extensions/definition_lists.txt
docs/extensions/extra.txt
+docs/extensions/fenced_code_blocks.txt
docs/extensions/footnotes.txt
+docs/extensions/header_id.txt
+docs/extensions/html_tidy.txt
docs/extensions/index.txt
+docs/extensions/meta_data.txt
+docs/extensions/nl2br.txt
+docs/extensions/rss.txt
+docs/extensions/sane_lists.txt
+docs/extensions/smart_strong.txt
+docs/extensions/tables.txt
+docs/extensions/toc.txt
+docs/extensions/wikilinks.txt
markdown/__init__.py
+markdown/__main__.py
markdown/blockparser.py
markdown/blockprocessors.py
-markdown/commandline.py
markdown/etree_loader.py
-markdown/html4.py
markdown/inlinepatterns.py
markdown/odict.py
markdown/postprocessors.py
markdown/preprocessors.py
+markdown/serializers.py
markdown/treeprocessors.py
+markdown/util.py
markdown/extensions/__init__.py
markdown/extensions/abbr.py
+markdown/extensions/attr_list.py
markdown/extensions/codehilite.py
markdown/extensions/def_list.py
markdown/extensions/extra.py
markdown/extensions/footnotes.py
markdown/extensions/headerid.py
markdown/extensions/html_tidy.py
-markdown/extensions/imagelinks.py
markdown/extensions/meta.py
+markdown/extensions/nl2br.py
markdown/extensions/rss.py
+markdown/extensions/sane_lists.py
+markdown/extensions/smart_strong.py
markdown/extensions/tables.py
markdown/extensions/toc.py
markdown/extensions/wikilinks.py
+tests/__init__.py
+tests/plugins.py
+tests/test_apis.py
+tests/util.py
+tests/basic/amps-and-angle-encoding.html
+tests/basic/amps-and-angle-encoding.txt
+tests/basic/angle-links-and-img.html
+tests/basic/angle-links-and-img.txt
+tests/basic/auto-links.html
+tests/basic/auto-links.txt
+tests/basic/backlash-escapes.html
+tests/basic/backlash-escapes.txt
+tests/basic/blockquotes-with-code-blocks.html
+tests/basic/blockquotes-with-code-blocks.txt
+tests/basic/codeblock-in-list.html
+tests/basic/codeblock-in-list.txt
+tests/basic/hard-wrapped.html
+tests/basic/hard-wrapped.txt
+tests/basic/horizontal-rules.html
+tests/basic/horizontal-rules.txt
+tests/basic/inline-html-advanced.html
+tests/basic/inline-html-advanced.txt
+tests/basic/inline-html-comments.html
+tests/basic/inline-html-comments.txt
+tests/basic/inline-html-simple.html
+tests/basic/inline-html-simple.txt
+tests/basic/links-inline.html
+tests/basic/links-inline.txt
+tests/basic/links-reference.html
+tests/basic/links-reference.txt
+tests/basic/literal-quotes.html
+tests/basic/literal-quotes.txt
+tests/basic/markdown-documentation-basics.html
+tests/basic/markdown-documentation-basics.txt
+tests/basic/markdown-syntax.html
+tests/basic/markdown-syntax.txt
+tests/basic/nested-blockquotes.html
+tests/basic/nested-blockquotes.txt
+tests/basic/ordered-and-unordered-list.html
+tests/basic/ordered-and-unordered-list.txt
+tests/basic/strong-and-em-together.html
+tests/basic/strong-and-em-together.txt
+tests/basic/tabs.html
+tests/basic/tabs.txt
+tests/basic/tidyness.html
+tests/basic/tidyness.txt
+tests/extensions/attr_list.html
+tests/extensions/attr_list.txt
+tests/extensions/codehilite.html
+tests/extensions/codehilite.txt
+tests/extensions/fenced_code.html
+tests/extensions/fenced_code.txt
+tests/extensions/github_flavored.html
+tests/extensions/github_flavored.txt
+tests/extensions/sane_lists.html
+tests/extensions/sane_lists.txt
+tests/extensions/test.cfg
+tests/extensions/toc.html
+tests/extensions/toc.txt
+tests/extensions/toc_invalid.html
+tests/extensions/toc_invalid.txt
+tests/extensions/toc_nested.html
+tests/extensions/toc_nested.txt
+tests/extensions/toc_nested2.html
+tests/extensions/toc_nested2.txt
+tests/extensions/wikilinks.html
+tests/extensions/wikilinks.txt
+tests/extensions/extra/abbr.html
+tests/extensions/extra/abbr.txt
+tests/extensions/extra/footnote.html
+tests/extensions/extra/footnote.txt
+tests/extensions/extra/footnote_many_footnotes.html
+tests/extensions/extra/footnote_many_footnotes.txt
+tests/extensions/extra/footnote_placeholder.html
+tests/extensions/extra/footnote_placeholder.txt
+tests/extensions/extra/loose_def_list.html
+tests/extensions/extra/loose_def_list.txt
+tests/extensions/extra/markdown-syntax.html
+tests/extensions/extra/markdown-syntax.txt
+tests/extensions/extra/named_markers.html
+tests/extensions/extra/named_markers.txt
+tests/extensions/extra/raw-html.html
+tests/extensions/extra/raw-html.txt
+tests/extensions/extra/simple_def-lists.html
+tests/extensions/extra/simple_def-lists.txt
+tests/extensions/extra/tables.html
+tests/extensions/extra/tables.txt
+tests/extensions/extra/test.cfg
+tests/html4/html4.html
+tests/html4/html4.txt
+tests/html4/test.cfg
+tests/misc/CRLF_line_ends.html
+tests/misc/CRLF_line_ends.txt
+tests/misc/adjacent-headers.html
+tests/misc/adjacent-headers.txt
+tests/misc/amp-in-url.html
+tests/misc/amp-in-url.txt
+tests/misc/ampersand.html
+tests/misc/ampersand.txt
+tests/misc/arabic.html
+tests/misc/arabic.txt
+tests/misc/attributes2.html
+tests/misc/attributes2.txt
+tests/misc/autolinks_with_asterisks.html
+tests/misc/autolinks_with_asterisks.txt
+tests/misc/autolinks_with_asterisks_russian.html
+tests/misc/autolinks_with_asterisks_russian.txt
+tests/misc/backtick-escape.html
+tests/misc/backtick-escape.txt
+tests/misc/bidi.html
+tests/misc/bidi.txt
+tests/misc/blank-block-quote.html
+tests/misc/blank-block-quote.txt
+tests/misc/block_html5.html
+tests/misc/block_html5.txt
+tests/misc/block_html_attr.html
+tests/misc/block_html_attr.txt
+tests/misc/block_html_simple.html
+tests/misc/block_html_simple.txt
+tests/misc/blockquote-below-paragraph.html
+tests/misc/blockquote-below-paragraph.txt
+tests/misc/blockquote-hr.html
+tests/misc/blockquote-hr.txt
+tests/misc/blockquote.html
+tests/misc/blockquote.txt
+tests/misc/bold_links.html
+tests/misc/bold_links.txt
+tests/misc/br.html
+tests/misc/br.txt
+tests/misc/bracket_re.html
+tests/misc/bracket_re.txt
+tests/misc/code-first-line.html
+tests/misc/code-first-line.txt
+tests/misc/comments.html
+tests/misc/comments.txt
+tests/misc/div.html
+tests/misc/div.txt
+tests/misc/em-around-links.html
+tests/misc/em-around-links.txt
+tests/misc/em_strong.html
+tests/misc/em_strong.txt
+tests/misc/email.html
+tests/misc/email.txt
+tests/misc/escaped_links.html
+tests/misc/escaped_links.txt
+tests/misc/funky-list.html
+tests/misc/funky-list.txt
+tests/misc/h1.html
+tests/misc/h1.txt
+tests/misc/hash.html
+tests/misc/hash.txt
+tests/misc/header-in-lists.html
+tests/misc/header-in-lists.txt
+tests/misc/headers.html
+tests/misc/headers.txt
+tests/misc/hline.html
+tests/misc/hline.txt
+tests/misc/html-comments.html
+tests/misc/html-comments.txt
+tests/misc/html.html
+tests/misc/html.txt
+tests/misc/image-2.html
+tests/misc/image-2.txt
+tests/misc/image.html
+tests/misc/image.txt
+tests/misc/image_in_links.html
+tests/misc/image_in_links.txt
+tests/misc/ins-at-start-of-paragraph.html
+tests/misc/ins-at-start-of-paragraph.txt
+tests/misc/inside_html.html
+tests/misc/inside_html.txt
+tests/misc/japanese.html
+tests/misc/japanese.txt
+tests/misc/lazy-block-quote.html
+tests/misc/lazy-block-quote.txt
+tests/misc/link-with-parenthesis.html
+tests/misc/link-with-parenthesis.txt
+tests/misc/lists.html
+tests/misc/lists.txt
+tests/misc/lists2.html
+tests/misc/lists2.txt
+tests/misc/lists3.html
+tests/misc/lists3.txt
+tests/misc/lists4.html
+tests/misc/lists4.txt
+tests/misc/lists5.html
+tests/misc/lists5.txt
+tests/misc/lists6.html
+tests/misc/lists6.txt
+tests/misc/lists7.html
+tests/misc/lists7.txt
+tests/misc/lists8.html
+tests/misc/lists8.txt
+tests/misc/markup-inside-p.html
+tests/misc/markup-inside-p.txt
+tests/misc/mismatched-tags.html
+tests/misc/mismatched-tags.txt
+tests/misc/missing-link-def.html
+tests/misc/missing-link-def.txt
+tests/misc/more_comments.html
+tests/misc/more_comments.txt
+tests/misc/multi-line-tags.html
+tests/misc/multi-line-tags.txt
+tests/misc/multi-paragraph-block-quote.html
+tests/misc/multi-paragraph-block-quote.txt
+tests/misc/multi-test.html
+tests/misc/multi-test.txt
+tests/misc/multiline-comments.html
+tests/misc/multiline-comments.txt
+tests/misc/nested-lists.html
+tests/misc/nested-lists.txt
+tests/misc/nested-patterns.html
+tests/misc/nested-patterns.txt
+tests/misc/no-attributes.html
+tests/misc/no-attributes.txt
+tests/misc/normalize.html
+tests/misc/normalize.txt
+tests/misc/numeric-entity.html
+tests/misc/numeric-entity.txt
+tests/misc/para-with-hr.html
+tests/misc/para-with-hr.txt
+tests/misc/php.html
+tests/misc/php.txt
+tests/misc/pre.html
+tests/misc/pre.txt
+tests/misc/raw_whitespace.html
+tests/misc/raw_whitespace.txt
+tests/misc/russian.html
+tests/misc/russian.txt
+tests/misc/smart_em.html
+tests/misc/smart_em.txt
+tests/misc/some-test.html
+tests/misc/some-test.txt
+tests/misc/span.html
+tests/misc/span.txt
+tests/misc/strong-with-underscores.html
+tests/misc/strong-with-underscores.txt
+tests/misc/stronintags.html
+tests/misc/stronintags.txt
+tests/misc/tabs-in-lists.html
+tests/misc/tabs-in-lists.txt
+tests/misc/test.cfg
+tests/misc/two-spaces.html
+tests/misc/two-spaces.txt
+tests/misc/uche.html
+tests/misc/uche.txt
+tests/misc/underscores.html
+tests/misc/underscores.txt
+tests/misc/url_spaces.html
+tests/misc/url_spaces.txt
+tests/options/lazy_ol_off.html
+tests/options/lazy_ol_off.txt
+tests/options/test.cfg
+tests/php/test.cfg
+tests/php/extra/test.cfg
+tests/pl/Tests_2004/Amps and angle encoding.html
+tests/pl/Tests_2004/Auto links.html
+tests/pl/Tests_2004/Backslash escapes.html
+tests/pl/Tests_2004/Blockquotes with code blocks.html
+tests/pl/Tests_2004/Hard-wrapped paragraphs with list-like lines.html
+tests/pl/Tests_2004/Horizontal rules.html
+tests/pl/Tests_2004/Inline HTML (Advanced).html
+tests/pl/Tests_2004/Inline HTML (Simple).html
+tests/pl/Tests_2004/Inline HTML comments.html
+tests/pl/Tests_2004/Links, inline style.html
+tests/pl/Tests_2004/Links, reference style.html
+tests/pl/Tests_2004/Literal quotes in titles.html
+tests/pl/Tests_2004/Markdown Documentation - Basics.html
+tests/pl/Tests_2004/Markdown Documentation - Syntax.html
+tests/pl/Tests_2004/Nested blockquotes.html
+tests/pl/Tests_2004/Ordered and unordered lists.html
+tests/pl/Tests_2004/Strong and em together.html
+tests/pl/Tests_2004/Tabs.html
+tests/pl/Tests_2004/Tidyness.html
+tests/pl/Tests_2004/Yuri-Attributes.html
+tests/pl/Tests_2004/Yuri-Email.html
+tests/pl/Tests_2004/Yuri-Footnotes.html
+tests/pl/Tests_2004/Yuri-Links-in-Headers.html
+tests/pl/Tests_2004/test.cfg
+tests/pl/Tests_2007/Amps and angle encoding.html
+tests/pl/Tests_2007/Auto links.html
+tests/pl/Tests_2007/Backslash escapes.html
+tests/pl/Tests_2007/Blockquotes with code blocks.html
+tests/pl/Tests_2007/Code Blocks.html
+tests/pl/Tests_2007/Code Spans.html
+tests/pl/Tests_2007/Hard-wrapped paragraphs with list-like lines.html
+tests/pl/Tests_2007/Horizontal rules.html
+tests/pl/Tests_2007/Images.html
+tests/pl/Tests_2007/Inline HTML (Advanced).html
+tests/pl/Tests_2007/Inline HTML (Simple).html
+tests/pl/Tests_2007/Inline HTML comments.html
+tests/pl/Tests_2007/Links, inline style.html
+tests/pl/Tests_2007/Links, reference style.html
+tests/pl/Tests_2007/Links, shortcut references.html
+tests/pl/Tests_2007/Literal quotes in titles.html
+tests/pl/Tests_2007/Markdown Documentation - Basics.html
+tests/pl/Tests_2007/Markdown Documentation - Syntax.html
+tests/pl/Tests_2007/Nested blockquotes.html
+tests/pl/Tests_2007/Ordered and unordered lists.html
+tests/pl/Tests_2007/Strong and em together.html
+tests/pl/Tests_2007/Tabs.html
+tests/pl/Tests_2007/Tidyness.html
+tests/pl/Tests_2007/test.cfg
+tests/safe_mode/html_then_blockquote.html
+tests/safe_mode/html_then_blockquote.txt
+tests/safe_mode/inline-html-advanced.html
+tests/safe_mode/inline-html-advanced.txt
+tests/safe_mode/inline-html-comments.html
+tests/safe_mode/inline-html-comments.txt
+tests/safe_mode/inline-html-simple.html
+tests/safe_mode/inline-html-simple.txt
+tests/safe_mode/remove.html
+tests/safe_mode/remove.txt
+tests/safe_mode/replace.html
+tests/safe_mode/replace.txt
+tests/safe_mode/script_tags.html
+tests/safe_mode/script_tags.txt
+tests/safe_mode/test.cfg
+tests/safe_mode/unsafe_urls.html
+tests/safe_mode/unsafe_urls.txt
Metadata-Version: 1.0
Name: Markdown
-Version: 2.0.3
+Version: 2.2.0
Summary: Python implementation of Markdown.
-Home-page: http://www.freewisdom.org/projects/python-markdown
+Home-page: http://packages.python.org/Markdown/
Author: Waylan Limberg
Author-email: waylan [at] gmail.com
License: BSD License
-Download-URL: http://pypi.python.org/packages/source/M/Markdown/Markdown-2.0.3.tar.gz
+Download-URL: http://pypi.python.org/packages/source/M/Markdown/Markdown-2.2.0.tar.gz
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.3
Classifier: Programming Language :: Python :: 2.4
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.0
+Classifier: Programming Language :: Python :: 3.1
+Classifier: Programming Language :: Python :: 3.2
Classifier: Topic :: Communications :: Email :: Filters
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
--- /dev/null
+[Python-Markdown][]
+===================
+
+This is a Python implementation of John Gruber's [Markdown][].
+It is almost completely compliant with the reference implementation,
+though there are a few known issues. See [Features][] for information
+on what exactly is supported and what is not. Additional features are
+supported by the [Available Extensions][].
+
+[Python-Markdown]: http://packages.python.org/Markdown/
+[Markdown]: http://daringfireball.net/projects/markdown/
+[Features]: http://packages.python.org/Markdown/index.html#Features
+[Available Extensions]: http://packages.python.org/Markdown/extensions/index.html
+
+
+Documentation
+-------------
+
+Installation and usage documentation is available in the `docs/` directory
+of the distribution and on the project website at
+<http://packages.python.org/Markdown/>.
+
+Support
+-------
+
+You may ask for help and discuss various other issues on the [mailing list][] and report bugs on the [bug tracker][].
+
+[mailing list]: http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss
+[bug tracker]: http://github.com/waylan/Python-Markdown/issues
+
+++ /dev/null
-#!/usr/bin/env python
-"""
-Python Markdown, the Command Line Script
-========================================
-
-This is the command line script for Python Markdown.
-
-Basic use from the command line:
-
- markdown source.txt > destination.html
-
-Run "markdown --help" to see more options.
-
-See markdown/__init__.py for information on using Python Markdown as a module.
-
-## Authors and License
-
-Started by [Manfred Stienstra](http://www.dwerg.net/). Continued and
-maintained by [Yuri Takhteyev](http://www.freewisdom.org), [Waylan
-Limberg](http://achinghead.com/) and [Artem Yunusov](http://blog.splyer.com).
-
-Contact: markdown@freewisdom.org
-
-Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
-Copyright 200? Django Software Foundation (OrderedDict implementation)
-Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
-Copyright 2004 Manfred Stienstra (the original version)
-
-License: BSD (see docs/LICENSE for details).
-"""
-
-import logging
-from markdown import COMMAND_LINE_LOGGING_LEVEL
-from markdown import commandline
-
-# Setup a logger manually for compatibility with Python 2.3
-logger = logging.getLogger('MARKDOWN')
-logger.setLevel(COMMAND_LINE_LOGGING_LEVEL)
-logger.addHandler(logging.StreamHandler())
-
-if __name__ == '__main__':
- commandline.run()
--- /dev/null
+#!/usr/bin/env python
+"""
+Python Markdown, the Command Line Script
+========================================
+
+This is the command line script for Python Markdown.
+
+Basic use from the command line:
+
+ markdown source.txt > destination.html
+
+Run "markdown --help" to see more options.
+
+See markdown/__init__.py for information on using Python Markdown as a module.
+
+## Authors and License
+
+Started by [Manfred Stienstra](http://www.dwerg.net/). Continued and
+maintained by [Yuri Takhteyev](http://www.freewisdom.org), [Waylan
+Limberg](http://achinghead.com/) and [Artem Yunusov](http://blog.splyer.com).
+
+Contact: markdown@freewisdom.org
+
+Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
+Copyright 200? Django Software Foundation (OrderedDict implementation)
+Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
+Copyright 2004 Manfred Stienstra (the original version)
+
+License: BSD (see docs/LICENSE for details).
+"""
+
+if __name__ == '__main__':
+ from markdown.__main__ import run
+ run()
+++ /dev/null
-Primary Authors
-===============
-
-Yuri Takteyev <http://freewisdom.org/>, who has written much of the current code
-while procrastingating his Ph.D.
-
-Waylan Limberg <http://achinghead.com/>, who has written most of the available
-extensions and later was asked to join Yuri, fixing nummrious bugs, adding
-documentation and making general improvements to the existing codebase,
-included a complete refactor of the core.
-
-Artem Yunusov, who as part of a 2008 GSoC project, has refactored inline
-patterns, replaced the NanoDOM with ElementTree support and made various other
-improvements.
-
-Manfed Stienstra <http://www.dwerg.net/>, who wrote the original version of
-the script and is responsible for various parts of the existing codebase.
-
-David Wolever, who refactored the extension API and made other improvements
-as he helped to integrate Markdown into Dr.Project.
-
-Other Contributors
-==================
-
-The incomplete list of individuals below have provided patches or otherwise
-contributed to the project in various ways. We would like to thank everyone
-who has contributed to the progect in any way.
-
-Eric Abrahamsen
-Jeff Balogh
-Sergej Chodarev
-Chris Clark
-Tiago Cogumbreiro
-Kjell Magne Fauske
-G. Clark Haynes
-Daniel Krech
-Steward Midwinter
-Jack Miller
-Neale Pickett
-Paul Stansifer
-John Szakmeister
-Malcolm Tredinnick
-Ben Wilson
-and many others who helped by reporting bugs
+++ /dev/null
-PYTHON MARKDOWN CHANGELOG
-=========================
-
-Sept 28, 2009: Released version 2.0.2-Final.
-
-May 20, 2009: Released version 2.0.1-Final.
-
-Mar 30, 2009: Released version 2.0-Final.
-
-Mar 8, 2009: Release Candidate 2.0-rc-1.
-
-Feb 2009: Added support for multi-level lists to new Blockprocessors.
-
-Jan 2009: Added HTML 4 output as an option (thanks Eric Abrahamsen)
-
-Nov 2008: Added Definistion List ext. Replaced old core with BlockProcessors.
-Broken up into multiple files.
-
-Oct 2008: Changed logging behavior to work better with other systems.
-Refactored tree tarversing. Added treap implementation, then replaced with
-OrderedDEict. Renamed various processors to better reflect what they actually
-do. Refactored footnote ext to match php Extra's output.
-
-Sept 2008: Moved prettifyTree to a Postprocessor, replaced wikilink ext
-with wikilinks (note the s) ext (uses bracketed links instead of CamelCase)
-and various bug fixes.
-
-August 18 2008: Reorganized directory structure. Added a 'docs' dir
-and moved all extensions into a 'markdown-extensions' package.
-Added additional documentation and a few bug fixes. (v2.0-beta)
-
-August 4 2008: Updated included extensions to ElementTree. Added a
-seperate commanline script. (v2.0-alpha)
-
-July 2008: Switched from home-grown NanoDOM to ElementTree and
-various related bugs (thanks Artem Yunusov).
-
-June 2008: Fixed issues with nested inline patterns and cleaned
-up testing framework (thanks Artem Yunusov).
-
-May 2008: Added a number of additional extensions to the
-distribution and other minor changes. Moved repo to git from svn.
-
-Mar 2008: Refactored extension api to accept either an
-extension name (as a string) or an instance of an extension
-(Thanks David Wolever). Fixed various bugs and added doc strings.
-
-Feb 2008: Various bugfixes mostly regarding extensions.
-
-Feb 18, 2008: Version 1.7.
-
-Feb 13, 2008: A little code cleanup and better documentation
-and inheritance for pre/post proccessors.
-
-Feb 9, 2008: Doublequotes no longer html escaped and rawhtml
-honors <?foo>, <@foo>, and <%foo> for those who run markdown on
-template syntax.
-
-Dec 12, 2007: Updated docs. Removed encoding arg from Markdown
-and markdown as per list discussion. Clean up in prep for 1.7.
-
-Nov 29, 2007: Added support for images inside links. Also fixed
-a few bugs in the footnote extension.
-
-Nov 19, 2007: `message` now uses python's logging module. Also removed
-limit imposed by recursion in _process_section(). You can now parse as
-long of a document as your memory can handle.
-
-Nov 5, 2007: Moved safe_mode code to a textPostprocessor and added
-escaping option.
-
-Nov 3, 2007: Fixed convert method to accept empty strings.
-
-Oct 30, 2007: Fixed BOM removal (thanks Malcolm Tredinnick). Fixed
-infinite loop in bracket regex for inline links.
-
-Oct 11, 2007: LineBreaks is now an inlinePattern. Fixed HR in
-blockquotes. Refactored _processSection method (see tracker #1793419).
-
-Oct 9, 2007: Added textPreprocessor (from 1.6b).
-
-Oct 8, 2008: Fixed Lazy Blockquote. Fixed code block on first line.
-Fixed empty inline image link.
-
-Oct 7, 2007: Limit recursion on inlinePatterns. Added a 'safe' tag
-to htmlStash.
-
-March 18, 2007: Fixed or merged a bunch of minor bugs, including
-multi-line comments and markup inside links. (Tracker #s: 1683066,
-1671153, 1661751, 1627935, 1544371, 1458139.) -> v. 1.6b
-
-Oct 10, 2006: Fixed a bug that caused some text to be lost after
-comments. Added "safe mode" (user's html tags are removed).
-
-Sept 6, 2006: Added exception for PHP tags when handling html blocks.
-
-August 7, 2006: Incorporated Sergej Chodarev's patch to fix a problem
-with ampersand normalization and html blocks.
-
-July 10, 2006: Switched to using optparse. Added proper support for
-unicode.
-
-July 9, 2006: Fixed the <!--@address.com> problem (Tracker #1501354).
-
-May 18, 2006: Stopped catching unquoted titles in reference links.
-Stopped creating blank headers.
-
-May 15, 2006: A bug with lists, recursion on block-level elements,
-run-in headers, spaces before headers, unicode input (thanks to Aaron
-Swartz). Sourceforge tracker #s: 1489313, 1489312, 1489311, 1488370,
-1485178, 1485176. (v. 1.5)
-
-Mar. 24, 2006: Switched to a not-so-recursive algorithm with
-_handleInline. (Version 1.4)
-
-Mar. 15, 2006: Replaced some instance variables with class variables
-(a patch from Stelios Xanthakis). Chris Clark's new regexps that do
-not trigger midword underlining.
-
-Feb. 28, 2006: Clean-up and command-line handling by Stewart
-Midwinter. (Version 1.3)
-
-Feb. 24, 2006: Fixed a bug with the last line of the list appearing
-again as a separate paragraph. Incorporated Chris Clark's "mailto"
-patch. Added support for <br /> at the end of lines ending in two or
-more spaces. Fixed a crashing bug when using ImageReferencePattern.
-Added several utility methods to Nanodom. (Version 1.2)
-
-Jan. 31, 2006: Added "hr" and "hr/" to BLOCK_LEVEL_ELEMENTS and
-changed <hr/> to <hr />. (Thanks to Sergej Chodarev.)
-
-Nov. 26, 2005: Fixed a bug with certain tabbed lines inside lists
-getting wrapped in <pre><code>. (v. 1.1)
-
-Nov. 19, 2005: Made "<!...", "<?...", etc. behave like block-level
-HTML tags.
-
-Nov. 14, 2005: Added entity code and email autolink fix by Tiago
-Cogumbreiro. Fixed some small issues with backticks to get 100%
-compliance with John's test suite. (v. 1.0)
-
-Nov. 7, 2005: Added an unlink method for documents to aid with memory
-collection (per Doug Sauder's suggestion).
-
-Oct. 29, 2005: Restricted a set of html tags that get treated as
-block-level elements.
-
-Sept. 18, 2005: Refactored the whole script to make it easier to
-customize it and made footnote functionality into an extension.
-(v. 0.9)
-
-Sept. 5, 2005: Fixed a bug with multi-paragraph footnotes. Added
-attribute support.
-
-Sept. 1, 2005: Changed the way headers are handled to allow inline
-syntax in headers (e.g. links) and got the lists to use p-tags
-correctly (v. 0.8)
-
-Aug. 29, 2005: Added flexible tabs, fixed a few small issues, added
-basic support for footnotes. Got rid of xml.dom.minidom and added
-pretty-printing. (v. 0.7)
-
-Aug. 13, 2005: Fixed a number of small bugs in order to conform to the
-test suite. (v. 0.6)
-
-Aug. 11, 2005: Added support for inline html and entities, inline
-images, autolinks, underscore emphasis. Cleaned up and refactored the
-code, added some more comments.
-
-Feb. 19, 2005: Rewrote the handling of high-level elements to allow
-multi-line list items and all sorts of nesting.
-
-Feb. 3, 2005: Reference-style links, single-line lists, backticks,
-escape, emphasis in the beginning of the paragraph.
-
-Nov. 2004: Added links, blockquotes, html blocks to Manfred
-Stienstra's code
-
-Apr. 2004: Manfred's version at http://www.dwerg.net/projects/markdown/
-
+++ /dev/null
-Installing Python-Markdown
-==========================
-
-Checking Dependencies
----------------------
-
-Python-Markdown requires the ElementTree module to be installed. In Python2.5+
-ElementTree is included as part of the standard library. For earlier versions
-of Python, open a Python shell and type the following:
-
- >>> import cElementTree
- >>> import ElementTree
-
-If at least one of those does not generate any errors, then you have a working
-copy of ElementTree installed on your system. As cElementTree is faster, you
-may want to install that if you don't already have it and it's available for
-your system.
-
-See <http://effbot.org/zone/element-index.htm> for more information or to
-download the latest version of ElementTree.
-
-The East Way
-------------
-
-The simplest way to install Python-Markdown is by using SetupTools. As and
-Admin/Root user on your system do:
-
- easy_install ElementTree
- easy_install Markdown
-
-That's it, your done.
-
-Installing on Windows
----------------------
-
-Download the Windows installer (.exe) from PyPI:
-<http://pypi.python.org/pypi/Markdown>
-
-Double-click the file and follow the instructions.
-
-If you prefer to manually install Python-Markdown in Windows, download the
-Zip file, unzip it, and on the command line in the directory you unzipped to:
-
- python setup.py install
-
-If you plan to use the provided command line script, you need to make sure your
-script directory is on your system path. On a typical Python install of Windows
-the Scripts directory is `C:\Python25\Scripts\`. Adjust according to your
-system and add that to your system path.
-
-Installing on *nix Systems
---------------------------
-
-From the command line do the following:
-
- wget http://pypi.python.org/packages/source/M/Markdown/Markdown-2.0.tar.gz
- tar xvzf Markdown-2.0.tar.gz
- cd markdown-2.0/
- sudo python setup.py install
-
-Using the Git Repository
-------------------------
-
-If your the type that like to live on the edge, you may want to keep up with
-the latest additions and bug fixes in the repository between releases.
-Python-Markdown is maintained in a Git repository on Gitorious.org. To
-get a copy of Python-Markdown from the repository do the following from the
-command line:
-
- git clone git://gitorious.org/python-markdown/mainline.git python-markdown
- cd python-markdown
- python setup.py install
-
+++ /dev/null
-Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
-Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
-Copyright 2004 Manfred Stienstra (the original version)
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-* Neither the name of the <organization> nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
+++ /dev/null
-[Python-Markdown][]
-===================
-
-This is a Python implementation of John Gruber's [Markdown][].
-It is almost completely compliant with the reference implementation,
-though there are a few known issues. See [Features][] for information
-on what exactly is supported and what is not. Additional features are
-supported by the [Available Extensions][].
-
-[Python-Markdown]: http://freewisdom.org/projects/python-markdown
-[Markdown]: http://daringfireball.net/projects/markdown/
-[Features]: http://www.freewisdom.org/projects/python-markdown/Features
-[Available Extensions]: http://www.freewisdom.org/projects/python-markdown/Available_Extensions
-
-
-Documentation
--------------
-
-Installation and usage documentation is available in the `docs/` directory
-of the distribution and on the project website at
-<http://freewisdom.org/projects/python-markdown>.
-
-Support
--------
-
-You may ask for help and discuss various other issues on the [mailing list][] and report bugs on the [bug tracker][].
-
-[mailing list]: http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss
-[bug tracker]: http://www.freewisdom.org/projects/python-markdown/Tickets
-
+++ /dev/null
-<h1><a href="http://freewisdom.org/projects/python-markdown">Python-Markdown</a></h1>
-<p>This is a Python implementation of John Gruber's <a href="http://daringfireball.net/projects/markdown/">Markdown</a>.
-It is almost completely compliant with the reference implementation,
-though there are a few known issues. See <a href="http://www.freewisdom.org/projects/python-markdown/Features">Features</a> for information
-on what exactly is supported and what is not. Additional features are
-supported by the <a href="http://www.freewisdom.org/projects/python-markdown/Available_Extensions">Available Extensions</a>.</p>
-<h2>Documentation</h2>
-<p>Installation and usage documentation is available in the <code>docs/</code> directory
-of the distribution and on the project website at
-<a href="http://freewisdom.org/projects/python-markdown">http://freewisdom.org/projects/python-markdown</a>.</p>
-<h2>Support</h2>
-<p>You may ask for help and discuss various other issues on the <a href="http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss">mailing list</a> and report bugs on the <a href="http://www.freewisdom.org/projects/python-markdown/Tickets">bug tracker</a>.</p>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>%(page_title)s</title>
+<link rel="stylesheet" href="%(base)sdefault.css" type="text/css">
+</head>
+<body>
+
+<div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="siteindex.html" title="General Index">index</a></li>
+ <li class="right">
+ <a href="%(next_url)s" title="%(next_title)s"
+ accesskey="N">next</a> |</li>
+ <li class="right">
+ <a href="%(prev_url)s" title="%(prev_title)s"
+ accesskey="P">previous</a> |</li>
+ <li><img src="%(base)spy.png" alt=""
+ style="vertical-align: middle; margin-top: -1px"/></li>
+ <li><a href="%(base)sindex.html">Python Markdown v%(version)s documentation</a> »</li>
+ %(crumb)s
+ </ul>
+</div> <!-- .related -->
+
+<div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+%(body)s
+ </div> <!-- .body -->
+ </div> <!-- .bodywrapper -->
+ </div> <!-- .documentwrapper -->
+
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3>Table Of Contents</h3>
+ %(toc)s
+
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="%(prev_url)s"
+ title="previous chapter">%(prev_title)s</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="%(next_url)s"
+ title="next chapter">%(next_title)s</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="https://github.com/waylan/Python-Markdown/issues"
+ >Report a Bug</a></li>
+ <li><a href="%(source)s"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div> <!-- .sphinxsidebarwrapper -->
+ </div> <!-- .sphinxsidebar -->
+
+ <div class="clearer"></div>
+</div> <!-- .document -->
+
+<div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="siteindex.html" title="General Index">index</a></li>
+ <li class="right">
+ <a href="%(next_url)s" title="%(next_title)s"
+ accesskey="N">next</a> |</li>
+ <li class="right">
+ <a href="%(prev_url)s" title="%(prev_title)s"
+ accesskey="P">previous</a> |</li>
+ <li><img src="%(base)spy.png" alt=""
+ style="vertical-align: middle; margin-top: -1px"/></li>
+ <li><a href="%(base)sindex.html">Python Markdown v%(version)s documentation</a> »</li>
+ %(crumb)s
+ </ul>
+</div> <!-- .related -->
+
+<div class="footer">© 2010-2012 Python Markdown Project</div>
+</body>
+</html>
--- /dev/null
+title: Authors
+prev_title: Release Notes for v2.0
+prev_url: release-2.0.html
+next_title: Table of Contents
+next_url: siteindex.html
+
+Primary Authors
+===============
+
+[Yuri Takteyev](http://freewisdom.org/)
+
+: Yuri has written much of the current code while procrastingating his Ph.D.
+
+[Waylan Limberg](http://achinghead.com/)
+
+: Waylan is the current maintainer of the code and has written much the current
+ code base, included a complete refactor of the core. He started out by
+ authoring mmany of the available extensions and later was asked to join Yuri,
+ where he began fixing nummrious bugs, adding documentation and making general
+ improvements to the existing codebase.
+
+Artem Yunusov
+
+: Artem, who as part of a 2008 GSoC project, refactored inline patterns,
+ replaced the NanoDOM with ElementTree support and made various other
+ improvements.
+
+[Manfed Stienstra](http://www.dwerg.net/)
+
+: Manfed wrote the original version of the script and is responsible for
+ various parts of the existing codebase.
+
+David Wolever
+
+: David refactored the extension API and made other improvements
+ as he helped to integrate Markdown into Dr.Project.
+
+Other Contributors
+==================
+
+The incomplete list of individuals below have provided patches or otherwise
+contributed to the project in various ways. We would like to thank everyone
+who has contributed to the progect in any way.
+
+* Eric Abrahamsen
+* Jeff Balogh
+* Sergej Chodarev
+* Chris Clark
+* Tiago Cogumbreiro
+* Kjell Magne Fauske
+* G. Clark Haynes
+* Daniel Krech
+* Steward Midwinter
+* Jack Miller
+* Neale Pickett
+* Paul Stansifer
+* John Szakmeister
+* Malcolm Tredinnick
+* Ben Wilson
+* and many others who helped by reporting bugs
--- /dev/null
+/**
+ * Sphinx stylesheet -- basic theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+ width: 100%;
+ font-size: 90%;
+}
+
+div.related h3 {
+ display: none;
+}
+
+div.related ul {
+ margin: 0;
+ padding: 0 0 0 10px;
+ list-style: none;
+}
+
+div.related li {
+ display: inline;
+}
+
+div.related li.right {
+ float: right;
+ margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+ float: left;
+ width: 230px;
+ margin-left: -100%;
+ font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+ list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+ margin-left: 20px;
+ list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+ margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+img {
+ border: 0;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+ margin: 10px 0 0 20px;
+ padding: 0;
+}
+
+ul.search li {
+ padding: 5px 0 5px 20px;
+ background-image: url(file.png);
+ background-repeat: no-repeat;
+ background-position: 0 7px;
+}
+
+ul.search li a {
+ font-weight: bold;
+}
+
+ul.search li div.context {
+ color: #888;
+ margin: 2px 0 0 30px;
+ text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+ font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+ width: 90%;
+}
+
+table.contentstable p.biglink {
+ line-height: 150%;
+}
+
+a.biglink {
+ font-size: 1.3em;
+}
+
+span.linkdescr {
+ font-style: italic;
+ padding-top: 5px;
+ font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+ height: 10px;
+}
+
+table.indextable tr.cap {
+ margin-top: 10px;
+ background-color: #f2f2f2;
+}
+
+img.toggler {
+ margin-right: 3px;
+ margin-top: 3px;
+ cursor: pointer;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+ visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.field-list ul {
+ padding-left: 1em;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px 7px 0 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px 7px 0 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ border: 0 solid #dce;
+ border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+ padding: 2px 5px 2px 5px;
+ border-left: 0;
+ background-color: #eef;
+}
+
+table.docutils td p.last, table.docutils th p.last {
+ margin-bottom: 0;
+}
+
+table.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+table.docutils th {
+ border-top: 1px solid #cac;
+ background-color: #ede;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+th.head {
+ text-align: center;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd p {
+ margin-top: 0px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+}
+
+dt:target, .highlight {
+ background-color: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.refcount {
+ color: #060;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+p.deprecated {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+ padding: 7px
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa;
+}
+
+.impl-detail {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+ border: 1px solid #ccc;
+}
+
+.impl-detail .compound-first {
+ margin-top: 0;
+}
+
+.impl-detail .compound-last {
+ margin-bottom: 0;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ overflow-y: hidden;
+}
+
+td.linenos pre {
+ padding: 5px 0px;
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ margin-left: 0.5em;
+}
+
+table.highlighttable td {
+ padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+tt.descclassname {
+ background-color: transparent;
+}
+
+tt.xref, a tt {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+ background-color: transparent;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0 !important;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
--- /dev/null
+title: Change Log
+prev_title: Test Suite
+prev_url: test_suite.html
+next_title: Release Notes for v2.2.0
+next_url: release-2.2.0.html
+
+Python-Markdown Changelog
+=========================
+
+Jan 22, 2012: Released version 2.1.1 ([Notes](release-2.1.1.html)).
+
+Nov 24, 2011: Released version 2.1.0 ([Notes](release-2.1.0.html)).
+
+Oct 7, 2009: Released version 2.0.3.
+
+Sept 28, 2009: Released version 2.0.2 ([Notes](release-2.0.2.html)).
+
+May 20, 2009: Released version 2.0.1 ([Notes](release-2.0.1.html)).
+
+Mar 30, 2009: Released version 2.0 ([Notes](release-2.0.html)).
+
+Mar 8, 2009: Release Candidate 2.0-rc-1.
+
+Feb 2009: Added support for multi-level lists to new Blockprocessors.
+
+Jan 2009: Added HTML 4 output as an option (thanks Eric Abrahamsen)
+
+Nov 2008: Added Definistion List ext. Replaced old core with BlockProcessors.
+Broken up into multiple files.
+
+Oct 2008: Changed logging behavior to work better with other systems.
+Refactored tree tarversing. Added treap implementation, then replaced with
+OrderedDEict. Renamed various processors to better reflect what they actually
+do. Refactored footnote ext to match php Extra's output.
+
+Sept 2008: Moved prettifyTree to a Postprocessor, replaced wikilink ext
+with wikilinks (note the s) ext (uses bracketed links instead of CamelCase)
+and various bug fixes.
+
+August 18 2008: Reorganized directory structure. Added a 'docs' dir
+and moved all extensions into a 'markdown-extensions' package.
+Added additional documentation and a few bug fixes. (v2.0-beta)
+
+August 4 2008: Updated included extensions to ElementTree. Added a
+seperate commanline script. (v2.0-alpha)
+
+July 2008: Switched from home-grown NanoDOM to ElementTree and
+various related bugs (thanks Artem Yunusov).
+
+June 2008: Fixed issues with nested inline patterns and cleaned
+up testing framework (thanks Artem Yunusov).
+
+May 2008: Added a number of additional extensions to the
+distribution and other minor changes. Moved repo to git from svn.
+
+Mar 2008: Refactored extension api to accept either an
+extension name (as a string) or an instance of an extension
+(Thanks David Wolever). Fixed various bugs and added doc strings.
+
+Feb 2008: Various bugfixes mostly regarding extensions.
+
+Feb 18, 2008: Version 1.7.
+
+Feb 13, 2008: A little code cleanup and better documentation
+and inheritance for pre/post proccessors.
+
+Feb 9, 2008: Doublequotes no longer html escaped and rawhtml
+honors `<?foo>`, `<@foo>`, and `<%foo>` for those who run markdown on
+template syntax.
+
+Dec 12, 2007: Updated docs. Removed encoding arg from Markdown
+and markdown as per list discussion. Clean up in prep for 1.7.
+
+Nov 29, 2007: Added support for images inside links. Also fixed
+a few bugs in the footnote extension.
+
+Nov 19, 2007: `message` now uses python's logging module. Also removed
+limit imposed by recursion in `_process_section()`. You can now parse as
+long of a document as your memory can handle.
+
+Nov 5, 2007: Moved safe_mode code to a textPostprocessor and added
+escaping option.
+
+Nov 3, 2007: Fixed convert method to accept empty strings.
+
+Oct 30, 2007: Fixed BOM removal (thanks Malcolm Tredinnick). Fixed
+infinite loop in bracket regex for inline links.
+
+Oct 11, 2007: LineBreaks is now an inlinePattern. Fixed HR in
+blockquotes. Refactored _processSection method (see tracker #1793419).
+
+Oct 9, 2007: Added textPreprocessor (from 1.6b).
+
+Oct 8, 2008: Fixed Lazy Blockquote. Fixed code block on first line.
+Fixed empty inline image link.
+
+Oct 7, 2007: Limit recursion on inlinePatterns. Added a 'safe' tag
+to htmlStash.
+
+March 18, 2007: Fixed or merged a bunch of minor bugs, including
+multi-line comments and markup inside links. (Tracker #s: 1683066,
+1671153, 1661751, 1627935, 1544371, 1458139.) -> v. 1.6b
+
+Oct 10, 2006: Fixed a bug that caused some text to be lost after
+comments. Added "safe mode" (user's html tags are removed).
+
+Sept 6, 2006: Added exception for PHP tags when handling html blocks.
+
+August 7, 2006: Incorporated Sergej Chodarev's patch to fix a problem
+with ampersand normalization and html blocks.
+
+July 10, 2006: Switched to using optparse. Added proper support for
+unicode.
+
+July 9, 2006: Fixed the `<!--@address.com>` problem (Tracker #1501354).
+
+May 18, 2006: Stopped catching unquoted titles in reference links.
+Stopped creating blank headers.
+
+May 15, 2006: A bug with lists, recursion on block-level elements,
+run-in headers, spaces before headers, unicode input (thanks to Aaron
+Swartz). Sourceforge tracker #s: 1489313, 1489312, 1489311, 1488370,
+1485178, 1485176. (v. 1.5)
+
+Mar. 24, 2006: Switched to a not-so-recursive algorithm with
+_handleInline. (Version 1.4)
+
+Mar. 15, 2006: Replaced some instance variables with class variables
+(a patch from Stelios Xanthakis). Chris Clark's new regexps that do
+not trigger midword underlining.
+
+Feb. 28, 2006: Clean-up and command-line handling by Stewart
+Midwinter. (Version 1.3)
+
+Feb. 24, 2006: Fixed a bug with the last line of the list appearing
+again as a separate paragraph. Incorporated Chris Clark's "mailto"
+patch. Added support for `<br />` at the end of lines ending in two or
+more spaces. Fixed a crashing bug when using ImageReferencePattern.
+Added several utility methods to Nanodom. (Version 1.2)
+
+Jan. 31, 2006: Added `hr` and `hr/` to BLOCK_LEVEL_ELEMENTS and
+changed `<hr/>` to `<hr />`. (Thanks to Sergej Chodarev.)
+
+Nov. 26, 2005: Fixed a bug with certain tabbed lines inside lists
+getting wrapped in `<pre><code>`. (v. 1.1)
+
+Nov. 19, 2005: Made `<!...`, `<?...`, etc. behave like block-level
+HTML tags.
+
+Nov. 14, 2005: Added entity code and email autolink fix by Tiago
+Cogumbreiro. Fixed some small issues with backticks to get 100%
+compliance with John's test suite. (v. 1.0)
+
+Nov. 7, 2005: Added an unlink method for documents to aid with memory
+collection (per Doug Sauder's suggestion).
+
+Oct. 29, 2005: Restricted a set of html tags that get treated as
+block-level elements.
+
+Sept. 18, 2005: Refactored the whole script to make it easier to
+customize it and made footnote functionality into an extension.
+(v. 0.9)
+
+Sept. 5, 2005: Fixed a bug with multi-paragraph footnotes. Added
+attribute support.
+
+Sept. 1, 2005: Changed the way headers are handled to allow inline
+syntax in headers (e.g. links) and got the lists to use p-tags
+correctly (v. 0.8)
+
+Aug. 29, 2005: Added flexible tabs, fixed a few small issues, added
+basic support for footnotes. Got rid of xml.dom.minidom and added
+pretty-printing. (v. 0.7)
+
+Aug. 13, 2005: Fixed a number of small bugs in order to conform to the
+test suite. (v. 0.6)
+
+Aug. 11, 2005: Added support for inline html and entities, inline
+images, autolinks, underscore emphasis. Cleaned up and refactored the
+code, added some more comments.
+
+Feb. 19, 2005: Rewrote the handling of high-level elements to allow
+multi-line list items and all sorts of nesting.
+
+Feb. 3, 2005: Reference-style links, single-line lists, backticks,
+escape, emphasis in the beginning of the paragraph.
+
+Nov. 2004: Added links, blockquotes, html blocks to Manfred
+Stienstra's code
+
+Apr. 2004: Manfred's version at <http://www.dwerg.net/projects/markdown/>
+
--- /dev/null
+title: Command Line
+prev_title: Library Reference
+prev_url: reference.html
+next_title: Extensions
+next_url: extensions/index.html
+
+
+Using Python-Markdown on the Command Line
+=========================================
+
+While Python-Markdown is primarily a python library, a command line script is
+included as well. While there are many other command line implementations
+of Markdown, you may not have them installed, or you may prefer to use
+Python-Markdown's various extensions.
+
+Generally, you will want to have the Markdown library fully installed on your
+system to run the command line script. See the
+[Installation instructions](install.html) for details.
+
+Assuming the `python` executable is on your system path, just run the following:
+
+ python -m markdown [options] [args]
+
+That will run the module as a script. Note that on older Python versions (2.5
+and 2.6), you may need to specify the appropriate module:
+
+ python -m markdown.__main__ [options] [args]
+
+Use the `--help` option for available options:
+
+ python -m markdown --help
+
+If you are using Python 2.4 or you don't want to have to call the python
+executable directly, follow the instructions below:
+
+Setup
+-----
+
+Upon installation, the ``markdown_py`` script will have been copied to
+your Python "Scripts" directory. Different systems require different methods to
+ensure that any files in the Python "Scripts" directory are on your system
+path.
+
+* **Windows**:
+
+ Assuming a default install of Python on Windows, your "Scripts" directory
+ is most likely something like ``C:\\Python26\Scripts``. Verify the location
+ of your "Scripts" directory and add it to you system path.
+
+ Calling ``markdown_py`` from the command line will call the wrapper batch
+ file ``markdown_py.bat`` in the "Scripts" directory created during install.
+
+* __*nix__ (Linux, OSX, BSD, Unix, etc.):
+
+ As each *nix distribution is different and we can't possibly document all
+ of them here, we'll provide a few helpful pointers:
+
+ * Some systems will automatically install the script on your path. Try it
+ and see if it works. Just run ``markdown_py`` from the command line.
+
+ * Other systems may maintain a separate "Scripts" directory which you
+ need to add to your path. Find it (check with your distribution) and
+ either add it to your path or make a symbolic link to it from your path.
+
+ * If you are sure ``markdown_py`` is on your path, but it still isn't being
+ found, check the permissions of the file and make sure it is executable.
+
+ As an alternative, you could just ``cd`` into the directory which contains
+ the source distribution, and run it from there. However, remember that your
+ markdown text files will not likely be in that directory, so it is much
+ more convenient to have ``markdown_py`` on your path.
+
+__Note:__ Python-Markdown uses "markdown_py" as a script name because
+the Perl implementation has already taken the more obvious name "markdown".
+Additionally, the default Python configuration on some systems would cause a
+script named "markdown.py" to fail by importing itself rather than the markdown
+library. Therefore, the script has been named "markdown_py" as a compromise. If
+you prefer a different name for the script on your system, it is suggested that
+you create a symbolic link to `markdown_py` with your preferred name.
+
+Usage
+-----
+
+To use ``markdown_py`` from the command line, run it as
+
+ $ markdown_py input_file.txt
+
+or
+
+ $ markdown_py input_file.txt > output_file.html
+
+For a complete list of options, run
+
+ $ markdown_py --help
+
+Using Extensions
+----------------
+
+For an extension to be run from the command line it must be provided in a module
+on your python path (see the [Extension API](extensions/api.html) for details).
+It can then be invoked by the name of that module:
+
+ $ markdown_py -x footnotes text_with_footnotes.txt > output.html
+
+If the extension supports config options, you can pass them in as well:
+
+ $ markdown_py -x "footnotes(PLACE_MARKER=~~~~~~~~)" input.txt
+
+++ /dev/null
-Using Python-Markdown on the Command Line
-=========================================
-
-While Python-Markdown is primarily a python library, a command line script is
-included as well. While there are many other command line implementations
-of Markdown, you may not have them installed, or you may prefer to use
-Python-Markdown's various extensions.
-
-Setup
------
-
-Generally, you may simply call the ``markdown`` file from the command
-line. However, if you have fully installed Markdown (``setup.py install`` or
-``easy_install``), then the ``markdown`` script will have been copied to
-you Python "Scripts" directory. Different systems require different methods to
-ensure that any files in the Python "Scripts" directory are on your system
-path.
-
-* **Windows**:
-
- Assuming a default install on Windows, your "Scripts" directory is most
- likely something like ``C:\\Python25\Scripts``. Verify the location of
- your "Scripts" directory and add it to you system path.
-
- Calling ``markdown`` from th ecommand line will call the wrapper batch file
- ``markdown.bat`` in the "Scripts" directory created during install.
-
-* **Linux**:
-
- As each Linux distribution is different and we can't possibly document all
- of them here, we'll provide a few helpful pointers:
-
- * Some systems will automatically install the script on your path. Try it
- and see if it works. Just run ``markdown`` from the command line.
-
- * Other systems may maintain a separate "Scripts" directory which you
- need to add to your path. Find it (check with your distribution) and
- either add it to your path or make a symbolic link to it from your path.
-
- * If you are sure ``markdown`` is on your path, but it still isn't being
- found, check the permissions of the file and make sure it is executable.
-
- As an alternative, you could just ``cd`` into the directory which contains
- the source distribution, and run it from there. However, remember that your
- markdown text files will not likely be in that directory, so it is much more
- convenient to have ``markdown`` on your path.
-
-The Basics
-----------
-
-To use ``markdown`` from the command line, run it as
-
- $ markdown input_file.txt
-
-or
-
- $ markdown input_file.txt > output_file.html
-
-More Options
-------------
-
-If you are using Python 2.3 or higher, you can also use advanced
-command line options to specify encoding or to run extensions.
-
- $ markdown --help
- Usage: markdown INPUTFILE [options]
-
- Options:
- -h, --help show this help message and exit
- -f OUTPUT_FILE, --file=OUTPUT_FILE
- write output to OUTPUT_FILE
- -e ENCODING, --encoding=ENCODING
- encoding for input and output files
- -q, --quiet suppress all messages
- -v, --verbose print info messages
- -s SAFE_MODE, --safe=SAFE_MODE
- safe mode ('replace', 'remove' or 'escape' user's
- HTML tag)
- -o OUTPUT_FORMAT, --output_format=OUTPUT_FORMAT
- Format of output. One of 'xhtml1' (default) or
- 'html4'.
- --noisy print debug messages
- -x EXTENSION, --extension=EXTENSION
- load extension EXTENSION
-
-Using Extensions
-----------------
-
-For an extension to be ran this way it must be provided in a module
-which should be in your python path (see [[writing_extensions]] for details).
-It can then be invoked by the name of that module:
-
- $ markdown -x footnotes text_with_footnotes.txt > output.html
-
-If the extension supports config options, you can pass them in as well:
-
- $ markdown -x "footnotes(PLACE_MARKER=~~~~~~~~)" input.txt
-
--- /dev/null
+/*
+ * default.css_t
+ * ~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- default theme.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: sans-serif;
+ font-size: 100%;
+ background-color: #11303d;
+ color: #000;
+ margin: 0;
+ padding: 0;
+}
+
+div.document {
+ background-color: #1c4e63;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 230px;
+}
+
+div.body {
+ background-color: #ffffff;
+ color: #000000;
+ padding: 0 20px 30px 20px;
+}
+
+div.footer {
+ color: #ffffff;
+ width: 100%;
+ padding: 9px 0 9px 0;
+ text-align: center;
+ font-size: 75%;
+}
+
+div.footer a {
+ color: #ffffff;
+ text-decoration: underline;
+}
+
+div.related {
+ background-color: #133f52;
+ line-height: 30px;
+ color: #ffffff;
+}
+
+div.related a {
+ color: #ffffff;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+ font-family: 'Trebuchet MS', sans-serif;
+ color: #ffffff;
+ font-size: 1.4em;
+ font-weight: normal;
+ margin: 0;
+ padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+ color: #ffffff;
+}
+
+div.sphinxsidebar h4 {
+ font-family: 'Trebuchet MS', sans-serif;
+ color: #ffffff;
+ font-size: 1.3em;
+ font-weight: normal;
+ margin: 5px 0 0 0;
+ padding: 0;
+}
+
+div.sphinxsidebar p {
+ color: #ffffff;
+}
+
+div.sphinxsidebar p.topless {
+ margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px;
+ padding: 0;
+ color: #ffffff;
+}
+
+div.sphinxsidebar a {
+ color: #98dbcc;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+
+/* for collapsible sidebar */
+div#sidebarbutton {
+ background-color: #3c6e83;
+}
+
+
+/* -- hyperlink styles ------------------------------------------------------ */
+
+a {
+ color: #355f7c;
+ text-decoration: none;
+}
+
+a:visited {
+ color: #355f7c;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+
+
+/* -- body styles ----------------------------------------------------------- */
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: 'Trebuchet MS', sans-serif;
+ background-color: #f2f2f2;
+ font-weight: normal;
+ color: #20435c;
+ border-bottom: 1px solid #ccc;
+ margin: 20px -20px 10px -20px;
+ padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+}
+
+div.body p, div.body dd, div.body li {
+ text-align: justify;
+ line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+ display: inline;
+}
+
+div.admonition p {
+ margin-bottom: 5px;
+}
+
+div.admonition pre {
+ margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+ margin-bottom: 5px;
+}
+
+div.note {
+ background-color: #eee;
+ border: 1px solid #ccc;
+}
+
+div.seealso {
+ background-color: #ffc;
+ border: 1px solid #ff6;
+}
+
+div.topic {
+ background-color: #eee;
+}
+
+div.warning {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre {
+ padding: 5px;
+ background-color: #eeffcc;
+ color: #333333;
+ line-height: 120%;
+ border: 1px solid #ac9;
+ border-left: none;
+ border-right: none;
+}
+
+tt {
+ background-color: #ecf0f3;
+ padding: 0 1px 0 1px;
+ font-size: 0.95em;
+}
+
+th {
+ background-color: #ede;
+}
+
+.warning tt {
+ background: #efc2c2;
+}
+
+.note tt {
+ background: #d6d6d6;
+}
+
+.viewcode-back {
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ background-color: #f4debf;
+ border-top: 1px solid #ac9;
+ border-bottom: 1px solid #ac9;
+}
\ No newline at end of file
+++ /dev/null
-Abbreviations
--------------
-
-Summary
--------
-
-The Markdown Abbreviation Extension adds the ability to define abbreviations.
-Specifically, any defined abbreviation is wrapped in an `<abbr>` tag.
-
-The Abbreviation extension is included in the standard Markdown library.
-
-Syntax
-------
-
-Abbreviations are defined using the syntax established in
-[PHP Markdown Extra][php].
-
-[php]: http://www.michelf.com/projects/php-markdown/extra/#abbr
-
-Thus, the following text (taken from the above referenced PHP documentation):
-
- The HTML specification
- is maintained by the W3C.
-
- *[HTML]: Hyper Text Markup Language
- *[W3C]: World Wide Web Consortium
-
-will be rendered like so:
-
- <p>The <abbr title="Hyper Text Markup Language">HTML</abbr> specification
- is maintained by the <abbr title="World Wide Web Consortium">W3C</abbr>.</p>
-
-Usage
------
-
-From the Python interpreter:
-
- >>> import markdown
- >>> text = """
- ... Some text with an ABBR.
- ...
- ... *[ABBR]: Abbreviation
- ... """
- >>> html = markdown.markdown(text, ['abbr'])
-
-To use with other extensions, just add them to the list, like this:
-
- >>> html = markdown.markdown(text, ['abbr', 'footnotes'])
-
-Abbreviations can also be called from the command line using Markdown's `-x`
-parameter, like so:
-
- markdown.py -x abbr source.txt > output.html
+++ /dev/null
-CodeHilite
-==========
-
-Summary
--------
-
-The CodeHilite Extension adds code/syntax highlighting to standard
-Python-Markdown code blocks using [Pygments][].
-
-[Python-Markdown]: http://www.freewisdom.org/projects/python-markdown/
-[Pygments]: http://pygments.org/
-
-This extension is included in the Markdown library.
-
-Setup
------
-
-You will also need to [download][dl] and install the Pygments package on your
-`PYTHONPATH`. You will need to determine the appropriate CSS classes and create
-appropriate rules for them, which are either defined in or linked from the
-header of your HTML templates. See the excellent [documentation][] for more
-details. If no language is defined, Pygments will attempt to guess the
-language. When that fails, the code block will display as un-highlighted code.
-
-[dl]: http://pygments.org/download/
-[documentation]: http://pygments.org/docs
-
-**Note:** The css and/or javascript is not included as part of this extension
-but shall always be provided by the end user.
-
-Syntax
-------
-
-The CodeHilite Extension follows the same [syntax][] as regular Markdown code
-blocks, with one exception. The hiliter needs to know what language to use for
-the code block. There are three ways to tell the hiliter what language the code
-block contains and each one has a different result.
-
-[syntax]: http://daringfireball.net/projects/markdown/syntax#precode
-
-###SheBang (with path)
-
-If the first line of the codeblock contains a shebang, the language is derived
-from that and line numbers are used.
-
- #!/usr/bin/python
- # Code goes here ...
-
-Will result in:
-
- #!/usr/bin/python
- # Code goes here ...
-
-
-###SheBang (no path)
-
-If the first line contains a shebang, but the shebang line does not contain a
-path (a single `/` or even a space), then that line is removed from the code
-block before processing. Line numbers are used.
-
- #!python
- # Code goes here ...
-
-Will result in:
-
- # Code goes here ...
-
-####Colons
-
-If the first line begins with three or more colons, the text following the
-colons identifies the language. The first line is removed from the code block
-before processing and line numbers are not used.
-
- :::python
- # Code goes here ...
-
-Will result in:
-
- # Code goes here ...
-
-###When No Language is Defined
-
-CodeHilite is completely backward compatible so that if a code block is
-encountered that does not define a language, the block is simple wrapped in
-`<pre>` tags and output. Note: one exception would be that the Pygments
-highlighting engine will try to guess the language. Upon failure, the same
-behavior will happen as described here.
-
- # Code goes here ...
-
-Will result in:
-
- # Code goes here ...
-
-Lets see the source for that:
-
- <div class="codehilite" ><pre><code># Code goes here ...
- </code></pre></div>
-
-Usage
------
-
-From the Python interpreter:
-
- >>> html = markdown.markdown(text, ['codehilite'])
-
-If you want every code block to have line numbers, even when using colons
-(`:::`) for language identification, the setting `force_linenos` is available
-to do so.
-
- >>> html = markdown.markdown(text,
- ... ['codehilite(force_linenos=True)']
- ... )
+++ /dev/null
-Definition Lists
-----------------
-
-Summary
--------
-
-The Definition List Extension adds the ability to create definition list in
-Markdown documents.
-
-This extension is included in the standard Markdown library.
-
-Syntax
-------
-
-Definition lists are defined using the syntax established in
-[PHP Markdown Extra][php].
-
-[php]: http://www.michelf.com/projects/php-markdown/extra/#def-list
-
-Thus, the following text (taken from the above referenced PHP documentation):
-
- Apple
- : Pomaceous fruit of plants of the genus Malus in
- the family Rosaceae.
-
- Orange
- : The fruit of an evergreen tree of the genus Citrus.
-
-will be rendered like so:
-
- <dl>
- <dt>Apple</dt>
- <dd>Pomaceous fruit of plants of the genus Malus in
- the family Rosaceae.</dd>
-
- <dt>Orange</dt>
- <dd>The fruit of an evergreen tree of the genus Citrus.</dd>
- </dl>
-
-
-Usage
------
-
-From the Python interpreter:
-
- >>> html = markdown.markdown(text, ['def_list'])
-
-To use with other extensions, just add them to the list, like this:
-
- >>> html = markdown.markdown(text, ['def_list', 'footnotes'])
-
-The extension can also be called from the command line using Markdown's `-x`
-parameter:
-
- markdown.py -x def_list source.txt > output.html
+++ /dev/null
-Fenced Code Blocks
-==================
-
-Summary
--------
-
-This extension adds a secondary way to define code blocks which overcomes a few
-limitations of the indented code blocks.
-
-This extension is included in the standard Markdown library.
-
-Syntax
-------
-
-Fenced Code Blocks are defined using the syntax established in
-[PHP Markdown Extra][php].
-
-[php]: http://www.michelf.com/projects/php-markdown/extra/#fenced-code-blocks
-
-Thus, the following text (taken from the above referenced PHP documentation):
-
- This is a paragraph introducing:
-
- ~~~~~~~~~~~~~~~~~~~~
- a one-line code block
- ~~~~~~~~~~~~~~~~~~~~
-
-Fenced code blocks can have a blank line as the first and/or last line of a
-code block and they can also come immediately after a list item without becoming
-part of the list.
-
-In addition to PHP Extra's syntax, you can define the language of the code
-block for use by syntax highlighters etc. The language will be assigned as a
-class attribute of the ``<code>`` element in the output. Therefore, you should
-define the language as you would a css class - ``.language``. For consistency
-with other markdown syntax, the language can *optionally* be wrapped in curly
-brackets:
-
- ~~~~{.python}
- # python code
- ~~~~
-
- ~~~~.html
- <p>HTML Document</p>
- ~~~~
-
-The above will output:
-
- <pre><code class="python"># python code
- </code></pre>
-
- <pre><code class="html"><p>HTML Document</p>
- </code></pre>
-
-Usage
------
-
-From the Python interpreter:
-
- >>> html = markdown.markdown(text, ['fenced_code'])
-
-
-
+++ /dev/null
-HTML Tidy
-=========
-
-Runs [HTML Tidy][] on the output of Python-Markdown using the [uTidylib][]
-Python wrapper. Both libtidy and uTidylib must be installed on your system.
-
-This extension is available in the standard Markdown library since version 2.0.
-
-[HTML Tidy]: http://tidy.sourceforge.net/
-[uTidylib]: http://utidylib.berlios.de/
-
-Note than any Tidy [options][] can be passed in as extension configs. So,
-for example, to output HTML rather than XHTML, set ``output_xhtml=0``. To
-indent the output, set ``indent=auto`` and to have Tidy wrap the output in
-``<html>`` and ``<body>`` tags, set ``show_body_only=0``. See Tidy's
-[options][] for a full list of the available options. The defaults are set to
-most closely match Markdowns defaults with the exception that you get much
-better pretty-printing.
-
-[options]: http://tidy.sourceforge.net/docs/quickref.html
-
-Note that options set in this extension will override most any other settings
-passed on to Markdown (such as "output_format"). Unlike Markdown, this extension
-will also treat raw HTML no different than that output by Markdown. In other
-words, it may munge a document authors carefully crafted HTML. Of course, it
-may also transform poorly formed raw HTML into nice, valid HTML. Take these
-things into consideration when electing to use this extension.
+++ /dev/null
-HeaderId
-========
-
-Summary
--------
-
-An extension to Python-Markdown that adds an 'id' attribute to HTML header
-elements (h1-h6) in markdown's output.
-
-This extension is included in the standard Markdown library.
-
-Syntax
-------
-
-The basic syntax follows [PHP Markdown Extra][]'s implementation:
-
-[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/#header-id
-
- Header 1 {#header1}
- ========
-
- ## Header 2 ## {#header2}
-
-will result in the following HTML:
-
- <h1 id="header1">Header 1</h1>
-
- <h2 id="header2">Header 2</h2>
-
-However, there is much more that this extension does.
-
-By default, all headers will automatically have unique "id" attributes
-generated based upon the text of the header (See below to turn this off).
-Note this example in which all three headers would have the same "id":
-
- #Header
- #Another Header {#header}
- #Header
-
-Results in:
-
- <h1 id="header">Header</h1>
- <h1 id="header_1">Another Header</h1>
- <h1 id="header_2">Third Header</h1>
-
-Configuring the Output
-----------------------
-
-The HeaderId extension has two configuration settings:
-
-* **level**: Base level for headers.
-
- Default: `1`
-
-* **forceid**: Force all headers to have an id.
-
- Default: `True`
-
-The `level` setting allows you to automatically adjust the header levels to fit
-within the hierarchy of your html templates. For example, the markdown text for
-this page should not contain any headers higher than level 3 (`<h3>`).
-Therefore, do the following:
-
- >>> text = '''
- ... #Some Header
- ... ## Next Level'''
- >>> html = markdown.markdown(text, ['headerid(level=3)'])
- >>> print html
- <h3 id="some_header">Some Header</h3>
- <h4 id="next_level">Next Level</h4>'
-
-The `forceid` setting turns on or off the automatically generated ids for
-headers that do not have one explicitly defined.
-
- >>> text = '''
- ... # Some Header
- ... # Header with ID # { #foo }'''
- >>> html = markdown.markdown(text, ['headerid(forceid=False)'])
- >>> print html
- <h1>Some Header</h1>
- <h1 id="foo">Header with ID</h1>
-
-Using with Meta-Data
---------------------
-
-The HeaderId Extension also supports the [[Meta-Data]] Extension. Please see the documentation for that extension for specifics. The supported meta-data keywords are:
-
-* `header_level`
-* `header_forceid`
-
-When used, the meta-data will override the settings provided through the
-`extension_configs` interface.
-
-This document:
-
- header_level: 2
- header_forceid: Off
-
- # A Header
-
-
-Will result in the following output:
-
- <h2>A Header</h2>
+++ /dev/null
-ImageLinks
-==========
-
-Summary
--------
-
-ImageLinks is a Python-Markdown extension that provides a mechanism for
-defining mini-photo galleries within a markdown document.
-
-This extension is part of the Markdown library since 2.0.
-
-Syntax
-------
-
-Turns paragraphs like
-
- <~~~~~~~~~~~~~~~~~~~~~~~~
- dir/subdir
- dir/subdir
- dir/subdir
- ~~~~~~~~~~~~~~
- dir/subdir
- dir/subdir
- dir/subdir
- ~~~~~~~~~~~~~~~~~~~>
-
-Into mini-photo galleries.
+++ /dev/null
-Meta-Data
-=========
-
-Summary
--------
-
-An extension to Python-Markdown that adds a syntax for defining meta-data about
-a document. The Meta-Data extension is inspired by and follows the syntax of
-[MultiMarkdown][]. Currently, this extension does not use the meta-data in any
-way, but simply provides it as a `Meta` attribute of a markdown instance for
-use by other extensions or directly by your python code.
-
-[MultiMarkdown]: http://fletcherpenney.net/MultiMarkdown_Syntax_Guide#metadata
-
-This extension has been a part of the Markdown library since 2.0.
-
-Syntax
-------
-
-Meta-data consists of a series of keywords and values defined at the beginning
-of a markdown document like this:
-
- Title: My Document
- Summary: A brief description of my document.
- Authors: Waylan Limberg
- John Doe
- Date: October 2, 2007
- blank-value:
- base_url: http://example.com
-
- This is the first paragraph of the document.
-
-The keywords are case-insensitive and may consist of letters, numbers,
-underscores and dashes and must end with a colon. The values consist of
-anything following the colon on the line and may even be blank. If a line is
-indented 4 or more spaces, that line is assumed to be an additional line of the
-value for the previous keyword. A keyword may have as many lines as desired.
-The first blank line ends all meta-data for the document. Therefore, the first
-line of a document must not be blank. All meta-data is stripped from the
-document prior to any further processing by markdown.
-
-Accessing the Meta-Data
------------------------
-
-The meta-data is made available as a python Dict in the `Meta` attribute of an
-instance of the Markdown class. For example, using the above document:
-
- >>> md = markdown.Markdown(extensions = ['meta'])
- >>> html = md.convert(text)
- >>> # Meta-data has been stripped from output
- >>> print html
- <p>This is the first paragraph of the document.</p>
-
- >>> # View meta-data
- >>> print md.Meta
- {
- 'title' : ['My Document'],
- 'summary' : ['A brief description of my document.'],
- 'authors' : ['Waylan Limberg', 'John Doe'],
- 'date' : ['October 2, 2007'],
- 'blank-value' : [''],
- 'base_url' : ['http://example.com']
- }
-
-Note that the keys are all lowercase and the values consist of a list of
-strings where each item is one line for that key. This way, one could preserve
-line breaks if desired. Or the items could be joined where appropriate. No
-assumptions are made regarding the data. It is simply passed as found to the
-`Meta` attribute.
-
-Perhaps the meta-data could be passed into a template system, or used by
-various markdown extensions. The possibilities are left to the imagination of
-the developer.
-
-Compatible Extensions
----------------------
-
-The following are extensions currently known to work with the Meta-Data
-Extension and the keywords they are known to support:
-
-* [[HeaderId]]
- * `header_level`
- * `header_forceid`
-* [[WikiLinks]]
- * `wiki_base_url`
- * `wiki_end_url`
- * `wiki_html_class`
-
+++ /dev/null
-RSS
-===
-
-Summary
--------
-
-An extension to Python-Markdown that outputs a markdown document as RSS. This
-extension has been included with Python-Markdown since 1.7 and should be
-available to anyone who has a typical install of Python-Markdown.
-
-Usage
------
-
-From the Python interpreter:
-
- >>> import markdown
- >>> text = "Some markdown document."
- >>> rss = markdown.markdown(text, ['rss'])
-
-Configuring the Output
-----------------------
-
-An RSS document includes some data about the document (URI, author, title) that
-will likely need to be configured for your needs. Therefore, three configuration
-options are available:
-
-* **URL** : The Main URL for the document.
-* **CREATOR** : The Feed creator's name.
-* **TITLE** : The title for the feed.
-
-An example:
-
- >>> rss = markdown.markdown(text, extensions = \
- ... ['rss(URL=http://example.com,CREATOR=JOHN DOE,TITLE=My Document)']
- ... )
+++ /dev/null
-Tables
-----------------
-
-Summary
--------
-
-The Table Extension adds the ability to create tables in Markdown documents.
-
-This extension is included in the standard Markdown library.
-
-Syntax
-------
-
-Tables are defined using the syntax established in [PHP Markdown Extra][php].
-
-[php]: http://www.michelf.com/projects/php-markdown/extra/#table
-
-Thus, the following text (taken from the above referenced PHP documentation):
-
-First Header | Second Header
-------------- | -------------
-Content Cell | Content Cell
-Content Cell | Content Cell
-
-will be rendered as:
-
-<table>
-<thead>
-<tr>
-<th>First Header</th>
-<th>Second Header</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>Content Cell</td>
-<td>Content Cell</td>
-
-</tr>
-<tr>
-<td>Content Cell</td>
-<td>Content Cell</td>
-</tr>
-</tbody>
-</table>
-
-Usage
------
-
-From the Python interpreter:
-
- >>> html = markdown.markdown(text, ['tables'])
-
+++ /dev/null
-Table of Contents
-=================
-
-Summary
--------
-
-Adds a Table of Contents to a Markdown document.
-
-This extension is included with the Markdown library since version 2.0.
-
-Syntax
-------
-
-Place a marker in the document where you would like the table of contents to
-appear. Then, a nested list of all the headers in the document will replace the
-marker. The marker defaults to ``[TOC]`` so the following document:
-
- [TOC]
-
- # Header 1
-
- ## Header 2
-
-would generate the following output:
-
- <div class="toc">
- <ul>
- <li><a href="#header-1">Header 1</a></li>
- <ul>
- <li><a href="#header-2">Header 2</a></li>
- </ul>
- </ul>
- </div>
- <h1 id="header-1">Header 1</h1>
- <h1 id="header-2">Header 2</h1>
-
-Configuration Options
----------------------
-
-The following options are provided to configure the output:
-
-* **marker**: Text to find and replace with the Table of Contents. Defaults
- to ``[TOC]``.
-* **slugify**: Callable to generate anchors based on header text. Defaults to a
- built in ``slugify`` method. The callable must accept one argument which
- contains the text content of the header and return a string which will be
- used as the anchor text.
-* **title**: Title to insert in TOC ``<div>``. Defaults to ``None``.
-* **anchorlink**: Set to ``True`` to have the headers link to themselves.
- Default is ``False``.
+++ /dev/null
-WikiLinks
-=========
-
-Summary
--------
-
-An extension to Python-Markdown that adds [WikiLinks][]. Specifically, any
-``[[bracketed]]`` word is converted to a link.
-
-[WikiLinks]: http://en.wikipedia.org/wiki/Wikilink
-
-This extension has been included in the Markdown library since 2.0.
-
-Syntax
-------
-
-A ``[[bracketed]]`` word is any combination of upper or lower case letters,
-number, dashes, underscores and spaces surrounded by double brackets. Therefore
-
- [[Bracketed]]
-
-Would produce the following html:
-
- <a href="/Bracketed/" class="wikilink">Bracketed</a>
-
-Note that wikilinks are automatically assigned `class="wikilink"` making it
-easy to style wikilinks differently from other links on a page if one so
-desires. See below for ways to alter the class.
-
-You should also note that when a space is used, the space is converted to an
-underscore in the link but left as-is in the label. Perhaps an example
-would illustrate this best:
-
- [[Wiki Link]]
-
-Becomes
-
- <a href="/Wiki_Link/" class="wikilink">Wiki Link</a>
-
-Usage
------
-
-From the Python interpreter:
-
- >>> text = "Some text with a [[WikiLink]]."
- >>> html = markdown.markdown(text, ['wikilink'])
-
-The default behavior is to point each link to the document root of the current
-domain and close with a trailing slash. Additionally, each link is assigned to
-the html class `wikilink`. This may not always be desirable. Therefore, one can
-customize that behavior within Python code. Three settings are provided to
-change the default behavior:
-
-1. **base_url**: String to append to beginning of URL.
-
- Default: `'/'`
-
-2. **end_url**: String to append to end of URL.
-
- Default: `'/'`
-
-3. **html_class**: CSS hook. Leave blank for none.
-
- Default: `'wikilink'`
-
-4. **build_url**: Callable which formats the URL from it's parts.
-
-For an example, let us suppose links should always point to the subdirectory
-`/wiki/` and end with `.html`
-
- >>> html = markdown.markdown(text,
- ... ['wikilink(base_url=/wiki/,end_url=.html)']
- ... )
-
-The above would result in the following link for `[[WikiLink]]`.
-
- <a href="/wiki/WikiLink.html" class="wikilink">WikiLink</a>
-
-If you want to do more that just alter the base and/or end of the URL, you
-could also pass in a callable which must accept three arguments (``label``,
-``base``, and ``end``). The callable must return the URL in it's entirety.
-
- def my_url_builder(label, base, end):
- # do stuff
- return url
-
- md = markdown.Markdown(
- extensions=['wikilinks],
- extension_configs={'wikilinks' : [('build_url', my_url_builder)]}
- )
-
-
-The option is also provided to change or remove the class attribute.
-
- >>> html = markdown.markdown(text,
- ... ['wikilink(base_url=myclass)']
- ... )
-
-Would cause all wikilinks to be assigned to the class `myclass`.
-
- <a href="/WikiLink/" class="myclass">WikiLink</a>
-
-The same options can be used on the command line as well:
-
- python markdown.py -x wikilink(base_url=http://example.com/,end_url=.html,html_class=foo) src.txt
-
-Some may prefer the more complex format when calling the `Markdown` class directly:
-
- >>> md = markdown.Markdown(
- ... extensions = ['wikilink'],
- ... extension_configs = {'wikilink': [
- ... ('base_url', 'http://example.com/'),
- ... ('end_url', '.html'),
- ... ('html_class', '') ]},
- ... safe_mode = True
- ... )
- >>> html = md.convert(text)
-
-Using with Meta-Data
---------------------
-
-The WikiLink Extension also supports the [[Meta-Data]] Extension. Please see
-the documentation for that extension for specifics. The supported meta-data
-keywords are:
-
-* `wiki_base_url`
-* `wiki_end_url`
-* `wiki_html_class`
-
-When used, the meta-data will override the settings provided through the
-`extension_configs` interface.
-
-This document:
-
- wiki_base_url: http://example.com/
- wiki_end_url: .html
- wiki_html_class:
-
- A [[WikiLink]] in the first paragraph.
-
-would result in the following output (notice the blank `wiki_html_class`):
-
- <p>A <a href="http://example.com/WikiLink.html">WikiLink</a> in the first paragraph.</p>
-
--- /dev/null
+title: Abbreviation Extension
+prev_title: Extra Extension
+prev_url: extra.html
+next_title: Attribute List Extension
+next_url: attr_list.html
+
+Abbreviations
+=============
+
+Summary
+-------
+
+The Markdown Abbreviation Extension adds the ability to define abbreviations.
+Specifically, any defined abbreviation is wrapped in an `<abbr>` tag.
+
+The Abbreviation extension is included in the standard Markdown library.
+
+Syntax
+------
+
+Abbreviations are defined using the syntax established in
+[PHP Markdown Extra][php].
+
+[php]: http://www.michelf.com/projects/php-markdown/extra/#abbr
+
+Thus, the following text (taken from the above referenced PHP documentation):
+
+ The HTML specification
+ is maintained by the W3C.
+
+ *[HTML]: Hyper Text Markup Language
+ *[W3C]: World Wide Web Consortium
+
+will be rendered like so:
+
+ <p>The <abbr title="Hyper Text Markup Language">HTML</abbr> specification
+ is maintained by the <abbr title="World Wide Web Consortium">W3C</abbr>.</p>
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> import markdown
+ >>> text = """
+ ... Some text with an ABBR.
+ ...
+ ... *[ABBR]: Abbreviation
+ ... """
+ >>> html = markdown.markdown(text, ['abbr'])
+
+To use with other extensions, just add them to the list, like this:
+
+ >>> html = markdown.markdown(text, ['abbr', 'footnotes'])
+
+Abbreviations can also be called from the command line using Markdown's `-x`
+parameter, like so:
+
+ markdown.py -x abbr source.txt > output.html
--- /dev/null
+title: Extensions API
+prev_title: Wikilinks Extension
+prev_url: wikilinks.html
+next_title: Test Suite
+next_url: ../test_suite.html
+
+Writing Extensions for Python-Markdown
+======================================
+
+Python-Markdown includes an API for extension writers to plug their own
+custom functionality and/or syntax into the parser. There are preprocessors
+which allow you to alter the source before it is passed to the parser,
+inline patterns which allow you to add, remove or override the syntax of
+any inline elements, and postprocessors which allow munging of the
+output of the parser before it is returned. If you really want to dive in,
+there are also blockprocessors which are part of the core BlockParser.
+
+As the parser builds an [ElementTree][] object which is later rendered
+as Unicode text, there are also some helpers provided to ease manipulation of
+the tree. Each part of the API is discussed in its respective section below.
+Additionally, reading the source of some [Available Extensions][] may be
+helpful. For example, the [Footnotes][] extension uses most of the features
+documented here.
+
+Preprocessors {: #preprocessors }
+---------------------------------
+
+Preprocessors munge the source text before it is passed into the Markdown
+core. This is an excellent place to clean up bad syntax, extract things the
+parser may otherwise choke on and perhaps even store it for later retrieval.
+
+Preprocessors should inherit from ``markdown.preprocessors.Preprocessor`` and
+implement a ``run`` method with one argument ``lines``. The ``run`` method of
+each Preprocessor will be passed the entire source text as a list of Unicode
+strings. Each string will contain one line of text. The ``run`` method should
+return either that list, or an altered list of Unicode strings.
+
+A pseudo example:
+
+ from markdown.preprocessors import Preprocessor
+
+ class MyPreprocessor(Preprocessor):
+ def run(self, lines):
+ new_lines = []
+ for line in lines:
+ m = MYREGEX.match(line)
+ if m:
+ # do stuff
+ else:
+ new_lines.append(line)
+ return new_lines
+
+Inline Patterns {: #inlinepatterns }
+------------------------------------
+
+Inline Patterns implement the inline HTML element syntax for Markdown such as
+``*emphasis*`` or ``[links](http://example.com)``. Pattern objects should be
+instances of classes that inherit from ``markdown.inlinepatterns.Pattern`` or
+one of its children. Each pattern object uses a single regular expression and
+must have the following methods:
+
+* **``getCompiledRegExp()``**:
+
+ Returns a compiled regular expression.
+
+* **``handleMatch(m)``**:
+
+ Accepts a match object and returns an ElementTree element of a plain
+ Unicode string.
+
+Note that any regular expression returned by ``getCompiledRegExp`` must capture
+the whole block. Therefore, they should all start with ``r'^(.*?)'`` and end
+with ``r'(.*?)!'``. When using the default ``getCompiledRegExp()`` method
+provided in the ``Pattern`` you can pass in a regular expression without that
+and ``getCompiledRegExp`` will wrap your expression for you and set the
+`re.DOTALL` and `re.UNICODE` flags. This means that the first group of your
+match will be ``m.group(2)`` as ``m.group(1)`` will match everything before the
+pattern.
+
+For an example, consider this simplified emphasis pattern:
+
+ from markdown.inlinepatterns import Pattern
+ from markdown.util import etree
+
+ class EmphasisPattern(Pattern):
+ def handleMatch(self, m):
+ el = etree.Element('em')
+ el.text = m.group(3)
+ return el
+
+As discussed in [Integrating Your Code Into Markdown][], an instance of this
+class will need to be provided to Markdown. That instance would be created
+like so:
+
+ # an oversimplified regex
+ MYPATTERN = r'\*([^*]+)\*'
+ # pass in pattern and create instance
+ emphasis = EmphasisPattern(MYPATTERN)
+
+Actually it would not be necessary to create that pattern (and not just because
+a more sophisticated emphasis pattern already exists in Markdown). The fact is,
+that example pattern is not very DRY. A pattern for `**strong**` text would
+be almost identical, with the exception that it would create a 'strong' element.
+Therefore, Markdown provides a number of generic pattern classes that can
+provide some common functionality. For example, both emphasis and strong are
+implemented with separate instances of the ``SimpleTagPettern`` listed below.
+Feel free to use or extend any of the Pattern classes found at `markdown.inlinepatterns`.
+
+**Generic Pattern Classes**
+
+* **``SimpleTextPattern(pattern)``**:
+
+ Returns simple text of ``group(2)`` of a ``pattern``.
+
+* **``SimpleTagPattern(pattern, tag)``**:
+
+ Returns an element of type "`tag`" with a text attribute of ``group(3)``
+ of a ``pattern``. ``tag`` should be a string of a HTML element (i.e.: 'em').
+
+* **``SubstituteTagPattern(pattern, tag)``**:
+
+ Returns an element of type "`tag`" with no children or text (i.e.: 'br').
+
+There may be other Pattern classes in the Markdown source that you could extend
+or use as well. Read through the source and see if there is anything you can
+use. You might even get a few ideas for different approaches to your specific
+situation.
+
+Treeprocessors {: #treeprocessors }
+-----------------------------------
+
+Treeprocessors manipulate an ElemenTree object after it has passed through the
+core BlockParser. This is where additional manipulation of the tree takes
+place. Additionally, the InlineProcessor is a Treeprocessor which steps through
+the tree and runs the InlinePatterns on the text of each Element in the tree.
+
+A Treeprocessor should inherit from ``markdown.treeprocessors.Treeprocessor``,
+over-ride the ``run`` method which takes one argument ``root`` (an Elementree
+object) and returns either that root element or a modified root element.
+
+A pseudo example:
+
+ from markdown.treprocessors import Treeprocessor
+
+ class MyTreeprocessor(Treeprocessor):
+ def run(self, root):
+ #do stuff
+ return my_modified_root
+
+For specifics on manipulating the ElementTree, see
+[Working with the ElementTree][] below.
+
+Postprocessors {: #postprocessors }
+-----------------------------------
+
+Postprocessors manipulate the document after the ElementTree has been
+serialized into a string. Postprocessors should be used to work with the
+text just before output.
+
+A Postprocessor should inherit from ``markdown.postprocessors.Postprocessor``
+and over-ride the ``run`` method which takes one argument ``text`` and returns
+a Unicode string.
+
+Postprocessors are run after the ElementTree has been serialized back into
+Unicode text. For example, this may be an appropriate place to add a table of
+contents to a document:
+
+ from markdown.postprocessors import Postprocessor
+
+ class TocPostprocessor(Postprocessor):
+ def run(self, text):
+ return MYMARKERRE.sub(MyToc, text)
+
+BlockParser {: #blockparser }
+-----------------------------
+
+Sometimes, pre/tree/postprocessors and Inline Patterns aren't going to do what
+you need. Perhaps you want a new type of block type that needs to be integrated
+into the core parsing. In such a situation, you can add/change/remove
+functionality of the core ``BlockParser``. The BlockParser is composed of a
+number of Blockproccessors. The BlockParser steps through each block of text
+(split by blank lines) and passes each block to the appropriate Blockprocessor.
+That Blockprocessor parses the block and adds it to the ElementTree. The
+[Definition Lists][] extension would be a good example of an extension that
+adds/modifies Blockprocessors.
+
+A Blockprocessor should inherit from ``markdown.blockprocessors.BlockProcessor``
+and implement both the ``test`` and ``run`` methods.
+
+The ``test`` method is used by BlockParser to identify the type of block.
+Therefore the ``test`` method must return a boolean value. If the test returns
+``True``, then the BlockParser will call that Blockprocessor's ``run`` method.
+If it returns ``False``, the BlockParser will move on to the next
+BlockProcessor.
+
+The **``test``** method takes two arguments:
+
+* **``parent``**: The parent etree Element of the block. This can be useful as
+ the block may need to be treated differently if it is inside a list, for
+ example.
+
+* **``block``**: A string of the current block of text. The test may be a
+ simple string method (such as ``block.startswith(some_text)``) or a complex
+ regular expression.
+
+The **``run``** method takes two arguments:
+
+* **``parent``**: A pointer to the parent etree Element of the block. The run
+ method will most likely attach additional nodes to this parent. Note that
+ nothing is returned by the method. The Elementree object is altered in place.
+
+* **``blocks``**: A list of all remaining blocks of the document. Your run
+ method must remove (pop) the first block from the list (which it altered in
+ place - not returned) and parse that block. You may find that a block of text
+ legitimately contains multiple block types. Therefore, after processing the
+ first type, your processor can insert the remaining text into the beginning
+ of the ``blocks`` list for future parsing.
+
+Please be aware that a single block can span multiple text blocks. For example,
+The official Markdown syntax rules state that a blank line does not end a
+Code Block. If the next block of text is also indented, then it is part of
+the previous block. Therefore, the BlockParser was specifically designed to
+address these types of situations. If you notice the ``CodeBlockProcessor``,
+in the core, you will note that it checks the last child of the ``parent``.
+If the last child is a code block (``<pre><code>...</code></pre>``), then it
+appends that block to the previous code block rather than creating a new
+code block.
+
+Each BlockProcessor has the following utility methods available:
+
+* **``lastChild(parent)``**:
+
+ Returns the last child of the given etree Element or ``None`` if it had no
+ children.
+
+* **``detab(text)``**:
+
+ Removes one level of indent (four spaces by default) from the front of each
+ line of the given text string.
+
+* **``looseDetab(text, level)``**:
+
+ Removes "level" levels of indent (defaults to 1) from the front of each line
+ of the given text string. However, this methods allows secondary lines to
+ not be indented as does some parts of the Markdown syntax.
+
+Each BlockProcessor also has a pointer to the containing BlockParser instance at
+``self.parser``, which can be used to check or alter the state of the parser.
+The BlockParser tracks it's state in a stack at ``parser.state``. The state
+stack is an instance of the ``State`` class.
+
+**``State``** is a subclass of ``list`` and has the additional methods:
+
+* **``set(state)``**:
+
+ Set a new state to string ``state``. The new state is appended to the end
+ of the stack.
+
+* **``reset()``**:
+
+ Step back one step in the stack. The last state at the end is removed from
+ the stack.
+
+* **``isstate(state)``**:
+
+ Test that the top (current) level of the stack is of the given string
+ ``state``.
+
+Note that to ensure that the state stack doesn't become corrupted, each time a
+state is set for a block, that state *must* be reset when the parser finishes
+parsing that block.
+
+An instance of the **``BlockParser``** is found at ``Markdown.parser``.
+``BlockParser`` has the following methods:
+
+* **``parseDocument(lines)``**:
+
+ Given a list of lines, an ElementTree object is returned. This should be
+ passed an entire document and is the only method the ``Markdown`` class
+ calls directly.
+
+* **``parseChunk(parent, text)``**:
+
+ Parses a chunk of markdown text composed of multiple blocks and attaches
+ those blocks to the ``parent`` Element. The ``parent`` is altered in place
+ and nothing is returned. Extensions would most likely use this method for
+ block parsing.
+
+* **``parseBlocks(parent, blocks)``**:
+
+ Parses a list of blocks of text and attaches those blocks to the ``parent``
+ Element. The ``parent`` is altered in place and nothing is returned. This
+ method will generally only be used internally to recursively parse nested
+ blocks of text.
+
+While is is not recommended, an extension could subclass or completely replace
+the ``BlockParser``. The new class would have to provide the same public API.
+However, be aware that other extensions may expect the core parser provided
+and will not work with such a drastically different parser.
+
+Working with the ElementTree {: #working_with_et }
+--------------------------------------------------
+
+As mentioned, the Markdown parser converts a source document to an
+[ElementTree][] object before serializing that back to Unicode text.
+Markdown has provided some helpers to ease that manipulation within the context
+of the Markdown module.
+
+First, to get access to the ElementTree module import ElementTree from
+``markdown`` rather than importing it directly. This will ensure you are using
+the same version of ElementTree as markdown. The module is found at
+``markdown.util.etree`` within Markdown.
+
+ from markdown.util import etree
+
+``markdown.util.etree`` tries to import ElementTree from any known location,
+first as a standard library module (from ``xml.etree`` in Python 2.5), then as
+a third party package (``Elementree``). In each instance, ``cElementTree`` is
+tried first, then ``ElementTree`` if the faster C implementation is not
+available on your system.
+
+Sometimes you may want text inserted into an element to be parsed by
+[InlinePatterns][]. In such a situation, simply insert the text as you normally
+would and the text will be automatically run through the InlinePatterns.
+However, if you do *not* want some text to be parsed by InlinePatterns,
+then insert the text as an ``AtomicString``.
+
+ from markdown.util import AtomicString
+ some_element.text = AtomicString(some_text)
+
+Here's a basic example which creates an HTML table (note that the contents of
+the second cell (``td2``) will be run through InlinePatterns latter):
+
+ table = etree.Element("table")
+ table.set("cellpadding", "2") # Set cellpadding to 2
+ tr = etree.SubElement(table, "tr") # Add child tr to table
+ td1 = etree.SubElement(tr, "td") # Add child td1 to tr
+ td1.text = markdown.AtomicString("Cell content") # Add plain text content
+ td2 = etree.SubElement(tr, "td") # Add second td to tr
+ td2.text = "*text* with **inline** formatting." # Add markup text
+ table.tail = "Text after table" # Add text after table
+
+You can also manipulate an existing tree. Consider the following example which
+adds a ``class`` attribute to ``<a>`` elements:
+
+ def set_link_class(self, element):
+ for child in element:
+ if child.tag == "a":
+ child.set("class", "myclass") #set the class attribute
+ set_link_class(child) # run recursively on children
+
+For more information about working with ElementTree see the ElementTree
+[Documentation](http://effbot.org/zone/element-index.htm)
+([Python Docs](http://docs.python.org/lib/module-xml.etree.ElementTree.html)).
+
+Integrating Your Code Into Markdown {: #integrating_into_markdown }
+-------------------------------------------------------------------
+
+Once you have the various pieces of your extension built, you need to tell
+Markdown about them and ensure that they are run in the proper sequence.
+Markdown accepts a ``Extension`` instance for each extension. Therefore, you
+will need to define a class that extends ``markdown.extensions.Extension`` and
+over-rides the ``extendMarkdown`` method. Within this class you will manage
+configuration options for your extension and attach the various processors and
+patterns to the Markdown instance.
+
+It is important to note that the order of the various processors and patterns
+matters. For example, if we replace ``http://...`` links with ``<a>`` elements,
+and *then* try to deal with inline html, we will end up with a mess.
+Therefore, the various types of processors and patterns are stored within an
+instance of the Markdown class in [OrderedDict][]s. Your ``Extension`` class
+will need to manipulate those OrderedDicts appropriately. You may insert
+instances of your processors and patterns into the appropriate location in an
+OrderedDict, remove a built-in instance, or replace a built-in instance with
+your own.
+
+### extendMarkdown {: #extendmarkdown }
+
+The ``extendMarkdown`` method of a ``markdown.extensions.Extension`` class
+accepts two arguments:
+
+* **``md``**:
+
+ A pointer to the instance of the Markdown class. You should use this to
+ access the [OrderedDict][]s of processors and patterns. They are found
+ under the following attributes:
+
+ * ``md.preprocessors``
+ * ``md.inlinePatterns``
+ * ``md.parser.blockprocessors``
+ * ``md.treepreprocessors``
+ * ``md.postprocessors``
+
+ Some other things you may want to access in the markdown instance are:
+
+ * ``md.htmlStash``
+ * ``md.output_formats``
+ * ``md.set_output_format()``
+ * ``md.registerExtension()``
+ * ``md.html_replacement_text``
+ * ``md.tab_length``
+ * ``md.enable_attributes``
+ * ``md.smart_emphasis``
+
+* **``md_globals``**:
+
+ Contains all the various global variables within the markdown module.
+
+Of course, with access to those items, theoretically you have the option to
+changing anything through various [monkey_patching][] techniques. However, you
+should be aware that the various undocumented or private parts of markdown
+may change without notice and your monkey_patches may break with a new release.
+Therefore, what you really should be doing is inserting processors and patterns
+into the markdown pipeline. Consider yourself warned.
+
+[monkey_patching]: http://en.wikipedia.org/wiki/Monkey_patch
+
+A simple example:
+
+ from markdown.extensions import Extension
+
+ class MyExtension(Extension):
+ def extendMarkdown(self, md, md_globals):
+ # Insert instance of 'mypattern' before 'references' pattern
+ md.inlinePatterns.add('mypattern', MyPattern(md), '<references')
+
+### OrderedDict {: #ordereddict }
+
+An OrderedDict is a dictionary like object that retains the order of it's
+items. The items are ordered in the order in which they were appended to
+the OrderedDict. However, an item can also be inserted into the OrderedDict
+in a specific location in relation to the existing items.
+
+Think of OrderedDict as a combination of a list and a dictionary as it has
+methods common to both. For example, you can get and set items using the
+``od[key] = value`` syntax and the methods ``keys()``, ``values()``, and
+``items()`` work as expected with the keys, values and items returned in the
+proper order. At the same time, you can use ``insert()``, ``append()``, and
+``index()`` as you would with a list.
+
+Generally speaking, within Markdown extensions you will be using the special
+helper method ``add()`` to add additional items to an existing OrderedDict.
+
+The ``add()`` method accepts three arguments:
+
+* **``key``**: A string. The key is used for later reference to the item.
+
+* **``value``**: The object instance stored in this item.
+
+* **``location``**: Optional. The items location in relation to other items.
+
+ Note that the location can consist of a few different values:
+
+ * The special strings ``"_begin"`` and ``"_end"`` insert that item at the
+ beginning or end of the OrderedDict respectively.
+
+ * A less-than sign (``<``) followed by an existing key (i.e.:
+ ``"<somekey"``) inserts that item before the existing key.
+
+ * A greater-than sign (``>``) followed by an existing key (i.e.:
+ ``">somekey"``) inserts that item after the existing key.
+
+Consider the following example:
+
+ >>> from markdown.odict import OrderedDict
+ >>> od = OrderedDict()
+ >>> od['one'] = 1 # The same as: od.add('one', 1, '_begin')
+ >>> od['three'] = 3 # The same as: od.add('three', 3, '>one')
+ >>> od['four'] = 4 # The same as: od.add('four', 4, '_end')
+ >>> od.items()
+ [("one", 1), ("three", 3), ("four", 4)]
+
+Note that when building an OrderedDict in order, the extra features of the
+``add`` method offer no real value and are not necessary. However, when
+manipulating an existing OrderedDict, ``add`` can be very helpful. So let's
+insert another item into the OrderedDict.
+
+ >>> od.add('two', 2, '>one') # Insert after 'one'
+ >>> od.values()
+ [1, 2, 3, 4]
+
+Now let's insert another item.
+
+ >>> od.add('twohalf', 2.5, '<three') # Insert before 'three'
+ >>> od.keys()
+ ["one", "two", "twohalf", "three", "four"]
+
+Note that we also could have set the location of "twohalf" to be 'after two'
+(i.e.: ``'>two'``). However, it's unlikely that you will have control over the
+order in which extensions will be loaded, and this could affect the final
+sorted order of an OrderedDict. For example, suppose an extension adding
+'twohalf' in the above examples was loaded before a separate extension which
+adds 'two'. You may need to take this into consideration when adding your
+extension components to the various markdown OrderedDicts.
+
+Once an OrderedDict is created, the items are available via key:
+
+ MyNode = od['somekey']
+
+Therefore, to delete an existing item:
+
+ del od['somekey']
+
+To change the value of an existing item (leaving location unchanged):
+
+ od['somekey'] = MyNewObject()
+
+To change the location of an existing item:
+
+ t.link('somekey', '<otherkey')
+
+### registerExtension {: #registerextension }
+
+Some extensions may need to have their state reset between multiple runs of the
+Markdown class. For example, consider the following use of the [Footnotes][]
+extension:
+
+ md = markdown.Markdown(extensions=['footnotes'])
+ html1 = md.convert(text_with_footnote)
+ md.reset()
+ html2 = md.convert(text_without_footnote)
+
+Without calling ``reset``, the footnote definitions from the first document will
+be inserted into the second document as they are still stored within the class
+instance. Therefore the ``Extension`` class needs to define a ``reset`` method
+that will reset the state of the extension (i.e.: ``self.footnotes = {}``).
+However, as many extensions do not have a need for ``reset``, ``reset`` is only
+called on extensions that are registered.
+
+To register an extension, call ``md.registerExtension`` from within your
+``extendMarkdown`` method:
+
+
+ def extendMarkdown(self, md, md_globals):
+ md.registerExtension(self)
+ # insert processors and patterns here
+
+Then, each time ``reset`` is called on the Markdown instance, the ``reset``
+method of each registered extension will be called as well. You should also
+note that ``reset`` will be called on each registered extension after it is
+initialized the first time. Keep that in mind when over-riding the extension's
+``reset`` method.
+
+### Config Settings {: #configsettings }
+
+If an extension uses any parameters that the user may want to change,
+those parameters should be stored in ``self.config`` of your
+``markdown.Extension`` class in the following format:
+
+ self.config = {parameter_1_name : [value1, description1],
+ parameter_2_name : [value2, description2] }
+
+When stored this way the config parameters can be over-ridden from the
+command line or at the time Markdown is initiated:
+
+ markdown.py -x myextension(SOME_PARAM=2) inputfile.txt > output.txt
+
+Note that parameters should always be assumed to be set to string
+values, and should be converted at run time. For example:
+
+ i = int(self.getConfig("SOME_PARAM"))
+
+### makeExtension {: #makeextension }
+
+Each extension should ideally be placed in its own module starting
+with the ``mdx_`` prefix (e.g. ``mdx_footnotes.py``). The module must
+provide a module-level function called ``makeExtension`` that takes
+an optional parameter consisting of a dictionary of configuration over-rides
+and returns an instance of the extension. An example from the footnote
+extension:
+
+ def makeExtension(configs=None) :
+ return FootnoteExtension(configs=configs)
+
+By following the above example, when Markdown is passed the name of your
+extension as a string (i.e.: ``'footnotes'``), it will automatically import
+the module and call the ``makeExtension`` function initiating your extension.
+
+You may have noted that the extensions packaged with Python-Markdown do not
+use the ``mdx_`` prefix in their module names. This is because they are all
+part of the ``markdown.extensions`` package. Markdown will first try to import
+from ``markdown.extensions.extname`` and upon failure, ``mdx_extname``. If both
+fail, Markdown will continue without the extension.
+
+However, Markdown will also accept an already existing instance of an extension.
+For example:
+
+ import markdown
+ import myextension
+ configs = {...}
+ myext = myextension.MyExtension(configs=configs)
+ md = markdown.Markdown(extensions=[myext])
+
+This is useful if you need to implement a large number of extensions with more
+than one residing in a module.
+
+[Preprocessors]: #preprocessors
+[InlinePatterns]: #inlinepatterns
+[Treeprocessors]: #treeprocessors
+[Postprocessors]: #postprocessors
+[BlockParser]: #blockparser
+[Working with the ElementTree]: #working_with_et
+[Integrating your code into Markdown]: #integrating_into_markdown
+[extendMarkdown]: #extendmarkdown
+[OrderedDict]: #ordereddict
+[registerExtension]: #registerextension
+[Config Settings]: #configsettings
+[makeExtension]: #makeextension
+[ElementTree]: http://effbot.org/zone/element-index.htm
+[Available Extensions]: index.html
+[Footnotes]: footnotes.html
+[Definition Lists]: definition_lists.html
--- /dev/null
+title: Attribute List Extension
+prev_title: Abbreviation Extension
+prev_url: abbreviations.html
+next_title: Definition List Extension
+next_url: definition_lists.html
+
+Attribute Lists
+===============
+
+Summary
+-------
+
+An extension to Python-Markdown that adds a syntax to define attributes on
+the various HTML elements in markdown's output.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+The basic syntax was inspired by [Maruku][]'s Attribute List feature.
+
+[Maruku]: http://maruku.rubyforge.org/proposal.html#attribute_lists
+
+### The List ###
+
+An example attribute list might look like this:
+
+ {: #someid .someclass somekey='some values' }
+
+A word which starts with a hash `#` will set the id of an element.
+
+A word which starts with a dot `.` will add to the list of classes assigned to
+an element.
+
+A key/value pair will assign that pair to the element.
+
+Be aware that while the dot syntax will add to a class, using key/value pairs
+will always override the previously defined attribute. Consider the following:
+
+ {: #id1 .class1 id=id2 class="class2 class3" .class4 }
+
+The above example would result in the following attributes being defined:
+
+ id="id2 class="class2 class3 class4"
+
+### Block Level ###
+
+To define attributes for a block level element, the attribute list should
+be defined on the last line of the block by itself.
+
+ This is a paragraph.
+ {: #an_id .a_class }
+
+The above results in the following output:
+
+ <p id="an_id" class="a_class">This is a paragraph.</p>
+
+The one exception is headers, as they are only ever allowed on one line.
+
+ A setext style header {: #setext}
+ =================================
+
+ ### A hash style header ### {: #hash }
+
+The above results in the following output:
+
+ <h1 id="setext">A setext style header</h1>
+ <h3 id="hash">A hash style header</h3>
+
+### Inline ###
+
+To define attributes on inline elements, the attribute list should be defined
+immediately after the inline element with no whitespace.
+
+ [link](http://example.com){: class="foo bar" title="Some title! }
+
+The above results in the following output:
+
+ <p><a href="http://example.com" class="foo bar" title="Some title!">link</a></p>
--- /dev/null
+title: CodeHilite Extension
+prev_title: Smart Strong Extension
+prev_url: smart_strong.html
+next_title: HTML Tidy Extension
+next_url: html_tidy.html
+
+CodeHilite
+==========
+
+Summary
+-------
+
+The CodeHilite Extension adds code/syntax highlighting to standard
+Python-Markdown code blocks using [Pygments][].
+
+[Pygments]: http://pygments.org/
+
+This extension is included in the Markdown library.
+
+Setup
+-----
+
+You will also need to [download][dl] and install the Pygments package on your
+`PYTHONPATH`. You will need to determine the appropriate CSS classes and create
+appropriate rules for them, which are either defined in or linked from the
+header of your HTML templates. See the excellent [documentation][] for more
+details. If no language is defined, Pygments will attempt to guess the
+language. When that fails, the code block will display as un-highlighted code.
+
+[dl]: http://pygments.org/download/
+[documentation]: http://pygments.org/docs
+
+**Note:** The css and/or javascript is not included as part of this extension
+but shall always be provided by the end user.
+
+Syntax
+------
+
+The CodeHilite Extension follows the same [syntax][] as regular Markdown code
+blocks, with one exception. The hiliter needs to know what language to use for
+the code block. There are three ways to tell the hiliter what language the code
+block contains and each one has a different result.
+
+[syntax]: http://daringfireball.net/projects/markdown/syntax#precode
+
+###SheBang (with path)
+
+If the first line of the codeblock contains a shebang, the language is derived
+from that and line numbers are used.
+
+ #!/usr/bin/python
+ # Code goes here ...
+
+Will result in:
+
+ #!/usr/bin/python
+ # Code goes here ...
+
+
+###SheBang (no path)
+
+If the first line contains a shebang, but the shebang line does not contain a
+path (a single `/` or even a space), then that line is removed from the code
+block before processing. Line numbers are used.
+
+ #!python
+ # Code goes here ...
+
+Will result in:
+
+ # Code goes here ...
+
+####Colons
+
+If the first line begins with three or more colons, the text following the
+colons identifies the language. The first line is removed from the code block
+before processing and line numbers are not used.
+
+ :::python
+ # Code goes here ...
+
+Will result in:
+
+ # Code goes here ...
+
+###When No Language is Defined
+
+CodeHilite is completely backward compatible so that if a code block is
+encountered that does not define a language, the block is simple wrapped in
+`<pre>` tags and output. Note: one exception would be that the Pygments
+highlighting engine will try to guess the language. Upon failure, the same
+behavior will happen as described here.
+
+ # Code goes here ...
+
+Will result in:
+
+ # Code goes here ...
+
+Lets see the source for that:
+
+ <div class="codehilite" ><pre><code># Code goes here ...
+ </code></pre></div>
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> html = markdown.markdown(text, ['codehilite'])
+
+If you want every code block to have line numbers, even when using colons
+(`:::`) for language identification, the setting `force_linenos` is available
+to do so.
+
+ >>> html = markdown.markdown(text,
+ ... ['codehilite(force_linenos=True)']
+ ... )
+
+If you want to prevent Pygments from guessing the language, only highlighting
+blocks when you explicitly request it, set the `guess_lang` setting to 'False'.
+
+ >>> html = markdown.markdown(text,
+ ... ['codehilite(guess_lang=False)']
+ ... )
--- /dev/null
+title: Definition List Extension
+prev_title: Attribute List Extension
+prev_url: attr_list.html
+next_title: Fenced Code Block Extension
+next_url: fenced_code_blocks.html
+
+Definition Lists
+================
+
+Summary
+-------
+
+The Definition List Extension adds the ability to create definition list in
+Markdown documents.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+Definition lists are defined using the syntax established in
+[PHP Markdown Extra][php].
+
+[php]: http://www.michelf.com/projects/php-markdown/extra/#def-list
+
+Thus, the following text (taken from the above referenced PHP documentation):
+
+ Apple
+ : Pomaceous fruit of plants of the genus Malus in
+ the family Rosaceae.
+
+ Orange
+ : The fruit of an evergreen tree of the genus Citrus.
+
+will be rendered like so:
+
+ <dl>
+ <dt>Apple</dt>
+ <dd>Pomaceous fruit of plants of the genus Malus in
+ the family Rosaceae.</dd>
+
+ <dt>Orange</dt>
+ <dd>The fruit of an evergreen tree of the genus Citrus.</dd>
+ </dl>
+
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> html = markdown.markdown(text, ['def_list'])
+
+To use with other extensions, just add them to the list, like this:
+
+ >>> html = markdown.markdown(text, ['def_list', 'footnotes'])
+
+The extension can also be called from the command line using Markdown's `-x`
+parameter:
+
+ markdown.py -x def_list source.txt > output.html
+title: Extra Extension
+prev_title: Extensions
+prev_url: index.html
+next_title: Abreviation Extension
+next_url: abbreviations.html
+
Python-Markdown Extra
=====================
The supported extensions include:
-* [[Abbreviations]]
-* [[Definition_Lists]]
-* [[Fenced_Code_Blocks]]
-* [[Footnotes]]
-* [[HeaderId]]
-* [[Tables]]
+* [Abbreviations](abbreviations.html)
+* [Attribute Lists](attr_list.html)
+* [Definition Lists](definition_lists.html)
+* [Fenced Code Blocks](fenced_code_blocks.html)
+* [Footnotes](footnotes.html)
+* [Tables](tables.html)
+* [Smart Strong](smart_strong.html)
-See each individual extension for syntax documentation. Extra and all it's
+See each individual extension for syntax documentation. Extra and all its
supported extensions are included in the standard Markdown library.
Usage
extension. If you would like to be notified of such failures,
you may set Python-Markdown's logger level to "WARN".
-There may be additional extensions that are distributed with
-Python-Markdown that are not included here in Extra. Those extensions
-are not part of PHP Markdown Extra, and therefore, not part of
-Python-Markdown Extra. If you really would like Extra to include
-additional extensions, we suggest creating your own clone of Extra
-under a different name (see [[Writing Extensions]]). You could also
-edit the `extensions` global variable defined in the source, but be
-aware that such changes may be lost when you upgrade to any future
-version of Python-Markdown.
+There may be [additional extensions](index.html) that are distributed with
+Python-Markdown that are not included here in Extra. The features
+of those extensions are not part of PHP Markdown Extra, and
+therefore, not part of Python-Markdown Extra. If you really would
+like Extra to include additional extensions, we suggest creating
+your own clone of Extra under a different name
+(see the [Extension API](api.html)).
--- /dev/null
+title: Fenced Code Block Extension
+prev_title: Definition List Extension
+prev_url: definition_lists.html
+next_title: Footnotes Extension
+next_url: footnotes.html
+
+Fenced Code Blocks
+==================
+
+Summary
+-------
+
+This extension adds a secondary way to define code blocks which overcomes a few
+limitations of the indented code blocks.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+Fenced Code Blocks are defined using the syntax established in
+[PHP Markdown Extra][php].
+
+[php]: http://www.michelf.com/projects/php-markdown/extra/#fenced-code-blocks
+
+Thus, the following text (taken from the above referenced PHP documentation):
+
+ This is a paragraph introducing:
+
+ ~~~~~~~~~~~~~~~~~~~~
+ a one-line code block
+ ~~~~~~~~~~~~~~~~~~~~
+
+Fenced code blocks can have a blank line as the first and/or last line of a
+code block and they can also come immediately after a list item without becoming
+part of the list.
+
+In addition to PHP Extra's syntax, you can define the language of the code
+block for use by syntax highlighters etc. The language will be assigned as a
+class attribute of the ``<code>`` element in the output. Therefore, you should
+define the language as you would a css class - ``.language``. For consistency
+with other markdown syntax, the language can *optionally* be wrapped in curly
+brackets:
+
+ ~~~~{.python}
+ # python code
+ ~~~~
+
+ ~~~~.html
+ <p>HTML Document</p>
+ ~~~~
+
+The above will output:
+
+ <pre><code class="python"># python code
+ </code></pre>
+
+ <pre><code class="html"><p>HTML Document</p>
+ </code></pre>
+
+[Github][]'s tilde (`\``) syntax is also supported:
+
+ ```python
+ # more python code
+ ```
+
+[Github]: http://github.github.com/github-flavored-markdown/
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> html = markdown.markdown(text, ['fenced_code'])
+
+If you would like to have your fenced code blocks highlighted with the
+[CodeHilite][] extension, simply include that extension and the language
+of your fenced code blocks will be passed in and highlighted appropriately.
+
+ >>> html = markdown.markdown(text, ['fenced_code', 'codehilite'])
+
+[CodeHilite]: code_hilite.html
+title: Footnotes Extension
+prev_title: Fenced Code Block Extension
+prev_url: fenced_code_blocks.html
+next_title: Tables Extension
+next_url: tables.html
+
Footnotes
=========
--- /dev/null
+title: HeaderId Extension
+prev_title: HTML Tidy Extension
+prev_url: html_tidy.html
+next_title: Meta-Data Extension
+next_url: meta_data.html
+
+HeaderId
+========
+
+Summary
+-------
+
+An extension to Python-Markdown that automatically generates 'id' attributes
+for HTML header elements (h1-h6) in markdown's output.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+By default, all headers will automatically have unique "id" attributes
+generated based upon the text of the header (See below to turn this off).
+Note this example in which all three headers would have the same "id":
+
+ #Header
+ #Header
+ #Header
+
+Results in:
+
+ <h1 id="header">Header</h1>
+ <h1 id="header_1">Header</h1>
+ <h1 id="header_2">Header</h1>
+
+Configuring the Output
+----------------------
+
+The HeaderId extension has four configuration settings:
+
+* **level**: Base level for headers.
+
+ Default: `1`
+
+ The `level` setting allows you to automatically adjust the header levels to
+ fit within the hierarchy of your html templates. For example, suppose the
+ markdown text for a page should not contain any headers higher than level 3
+ (`<h3>`). The following will accomplish that:
+
+ >>> text = '''
+ ... #Some Header
+ ... ## Next Level'''
+ >>> html = markdown.markdown(text, extensions=['headerid(level=3)'])
+ >>> print html
+ <h3 id="some_header">Some Header</h3>
+ <h4 id="next_level">Next Level</h4>'
+
+* **forceid**: Force all headers to have an id.
+
+ Default: `True`
+
+ The `forceid` setting turns on or off the automatically generated ids for
+ headers that do not have one explicitly defined (using the attr_list
+ extension).
+
+ >>> text = '''
+ ... # Some Header
+ ... # Header with ID # { #foo }'''
+ >>> html = markdown.markdown(text,
+ extensions=['attr_list', 'headerid(forceid=False)'])
+ >>> print html
+ <h1>Some Header</h1>
+ <h1 id="foo">Header with ID</h1>
+
+* **separator**: Word separator. Character which replaces whitespace in id.
+
+ Default: `-`
+
+* **slugify**: Callable to generate anchors.
+
+ Default: `markdown.extensions.headerid.slugify`
+
+ If you would like to use a different algorithm to define the ids, you can
+ pass in a callable which takes two arguments:
+
+ * `value`: The string to slugify.
+ * `separator`: The Word Separator.
+
+Using with Meta-Data
+--------------------
+
+The HeaderId Extension also supports the [Meta-Data](meta_data.html) Extension.
+Please see the documentation for that extension for specifics. The supported
+meta-data keywords are:
+
+* `header_level`
+* `header_forceid`
+
+When used, the meta-data will override the settings provided through the
+`extension_configs` interface.
+
+This document:
+
+ header_level: 2
+ header_forceid: Off
+
+ # A Header
+
+
+Will result in the following output:
+
+ <h2>A Header</h2>
--- /dev/null
+title: HTML Tidy Extension
+prev_title: CodeHilite Extension
+prev_url: code_hilite.html
+next_title: HeaderId Extension
+next_url: header_id.html
+
+HTML Tidy
+=========
+
+Runs [HTML Tidy][] on the output of Python-Markdown using the [uTidylib][]
+Python wrapper. Both libtidy and uTidylib must be installed on your system.
+
+This extension is available in the standard Markdown library since version 2.0.
+
+[HTML Tidy]: http://tidy.sourceforge.net/
+[uTidylib]: http://utidylib.berlios.de/
+
+Note than any Tidy [options][] can be passed in as [extension configs][]. So,
+for example, to output HTML rather than XHTML, set ``output_xhtml=0``. To
+indent the output, set ``indent=auto`` and to have Tidy wrap the output in
+``<html>`` and ``<body>`` tags, set ``show_body_only=0``. See Tidy's
+[options][] for a full list of the available options. The defaults are set to
+most closely match Markdowns defaults with the exception that you get much
+better pretty-printing.
+
+[options]: http://tidy.sourceforge.net/docs/quickref.html
+[extension configs]: ../reference.html#extension_configs
+
+Note that options set in this extension will override most any other settings
+passed on to Markdown (such as "output_format"). Unlike Markdown, this extension
+will also treat raw HTML no different than that output by Markdown. In other
+words, it may munge a document authors carefully crafted HTML. Of course, it
+may also transform poorly formed raw HTML into nice, valid HTML. Take these
+things into consideration when electing to use this extension.
-Available Extensions
-====================
-
-Officially Supported Extensions
--------------------------------
+title: Extensions
+prev_title: Command Line
+prev_url: ../cli.html
+next_title: Extra Extension
+next_url: extra.html
-These extensions are included with (at least) the most recent release and are
-officially supported by the Python-Markdown developers. Any documentation is
-maintained here and all bug reports should be made to the project. If you
-have a typical install of Python-Markdown, these extensions are already
-available to you.
-* [[Extra]]
- * [[Abbreviations]]
- * [[Definition_Lists]]
- * [[Fenced_Code_Blocks]]
- * [[Footnotes]]
- * [[HeaderId]]
- * [[Tables]]
-* [[CodeHilite]]
-* [[HTML_Tidy]]
-* [[ImageLinks]]
-* [[Meta-Data]]
-* [[RSS]]
-* [[Table_of_Contents]]
-* [[WikiLinks]]
+Available Extensions
+====================
-Unofficially Supported Extensions
----------------------------------
+Python Markdown offers a flexible extension mechanism, which makes it possible
+to change and/or extend the behavior of the parser without having to edit the
+actual source files.
-These extensions have not yet been included in any official Python-Markdown
-release. However, the code is maintained in the projects
-[mainline git repository](http://gitorious.org/projects/python-markdown/repos/mainline)
-by the Python-Markdown developers and the official documentation is maintained
-here. All bug reports should be made to the project. It is anticipated that
-these extensions will be included with some future official release, at which
-time they will be moved to the above list of official extensions.
+To use an extension, pass it's name to markdown with the `extensions` keyword.
+See the [Library Reference](../reference.html#extensions) for more details.
-* [[Legacy]]
+ markdown.markdown(some_text, extensions=['extra', 'nl2br'])
+From the command line, specify an extension with the `-x` option. See the
+[Command Line docs](../cli.html) or use the `--help` option for more details.
+ python -m markdown -x extra input.txt > output.html
+Officially Supported Extensions
+-------------------------------
+The extensions listed below are included with (at least) the most recent release
+and are officially supported by Python-Markdown. Any documentation is
+maintained here and all bug reports should be made to the project. If you
+have a typical install of Python-Markdown, these extensions are already
+available to you.
+* [Extra](extra.html)
+ * [Abbreviations](abbreviations.html)
+ * [Attribute Lists](attr_list.html)
+ * [Definition Lists](definition_lists.html)
+ * [Fenced Code Blocks](fenced_code_blocks.html)
+ * [Footnotes](footnotes.html)
+ * [Tables](tables.html)
+ * [Smart Strong](smart_strong.html)
+* [CodeHilite](code_hilite.html)
+* [HTML Tidy](html_tidy.html)
+* [HeaderId](header_id.html)
+* [Meta-Data](meta_data.html)
+* [New Line to Break](nl2br.html)
+* [RSS](rss.html)
+* [Sane Lists](sane_lists.html)
+* [Table of Contents](toc.html)
+* [WikiLinks](wikilinks.html)
+
+Third Party Extensions
+----------------------
+
+Various individuals and/or organizations have developed extensions which they
+have made available to the public. A [list of third party
+extensions](https://github.com/waylan/Python-Markdown/wiki/Third-Party-Extensions)
+is maintained on the wiki for your convenience. The Python-Markdown team
+offers no official support for these extensions. Please see the developer of
+each extension for support.
+
+If you would like to write your own extensions, see the
+[Extensions API](api.html) for details.
--- /dev/null
+title: Meta-Data Extension
+prev_title: HeaderId Extension
+prev_url: header_id.html
+next_title: New Line to Break Extension
+next_url: nl2br.html
+
+Meta-Data
+=========
+
+Summary
+-------
+
+An extension to Python-Markdown that adds a syntax for defining meta-data about
+a document. The Meta-Data extension is inspired by and follows the syntax of
+[MultiMarkdown][]. Currently, this extension does not use the meta-data in any
+way, but simply provides it as a `Meta` attribute of a markdown instance for
+use by other extensions or directly by your python code.
+
+[MultiMarkdown]: http://fletcherpenney.net/MultiMarkdown_Syntax_Guide#metadata
+
+This extension has been a part of the Markdown library since 2.0.
+
+Syntax
+------
+
+Meta-data consists of a series of keywords and values defined at the beginning
+of a markdown document like this:
+
+ Title: My Document
+ Summary: A brief description of my document.
+ Authors: Waylan Limberg
+ John Doe
+ Date: October 2, 2007
+ blank-value:
+ base_url: http://example.com
+
+ This is the first paragraph of the document.
+
+The keywords are case-insensitive and may consist of letters, numbers,
+underscores and dashes and must end with a colon. The values consist of
+anything following the colon on the line and may even be blank. If a line is
+indented 4 or more spaces, that line is assumed to be an additional line of the
+value for the previous keyword. A keyword may have as many lines as desired.
+The first blank line ends all meta-data for the document. Therefore, the first
+line of a document must not be blank. All meta-data is stripped from the
+document prior to any further processing by markdown.
+
+Accessing the Meta-Data
+-----------------------
+
+The meta-data is made available as a python Dict in the `Meta` attribute of an
+instance of the Markdown class. For example, using the above document:
+
+ >>> md = markdown.Markdown(extensions = ['meta'])
+ >>> html = md.convert(text)
+ >>> # Meta-data has been stripped from output
+ >>> print html
+ <p>This is the first paragraph of the document.</p>
+
+ >>> # View meta-data
+ >>> print md.Meta
+ {
+ 'title' : ['My Document'],
+ 'summary' : ['A brief description of my document.'],
+ 'authors' : ['Waylan Limberg', 'John Doe'],
+ 'date' : ['October 2, 2007'],
+ 'blank-value' : [''],
+ 'base_url' : ['http://example.com']
+ }
+
+Note that the keys are all lowercase and the values consist of a list of
+strings where each item is one line for that key. This way, one could preserve
+line breaks if desired. Or the items could be joined where appropriate. No
+assumptions are made regarding the data. It is simply passed as found to the
+`Meta` attribute.
+
+Perhaps the meta-data could be passed into a template system, or used by
+various markdown extensions. The possibilities are left to the imagination of
+the developer.
+
+Compatible Extensions
+---------------------
+
+The following are extensions currently known to work with the Meta-Data
+Extension and the keywords they are known to support:
+
+* [HeaderId](header_id.html)
+ * `header_level`
+ * `header_forceid`
+* [WikiLinks](wikilinks.html)
+ * `wiki_base_url`
+ * `wiki_end_url`
+ * `wiki_html_class`
+
--- /dev/null
+title: New Line to Break Extension
+prev_title: Meta-Data Extension
+prev_url: meta_data.html
+next_title: RSS Extension
+next_url: rss.html
+
+NL2BR Extension
+===============
+
+A Python-Markdown extension to treat newlines as hard breaks; like
+StackOverflow and [GitHub][] flavored Markdown do.
+
+Usage:
+
+ >>> import markdown
+ >>> text = """
+ ... Line 1
+ ... Line 2
+ ... """
+ >>> html = markdown.markdown(text, extensions=['nl2br'])
+ >>> print html
+ <p>Line 1<br />
+ Line 2</p>
+
+[Github]: http://github.github.com/github-flavored-markdown/
--- /dev/null
+title: RSS Extension
+prev_title: New Line to Break Extension
+prev_url: nl2br.html
+next_title: Sane Lists Extension
+next_url: sane_lists.html
+
+RSS
+===
+
+Summary
+-------
+
+An extension to Python-Markdown that outputs a markdown document as RSS. This
+extension has been included with Python-Markdown since 1.7 and should be
+available to anyone who has a typical install of Python-Markdown.
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> import markdown
+ >>> text = "Some markdown document."
+ >>> rss = markdown.markdown(text, ['rss'])
+
+Configuring the Output
+----------------------
+
+An RSS document includes some data about the document (URI, author, title) that
+will likely need to be configured for your needs. Therefore, three configuration
+options are available:
+
+* **URL** : The Main URL for the document.
+* **CREATOR** : The Feed creator's name.
+* **TITLE** : The title for the feed.
+
+An example:
+
+ >>> rss = markdown.markdown(text, extensions = \
+ ... ['rss(URL=http://example.com,CREATOR=JOHN DOE,TITLE=My Document)']
+ ... )
--- /dev/null
+title: Sane Lists Extension
+prev_title: RSS Extension
+prev_url: rss.html
+next_title: Table of Contents Extension
+next_url: toc.html
+
+Sane Lists
+==========
+
+Summary
+-------
+
+The Sane Lists Extension alters the behavior of the Markdown List syntax
+to be less surprising.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+Sane Lists do not allow the mixing of list types. In other words, an ordered
+list will not continue when an unordered list item is encountered and
+vice versa. For example:
+
+ 1. Ordered item 1
+ 2. Ordered item 2
+
+ * Unordered item 1
+ * Unordered item 2
+
+will result in the following output:
+
+ <ol>
+ <li>Ordered item 1</li>
+ <li>Ordered item 2</li>
+ </ol>
+
+ <ul>
+ <li>Unordered item 1</li>
+ <li>Unordered item 2</li>
+ </ul>
+
+Whereas the default Markdown behavior would be to generate an unordered list.
+
+Note that, unlike the default Markdown behavior, if a blank line is not
+included between list items, the different list type is ignored completely.
+This corresponds to the behavior of paragraphs. For example:
+
+ A Paragraph.
+ * Not a list item.
+
+ 1. Ordered list item.
+ * Not a separate list item.
+
+With this extension the above will result in the following output:
+
+ <p>A Paragraph.
+ * Not a list item.</p>
+
+ <ol>
+ <li>Ordered list item.
+ * Not a separate list item.</li>
+ </ol>
+
+In all other ways, Sane Lists should behave as normal Markdown lists.
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> html = markdown.markdown(text, ['sane_lists'])
+
+To use with other extensions, just add them to the list, like this:
+
+ >>> html = markdown.markdown(text, ['def_list', 'sane_lists'])
+
+The extension can also be called from the command line using Markdown's `-x`
+parameter:
+
+ python -m markdown -x sane_lists source.txt > output.html
--- /dev/null
+title: Smart Strong Extension
+prev_title: Tables Extension
+prev_url: tables.html
+next_title: CodeHilite Extension
+next_url: code_hilite.html
+
+Smart_Strong
+============
+
+Summary
+-------
+
+The Markdown Smart_Strong Extension adds smarter handling of double underscores
+within words. This does for double underscores what
+[smart_emphasis](../reference.html#smart_emphasis) does for single underscores.
+
+The Smart_Strong Extension is included in the standard Markdown library.
+
+Usage
+-----
+
+ >>> import markdown
+ >>> markdown.markdown('Text with double__underscore__words.', \
+ extensions=['smart_strong'])
+ u'<p>Text with double__underscore__words.</p>'
+ >>> markdown.markdown('__Strong__ still works.', \
+ extensions=['smart_strong'])
+ u'<p><strong>Strong</strong> still works.</p>'
+ >>> markdown.markdown('__this__works__too__.', \
+ extensions=['smart_strong'])
+ u'<p><strong>this__works__too</strong>.</p>'
+
+This extension is also included with the [Extra](extra.html) Extension. You may
+call that extension to get this behavior with all the other features of 'Extra'.
+
+ >>> markdown.markdown(text, extensions=['extra'])
+
--- /dev/null
+title: Table Extension
+prev_title: Footnotes Extension
+prev_url: footnotes.html
+next_title: Smart Strong Extension
+next_url: smart_strong.html
+
+Tables
+======
+
+Summary
+-------
+
+The Table Extension adds the ability to create tables in Markdown documents.
+
+This extension is included in the standard Markdown library.
+
+Syntax
+------
+
+Tables are defined using the syntax established in [PHP Markdown Extra][php].
+
+[php]: http://www.michelf.com/projects/php-markdown/extra/#table
+
+Thus, the following text (taken from the above referenced PHP documentation):
+
+ First Header | Second Header
+ ------------- | -------------
+ Content Cell | Content Cell
+ Content Cell | Content Cell
+
+will be rendered as:
+
+ <table>
+ <thead>
+ <tr>
+ <th>First Header</th>
+ <th>Second Header</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Content Cell</td>
+ <td>Content Cell</td>
+ </tr>
+ <tr>
+ <td>Content Cell</td>
+ <td>Content Cell</td>
+ </tr>
+ </tbody>
+ </table>
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> html = markdown.markdown(text, ['tables'])
+
--- /dev/null
+title: Table of Contents Extension
+prev_title: Sane Lists Extension
+prev_url: sane_lists.html
+next_title: Wikilinks Extension
+next_url: wikilinks.html
+
+Table of Contents
+=================
+
+Summary
+-------
+
+Adds a Table of Contents to a Markdown document.
+
+This extension is included with the Markdown library since version 2.0.
+
+Syntax
+------
+
+Place a marker in the document where you would like the table of contents to
+appear. Then, a nested list of all the headers in the document will replace the
+marker. The marker defaults to ``[TOC]`` so the following document:
+
+ [TOC]
+
+ # Header 1
+
+ ## Header 2
+
+would generate the following output:
+
+ <div class="toc">
+ <ul>
+ <li><a href="#header-1">Header 1</a></li>
+ <ul>
+ <li><a href="#header-2">Header 2</a></li>
+ </ul>
+ </ul>
+ </div>
+ <h1 id="header-1">Header 1</h1>
+ <h1 id="header-2">Header 2</h1>
+
+Configuration Options
+---------------------
+
+The following options are provided to configure the output:
+
+* **marker**: Text to find and replace with the Table of Contents. Defaults
+ to ``[TOC]``.
+* **slugify**: Callable to generate anchors based on header text. Defaults to a
+ built in ``slugify`` method. The callable must accept one argument which
+ contains the text content of the header and return a string which will be
+ used as the anchor text.
+* **title**: Title to insert in TOC ``<div>``. Defaults to ``None``.
+* **anchorlink**: Set to ``True`` to have the headers link to themselves.
+ Default is ``False``.
--- /dev/null
+title: Wikilinks Extension
+prev_title: Table of Contents Extension
+prev_url: toc.html
+next_title: Extension API
+next_url: api.html
+
+WikiLinks
+=========
+
+Summary
+-------
+
+An extension to Python-Markdown that adds [WikiLinks][]. Specifically, any
+``[[bracketed]]`` word is converted to a link.
+
+[WikiLinks]: http://en.wikipedia.org/wiki/Wikilink
+
+This extension has been included in the Markdown library since 2.0.
+
+Syntax
+------
+
+A ``[[bracketed]]`` word is any combination of upper or lower case letters,
+number, dashes, underscores and spaces surrounded by double brackets. Therefore
+
+ [[Bracketed]]
+
+Would produce the following html:
+
+ <a href="/Bracketed/" class="wikilink">Bracketed</a>
+
+Note that wikilinks are automatically assigned `class="wikilink"` making it
+easy to style wikilinks differently from other links on a page if one so
+desires. See below for ways to alter the class.
+
+You should also note that when a space is used, the space is converted to an
+underscore in the link but left as-is in the label. Perhaps an example
+would illustrate this best:
+
+ [[Wiki Link]]
+
+Becomes
+
+ <a href="/Wiki_Link/" class="wikilink">Wiki Link</a>
+
+Usage
+-----
+
+From the Python interpreter:
+
+ >>> text = "Some text with a [[WikiLink]]."
+ >>> html = markdown.markdown(text, ['wikilink'])
+
+The default behavior is to point each link to the document root of the current
+domain and close with a trailing slash. Additionally, each link is assigned to
+the html class `wikilink`. This may not always be desirable. Therefore, one can
+customize that behavior within Python code. Three settings are provided to
+change the default behavior:
+
+1. **base_url**: String to append to beginning of URL.
+
+ Default: `'/'`
+
+2. **end_url**: String to append to end of URL.
+
+ Default: `'/'`
+
+3. **html_class**: CSS hook. Leave blank for none.
+
+ Default: `'wikilink'`
+
+4. **build_url**: Callable which formats the URL from it's parts.
+
+For an example, let us suppose links should always point to the subdirectory
+`/wiki/` and end with `.html`
+
+ >>> html = markdown.markdown(text,
+ ... ['wikilink(base_url=/wiki/,end_url=.html)']
+ ... )
+
+The above would result in the following link for `[[WikiLink]]`.
+
+ <a href="/wiki/WikiLink.html" class="wikilink">WikiLink</a>
+
+If you want to do more that just alter the base and/or end of the URL, you
+could also pass in a callable which must accept three arguments (``label``,
+``base``, and ``end``). The callable must return the URL in it's entirety.
+
+ def my_url_builder(label, base, end):
+ # do stuff
+ return url
+
+ md = markdown.Markdown(
+ extensions=['wikilinks],
+ extension_configs={'wikilinks' : [('build_url', my_url_builder)]}
+ )
+
+
+The option is also provided to change or remove the class attribute.
+
+ >>> html = markdown.markdown(text,
+ ... ['wikilink(base_url=myclass)']
+ ... )
+
+Would cause all wikilinks to be assigned to the class `myclass`.
+
+ <a href="/WikiLink/" class="myclass">WikiLink</a>
+
+The same options can be used on the command line as well:
+
+ python markdown.py -x wikilink(base_url=http://example.com/,end_url=.html,html_class=foo) src.txt
+
+Some may prefer the more complex format when calling the `Markdown` class directly:
+
+ >>> md = markdown.Markdown(
+ ... extensions = ['wikilink'],
+ ... extension_configs = {'wikilink': [
+ ... ('base_url', 'http://example.com/'),
+ ... ('end_url', '.html'),
+ ... ('html_class', '') ]},
+ ... safe_mode = True
+ ... )
+ >>> html = md.convert(text)
+
+Using with Meta-Data
+--------------------
+
+The WikiLink Extension also supports the [Meta-Data](meta_data.html) Extension.
+Please see the documentation for that extension for specifics. The supported
+meta-data keywords are:
+
+* `wiki_base_url`
+* `wiki_end_url`
+* `wiki_html_class`
+
+When used, the meta-data will override the settings provided through the
+`extension_configs` interface.
+
+This document:
+
+ wiki_base_url: http://example.com/
+ wiki_end_url: .html
+ wiki_html_class:
+
+ A [[WikiLink]] in the first paragraph.
+
+would result in the following output (notice the blank `wiki_html_class`):
+
+ <p>A <a href="http://example.com/WikiLink.html">WikiLink</a> in the first paragraph.</p>
+
--- /dev/null
+next_url: install.html
+next_title: Installation
+prev_title: Table of Contents
+prev_url: siteindex.html
+
+Python-Markdown
+===============
+
+This is a Python implementation of John Gruber's
+[Markdown](http://daringfireball.net/projects/markdown/).
+It is almost completely compliant with the reference implementation,
+though there are a few very minor differences. See John's
+[Syntax Documentation](http://daringfireball.net/projects/markdown/syntax)
+for the syntax rules.
+
+See the [installation instructions](install.html) to get started.
+
+Features
+--------
+
+In addition to the basic markdown syntax, Python-Markdown supports the following
+features:
+
+* __International Input__
+
+ Python-Markdown will accept [input](reference.html#text) in any language
+ supported by Unicode including bi-directional text. In fact the test suite
+ includes documents written in Russian and Arabic.
+
+* __Middle-Word Emphasis__
+
+ Python-Markdown defaults to ignoring middle-word emphasis. In other words,
+ `some_long_filename.txt` will not become `some<em>long</em>filename.txt`.
+ This can be switched off if desired. See the
+ [Library Reference](reference.html#smart_emphasis) for details.
+
+* __Extensions__
+
+ Various [extensions](extensions/index.html) are provided (including
+ [extra](extensions/extra.html)) to expand the base syntax. Additionally,
+ a public [Extension API](extensions/api.html) is available to write
+ your own extensions.
+
+* __Output Formats__
+
+ Python-Markdown can output documents in HTML4, XHTML and HTML5. See the
+ [Library Reference](reference.html#output_format) for details.
+
+* __"Safe Mode"__
+
+ When using Python-Markdown to parse input from untrusted users on the web,
+ the handling of raw HTML can be controlled in various ways to prevent
+ harmful code from being injected into your site. See the
+ [Library Reference](reference.html#safe_mode) for details.
+
+* __Command Line Interface__
+
+ In addition to being a Python Library, a
+ [command line script](cli.html) is available for your convenience.
+
+Support
+-------
+
+You may ask for help and discuss various other issues on the [mailing list][]
+and report bugs on the [bug tracker][].
+
+[mailing list]: http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss
+[bug tracker]: http://github.com/waylan/Python-Markdown/issues
--- /dev/null
+title: Installation
+prev_title: Summary
+prev_url: index.html
+next_title: Library Reference
+next_url: reference.html
+
+Installing Python-Markdown
+==========================
+
+The Easy Way
+------------
+
+The easiest way to install Python-Markdown is simply to type one of the
+following commands from the command line as an Admin/Root user:
+
+ pip install markdown
+
+or
+
+ easy_install markdown
+
+That's it! Your ready to [use](reference.html) Python-Markdown. Enjoy!
+
+Installing on Windows {: #windows }
+-----------------------------------
+
+Download the Windows installer (.exe) from
+[PyPI](http://pypi.python.org/pypi/Markdown)
+
+Double-click the file and follow the instructions.
+
+If you prefer to manually install Python-Markdown in Windows, download the
+Zip file, unzip it, and on the command line in the directory you unzipped to,
+run the following command:
+
+ C://path/to/python.exe setup.py install
+
+If you plan to use the provided command line script, you need to make sure your
+script directory is on your system path. On a typical Python install of Windows
+the Scripts directory is `C:\PythonXX\Scripts\` (were "XX" is the Python version
+number, i.e., "27"). Adjust the path according to your system and add to your
+system path.
+
+Installing on *nix Systems {: #linux }
+--------------------------------------
+
+From the command line do the following (where 2.x is the version number):
+
+ wget http://pypi.python.org/packages/source/M/Markdown/Markdown-2.x.tar.gz
+ tar xvzf Markdown-2.x.tar.gz
+ cd markdown-2.x/
+ sudo python setup.py install
+
+See [PyPI](http://pypi.python.org/pypi/Markdown) for all available versions.
+
+Using the Git Repository {: #git }
+----------------------------------
+
+If you're the type that likes to live on the edge, you may want to keep up with
+the latest additions and bug fixes in the repository between releases.
+Python-Markdown is maintained in a Git repository on github.com. To
+get a copy of Python-Markdown from the repository do the following from the
+command line:
+
+ git clone git://github.com/waylan/Python-Markdown.git python-markdown
+ cd python-markdown
+ python setup.py install
+
+Dependencies
+------------
+
+Python-Markdown requires the ElementTree module to be installed. In Python 2.5+
+ElementTree is included as part of the standard library at
+`xml.etree.ElementTree` and/or `xml.etree.cElementTree`. For earlier versions
+of Python, the library needs to be installed. However, Python-Markdown's
+install script will automaticaly detect the missing library and download and
+install the "ElementTree" library for you if your system has internet access.
+If you would like to use the "cElementTree" library (which is faster), you can
+install it manually. Markdown will check for the faster "c" library first and
+fall back to the slower python implementation when it is not available.
+
+See <http://effbot.org/zone/element-index.htm> for more information or to
+download the latest version of ElementTree.
--- /dev/null
+title: Library Reference
+prev_title: Installation
+prev_url: install.html
+next_title: Command Line
+next_url: cli.html
+
+
+Using Markdown as a Python Library
+==================================
+
+First and foremost, Python-Markdown is intended to be a python library module
+used by various projects to convert Markdown syntax into HTML.
+
+The Basics
+----------
+
+To use markdown as a module:
+
+ import markdown
+ html = markdown.markdown(your_text_string)
+
+The Details
+-----------
+
+Python-Markdown provides two public functions ([`markdown.markdown`](#markdown)
+and [`markdown.markdownFromFile`](#markdownFromFile)) both of which wrap the
+public class [`markdown.Markdown`](#Markdown). If you're processing one
+document at a time, the functions will serve your needs. However, if you need
+to process multiple documents, it may be advantageous to create a single
+instance of the `markdown.Markdown` class and pass multiple documents through
+it.
+
+### `markdown.markdown (text [, **kwargs])` {: #markdown }
+
+The following options are available on the `markdown.markdown` function:
+
+* __`text`__{: #text } (required): The source text string.
+
+ Note that Python-Markdown expects **Unicode** as input (although
+ a simple ASCII string may work) and returns output as Unicode.
+ Do not pass encoded strings to it! If your input is encoded, (e.g. as
+ UTF-8), it is your responsibility to decode it. For example:
+
+ input_file = codecs.open("some_file.txt", mode="r", encoding="utf-8")
+ text = input_file.read()
+ html = markdown.markdown(text)
+
+ If you want to write the output to disk, you must encode it yourself:
+
+ output_file = codecs.open("some_file.html", "w",
+ encoding="utf-8",
+ errors="xmlcharrefreplace"
+ )
+ output_file.write(html)
+
+* __`extensions`__{: #extensions }: A list of extensions.
+
+ Python-Markdown provides an API for third parties to write extensions to
+ the parser adding their own additions or changes to the syntax. A few
+ commonly used extensions are shipped with the markdown library. See
+ the [extension documentation](extensions/index.html) for a list of
+ available extensions.
+
+ The list of extensions may contain instances of extensions or stings of
+ extension names. If an extension name is provided as a string, the
+ extension must be importable as a python module either within the
+ `markdown.extensions` package or on your PYTHONPATH with a name starting
+ with `mdx_`, followed by the name of the extension. Thus,
+ `extensions=['extra']` will first look for the module
+ `markdown.extensions.extra`, then a module named `mdx_extra`.
+
+* __`extension_configs`__{: #extension_configs }: A dictionary of
+ configuration settings for extensions.
+
+ The dictionary must be of the following format:
+
+ extension_configs = {'extension_name_1':
+ [
+ ('option_1', 'value_1'),
+ ('option_2', 'value_2')
+ ],
+ 'extension_name_2':
+ [
+ ('option_1', 'value_1')
+ ]
+ }
+ See the documentation specific to the extension you are using for help in
+ specifying configuration settings for that extension.
+
+* __`output_format`__{: #output_format }: Format of output.
+
+ Supported formats are:
+
+ * `"xhtml1"`: Outputs XHTML 1.x. **Default**.
+ * `"xhtml5"`: Outputs XHTML style tags of HTML 5
+ * `"xhtml"`: Outputs latest supported version of XHTML (currently XHTML 1.1).
+ * `"html4"`: Outputs HTML 4
+ * `"html5"`: Outputs HTML style tags of HTML 5
+ * `"html"`: Outputs latest supported version of HTML (currently HTML 4).
+
+ Note that it is suggested that the more specific formats ("xhtml1",
+ "html5", & "html4") be used as "xhtml" or "html" may change in the future
+ if it makes sense at that time. The values can either be lowercase or
+ uppercase.
+
+* __`safe_mode`__{: #safe_mode }: Disallow raw html.
+
+ If you are using Markdown on a web system which will transform text
+ provided by untrusted users, you may want to use the "safe_mode"
+ option which ensures that the user's HTML tags are either replaced,
+ removed or escaped. (They can still create links using Markdown syntax.)
+
+ The following values are accepted:
+
+ * `False` (Default): Raw HTML is passed through unaltered.
+
+ * `replace`: Replace all HTML blocks with the text assigned to
+ `html_replacement_text` To maintain backward compatibility, setting
+ `safe_mode=True` will have the same effect as `safe_mode='replace'`.
+
+ To replace raw HTML with something other than the default, do:
+
+ md = markdown.Markdown(safe_mode='replace',
+ html_replacement_text='--RAW HTML NOT ALLOWED--')
+
+ * `remove`: All raw HTML will be completely stripped from the text with
+ no warning to the author.
+
+ * `escape`: All raw HTML will be escaped and included in the document.
+
+ For example, the following source:
+
+ Foo <b>bar</b>.
+
+ Will result in the following HTML:
+
+ <p>Foo <b>bar</b>.</p>
+
+ Note that "safe_mode" also alters the default value for the
+ [`enable_attributes`](#enable_attributes) option.
+
+* __`html_replacement_text`__{: #html_replacement_text }: Text used when
+ safe_mode is set to `replace`. Defaults to `[HTML_REMOVED]`.
+
+* __`tab_length`__{: #tab_length }: Length of tabs in the source. Default: 4
+
+* __`enable_attributes`__{: #enable_attributes}: Enable the conversion of
+ attributes. Defaults to `True`, unless [`safe_mode`](#safe_mode) is enabled,
+ in which case the default is `False`.
+
+ Note that `safe_mode` only overrides the default. If `enable_attributes`
+ is explicitly set, the explicit value is used regardless of `safe_mode`.
+ However, this could potentially allow an untrusted user to inject
+ JavaScript into your documents.
+
+* __`smart_emphasis`__{: #smart_emphasis }: Treat `_connected_words_`
+ intelligently Default: True
+
+* __`lazy_ol`__{: #lazy_ol }: Ignore number of first item of ordered lists.
+ Default: True
+
+ Given the following list:
+
+ 4. Apples
+ 5. Oranges
+ 6. Pears
+
+ By default markdown will ignore the fact the the first line started
+ with item number "4" and the HTML list will start with a number "1".
+ If `lazy_ol` is set to `True`, then markdown will output the following
+ HTML:
+
+ <ol>
+ <li start="4">Apples</li>
+ <li>Oranges</li>
+ <li>Pears</li>
+ </ol>
+
+
+### `markdown.markdownFromFile (**kwargs)` {: #markdownFromFile }
+
+With a few exceptions, `markdown.markdownFromFile` accepts the same options as
+`markdown.markdown`. It does **not** accept a `text` (or Unicode) string.
+Instead, it accepts the following required options:
+
+* __`input`__{: #input } (required): The source text file.
+
+ `input` may be set to one of three options:
+
+ * a string which contains a path to a readable file on the file system,
+ * a readable file-like object,
+ * or `None` (default) which will read from `stdin`.
+
+* __`output`__{: #output }: The target which output is written to.
+
+ `output` may be set to one of three options:
+
+ * a string which contains a path to a writable file on the file system,
+ * a writable file-like object,
+ * or `None` (default) which will write to `stdout`.
+
+* __`encoding`__{: #encoding }: The encoding of the source text file. Defaults
+ to "utf-8". The same encoding will always be used for input and output.
+ The 'xmlcharrefreplace' error handler is used when encoding the output.
+
+ **Note:** This is the only place that decoding and encoding of unicode
+ takes place in Python-Markdown. If this rather naive solution does not
+ meet your specific needs, it is suggested that you write your own code
+ to handle your encoding/decoding needs.
+
+### `markdown.Markdown ([**kwargs])` {: #Markdown }
+
+The same options are available when initializing the `markdown.Markdown` class
+as on the [`markdown.markdown`](#markdown) function, except that the class does
+**not** accept a source text string on initialization. Rather, the source text
+string must be passed to one of two instance methods:
+
+* `Markdown.convert(source)`{: #convert }
+
+ The `source` text must meet the same requirements as the [`text`](#text)
+ argument of the [`markdown.markdown`](#markdown) function.
+
+ You should also use this method if you want to process multiple strings
+ without creating a new instance of the class for each string.
+
+ md = markdown.Markdown()
+ html1 = md.convert(text1)
+ html2 = md.convert(text2)
+
+ Note that depending on which options and/or extensions are being used,
+ the parser may need its state reset between each call to `convert`.
+
+ html1 = md.convert(text1)
+ md.reset()
+ html2 = md.convert(text2)
+
+ You can also change calls to `reset` togeather:
+
+ html3 = md.reset().convert(text3)
+
+* `Markdown.convertFile(**kwargs)`{: #convertFile }
+
+ The arguments of this method are identical to the arguments of the same
+ name on the `markdown.markdownFromFile` function ([`input`](#input),
+ [`output`](#output), and [`encoding`](#encoding)). As with the
+ [`convert`](#convert) method, this method should be used to
+ process multiple files without creating a new instance of the class for
+ each document. State may need to be `reset` between each call to
+ `convertFile` as is the case with `convert`.
+title: Release Notes for v2.0.1
+prev_title: Release Notes for v2.0.2
+prev_url: release-2.0.2.html
+next_title: Release Notes for v2.0
+next_url: release-2.0.html
+
Python-Markdown 2.0.1 Release Notes
===================================
+title: Release Notes for v2.0.2
+prev_title: Release Notes for v2.1.0
+prev_url: release-2.1.0.html
+next_title: Release Notes for v2.0.1
+next_url: release-2.0.1.html
+
Python-Markdown 2.0.2 Release Notes
===================================
+title: Release Notes for v2.0
+prev_title: Release Notes for v2.0.1
+prev_url: release-2.0.1.html
+next_title: Authors
+next_url: authors.html
+
Python-Markdown 2.0 Release Notes
=================================
However, you may want to ensure that any third party extensions you are using
are compatible with the new API.
-The new extension API is fully documented in [[writing_extensions]]. Below is a
-summary of the significant changes:
+The new extension API is fully [documented](extensions/api.html) in the docs.
+Below is a summary of the significant changes:
* The old home-grown NanoDOM has been replaced with ElementTree. Therefore all
extensions must use ElementTree rather than the old NanoDOM.
makes it possible to include multiple extensions in a single module.
Numerous extensions are included in the distribution by default. See
-[[available_extensions]] for a complete list.
+[available_extensions](extensions/index.html) for a complete list.
-See the [[change_log]] for a full list of changes.
+See the [Change Log](change_log.html) for a full list of changes.
--- /dev/null
+title: Release Notes for v2.1.0
+prev_title: Release Notes for v2.1.1
+prev_url: release-2.1.1.html
+next_title: Release Notes for v2.0.2
+next_url: release-2.0.2.html
+
+Python-Markdown 2.1.0 Release Notes
+===================================
+
+We are pleased to release Python-Markdown 2.1 which makes many
+improvements on 2.0. In fact, we consider 2.1 to be what 2.0 should have been.
+While 2.1 consists mostly of bug fixes, bringing Python-Markdown more inline
+with other implementations, some internal improvements were made to the parser,
+a few new builtin extensions were added, and HTML5 support was added.
+
+Python-Markdown supports Python versions 2.4, 2.5, 2.6, 2.7, 3.1, and 3.2 out
+of the box. In fact, the same codebase installs on Python 3.1 and 3.2 with no
+extra work by the end user.
+
+Backwards-incompatible Changes
+------------------------------
+
+While Python-Markdown has received only minor internal changes since the last
+release, there are a few backward-incompatible changes to note:
+
+* Support had been dropped for Python 2.3. No guarantees are made that the
+library will work in any version of Python lower than 2.4. Additionally, while
+the library had been tested with Python 2.4, consider Python 2.4 support to be
+depreciated. It is not likely that any future versions will continue to support
+any version of Python less than 2.5. Note that Python 3.0 is not supported due
+to a bug in its 2to3 tool. If you must use Python-Markdown with Python 3.0, it
+is suggested you manually use Python 3.1's 2to3 tool to do a conversion.
+
+* Python-Markdown previously accepted positional arguments on its class and
+wrapper methods. It now expects keyword arguments. Currently, the positional
+arguments should continue to work, but the solution feels hacky and may be
+removed in a future version. All users are encouraged to use keyword arguments
+as documented in the [Library Reference](reference.html).
+
+* Past versions of Python-Markdown provided module level Global variables which
+controlled the behavior of a few different aspects of the parser. Those global
+variables have been replaced with attributes on the Markdown class.
+Additionally, those attributes are settable as keyword arguments when
+initializing a class instance. Therefore, if you were editing the global
+variables (either by editing the source or by overriding them in your code),
+you should now set them on the class. See the
+[Library Reference](reference.html) for the options available.
+
+* If you have been using the [HeaderID](extensions/header_id.html) extension
+to define custom ids on headers, you will want to switch to using the new
+[Attribute List](extensions/attr_list.html) extension. The HeaderId extension
+now only auto-generates ids on headers which have not already had ids defined.
+Note that the [Extra](extensions/extra.html) extension has been switched to use
+Attribute Lists instead of HeaderId as it did previously.
+
+* Some code was moved into the `markdown.util` namespace which was previously
+in the `markdown` namespace. Extension authors may need to adjust a few
+import statements in their extensions to work with the changes.
+
+* The commandline script name was changed to `markdown_py`. The previous name
+(`markdown`) was conflicting with people (and Linux package systems) who also
+had markdown.pl installed on there system as markdown.pl's commandline script
+was also named `markdown`. Be aware that installing Python-Markdown 2.1
+will not remove the old versions of the script with different names. You
+may want to remove them yourself as they are unlikely to work properly.
+
+What's New in Python-Markdown 2.1
+---------------------------------
+
+Three new extensions were added. [Attribute Lists](extensions/attr_list.html),
+which was inspired by Maruku's feature of the same name,
+[Newline to Break](extensions/nl2br.html), which was inspired by Github
+Flavored Markdown, and [Smart Strong](extensions/smart_strong.html), which
+fills a hole in the Extra extension.
+
+HTML5 is now supported. All this really means is that new block level elements
+introduced in the HTML5 spec are now properly recognized as raw HTML. As
+valid HTML5 can consist of either HTML4 or XHTML1, there is no need to add a
+new HTML5 searializers. That said, `html5` and `xhtml5` have been added as
+aliases of the `html4` and `xhtml1` searializers respectively.
+
+An XHTML searializer has been added. Previously, ElementTree's XML searializer
+was being used for XHTML output. With the new searliazer we are able to avoid
+more invalid output like empty elements (i.e., `<p />`) which can choke
+browsers.
+
+Improved support for Python 3.x. Now when running `setupy.py install` in
+Python 3.1 or greater the 2to3 tool is run automatically. Note that Python 3.0
+is not supported due to a bug in its 2to3 tool. If you must use Python-Markdown
+with Python 3.0, it is suggested you manually use Python 3.1's 2to3 tool to
+do a conversion.
+
+Methods on instances of the Markdown class that do not return results can now
+be changed allowing one to do `md.reset().convert(moretext)`.
+
+The Markdown class was refactored so that a subclass could define it's own
+`build_parser` method which would build a completely different parser. In
+other words, one could use the basic machinery in the markdown library to
+build a parser of a different markup language without the overhead of building
+the markdown parser and throwing it away.
+
+Import statements within markdown have been improved so that third party
+libraries can embed the markdown library if they desire (licencing permitting).
+
+Added support for Python's `-m` command line option. You can run the markdown
+package as a command line script. Do `python -m markdown [options] [args]`.
+Note that this is only fully supported in Python 2.7+. Python 2.5 & 2.6
+require you to call the module directly (`markdown.__main__`) rather than
+the package (`markdown`). This does not work in Python 2.4.
+
+The commandline script has been renamed to `markdown_py` which avoids all the
+various problems we had with previous names. Also improved the commandline
+script to accept input on stdin.
+
+The testing framework has been completely rebuilt using the Nose testing
+framework. This provides a number of benefits including the ability to better
+test the builtin extensions and other options available to change the parsing
+behavior. See the [Test Suite](test_suite.html) documentation for details.
+
+Various bug fixes have been made, which are too numerous to list here. See the
+[commit log](https://github.com/waylan/Python-Markdown/commits/master) for a
+complete history of the changes.
--- /dev/null
+title: Release Notes for v2.1.1
+prev_title: Release Notes for v2.2.0
+prev_url: release-2.2.0.html
+next_title: Release Notes for v2.1.0
+next_url: release-2.1.0.html
+
+Python-Markdown 2.1.1 Release Notes
+===================================
+
+Python-Markdown 2.1.1 is a bug-fix release. No new features have been added.
+Most notably, a bug which caused raw HTML paring to run __very__ slowly has
+been fixed along with a few bugs which caused the parser to raise exceptions
+while parsing. For a full list of changes, see the git log.
--- /dev/null
+title: Release Notes for v2.2.0\r
+prev_title: Change Log\r
+prev_url: change_log.html\r
+next_title: Release Notes for v2.1.1\r
+next_url: release-2.1.1.html\r
+\r
+Python-Markdown 2.2.0 Release Notes\r
+===================================\r
+\r
+We are pleased to release Python-Markdown 2.2 which makes improvements on 2.1. \r
+While 2.2 is primarily a bug fix release, some internal improvements were made \r
+to the parser, and a few security issues were resolved.\r
+\r
+Python-Markdown supports Python versions 2.5, 2.6, 2.7, 3.1, and 3.2 out \r
+of the box. \r
+\r
+Backwards-incompatible Changes\r
+------------------------------\r
+\r
+While Python-Markdown has received only minor internal changes since the last\r
+release, there are a few backward-incompatible changes to note:\r
+\r
+* Support had been dropped for Python 2.4. No guarantees are made that the \r
+library will work in any version of Python lower than 2.5. Additionally, while \r
+the library had been tested with Python 2.5, consider Python 2.5 support to be \r
+depreciated. It is not likely that any future versions will continue to support\r
+any version of Python less than 2.6.\r
+\r
+* For many years Python-Markdown has identified `<ins>` and `<del>` tags in \r
+raw HTML input as block level tags. As they are actually inline level tags,\r
+this behavior has been changed. This may result in slightly different output.\r
+While in most cases, the new output is more correct, there may be a few edge\r
+cases where a document author has relied on the previous incorrect behavior.\r
+It is likely that a few adjustments may need to be made to those documents.\r
+\r
+* The behavior of the `enable_attributes` keyword has been slightly altered.\r
+If authors have been using attributes in documents with `safe_mode` on, those \r
+attributes will no longer be parsed unless `enable_attributes` is explicitly\r
+set to `True`. This change was made to prevent untrusted authors from injecting\r
+potentially harmful JavaScript in documents. This change had no effect when \r
+not in `safe_mode`.\r
+\r
+What's New in Python-Markdown 2.1\r
+---------------------------------\r
+\r
+The docs were refactored and can now be found at \r
+<http://packages.python.org/Markdown/>. The docs are now maintained in the\r
+Repo and are generated by the `setup.py build_docs` command.\r
+\r
+The [Sane_Lists](http://packages.python.org/Markdown/extensions/sane_lists.html)\r
+extension was added. The Sane Lists Extension alters the behavior of the \r
+Markdown List syntax to be less surprising by not allowing the mixing of list\r
+types. In other words, an ordered list will not continue when an unordered list\r
+item is encountered and vice versa.\r
+\r
+Markdown now excepts a full path to an extension module. In other words, your\r
+extensions no longer need to be in the primary namespace (and start with `mdx_`)\r
+for Markdown to find them. Just do `Markdown(extension=['path.to.some.module'])`.\r
+As long as the provided module contains a compatible extension, the extension\r
+will be loaded.\r
+\r
+The BlockParser API was slightly altered to allow `blockprocessor.run` to return\r
+`True` or `False` which provides more control to the block proccessor loop from \r
+within any Blockprocessor instance.\r
+\r
+Various bug fixes have been made. See the \r
+[commit log](https://github.com/waylan/Python-Markdown/commits/master) \r
+for a complete history of the changes.\r
--- /dev/null
+title: Table of Contents
+prev_title: Authors
+prev_url: authors.html
+next_title: Summary
+next_url: index.html
+
+Table of Contents
+=================
+
+* [Python Markdown](index.html)
+ * [Features](index.html#features)
+ * [Support](index.html#support)
+* [Installation](install.html)
+ * [The Easy Way](install.html#the-easy-way)
+ * [Installing on Windows](install.html#windows)
+ * [Installing on *nix Systems](install.html#linux)
+ * [Using the Git Repository](install.html#git)
+ * [Dependencies](install.html#dependencies)
+* [Library Reference](reference.html)
+ * [The Basics](reference.html#the-basics)
+ * [The Details](reference.html#the-details)
+ * [markdown.markdown](reference.html#markdown)
+ * [markdown.markdownFromFile](reference.html#markdownFromFile)
+ * [markdown.Markdown](reference.html#Markdown)
+* [Command Line](cli.html)
+ * [Setup](cli.html#setup)
+ * [Usage](cli.html#usage)
+ * [Using Extensions](cli.html#using-extensions)
+* [Extensions](extensions/index.html)
+ * [Officially Supported Extensions](extensions/index.html#officially-supported-extensions)
+ * [Extra](extensions/extra.html)
+ * [Abbreviations](extensions/abbreviations.html)
+ * [Attribute Lists](extensions/attr_list.html)
+ * [Definition Lists](extensions/definition_lists.html)
+ * [Fenced Code Blocks](extensions/fenced_code_blocks.html)
+ * [Footnotes](extensions/footnotes.html)
+ * [Tables](extensions/tables.html)
+ * [Smart Strong](extensions/smart_strong.html)
+ * [CodeHilite](extensions/code_hilite.html)
+ * [HTML Tidy](extensions/html_tidy.html)
+ * [HeaderId](extensions/header_id.html)
+ * [Meta-Data](extensions/meta_data.html)
+ * [New Line to Break](extensions/nl2br.html)
+ * [RSS](extensions/rss.html)
+ * [Sane Lists](extensions/sane_lists.html)
+ * [Table of Contents](extensions/toc.html)
+ * [WikiLinks](extensions/wikilinks.html)
+ * [Third Party Extensions](extensions/index.html#third-party-extensions)
+ * [Extension API](extensions/api.html)
+ * [Preprocessors](extensions/api.html#preprocessors)
+ * [InlinePatterns](extensions/api.html#inlinepatterns)
+ * [Treeprocessors](extensions/api.html#treeprocessors)
+ * [Postprocessors](extensions/api.html#postprocessors)
+ * [BlockParser](extensions/api.html#blockparser)
+ * [Working with the ElementTree](extensions/api.html#working_with_et)
+ * [Integrating your code into Markdown](extensions/api.html#integrating_into_markdown)
+ * [extendMarkdown](extensions/api.html#extendmarkdown)
+ * [OrderedDict](extensions/api.html#ordereddict)
+ * [registerExtension](extensions/api.html#registerextension)
+ * [Config Settings](extensions/api.html#configsettings)
+ * [makeExtension](extensions/api.html#makeextension)
+* [Test Suite](test_suite.html)
+ * [Markdown Syntax Test](test_suite.html#markdown-syntax-tests)
+ * [Syntax Test Config Settings](test_suite.html#syntax-test-config-settings)
+ * [Unit Tests](test_suite.html#unit-tests)
+ * [Doc Tests](test_suite.html#doc-tests)
+* [Change Log](change_log.html)
+ * [Release Notes for v.2.2.1](release-2.1.1.html)
+ * [Release Notes for v.2.2.0](release-2.1.0.html)
+ * [Release Notes for v.2.0.2](release-2.0.2.html)
+ * [Release Notes for v.2.0.1](release-2.0.1.html)
+ * [Release Notes for v.2.0](release-2.0.html)
+* [Authors](authors.html)
--- /dev/null
+title: Test Suite
+prev_title: Extension API
+prev_url: extensions/api.html
+next_title: Change Log
+next_url: change_log.html
+
+# Test Suite
+
+Python-Markdown comes with a test suite which uses the [Nose][] testing
+framework.The test suite primarily serves to ensure that new bugs are not
+introduced as existing bugs are patched or new features are added. It also
+allows Python-Markdown to be tested with the tests from other implementations
+such as John Gruber's [Perl][] implementation or Michel Fortin's [PHP][]
+implementation.
+
+The test suite can be run by calling the `run_tests.py` command at the root of
+the distribution tarball or by calling the `nosetests` command directly. Either
+way, Nose will need to be installed on your system first (run `easy_install
+nose`). Any standard nosetests config options can be passed in on the command
+line (i.e.: verbosity level or use of a plugin like coverage).
+
+Additionally, a nicely formatted HTML report of all output is written to a
+temporary file in `tmp/test-output.html`. Open the file in a browser to view
+the report.
+
+The test suite contains three kinds of tests: Markdown Syntax Tests, Unit
+Tests, and Doc Tests.
+
+# Markdown Syntax Tests
+
+The Syntax Tests are in the various directories contained within the 'tests'
+directory of the packaged tarball. Each test consists of a matching pair of txt
+and html files. The txt file contains a snippet of Markdown source text
+formated for a specific syntax feature and the html file contains the expected
+HTML output of that snippet. When the test suite is run, each txt file is run
+through Markdown and the output is compared with the html file as a separate
+Unit Test.
+
+In fact, this is the primary reason for using Nose, it gives us an easy way to
+treat each of these tests as a separate unit test which is reported on
+separately. Additionally, with the help of a couple custom Nose plugins which
+are included with the Markdown Test Suite, we are able to get back an easy to
+read diff of the actual output compared to expected output when a test fails.
+
+Here is some sample output with a test that is failing because of some
+insignificant white space differences:
+
+ $ ./run-tests.py
+ ..........................................................M...........
+ ............................SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
+ SSSSSSSSSS.................S..........................................
+ .........
+ ======================================================================
+ MarkdownSyntaxError: TestSyntax: "misc/lists3"
+ ----------------------------------------------------------------------
+ MarkdownSyntaxError: Output from "/home/waylan/code/python-markdown/te
+ sts/misc/lists3.txt" failed to match expected output.
+
+ --- /home/waylan/code/python-markdown/tests/misc/lists3.html
+ +++ actual_output.html
+ @@ -1,5 +1,5 @@
+ <ul>
+ <li>blah blah blah
+ -sdf asdf asdf asdf asdf
+ -asda asdf asdfasd</li>
+ + sdf asdf asdf asdf asdf
+ + asda asdf asdfasd</li>
+ </ul>
+
+ ----------------------------------------------------------------------
+ Ran 219 tests in 7.698s
+
+ FAILED (MarkdownSyntaxError=1, SKIP=53)
+
+Note that 219 tests were run, one of which failed with a `MarkdownSyntaxError`.
+Only Markdown Syntax Tests should fail with a `MarkdownSyntaxError`. Nose then
+formats the error reports for `MarkdownSyntaxError`s so that they only include
+useful information. Namely the txt file which failed and a unified diff showing
+the failure. Without the plugin, you would also get a useless traceback showing
+how the code stepped through the test framework, but nothing about how Markdown
+actually ran.
+
+If, on the other hand, a Syntax Test failed because some other exception gets
+raised by either Markdown or the test suite, then that would be reported as per
+a normal unit test failure with the appropriate traceback for debugging
+purposes.
+
+### Syntax Test Config Settings
+
+The other thing to note about the above example is that 53 tests were skipped.
+Those tests have been explicitly configured to be skipped as they are primarily
+tests from either PHP or Perl which are known to fail for various reasons. In
+fact, a number of different configuration settings can be set for any specific
+test.
+
+Each Syntax Test directory contains a `test.cfg` file in the ini format. The
+file may contain a separate section for each txt file named exactly as the file
+is named minus the file extension (i.e.; the section for a test in `foo.txt`
+would be `[foo]`). All settings are optional. Default settings for the entire
+directory can be set under the `[DEFAULT]` section (must be all caps). Any
+settings under a specific file section will override anything in the
+`[DEFAULT]` section for that specific test only.
+
+Below are each of the config options available and the defaults used when they
+are not explicitly set.
+
+* `normalize`: Switches whitespace normalization of the test output on or off.
+ Defaults to `0` (off). Note: This requires that [uTidylib] be installed on
+ the system. Otherwise the test will be skipped, regardless of any other
+ settings.
+* `skip`: Switches skipping of the test on and off. Defaults to `0` (off).
+* `input_ext`: Extension of input file. Defaults to `.txt`. Useful for tests
+ from other implementations.
+* `output_ext`: Extension of output file. Defaults to `.html`. Useful for tests
+ from other implementations.
+* Any keyword arguement accepted my Markdown. If not set, Markdown's defaults
+ are used.
+
+## Unit Tests
+
+All Unit Tests shipped with Python-Markdown are standard Python Unit Tests and
+are currently all contained in `tests/test_apis.py`. Standard discovery methods
+are used to find and run the tests. Therefor, when writing new tests, those
+standards and naming conventions should be followed.
+
+## Doc Tests
+
+Some Python-Markdown extensions also include standard Python doctests, which
+are discovered and run in the standard manner; one Unit Test for each file.
+
+
+[Nose]: http://somethingaboutorange.com/mrl/projects/nose/
+[Perl]: http://daringfireball.net/projects/markdown/
+[PHP]: http://michelf.com/projects/php-markdown/
+[uTidylib]: http://utidylib.berlios.de/
+++ /dev/null
-Using Markdown as Python Library
-================================
-
-First and foremost, Python-Markdown is intended to be a python library module
-used by various projects to convert Markdown syntax into HTML.
-
-The Basics
-----------
-
-To use markdown as a module:
-
- import markdown
- html = markdown.markdown(your_text_string)
-
-Encoded Text
-------------
-
-Note that ``markdown()`` expects **Unicode** as input (although a simple ASCII
-string should work) and returns output as Unicode. Do not pass encoded strings to it!
-If your input is encoded, e.g. as UTF-8, it is your responsibility to decode
-it. E.g.:
-
- input_file = codecs.open("some_file.txt", mode="r", encoding="utf-8")
- text = input_file.read()
- html = markdown.markdown(text, extensions)
-
-If you later want to write it to disk, you should encode it yourself:
-
- output_file = codecs.open("some_file.html", "w", encoding="utf-8")
- output_file.write(html)
-
-More Options
-------------
-
-If you want to pass more options, you can create an instance of the ``Markdown``
-class yourself and then use ``convert()`` to generate HTML:
-
- import markdown
- md = markdown.Markdown(
- extensions=['footnotes'],
- extension_configs= {'footnotes' : ('PLACE_MARKER','~~~~~~~~')},
- safe_mode=True,
- output_format='html4'
- )
- return md.convert(some_text)
-
-You should also use this method if you want to process multiple strings:
-
- md = markdown.Markdown()
- html1 = md.convert(text1)
- html2 = md.convert(text2)
-
-Working with Files
-------------------
-
-While the Markdown class is only intended to work with Unicode text, some
-encoding/decoding is required for the command line features. These functions
-and methods are only intended to fit the common use case.
-
-The ``Markdown`` class has the method ``convertFile`` which reads in a file and
-writes out to a file-like-object:
-
- md = markdown.Markdown()
- md.convertFile(input="in.txt", output="out.html", encoding="utf-8")
-
-The markdown module also includes a shortcut function ``markdownFromFile`` that
-wraps the above method.
-
- markdown.markdownFromFile(input="in.txt",
- output="out.html",
- extensions=[],
- encoding="utf-8",
- safe=False)
-
-In either case, if the ``output`` keyword is passed a file name (i.e.:
-``output="out.html"``), it will try to write to a file by that name. If
-``output`` is passed a file-like-object (i.e. ``output=StringIO.StringIO()``),
-it will attempt to write out to that object. Finally, if ``output`` is
-set to ``None``, it will write to ``stdout``.
-
-Using Extensions
-----------------
-
-One of the parameters that you can pass is a list of Extensions. Extensions
-must be available as python modules either within the ``markdown.extensions``
-package or on your PYTHONPATH with names starting with `mdx_`, followed by the
-name of the extension. Thus, ``extensions=['footnotes']`` will first look for
-the module ``markdown.extensions.footnotes``, then a module named
-``mdx_footnotes``. See the documentation specific to the extension you are
-using for help in specifying configuration settings for that extension.
-
-Note that some extensions may need their state reset between each call to
-``convert``:
-
- html1 = md.convert(text1)
- md.reset()
- html2 = md.convert(text2)
-
-Safe Mode
----------
-
-If you are using Markdown on a web system which will transform text provided
-by untrusted users, you may want to use the "safe_mode" option which ensures
-that the user's HTML tags are either replaced, removed or escaped. (They can
-still create links using Markdown syntax.)
-
-* To replace HTML, set ``safe_mode="replace"`` (``safe_mode=True`` still works
- for backward compatibility with older versions). The HTML will be replaced
- with the text defined in ``markdown.HTML_REMOVED_TEXT`` which defaults to
- ``[HTML_REMOVED]``. To replace the HTML with something else:
-
- markdown.HTML_REMOVED_TEXT = "--RAW HTML IS NOT ALLOWED--"
- md = markdown.Markdown(safe_mode="replace")
-
- **Note**: You could edit the value of ``HTML_REMOVED_TEXT`` directly in
- markdown/__init__.py but you will need to remember to do so every time you
- upgrade to a newer version of Markdown. Therefore, this is not recommended.
-
-* To remove HTML, set ``safe_mode="remove"``. Any raw HTML will be completely
- stripped from the text with no warning to the author.
-
-* To escape HTML, set ``safe_mode="escape"``. The HTML will be escaped and
- included in the document.
-
-Output Formats
---------------
-
-If Markdown is outputing (X)HTML as part of a web page, most likely you will
-want the output to match the (X)HTML version used by the rest of your page/site.
-Currently, Markdown offers two output formats out of the box; "HTML4" and
-"XHTML1" (the default) . Markdown will also accept the formats "HTML" and
-"XHTML" which currently map to "HTML4" and "XHTML" respectively. However,
-you should use the more explicit keys as the general keys may change in the
-future if it makes sense at that time. The keys can either be lowercase or
-uppercase.
-
-To set the output format do:
-
- html = markdown.markdown(text, output_format='html4')
-
-Or, when using the Markdown class:
-
- md = markdown.Markdown(output_format='html4')
- html = md.convert(text)
-
-Note that the output format is only set once for the class and cannot be
-specified each time ``convert()`` is called. If you really must change the
-output format for the class, you can use the ``set_output_format`` method:
-
- md.set_output_format('xhtml1')
+++ /dev/null
-Writing Extensions for Python-Markdown
-======================================
-
-Overview
---------
-
-Python-Markdown includes an API for extension writers to plug their own
-custom functionality and/or syntax into the parser. There are preprocessors
-which allow you to alter the source before it is passed to the parser,
-inline patterns which allow you to add, remove or override the syntax of
-any inline elements, and postprocessors which allow munging of the
-output of the parser before it is returned. If you really want to dive in,
-there are also blockprocessors which are part of the core BlockParser.
-
-As the parser builds an [ElementTree][] object which is later rendered
-as Unicode text, there are also some helpers provided to ease manipulation of
-the tree. Each part of the API is discussed in its respective section below.
-Additionaly, reading the source of some [[Available Extensions]] may be helpful.
-For example, the [[Footnotes]] extension uses most of the features documented
-here.
-
-* [Preprocessors][]
-* [InlinePatterns][]
-* [Treeprocessors][]
-* [Postprocessors][]
-* [BlockParser][]
-* [Working with the ElementTree][]
-* [Integrating your code into Markdown][]
- * [extendMarkdown][]
- * [OrderedDict][]
- * [registerExtension][]
- * [Config Settings][]
- * [makeExtension][]
-
-<h3 id="preprocessors">Preprocessors</h3>
-
-Preprocessors munge the source text before it is passed into the Markdown
-core. This is an excellent place to clean up bad syntax, extract things the
-parser may otherwise choke on and perhaps even store it for later retrieval.
-
-Preprocessors should inherit from ``markdown.preprocessors.Preprocessor`` and
-implement a ``run`` method with one argument ``lines``. The ``run`` method of
-each Preprocessor will be passed the entire source text as a list of Unicode
-strings. Each string will contain one line of text. The ``run`` method should
-return either that list, or an altered list of Unicode strings.
-
-A pseudo example:
-
- class MyPreprocessor(markdown.preprocessors.Preprocessor):
- def run(self, lines):
- new_lines = []
- for line in lines:
- m = MYREGEX.match(line)
- if m:
- # do stuff
- else:
- new_lines.append(line)
- return new_lines
-
-<h3 id="inlinepatterns">Inline Patterns</h3>
-
-Inline Patterns implement the inline HTML element syntax for Markdown such as
-``*emphasis*`` or ``[links](http://example.com)``. Pattern objects should be
-instances of classes that inherit from ``markdown.inlinepatterns.Pattern`` or
-one of its children. Each pattern object uses a single regular expression and
-must have the following methods:
-
-* **``getCompiledRegExp()``**:
-
- Returns a compiled regular expression.
-
-* **``handleMatch(m)``**:
-
- Accepts a match object and returns an ElementTree element of a plain
- Unicode string.
-
-Note that any regular expression returned by ``getCompiledRegExp`` must capture
-the whole block. Therefore, they should all start with ``r'^(.*?)'`` and end
-with ``r'(.*?)!'``. When using the default ``getCompiledRegExp()`` method
-provided in the ``Pattern`` you can pass in a regular expression without that
-and ``getCompiledRegExp`` will wrap your expression for you. This means that
-the first group of your match will be ``m.group(2)`` as ``m.group(1)`` will
-match everything before the pattern.
-
-For an example, consider this simplified emphasis pattern:
-
- class EmphasisPattern(markdown.inlinepatterns.Pattern):
- def handleMatch(self, m):
- el = markdown.etree.Element('em')
- el.text = m.group(3)
- return el
-
-As discussed in [Integrating Your Code Into Markdown][], an instance of this
-class will need to be provided to Markdown. That instance would be created
-like so:
-
- # an oversimplified regex
- MYPATTERN = r'\*([^*]+)\*'
- # pass in pattern and create instance
- emphasis = EmphasisPattern(MYPATTERN)
-
-Actually it would not be necessary to create that pattern (and not just because
-a more sophisticated emphasis pattern already exists in Markdown). The fact is,
-that example pattern is not very DRY. A pattern for `**strong**` text would
-be almost identical, with the exception that it would create a 'strong' element.
-Therefore, Markdown provides a number of generic pattern classes that can
-provide some common functionality. For example, both emphasis and strong are
-implemented with separate instances of the ``SimpleTagPettern`` listed below.
-Feel free to use or extend any of these Pattern classes.
-
-**Generic Pattern Classes**
-
-* **``SimpleTextPattern(pattern)``**:
-
- Returns simple text of ``group(2)`` of a ``pattern``.
-
-* **``SimpleTagPattern(pattern, tag)``**:
-
- Returns an element of type "`tag`" with a text attribute of ``group(3)``
- of a ``pattern``. ``tag`` should be a string of a HTML element (i.e.: 'em').
-
-* **``SubstituteTagPattern(pattern, tag)``**:
-
- Returns an element of type "`tag`" with no children or text (i.e.: 'br').
-
-There may be other Pattern classes in the Markdown source that you could extend
-or use as well. Read through the source and see if there is anything you can
-use. You might even get a few ideas for different approaches to your specific
-situation.
-
-<h3 id="treeprocessors">Treeprocessors</h3>
-
-Treeprocessors manipulate an ElemenTree object after it has passed through the
-core BlockParser. This is where additional manipulation of the tree takes
-place. Additionally, the InlineProcessor is a Treeprocessor which steps through
-the tree and runs the InlinePatterns on the text of each Element in the tree.
-
-A Treeprocessor should inherit from ``markdown.treeprocessors.Treeprocessor``,
-over-ride the ``run`` method which takes one argument ``root`` (an Elementree
-object) and returns either that root element or a modified root element.
-
-A pseudo example:
-
- class MyTreeprocessor(markdown.treeprocessors.Treeprocessor):
- def run(self, root):
- #do stuff
- return my_modified_root
-
-For specifics on manipulating the ElementTree, see
-[Working with the ElementTree][] below.
-
-<h3 id="postprocessors">Postprocessors</h3>
-
-Postprocessors manipulate the document after the ElementTree has been
-serialized into a string. Postprocessors should be used to work with the
-text just before output.
-
-A Postprocessor should inherit from ``markdown.postprocessors.Postprocessor``
-and over-ride the ``run`` method which takes one argument ``text`` and returns
-a Unicode string.
-
-Postprocessors are run after the ElementTree has been serialized back into
-Unicode text. For example, this may be an appropriate place to add a table of
-contents to a document:
-
- class TocPostprocessor(markdown.postprocessors.Postprocessor):
- def run(self, text):
- return MYMARKERRE.sub(MyToc, text)
-
-<h3 id="blockparser">BlockParser</h3>
-
-Sometimes, pre/tree/postprocessors and Inline Patterns aren't going to do what
-you need. Perhaps you want a new type of block type that needs to be integrated
-into the core parsing. In such a situation, you can add/change/remove
-functionality of the core ``BlockParser``. The BlockParser is composed of a
-number of Blockproccessors. The BlockParser steps through each block of text
-(split by blank lines) and passes each block to the appropriate Blockprocessor.
-That Blockprocessor parses the block and adds it to the ElementTree. The
-[[Definition Lists]] extension would be a good example of an extension that
-adds/modifies Blockprocessors.
-
-A Blockprocessor should inherit from ``markdown.blockprocessors.BlockProcessor``
-and implement both the ``test`` and ``run`` methods.
-
-The ``test`` method is used by BlockParser to identify the type of block.
-Therefore the ``test`` method must return a boolean value. If the test returns
-``True``, then the BlockParser will call that Blockprocessor's ``run`` method.
-If it returns ``False``, the BlockParser will move on to the next
-BlockProcessor.
-
-The **``test``** method takes two arguments:
-
-* **``parent``**: The parent etree Element of the block. This can be useful as
- the block may need to be treated differently if it is inside a list, for
- example.
-
-* **``block``**: A string of the current block of text. The test may be a
- simple string method (such as ``block.startswith(some_text)``) or a complex
- regular expression.
-
-The **``run``** method takes two arguments:
-
-* **``parent``**: A pointer to the parent etree Element of the block. The run
- method will most likely attach additional nodes to this parent. Note that
- nothing is returned by the method. The Elementree object is altered in place.
-
-* **``blocks``**: A list of all remaining blocks of the document. Your run
- method must remove (pop) the first block from the list (which it altered in
- place - not returned) and parse that block. You may find that a block of text
- legitimately contains multiple block types. Therefore, after processing the
- first type, your processor can insert the remaining text into the beginning
- of the ``blocks`` list for future parsing.
-
-Please be aware that a single block can span multiple text blocks. For example,
-The official Markdown syntax rules state that a blank line does not end a
-Code Block. If the next block of text is also indented, then it is part of
-the previous block. Therefore, the BlockParser was specifically designed to
-address these types of situations. If you notice the ``CodeBlockProcessor``,
-in the core, you will note that it checks the last child of the ``parent``.
-If the last child is a code block (``<pre><code>...</code></pre>``), then it
-appends that block to the previous code block rather than creating a new
-code block.
-
-Each BlockProcessor has the following utility methods available:
-
-* **``lastChild(parent)``**:
-
- Returns the last child of the given etree Element or ``None`` if it had no
- children.
-
-* **``detab(text)``**:
-
- Removes one level of indent (four spaces by default) from the front of each
- line of the given text string.
-
-* **``looseDetab(text, level)``**:
-
- Removes "level" levels of indent (defaults to 1) from the front of each line
- of the given text string. However, this methods allows secondary lines to
- not be indented as does some parts of the Markdown syntax.
-
-Each BlockProcessor also has a pointer to the containing BlockParser instance at
-``self.parser``, which can be used to check or alter the state of the parser.
-The BlockParser tracks it's state in a stack at ``parser.state``. The state
-stack is an instance of the ``State`` class.
-
-**``State``** is a subclass of ``list`` and has the additional methods:
-
-* **``set(state)``**:
-
- Set a new state to string ``state``. The new state is appended to the end
- of the stack.
-
-* **``reset()``**:
-
- Step back one step in the stack. The last state at the end is removed from
- the stack.
-
-* **``isstate(state)``**:
-
- Test that the top (current) level of the stack is of the given string
- ``state``.
-
-Note that to ensure that the state stack doesn't become corrupted, each time a
-state is set for a block, that state *must* be reset when the parser finishes
-parsing that block.
-
-An instance of the **``BlockParser``** is found at ``Markdown.parser``.
-``BlockParser`` has the following methods:
-
-* **``parseDocument(lines)``**:
-
- Given a list of lines, an ElementTree object is returned. This should be
- passed an entire document and is the only method the ``Markdown`` class
- calls directly.
-
-* **``parseChunk(parent, text)``**:
-
- Parses a chunk of markdown text composed of multiple blocks and attaches
- those blocks to the ``parent`` Element. The ``parent`` is altered in place
- and nothing is returned. Extensions would most likely use this method for
- block parsing.
-
-* **``parseBlocks(parent, blocks)``**:
-
- Parses a list of blocks of text and attaches those blocks to the ``parent``
- Element. The ``parent`` is altered in place and nothing is returned. This
- method will generally only be used internally to recursively parse nested
- blocks of text.
-
-While is is not recommended, an extension could subclass or completely replace
-the ``BlockParser``. The new class would have to provide the same public API.
-However, be aware that other extensions may expect the core parser provided
-and will not work with such a drastically different parser.
-
-<h3 id="working_with_et">Working with the ElementTree</h3>
-
-As mentioned, the Markdown parser converts a source document to an
-[ElementTree][] object before serializing that back to Unicode text.
-Markdown has provided some helpers to ease that manipulation within the context
-of the Markdown module.
-
-First, to get access to the ElementTree module import ElementTree from
-``markdown`` rather than importing it directly. This will ensure you are using
-the same version of ElementTree as markdown. The module is named ``etree``
-within Markdown.
-
- from markdown import etree
-
-``markdown.etree`` tries to import ElementTree from any known location, first
-as a standard library module (from ``xml.etree`` in Python 2.5), then as a third
-party package (``Elementree``). In each instance, ``cElementTree`` is tried
-first, then ``ElementTree`` if the faster C implementation is not available on
-your system.
-
-Sometimes you may want text inserted into an element to be parsed by
-[InlinePatterns][]. In such a situation, simply insert the text as you normally
-would and the text will be automatically run through the InlinePatterns.
-However, if you do *not* want some text to be parsed by InlinePatterns,
-then insert the text as an ``AtomicString``.
-
- some_element.text = markdown.AtomicString(some_text)
-
-Here's a basic example which creates an HTML table (note that the contents of
-the second cell (``td2``) will be run through InlinePatterns latter):
-
- table = etree.Element("table")
- table.set("cellpadding", "2") # Set cellpadding to 2
- tr = etree.SubElement(table, "tr") # Add child tr to table
- td1 = etree.SubElement(tr, "td") # Add child td1 to tr
- td1.text = markdown.AtomicString("Cell content") # Add plain text content
- td2 = etree.SubElement(tr, "td") # Add second td to tr
- td2.text = "*text* with **inline** formatting." # Add markup text
- table.tail = "Text after table" # Add text after table
-
-You can also manipulate an existing tree. Consider the following example which
-adds a ``class`` attribute to ``<a>`` elements:
-
- def set_link_class(self, element):
- for child in element:
- if child.tag == "a":
- child.set("class", "myclass") #set the class attribute
- set_link_class(child) # run recursively on children
-
-For more information about working with ElementTree see the ElementTree
-[Documentation](http://effbot.org/zone/element-index.htm)
-([Python Docs](http://docs.python.org/lib/module-xml.etree.ElementTree.html)).
-
-<h3 id="integrating_into_markdown">Integrating Your Code Into Markdown</h3>
-
-Once you have the various pieces of your extension built, you need to tell
-Markdown about them and ensure that they are run in the proper sequence.
-Markdown accepts a ``Extension`` instance for each extension. Therefore, you
-will need to define a class that extends ``markdown.Extension`` and over-rides
-the ``extendMarkdown`` method. Within this class you will manage configuration
-options for your extension and attach the various processors and patterns to
-the Markdown instance.
-
-It is important to note that the order of the various processors and patterns
-matters. For example, if we replace ``http://...`` links with <a> elements, and
-*then* try to deal with inline html, we will end up with a mess. Therefore,
-the various types of processors and patterns are stored within an instance of
-the Markdown class in [OrderedDict][]s. Your ``Extension`` class will need to
-manipulate those OrderedDicts appropriately. You may insert instances of your
-processors and patterns into the appropriate location in an OrderedDict, remove
-a built-in instance, or replace a built-in instance with your own.
-
-<h4 id="extendmarkdown">extendMarkdown</h4>
-
-The ``extendMarkdown`` method of a ``markdown.Extension`` class accepts two
-arguments:
-
-* **``md``**:
-
- A pointer to the instance of the Markdown class. You should use this to
- access the [OrderedDict][]s of processors and patterns. They are found
- under the following attributes:
-
- * ``md.preprocessors``
- * ``md.inlinePatterns``
- * ``md.parser.blockprocessors``
- * ``md.treepreprocessors``
- * ``md.postprocessors``
-
- Some other things you may want to access in the markdown instance are:
-
- * ``md.htmlStash``
- * ``md.output_formats``
- * ``md.set_output_format()``
- * ``md.registerExtension()``
-
-* **``md_globals``**:
-
- Contains all the various global variables within the markdown module.
-
-Of course, with access to those items, theoretically you have the option to
-changing anything through various [monkey_patching][] techniques. However, you
-should be aware that the various undocumented or private parts of markdown
-may change without notice and your monkey_patches may break with a new release.
-Therefore, what you really should be doing is inserting processors and patterns
-into the markdown pipeline. Consider yourself warned.
-
-[monkey_patching]: http://en.wikipedia.org/wiki/Monkey_patch
-
-A simple example:
-
- class MyExtension(markdown.Extension):
- def extendMarkdown(self, md, md_globals):
- # Insert instance of 'mypattern' before 'references' pattern
- md.inlinePatterns.add('mypattern', MyPattern(md), '<references')
-
-<h4 id="ordereddict">OrderedDict</h4>
-
-An OrderedDict is a dictionary like object that retains the order of it's
-items. The items are ordered in the order in which they were appended to
-the OrderedDict. However, an item can also be inserted into the OrderedDict
-in a specific location in relation to the existing items.
-
-Think of OrderedDict as a combination of a list and a dictionary as it has
-methods common to both. For example, you can get and set items using the
-``od[key] = value`` syntax and the methods ``keys()``, ``values()``, and
-``items()`` work as expected with the keys, values and items returned in the
-proper order. At the same time, you can use ``insert()``, ``append()``, and
-``index()`` as you would with a list.
-
-Generally speaking, within Markdown extensions you will be using the special
-helper method ``add()`` to add additional items to an existing OrderedDict.
-
-The ``add()`` method accepts three arguments:
-
-* **``key``**: A string. The key is used for later reference to the item.
-
-* **``value``**: The object instance stored in this item.
-
-* **``location``**: Optional. The items location in relation to other items.
-
- Note that the location can consist of a few different values:
-
- * The special strings ``"_begin"`` and ``"_end"`` insert that item at the
- beginning or end of the OrderedDict respectively.
-
- * A less-than sign (``<``) followed by an existing key (i.e.:
- ``"<somekey"``) inserts that item before the existing key.
-
- * A greater-than sign (``>``) followed by an existing key (i.e.:
- ``">somekey"``) inserts that item after the existing key.
-
-Consider the following example:
-
- >>> import markdown
- >>> od = markdown.OrderedDict()
- >>> od['one'] = 1 # The same as: od.add('one', 1, '_begin')
- >>> od['three'] = 3 # The same as: od.add('three', 3, '>one')
- >>> od['four'] = 4 # The same as: od.add('four', 4, '_end')
- >>> od.items()
- [("one", 1), ("three", 3), ("four", 4)]
-
-Note that when building an OrderedDict in order, the extra features of the
-``add`` method offer no real value and are not necessary. However, when
-manipulating an existing OrderedDict, ``add`` can be very helpful. So let's
-insert another item into the OrderedDict.
-
- >>> od.add('two', 2, '>one') # Insert after 'one'
- >>> od.values()
- [1, 2, 3, 4]
-
-Now let's insert another item.
-
- >>> od.add('twohalf', 2.5, '<three') # Insert before 'three'
- >>> od.keys()
- ["one", "two", "twohalf", "three", "four"]
-
-Note that we also could have set the location of "twohalf" to be 'after two'
-(i.e.: ``'>two'``). However, it's unlikely that you will have control over the
-order in which extensions will be loaded, and this could affect the final
-sorted order of an OrderedDict. For example, suppose an extension adding
-'twohalf' in the above examples was loaded before a separate extension which
-adds 'two'. You may need to take this into consideration when adding your
-extension components to the various markdown OrderedDicts.
-
-Once an OrderedDict is created, the items are available via key:
-
- MyNode = od['somekey']
-
-Therefore, to delete an existing item:
-
- del od['somekey']
-
-To change the value of an existing item (leaving location unchanged):
-
- od['somekey'] = MyNewObject()
-
-To change the location of an existing item:
-
- t.link('somekey', '<otherkey')
-
-<h4 id="registerextension">registerExtension</h4>
-
-Some extensions may need to have their state reset between multiple runs of the
-Markdown class. For example, consider the following use of the [[Footnotes]]
-extension:
-
- md = markdown.Markdown(extensions=['footnotes'])
- html1 = md.convert(text_with_footnote)
- md.reset()
- html2 = md.convert(text_without_footnote)
-
-Without calling ``reset``, the footnote definitions from the first document will
-be inserted into the second document as they are still stored within the class
-instance. Therefore the ``Extension`` class needs to define a ``reset`` method
-that will reset the state of the extension (i.e.: ``self.footnotes = {}``).
-However, as many extensions do not have a need for ``reset``, ``reset`` is only
-called on extensions that are registered.
-
-To register an extension, call ``md.registerExtension`` from within your
-``extendMarkdown`` method:
-
-
- def extendMarkdown(self, md, md_globals):
- md.registerExtension(self)
- # insert processors and patterns here
-
-Then, each time ``reset`` is called on the Markdown instance, the ``reset``
-method of each registered extension will be called as well. You should also
-note that ``reset`` will be called on each registered extension after it is
-initialized the first time. Keep that in mind when over-riding the extension's
-``reset`` method.
-
-<h4 id="configsettings">Config Settings</h4>
-
-If an extension uses any parameters that the user may want to change,
-those parameters should be stored in ``self.config`` of your
-``markdown.Extension`` class in the following format:
-
- self.config = {parameter_1_name : [value1, description1],
- parameter_2_name : [value2, description2] }
-
-When stored this way the config parameters can be over-ridden from the
-command line or at the time Markdown is initiated:
-
- markdown.py -x myextension(SOME_PARAM=2) inputfile.txt > output.txt
-
-Note that parameters should always be assumed to be set to string
-values, and should be converted at run time. For example:
-
- i = int(self.getConfig("SOME_PARAM"))
-
-<h4 id="makeextension">makeExtension</h4>
-
-Each extension should ideally be placed in its own module starting
-with the ``mdx_`` prefix (e.g. ``mdx_footnotes.py``). The module must
-provide a module-level function called ``makeExtension`` that takes
-an optional parameter consisting of a dictionary of configuration over-rides
-and returns an instance of the extension. An example from the footnote
-extension:
-
- def makeExtension(configs=None) :
- return FootnoteExtension(configs=configs)
-
-By following the above example, when Markdown is passed the name of your
-extension as a string (i.e.: ``'footnotes'``), it will automatically import
-the module and call the ``makeExtension`` function initiating your extension.
-
-You may have noted that the extensions packaged with Python-Markdown do not
-use the ``mdx_`` prefix in their module names. This is because they are all
-part of the ``markdown.extensions`` package. Markdown will first try to import
-from ``markdown.extensions.extname`` and upon failure, ``mdx_extname``. If both
-fail, Markdown will continue without the extension.
-
-However, Markdown will also accept an already existing instance of an extension.
-For example:
-
- import markdown
- import myextension
- configs = {...}
- myext = myextension.MyExtension(configs=configs)
- md = markdown.Markdown(extensions=[myext])
-
-This is useful if you need to implement a large number of extensions with more
-than one residing in a module.
-
-[Preprocessors]: #preprocessors
-[InlinePatterns]: #inlinepatterns
-[Treeprocessors]: #treeprocessors
-[Postprocessors]: #postprocessors
-[BlockParser]: #blockparser
-[Working with the ElementTree]: #working_with_et
-[Integrating your code into Markdown]: #integrating_into_markdown
-[extendMarkdown]: #extendmarkdown
-[OrderedDict]: #ordereddict
-[registerExtension]: #registerextension
-[Config Settings]: #configsettings
-[makeExtension]: #makeextension
-[ElementTree]: http://effbot.org/zone/element-index.htm
## Basic usage as a module:
import markdown
- md = Markdown()
- html = md.convert(your_text_string)
+ html = markdown.markdown(your_text_string)
-## Basic use from the command line:
-
- markdown source.txt > destination.html
-
-Run "markdown --help" to see more options.
-
-## Extensions
-
-See <http://www.freewisdom.org/projects/python-markdown/> for more
+See <http://packages.python.org/Markdown/> for more
information and instructions on how to extend the functionality of
Python Markdown. Read that before you try modifying this file.
Contact: markdown@freewisdom.org
-Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
+Copyright 2007-2012 The Python Markdown Project (v. 1.7 and later)
Copyright 200? Django Software Foundation (OrderedDict implementation)
Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
Copyright 2004 Manfred Stienstra (the original version)
-License: BSD (see docs/LICENSE for details).
+License: BSD (see LICENSE for details).
"""
-version = "2.0.3"
-version_info = (2,0,3, "Final")
+version = "2.2.0"
+version_info = (2,2,0, "final")
import re
import codecs
import sys
-import warnings
import logging
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
-
-
-"""
-CONSTANTS
-=============================================================================
-"""
+import util
+from preprocessors import build_preprocessors
+from blockprocessors import build_block_parser
+from treeprocessors import build_treeprocessors
+from inlinepatterns import build_inlinepatterns
+from postprocessors import build_postprocessors
+from extensions import Extension
+from serializers import to_html_string, to_xhtml_string
-"""
-Constants you might want to modify
------------------------------------------------------------------------------
-"""
+__all__ = ['Markdown', 'markdown', 'markdownFromFile']
-# default logging level for command-line use
-COMMAND_LINE_LOGGING_LEVEL = CRITICAL
-TAB_LENGTH = 4 # expand tabs to this many spaces
-ENABLE_ATTRIBUTES = True # @id = xyz -> <... id="xyz">
-SMART_EMPHASIS = True # this_or_that does not become this<i>or</i>that
-DEFAULT_OUTPUT_FORMAT = 'xhtml1' # xhtml or html4 output
-HTML_REMOVED_TEXT = "[HTML_REMOVED]" # text used instead of HTML in safe mode
-BLOCK_LEVEL_ELEMENTS = re.compile("p|div|h[1-6]|blockquote|pre|table|dl|ol|ul"
- "|script|noscript|form|fieldset|iframe|math"
- "|ins|del|hr|hr/|style|li|dt|dd|thead|tbody"
- "|tr|th|td")
-DOC_TAG = "div" # Element used to wrap document - later removed
-
-# Placeholders
-STX = u'\u0002' # Use STX ("Start of text") for start-of-placeholder
-ETX = u'\u0003' # Use ETX ("End of text") for end-of-placeholder
-INLINE_PLACEHOLDER_PREFIX = STX+"klzzwxh:"
-INLINE_PLACEHOLDER = INLINE_PLACEHOLDER_PREFIX + "%s" + ETX
-AMP_SUBSTITUTE = STX+"amp"+ETX
-
-
-"""
-Constants you probably do not need to change
------------------------------------------------------------------------------
-"""
-
-RTL_BIDI_RANGES = ( (u'\u0590', u'\u07FF'),
- # Hebrew (0590-05FF), Arabic (0600-06FF),
- # Syriac (0700-074F), Arabic supplement (0750-077F),
- # Thaana (0780-07BF), Nko (07C0-07FF).
- (u'\u2D30', u'\u2D7F'), # Tifinagh
- )
-
-
-"""
-AUXILIARY GLOBAL FUNCTIONS
-=============================================================================
-"""
-
-
-def message(level, text):
- """ A wrapper method for logging debug messages. """
- logger = logging.getLogger('MARKDOWN')
- if logger.handlers:
- # The logger is configured
- logger.log(level, text)
- if level > WARN:
- sys.exit(0)
- elif level > WARN:
- raise MarkdownException, text
- else:
- warnings.warn(text, MarkdownWarning)
-
-
-def isBlockLevel(tag):
- """Check if the tag is a block level HTML tag."""
- return BLOCK_LEVEL_ELEMENTS.match(tag)
-
-"""
-MISC AUXILIARY CLASSES
-=============================================================================
-"""
-
-class AtomicString(unicode):
- """A string which should not be further processed."""
- pass
-
-
-class MarkdownException(Exception):
- """ A Markdown Exception. """
- pass
-
-
-class MarkdownWarning(Warning):
- """ A Markdown Warning. """
- pass
-
-
-"""
-OVERALL DESIGN
-=============================================================================
-
-Markdown processing takes place in four steps:
-
-1. A bunch of "preprocessors" munge the input text.
-2. BlockParser() parses the high-level structural elements of the
- pre-processed text into an ElementTree.
-3. A bunch of "treeprocessors" are run against the ElementTree. One such
- treeprocessor runs InlinePatterns against the ElementTree, detecting inline
- markup.
-4. Some post-processors are run against the text after the ElementTree has
- been serialized into text.
-5. The output is written to a string.
-
-Those steps are put together by the Markdown() class.
-
-"""
-
-import preprocessors
-import blockprocessors
-import treeprocessors
-import inlinepatterns
-import postprocessors
-import blockparser
-import etree_loader
-import odict
-
-# Extensions should use "markdown.etree" instead of "etree" (or do `from
-# markdown import etree`). Do not import it by yourself.
-
-etree = etree_loader.importETree()
-
-# Adds the ability to output html4
-import html4
+logger = logging.getLogger('MARKDOWN')
class Markdown:
"""Convert Markdown to HTML."""
- def __init__(self,
- extensions=[],
- extension_configs={},
- safe_mode = False,
- output_format=DEFAULT_OUTPUT_FORMAT):
+ doc_tag = "div" # Element used to wrap document - later removed
+
+ option_defaults = {
+ 'html_replacement_text' : '[HTML_REMOVED]',
+ 'tab_length' : 4,
+ 'enable_attributes' : True,
+ 'smart_emphasis' : True,
+ 'lazy_ol' : True,
+ }
+
+ output_formats = {
+ 'html' : to_html_string,
+ 'html4' : to_html_string,
+ 'html5' : to_html_string,
+ 'xhtml' : to_xhtml_string,
+ 'xhtml1': to_xhtml_string,
+ 'xhtml5': to_xhtml_string,
+ }
+
+ ESCAPED_CHARS = ['\\', '`', '*', '_', '{', '}', '[', ']',
+ '(', ')', '>', '#', '+', '-', '.', '!']
+
+ def __init__(self, *args, **kwargs):
"""
Creates a new Markdown instance.
If they are of type string, the module mdx_name.py will be loaded.
If they are a subclass of markdown.Extension, they will be used
as-is.
- * extension-configs: Configuration setting for extensions.
- * safe_mode: Disallow raw html. One of "remove", "replace" or "escape".
+ * extension_configs: Configuration settingis for extensions.
* output_format: Format of output. Supported formats are:
* "xhtml1": Outputs XHTML 1.x. Default.
+ * "xhtml5": Outputs XHTML style tags of HTML 5
* "xhtml": Outputs latest supported version of XHTML (currently XHTML 1.1).
* "html4": Outputs HTML 4
+ * "html5": Outputs HTML style tags of HTML 5
* "html": Outputs latest supported version of HTML (currently HTML 4).
- Note that it is suggested that the more specific formats ("xhtml1"
+ Note that it is suggested that the more specific formats ("xhtml1"
and "html4") be used as "xhtml" or "html" may change in the future
- if it makes sense at that time.
+ if it makes sense at that time.
+ * safe_mode: Disallow raw html. One of "remove", "replace" or "escape".
+ * html_replacement_text: Text used when safe_mode is set to "replace".
+ * tab_length: Length of tabs in the source. Default: 4
+ * enable_attributes: Enable the conversion of attributes. Default: True
+ * smart_emphasis: Treat `_connected_words_` intelegently Default: True
+ * lazy_ol: Ignore number of first item of ordered lists. Default: True
"""
-
- self.safeMode = safe_mode
+
+ # For backward compatability, loop through old positional args
+ pos = ['extensions', 'extension_configs', 'safe_mode', 'output_format']
+ c = 0
+ for arg in args:
+ if not kwargs.has_key(pos[c]):
+ kwargs[pos[c]] = arg
+ c += 1
+ if c == len(pos):
+ # ignore any additional args
+ break
+
+ # Loop through kwargs and assign defaults
+ for option, default in self.option_defaults.items():
+ setattr(self, option, kwargs.get(option, default))
+
+ self.safeMode = kwargs.get('safe_mode', False)
+ if self.safeMode and not kwargs.has_key('enable_attributes'):
+ # Disable attributes in safeMode when not explicitly set
+ self.enable_attributes = False
+
self.registeredExtensions = []
self.docType = ""
self.stripTopLevelTags = True
- # Preprocessors
- self.preprocessors = odict.OrderedDict()
- self.preprocessors["html_block"] = \
- preprocessors.HtmlBlockPreprocessor(self)
- self.preprocessors["reference"] = \
- preprocessors.ReferencePreprocessor(self)
- # footnote preprocessor will be inserted with "<reference"
-
- # Block processors - ran by the parser
- self.parser = blockparser.BlockParser()
- self.parser.blockprocessors['empty'] = \
- blockprocessors.EmptyBlockProcessor(self.parser)
- self.parser.blockprocessors['indent'] = \
- blockprocessors.ListIndentProcessor(self.parser)
- self.parser.blockprocessors['code'] = \
- blockprocessors.CodeBlockProcessor(self.parser)
- self.parser.blockprocessors['hashheader'] = \
- blockprocessors.HashHeaderProcessor(self.parser)
- self.parser.blockprocessors['setextheader'] = \
- blockprocessors.SetextHeaderProcessor(self.parser)
- self.parser.blockprocessors['hr'] = \
- blockprocessors.HRProcessor(self.parser)
- self.parser.blockprocessors['olist'] = \
- blockprocessors.OListProcessor(self.parser)
- self.parser.blockprocessors['ulist'] = \
- blockprocessors.UListProcessor(self.parser)
- self.parser.blockprocessors['quote'] = \
- blockprocessors.BlockQuoteProcessor(self.parser)
- self.parser.blockprocessors['paragraph'] = \
- blockprocessors.ParagraphProcessor(self.parser)
-
-
- #self.prePatterns = []
-
- # Inline patterns - Run on the tree
- self.inlinePatterns = odict.OrderedDict()
- self.inlinePatterns["backtick"] = \
- inlinepatterns.BacktickPattern(inlinepatterns.BACKTICK_RE)
- self.inlinePatterns["escape"] = \
- inlinepatterns.SimpleTextPattern(inlinepatterns.ESCAPE_RE)
- self.inlinePatterns["reference"] = \
- inlinepatterns.ReferencePattern(inlinepatterns.REFERENCE_RE, self)
- self.inlinePatterns["link"] = \
- inlinepatterns.LinkPattern(inlinepatterns.LINK_RE, self)
- self.inlinePatterns["image_link"] = \
- inlinepatterns.ImagePattern(inlinepatterns.IMAGE_LINK_RE, self)
- self.inlinePatterns["image_reference"] = \
- inlinepatterns.ImageReferencePattern(inlinepatterns.IMAGE_REFERENCE_RE, self)
- self.inlinePatterns["autolink"] = \
- inlinepatterns.AutolinkPattern(inlinepatterns.AUTOLINK_RE, self)
- self.inlinePatterns["automail"] = \
- inlinepatterns.AutomailPattern(inlinepatterns.AUTOMAIL_RE, self)
- self.inlinePatterns["linebreak2"] = \
- inlinepatterns.SubstituteTagPattern(inlinepatterns.LINE_BREAK_2_RE, 'br')
- self.inlinePatterns["linebreak"] = \
- inlinepatterns.SubstituteTagPattern(inlinepatterns.LINE_BREAK_RE, 'br')
- self.inlinePatterns["html"] = \
- inlinepatterns.HtmlPattern(inlinepatterns.HTML_RE, self)
- self.inlinePatterns["entity"] = \
- inlinepatterns.HtmlPattern(inlinepatterns.ENTITY_RE, self)
- self.inlinePatterns["not_strong"] = \
- inlinepatterns.SimpleTextPattern(inlinepatterns.NOT_STRONG_RE)
- self.inlinePatterns["strong_em"] = \
- inlinepatterns.DoubleTagPattern(inlinepatterns.STRONG_EM_RE, 'strong,em')
- self.inlinePatterns["strong"] = \
- inlinepatterns.SimpleTagPattern(inlinepatterns.STRONG_RE, 'strong')
- self.inlinePatterns["emphasis"] = \
- inlinepatterns.SimpleTagPattern(inlinepatterns.EMPHASIS_RE, 'em')
- self.inlinePatterns["emphasis2"] = \
- inlinepatterns.SimpleTagPattern(inlinepatterns.EMPHASIS_2_RE, 'em')
- # The order of the handlers matters!!!
-
-
- # Tree processors - run once we have a basic parse.
- self.treeprocessors = odict.OrderedDict()
- self.treeprocessors["inline"] = treeprocessors.InlineProcessor(self)
- self.treeprocessors["prettify"] = \
- treeprocessors.PrettifyTreeprocessor(self)
-
- # Postprocessors - finishing touches.
- self.postprocessors = odict.OrderedDict()
- self.postprocessors["raw_html"] = \
- postprocessors.RawHtmlPostprocessor(self)
- self.postprocessors["amp_substitute"] = \
- postprocessors.AndSubstitutePostprocessor()
- # footnote postprocessor will be inserted with ">amp_substitute"
-
- # Map format keys to serializers
- self.output_formats = {
- 'html' : html4.to_html_string,
- 'html4' : html4.to_html_string,
- 'xhtml' : etree.tostring,
- 'xhtml1': etree.tostring,
- }
+ self.build_parser()
self.references = {}
- self.htmlStash = preprocessors.HtmlStash()
- self.registerExtensions(extensions = extensions,
- configs = extension_configs)
- self.set_output_format(output_format)
+ self.htmlStash = util.HtmlStash()
+ self.registerExtensions(extensions=kwargs.get('extensions', []),
+ configs=kwargs.get('extension_configs', {}))
+ self.set_output_format(kwargs.get('output_format', 'xhtml1'))
self.reset()
+ def build_parser(self):
+ """ Build the parser from the various parts. """
+ self.preprocessors = build_preprocessors(self)
+ self.parser = build_block_parser(self)
+ self.inlinePatterns = build_inlinepatterns(self)
+ self.treeprocessors = build_treeprocessors(self)
+ self.postprocessors = build_postprocessors(self)
+ return self
+
def registerExtensions(self, extensions, configs):
"""
Register extensions with this instance of Markdown.
- Keyword aurguments:
+ Keyword arguments:
* extensions: A list of extensions, which can either
be strings or objects. See the docstring on Markdown.
"""
for ext in extensions:
if isinstance(ext, basestring):
- ext = load_extension(ext, configs.get(ext, []))
+ ext = self.build_extension(ext, configs.get(ext, []))
if isinstance(ext, Extension):
- try:
- ext.extendMarkdown(self, globals())
- except NotImplementedError, e:
- message(ERROR, e)
- else:
- message(ERROR, 'Extension "%s.%s" must be of type: "markdown.Extension".' \
+ # might raise NotImplementedError, but that's the extension author's problem
+ ext.extendMarkdown(self, globals())
+ elif ext is not None:
+ raise ValueError('Extension "%s.%s" must be of type: "markdown.Extension".' \
% (ext.__class__.__module__, ext.__class__.__name__))
+ return self
+
+ def build_extension(self, ext_name, configs = []):
+ """Build extension by name, then return the module.
+
+ The extension name may contain arguments as part of the string in the
+ following format: "extname(key1=value1,key2=value2)"
+
+ """
+
+ # Parse extensions config params (ignore the order)
+ configs = dict(configs)
+ pos = ext_name.find("(") # find the first "("
+ if pos > 0:
+ ext_args = ext_name[pos+1:-1]
+ ext_name = ext_name[:pos]
+ pairs = [x.split("=") for x in ext_args.split(",")]
+ configs.update([(x.strip(), y.strip()) for (x, y) in pairs])
+
+ # Setup the module name
+ module_name = ext_name
+ if '.' not in ext_name:
+ module_name = '.'.join(['markdown.extensions', ext_name])
+
+ # Try loading the extension first from one place, then another
+ try: # New style (markdown.extensons.<extension>)
+ module = __import__(module_name, {}, {}, [module_name.rpartition('.')[0]])
+ except ImportError:
+ module_name_old_style = '_'.join(['mdx', ext_name])
+ try: # Old style (mdx_<extension>)
+ module = __import__(module_name_old_style)
+ except ImportError:
+ logger.warn("Failed loading extension '%s' from '%s' or '%s'"
+ % (ext_name, module_name, module_name_old_style))
+ # Return None so we don't try to initiate none-existant extension
+ return None
+
+ # If the module is loaded successfully, we expect it to define a
+ # function called makeExtension()
+ try:
+ return module.makeExtension(configs.items())
+ except AttributeError, e:
+ logger.warn("Failed to initiate extension '%s': %s" % (ext_name, e))
+ return None
+
def registerExtension(self, extension):
""" This gets called by the extension """
self.registeredExtensions.append(extension)
+ return self
def reset(self):
"""
self.references.clear()
for extension in self.registeredExtensions:
- extension.reset()
+ if hasattr(extension, 'reset'):
+ extension.reset()
+
+ return self
def set_output_format(self, format):
""" Set the output format for the class instance. """
try:
self.serializer = self.output_formats[format.lower()]
except KeyError:
- message(CRITICAL, 'Invalid Output Format: "%s". Use one of %s.' \
+ raise KeyError('Invalid Output Format: "%s". Use one of %s.' \
% (format, self.output_formats.keys()))
+ return self
def convert(self, source):
"""
* source: Source text as a Unicode string.
+ Markdown processing takes place in five steps:
+
+ 1. A bunch of "preprocessors" munge the input text.
+ 2. BlockParser() parses the high-level structural elements of the
+ pre-processed text into an ElementTree.
+ 3. A bunch of "treeprocessors" are run against the ElementTree. One
+ such treeprocessor runs InlinePatterns against the ElementTree,
+ detecting inline markup.
+ 4. Some post-processors are run against the text after the ElementTree
+ has been serialized into text.
+ 5. The output is written to a string.
+
"""
# Fixup the source text
if not source.strip():
return u"" # a blank unicode string
+
try:
source = unicode(source)
- except UnicodeDecodeError:
- message(CRITICAL, 'UnicodeDecodeError: Markdown only accepts unicode or ascii input.')
- return u""
+ except UnicodeDecodeError, e:
+ # Customise error message while maintaining original trackback
+ e.reason += '. -- Note: Markdown only accepts unicode input!'
+ raise
- source = source.replace(STX, "").replace(ETX, "")
+ source = source.replace(util.STX, "").replace(util.ETX, "")
source = source.replace("\r\n", "\n").replace("\r", "\n") + "\n\n"
source = re.sub(r'\n\s+\n', '\n\n', source)
- source = source.expandtabs(TAB_LENGTH)
+ source = source.expandtabs(self.tab_length)
# Split into lines and run the line preprocessors.
self.lines = source.split("\n")
root = newRoot
# Serialize _properly_. Strip top-level tags.
- output, length = codecs.utf_8_decode(self.serializer(root, encoding="utf-8"))
+ output = self.serializer(root)
if self.stripTopLevelTags:
try:
- start = output.index('<%s>'%DOC_TAG)+len(DOC_TAG)+2
- end = output.rindex('</%s>'%DOC_TAG)
+ start = output.index('<%s>'%self.doc_tag)+len(self.doc_tag)+2
+ end = output.rindex('</%s>'%self.doc_tag)
output = output[start:end].strip()
except ValueError:
- if output.strip().endswith('<%s />'%DOC_TAG):
+ if output.strip().endswith('<%s />'%self.doc_tag):
# We have an empty document
output = ''
else:
# We have a serious problem
- message(CRITICAL, 'Failed to strip top level tags.')
+ raise ValueError('Markdown failed to strip top-level tags. Document=%r' % output.strip())
# Run the text post-processors
for pp in self.postprocessors.values():
Decodes the file using the provided encoding (defaults to utf-8),
passes the file content to markdown, and outputs the html to either
the provided stream or the file with provided name, using the same
- encoding as the source file.
+ encoding as the source file. The 'xmlcharrefreplace' error handler is
+ used when encoding the output.
**Note:** This is the only place that decoding and encoding of unicode
takes place in Python-Markdown. (All other code is unicode-in /
Keyword arguments:
- * input: Name of source text file.
- * output: Name of output file. Writes to stdout if `None`.
+ * input: File object or path. Reads from stdin if `None`.
+ * output: File object or path. Writes to stdout if `None`.
* encoding: Encoding of input and output files. Defaults to utf-8.
"""
encoding = encoding or "utf-8"
# Read the source
- input_file = codecs.open(input, mode="r", encoding=encoding)
- text = input_file.read()
- input_file.close()
- text = text.lstrip(u'\ufeff') # remove the byte-order mark
+ if input:
+ if isinstance(input, str):
+ input_file = codecs.open(input, mode="r", encoding=encoding)
+ else:
+ input_file = codecs.getreader(encoding)(input)
+ text = input_file.read()
+ input_file.close()
+ else:
+ text = sys.stdin.read()
+ if not isinstance(text, unicode):
+ text = text.decode(encoding)
+
+ text = text.lstrip('\ufeff') # remove the byte-order mark
# Convert
html = self.convert(text)
# Write to file or stdout
- if isinstance(output, (str, unicode)):
- output_file = codecs.open(output, "w", encoding=encoding)
- output_file.write(html)
- output_file.close()
- else:
- output.write(html.encode(encoding))
-
-
-"""
-Extensions
------------------------------------------------------------------------------
-"""
-
-class Extension:
- """ Base class for extensions to subclass. """
- def __init__(self, configs = {}):
- """Create an instance of an Extention.
-
- Keyword arguments:
-
- * configs: A dict of configuration setting used by an Extension.
- """
- self.config = configs
-
- def getConfig(self, key):
- """ Return a setting for the given key or an empty string. """
- if key in self.config:
- return self.config[key][0]
+ if output:
+ if isinstance(output, str):
+ output_file = codecs.open(output, "w",
+ encoding=encoding,
+ errors="xmlcharrefreplace")
+ output_file.write(html)
+ output_file.close()
+ else:
+ writer = codecs.getwriter(encoding)
+ output_file = writer(output, errors="xmlcharrefreplace")
+ output_file.write(html)
+ # Don't close here. User may want to write more.
else:
- return ""
-
- def getConfigInfo(self):
- """ Return all config settings as a list of tuples. """
- return [(key, self.config[key][1]) for key in self.config.keys()]
-
- def setConfig(self, key, value):
- """ Set a config setting for `key` with the given `value`. """
- self.config[key][0] = value
-
- def extendMarkdown(self, md, md_globals):
- """
- Add the various proccesors and patterns to the Markdown Instance.
-
- This method must be overriden by every extension.
-
- Keyword arguments:
-
- * md: The Markdown instance.
-
- * md_globals: Global variables in the markdown module namespace.
-
- """
- raise NotImplementedError, 'Extension "%s.%s" must define an "extendMarkdown"' \
- 'method.' % (self.__class__.__module__, self.__class__.__name__)
+ sys.stdout.write(html)
-
-def load_extension(ext_name, configs = []):
- """Load extension by name, then return the module.
-
- The extension name may contain arguments as part of the string in the
- following format: "extname(key1=value1,key2=value2)"
-
- """
-
- # Parse extensions config params (ignore the order)
- configs = dict(configs)
- pos = ext_name.find("(") # find the first "("
- if pos > 0:
- ext_args = ext_name[pos+1:-1]
- ext_name = ext_name[:pos]
- pairs = [x.split("=") for x in ext_args.split(",")]
- configs.update([(x.strip(), y.strip()) for (x, y) in pairs])
-
- # Setup the module names
- ext_module = 'markdown.extensions'
- module_name_new_style = '.'.join([ext_module, ext_name])
- module_name_old_style = '_'.join(['mdx', ext_name])
-
- # Try loading the extention first from one place, then another
- try: # New style (markdown.extensons.<extension>)
- module = __import__(module_name_new_style, {}, {}, [ext_module])
- except ImportError:
- try: # Old style (mdx.<extension>)
- module = __import__(module_name_old_style)
- except ImportError:
- message(WARN, "Failed loading extension '%s' from '%s' or '%s'"
- % (ext_name, module_name_new_style, module_name_old_style))
- # Return None so we don't try to initiate none-existant extension
- return None
-
- # If the module is loaded successfully, we expect it to define a
- # function called makeExtension()
- try:
- return module.makeExtension(configs.items())
- except AttributeError:
- message(CRITICAL, "Failed to initiate extension '%s'" % ext_name)
-
-
-def load_extensions(ext_names):
- """Loads multiple extensions"""
- extensions = []
- for ext_name in ext_names:
- extension = load_extension(ext_name)
- if extension:
- extensions.append(extension)
- return extensions
+ return self
"""
markdownFromFile().
"""
-def markdown(text,
- extensions = [],
- safe_mode = False,
- output_format = DEFAULT_OUTPUT_FORMAT):
+def markdown(text, *args, **kwargs):
"""Convert a markdown string to HTML and return HTML as a unicode string.
This is a shortcut function for `Markdown` class to cover the most
Keyword arguments:
* text: Markdown formatted text as Unicode or ASCII string.
- * extensions: A list of extensions or extension names (may contain config args).
- * safe_mode: Disallow raw html. One of "remove", "replace" or "escape".
- * output_format: Format of output. Supported formats are:
- * "xhtml1": Outputs XHTML 1.x. Default.
- * "xhtml": Outputs latest supported version of XHTML (currently XHTML 1.1).
- * "html4": Outputs HTML 4
- * "html": Outputs latest supported version of HTML (currently HTML 4).
- Note that it is suggested that the more specific formats ("xhtml1"
- and "html4") be used as "xhtml" or "html" may change in the future
- if it makes sense at that time.
+ * Any arguments accepted by the Markdown class.
Returns: An HTML document as a string.
"""
- md = Markdown(extensions=load_extensions(extensions),
- safe_mode=safe_mode,
- output_format=output_format)
+ md = Markdown(*args, **kwargs)
return md.convert(text)
-def markdownFromFile(input = None,
- output = None,
- extensions = [],
- encoding = None,
- safe_mode = False,
- output_format = DEFAULT_OUTPUT_FORMAT):
- """Read markdown code from a file and write it to a file or a stream."""
- md = Markdown(extensions=load_extensions(extensions),
- safe_mode=safe_mode,
- output_format=output_format)
- md.convertFile(input, output, encoding)
+def markdownFromFile(*args, **kwargs):
+ """Read markdown code from a file and write it to a file or a stream.
+
+ This is a shortcut function which initializes an instance of Markdown,
+ and calls the convertFile method rather than convert.
+ Keyword arguments:
+
+ * input: a file name or readable object.
+ * output: a file name or writable object.
+ * encoding: Encoding of input and output.
+ * Any arguments accepted by the Markdown class.
+ """
+ # For backward compatibility loop through positional args
+ pos = ['input', 'output', 'extensions', 'encoding']
+ c = 0
+ for arg in args:
+ if not kwargs.has_key(pos[c]):
+ kwargs[pos[c]] = arg
+ c += 1
+ if c == len(pos):
+ break
+
+ md = Markdown(**kwargs)
+ md.convertFile(kwargs.get('input', None),
+ kwargs.get('output', None),
+ kwargs.get('encoding', None))
--- /dev/null
+"""
+COMMAND-LINE SPECIFIC STUFF
+=============================================================================
+
+"""
+
+import markdown
+import sys
+import optparse
+
+import logging
+from logging import DEBUG, INFO, CRITICAL
+
+logger = logging.getLogger('MARKDOWN')
+
+def parse_options():
+ """
+ Define and parse `optparse` options for command-line usage.
+ """
+ usage = """%prog [options] [INPUTFILE]
+ (STDIN is assumed if no INPUTFILE is given)"""
+ desc = "A Python implementation of John Gruber's Markdown. " \
+ "http://packages.python.org/Markdown/"
+ ver = "%%prog %s" % markdown.version
+
+ parser = optparse.OptionParser(usage=usage, description=desc, version=ver)
+ parser.add_option("-f", "--file", dest="filename", default=None,
+ help="Write output to OUTPUT_FILE. Defaults to STDOUT.",
+ metavar="OUTPUT_FILE")
+ parser.add_option("-e", "--encoding", dest="encoding",
+ help="Encoding for input and output files.",)
+ parser.add_option("-q", "--quiet", default = CRITICAL,
+ action="store_const", const=CRITICAL+10, dest="verbose",
+ help="Suppress all warnings.")
+ parser.add_option("-v", "--verbose",
+ action="store_const", const=INFO, dest="verbose",
+ help="Print all warnings.")
+ parser.add_option("-s", "--safe", dest="safe", default=False,
+ metavar="SAFE_MODE",
+ help="'replace', 'remove' or 'escape' HTML tags in input")
+ parser.add_option("-o", "--output_format", dest="output_format",
+ default='xhtml1', metavar="OUTPUT_FORMAT",
+ help="'xhtml1' (default), 'html4' or 'html5'.")
+ parser.add_option("--noisy",
+ action="store_const", const=DEBUG, dest="verbose",
+ help="Print debug messages.")
+ parser.add_option("-x", "--extension", action="append", dest="extensions",
+ help = "Load extension EXTENSION.", metavar="EXTENSION")
+ parser.add_option("-n", "--no_lazy_ol", dest="lazy_ol",
+ action='store_false', default=True,
+ help="Observe number of first item of ordered lists.")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) == 0:
+ input_file = None
+ else:
+ input_file = args[0]
+
+ if not options.extensions:
+ options.extensions = []
+
+ return {'input': input_file,
+ 'output': options.filename,
+ 'safe_mode': options.safe,
+ 'extensions': options.extensions,
+ 'encoding': options.encoding,
+ 'output_format': options.output_format,
+ 'lazy_ol': options.lazy_ol}, options.verbose
+
+def run():
+ """Run Markdown from the command line."""
+
+ # Parse options and adjust logging level if necessary
+ options, logging_level = parse_options()
+ if not options: sys.exit(2)
+ logger.setLevel(logging_level)
+ logger.addHandler(logging.StreamHandler())
+
+ # Run
+ markdown.markdownFromFile(**options)
+
+if __name__ == '__main__':
+ # Support running module as a commandline command.
+ # Python 2.5 & 2.6 do: `python -m markdown.__main__ [options] [args]`.
+ # Python 2.7 & 3.x do: `python -m markdown [options] [args]`.
+ run()
-import markdown
+import util
+import odict
class State(list):
""" Track the current and nested state of the parser.
looping through them and creating an ElementTree object.
"""
- def __init__(self):
- self.blockprocessors = markdown.odict.OrderedDict()
+ def __init__(self, markdown):
+ self.blockprocessors = odict.OrderedDict()
self.state = State()
+ self.markdown = markdown
def parseDocument(self, lines):
""" Parse a markdown document into an ElementTree.
"""
# Create a ElementTree from the lines
- self.root = markdown.etree.Element(markdown.DOC_TAG)
+ self.root = util.etree.Element(self.markdown.doc_tag)
self.parseChunk(self.root, '\n'.join(lines))
- return markdown.etree.ElementTree(self.root)
+ return util.etree.ElementTree(self.root)
def parseChunk(self, parent, text):
""" Parse a chunk of markdown text and attach to given etree node.
"""
while blocks:
- for processor in self.blockprocessors.values():
- if processor.test(parent, blocks[0]):
- processor.run(parent, blocks)
- break
+ for processor in self.blockprocessors.values():
+ if processor.test(parent, blocks[0]):
+ if processor.run(parent, blocks) is not False:
+ # run returns True or None
+ break
"""
+import logging
import re
-import markdown
+import util
+from blockparser import BlockParser
+
+logger = logging.getLogger('MARKDOWN')
+
+
+def build_block_parser(md_instance, **kwargs):
+ """ Build the default block parser used by Markdown. """
+ parser = BlockParser(md_instance)
+ parser.blockprocessors['empty'] = EmptyBlockProcessor(parser)
+ parser.blockprocessors['indent'] = ListIndentProcessor(parser)
+ parser.blockprocessors['code'] = CodeBlockProcessor(parser)
+ parser.blockprocessors['hashheader'] = HashHeaderProcessor(parser)
+ parser.blockprocessors['setextheader'] = SetextHeaderProcessor(parser)
+ parser.blockprocessors['hr'] = HRProcessor(parser)
+ parser.blockprocessors['olist'] = OListProcessor(parser)
+ parser.blockprocessors['ulist'] = UListProcessor(parser)
+ parser.blockprocessors['quote'] = BlockQuoteProcessor(parser)
+ parser.blockprocessors['paragraph'] = ParagraphProcessor(parser)
+ return parser
+
class BlockProcessor:
""" Base class for block processors.
"""
- def __init__(self, parser=None):
+ def __init__(self, parser):
self.parser = parser
+ self.tab_length = parser.markdown.tab_length
def lastChild(self, parent):
""" Return the last child of an etree element. """
newtext = []
lines = text.split('\n')
for line in lines:
- if line.startswith(' '*markdown.TAB_LENGTH):
- newtext.append(line[markdown.TAB_LENGTH:])
+ if line.startswith(' '*self.tab_length):
+ newtext.append(line[self.tab_length:])
elif not line.strip():
newtext.append('')
else:
""" Remove a tab from front of lines but allowing dedented lines. """
lines = text.split('\n')
for i in range(len(lines)):
- if lines[i].startswith(' '*markdown.TAB_LENGTH*level):
- lines[i] = lines[i][markdown.TAB_LENGTH*level:]
+ if lines[i].startswith(' '*self.tab_length*level):
+ lines[i] = lines[i][self.tab_length*level:]
return '\n'.join(lines)
def test(self, parent, block):
"""
- INDENT_RE = re.compile(r'^(([ ]{%s})+)'% markdown.TAB_LENGTH)
ITEM_TYPES = ['li']
LIST_TYPES = ['ul', 'ol']
+ def __init__(self, *args):
+ BlockProcessor.__init__(self, *args)
+ self.INDENT_RE = re.compile(r'^(([ ]{%s})+)'% self.tab_length)
+
def test(self, parent, block):
- return block.startswith(' '*markdown.TAB_LENGTH) and \
+ return block.startswith(' '*self.tab_length) and \
not self.parser.state.isstate('detabbed') and \
(parent.tag in self.ITEM_TYPES or \
(len(parent) and parent[-1] and \
self.parser.state.set('detabbed')
if parent.tag in self.ITEM_TYPES:
- # The parent is already a li. Just parse the child block.
- self.parser.parseBlocks(parent, [block])
+ # It's possible that this parent has a 'ul' or 'ol' child list
+ # with a member. If that is the case, then that should be the
+ # parent. This is intended to catch the edge case of an indented
+ # list whose first member was parsed previous to this point
+ # see OListProcessor
+ if len(parent) and parent[-1].tag in self.LIST_TYPES:
+ self.parser.parseBlocks(parent[-1], [block])
+ else:
+ # The parent is already a li. Just parse the child block.
+ self.parser.parseBlocks(parent, [block])
elif sibling.tag in self.ITEM_TYPES:
# The sibling is a li. Use it as parent.
self.parser.parseBlocks(sibling, [block])
# Assume the last child li is the parent of this block.
if sibling[-1].text:
# If the parent li has text, that text needs to be moved to a p
- block = '%s\n\n%s' % (sibling[-1].text, block)
+ # The p must be 'inserted' at beginning of list in the event
+ # that other children already exist i.e.; a nested sublist.
+ p = util.etree.Element('p')
+ p.text = sibling[-1].text
sibling[-1].text = ''
+ sibling[-1].insert(0, p)
self.parser.parseChunk(sibling[-1], block)
else:
self.create_item(sibling, block)
def create_item(self, parent, block):
""" Create a new li and parse the block with it as the parent. """
- li = markdown.etree.SubElement(parent, 'li')
+ li = util.etree.SubElement(parent, 'li')
self.parser.parseBlocks(li, [block])
def get_level(self, parent, block):
# Get indent level
m = self.INDENT_RE.match(block)
if m:
- indent_level = len(m.group(1))/markdown.TAB_LENGTH
+ indent_level = len(m.group(1))/self.tab_length
else:
indent_level = 0
if self.parser.state.isstate('list'):
""" Process code blocks. """
def test(self, parent, block):
- return block.startswith(' '*markdown.TAB_LENGTH)
+ return block.startswith(' '*self.tab_length)
def run(self, parent, blocks):
sibling = self.lastChild(parent)
# linebreaks removed from the split into a list.
code = sibling[0]
block, theRest = self.detab(block)
- code.text = markdown.AtomicString('%s\n%s\n' % (code.text, block.rstrip()))
+ code.text = util.AtomicString('%s\n%s\n' % (code.text, block.rstrip()))
else:
# This is a new codeblock. Create the elements and insert text.
- pre = markdown.etree.SubElement(parent, 'pre')
- code = markdown.etree.SubElement(pre, 'code')
+ pre = util.etree.SubElement(parent, 'pre')
+ code = util.etree.SubElement(pre, 'code')
block, theRest = self.detab(block)
- code.text = markdown.AtomicString('%s\n' % block.rstrip())
+ code.text = util.AtomicString('%s\n' % block.rstrip())
if theRest:
# This block contained unindented line(s) after the first indented
# line. Insert these lines as the first block of the master blocks
quote = sibling
else:
# This is a new blockquote. Create a new parent element.
- quote = markdown.etree.SubElement(parent, 'blockquote')
+ quote = util.etree.SubElement(parent, 'blockquote')
# Recursively parse block with blockquote as parent.
+ # change parser state so blockquotes embedded in lists use p tags
+ self.parser.state.set('blockquote')
self.parser.parseChunk(quote, block)
+ self.parser.state.reset()
def clean(self, line):
""" Remove ``>`` from beginning of a line. """
CHILD_RE = re.compile(r'^[ ]{0,3}((\d+\.)|[*+-])[ ]+(.*)')
# Detect indented (nested) items of either type
INDENT_RE = re.compile(r'^[ ]{4,7}((\d+\.)|[*+-])[ ]+.*')
+ # The integer (python string) with which the lists starts (default=1)
+ # Eg: If list is intialized as)
+ # 3. Item
+ # The ol tag will get starts="3" attribute
+ STARTSWITH = '1'
+ # List of allowed sibling tags.
+ SIBLING_TAGS = ['ol', 'ul']
def test(self, parent, block):
return bool(self.RE.match(block))
# Check fr multiple items in one block.
items = self.get_items(blocks.pop(0))
sibling = self.lastChild(parent)
- if sibling and sibling.tag in ['ol', 'ul']:
+
+ if sibling and sibling.tag in self.SIBLING_TAGS:
# Previous block was a list item, so set that as parent
lst = sibling
- # make sure previous item is in a p.
- if len(lst) and lst[-1].text and not len(lst[-1]):
- p = markdown.etree.SubElement(lst[-1], 'p')
+ # make sure previous item is in a p- if the item has text, then it
+ # it isn't in a p
+ if lst[-1].text:
+ # since it's possible there are other children for this sibling,
+ # we can't just SubElement the p, we need to insert it as the
+ # first item
+ p = util.etree.Element('p')
p.text = lst[-1].text
lst[-1].text = ''
+ lst[-1].insert(0, p)
+ # if the last item has a tail, then the tail needs to be put in a p
+ # likely only when a header is not followed by a blank line
+ lch = self.lastChild(lst[-1])
+ if lch is not None and lch.tail:
+ p = util.etree.SubElement(lst[-1], 'p')
+ p.text = lch.tail.lstrip()
+ lch.tail = ''
+
# parse first block differently as it gets wrapped in a p.
- li = markdown.etree.SubElement(lst, 'li')
+ li = util.etree.SubElement(lst, 'li')
self.parser.state.set('looselist')
firstitem = items.pop(0)
self.parser.parseBlocks(li, [firstitem])
self.parser.state.reset()
+ elif parent.tag in ['ol', 'ul']:
+ # this catches the edge case of a multi-item indented list whose
+ # first item is in a blank parent-list item:
+ # * * subitem1
+ # * subitem2
+ # see also ListIndentProcessor
+ lst = parent
else:
# This is a new list so create parent with appropriate tag.
- lst = markdown.etree.SubElement(parent, self.TAG)
+ lst = util.etree.SubElement(parent, self.TAG)
+ # Check if a custom start integer is set
+ if not self.parser.markdown.lazy_ol and self.STARTSWITH !='1':
+ lst.attrib['start'] = self.STARTSWITH
+
self.parser.state.set('list')
# Loop through items in block, recursively parsing each with the
# appropriate parent.
for item in items:
- if item.startswith(' '*markdown.TAB_LENGTH):
+ if item.startswith(' '*self.tab_length):
# Item is indented. Parse with last item as parent
self.parser.parseBlocks(lst[-1], [item])
else:
# New item. Create li and parse with it as parent
- li = markdown.etree.SubElement(lst, 'li')
+ li = util.etree.SubElement(lst, 'li')
self.parser.parseBlocks(li, [item])
self.parser.state.reset()
for line in block.split('\n'):
m = self.CHILD_RE.match(line)
if m:
- # This is a new item. Append
+ # This is a new list item
+ # Check first item for the start index
+ if not items and self.TAG=='ol':
+ # Detect the integer value of first list item
+ INTEGER_RE = re.compile('(\d+)')
+ self.STARTSWITH = INTEGER_RE.match(m.group(1)).group()
+ # Append to the list
items.append(m.group(3))
elif self.INDENT_RE.match(line):
# This is an indented (possibly nested) item.
- if items[-1].startswith(' '*markdown.TAB_LENGTH):
+ if items[-1].startswith(' '*self.tab_length):
# Previous item was indented. Append to that item.
items[-1] = '%s\n%s' % (items[-1], line)
else:
# recursively parse this lines as a block.
self.parser.parseBlocks(parent, [before])
# Create header using named groups from RE
- h = markdown.etree.SubElement(parent, 'h%d' % len(m.group('level')))
+ h = util.etree.SubElement(parent, 'h%d' % len(m.group('level')))
h.text = m.group('header').strip()
if after:
# Insert remaining lines as first block for future parsing.
blocks.insert(0, after)
else:
# This should never happen, but just in case...
- message(CRITICAL, "We've got a problem header!")
+ logger.warn("We've got a problem header: %r" % block)
class SetextHeaderProcessor(BlockProcessor):
""" Process Setext-style Headers. """
# Detect Setext-style header. Must be first 2 lines of block.
- RE = re.compile(r'^.*?\n[=-]{3,}', re.MULTILINE)
+ RE = re.compile(r'^.*?\n[=-]+[ ]*(\n|$)', re.MULTILINE)
def test(self, parent, block):
return bool(self.RE.match(block))
level = 1
else:
level = 2
- h = markdown.etree.SubElement(parent, 'h%d' % level)
+ h = util.etree.SubElement(parent, 'h%d' % level)
h.text = lines[0].strip()
if len(lines) > 2:
# Block contains additional lines. Add to master blocks for later.
class HRProcessor(BlockProcessor):
""" Process Horizontal Rules. """
- RE = r'[ ]{0,3}(?P<ch>[*_-])[ ]?((?P=ch)[ ]?){2,}[ ]*'
+ RE = r'^[ ]{0,3}((-+[ ]{0,2}){3,}|(_+[ ]{0,2}){3,}|(\*+[ ]{0,2}){3,})[ ]*'
# Detect hr on any line of a block.
- SEARCH_RE = re.compile(r'(^|\n)%s(\n|$)' % RE)
- # Match a hr on a single line of text.
- MATCH_RE = re.compile(r'^%s$' % RE)
+ SEARCH_RE = re.compile(RE, re.MULTILINE)
def test(self, parent, block):
- return bool(self.SEARCH_RE.search(block))
+ m = self.SEARCH_RE.search(block)
+ # No atomic grouping in python so we simulate it here for performance.
+ # The regex only matches what would be in the atomic group - the HR.
+ # Then check if we are at end of block or if next char is a newline.
+ if m and (m.end() == len(block) or block[m.end()] == '\n'):
+ # Save match object on class instance so we can use it later.
+ self.match = m
+ return True
+ return False
def run(self, parent, blocks):
- lines = blocks.pop(0).split('\n')
- prelines = []
+ block = blocks.pop(0)
# Check for lines in block before hr.
- for line in lines:
- m = self.MATCH_RE.match(line)
- if m:
- break
- else:
- prelines.append(line)
- if len(prelines):
+ prelines = block[:self.match.start()].rstrip('\n')
+ if prelines:
# Recursively parse lines before hr so they get parsed first.
- self.parser.parseBlocks(parent, ['\n'.join(prelines)])
+ self.parser.parseBlocks(parent, [prelines])
# create hr
- hr = markdown.etree.SubElement(parent, 'hr')
+ hr = util.etree.SubElement(parent, 'hr')
# check for lines in block after hr.
- lines = lines[len(prelines)+1:]
- if len(lines):
+ postlines = block[self.match.end():].lstrip('\n')
+ if postlines:
# Add lines after hr to master blocks for later parsing.
- blocks.insert(0, '\n'.join(lines))
+ blocks.insert(0, postlines)
+
class EmptyBlockProcessor(BlockProcessor):
if sibling and sibling.tag == 'pre' and sibling[0] and \
sibling[0].tag == 'code':
# Last block is a codeblock. Append to preserve whitespace.
- sibling[0].text = markdown.AtomicString('%s/n/n/n' % sibling[0].text )
+ sibling[0].text = util.AtomicString('%s/n/n/n' % sibling[0].text )
class ParagraphProcessor(BlockProcessor):
if block.strip():
# Not a blank block. Add to parent, otherwise throw it away.
if self.parser.state.isstate('list'):
- # The parent is a tight-list. Append to parent.text
- if parent.text:
- parent.text = '%s\n%s' % (parent.text, block)
+ # The parent is a tight-list.
+ #
+ # Check for any children. This will likely only happen in a
+ # tight-list when a header isn't followed by a blank line.
+ # For example:
+ #
+ # * # Header
+ # Line 2 of list item - not part of header.
+ sibling = self.lastChild(parent)
+ if sibling is not None:
+ # Insetrt after sibling.
+ if sibling.tail:
+ sibling.tail = '%s\n%s' % (sibling.tail, block)
+ else:
+ sibling.tail = '\n%s' % block
else:
- parent.text = block.lstrip()
+ # Append to parent.text
+ if parent.text:
+ parent.text = '%s\n%s' % (parent.text, block)
+ else:
+ parent.text = block.lstrip()
else:
# Create a regular paragraph
- p = markdown.etree.SubElement(parent, 'p')
+ p = util.etree.SubElement(parent, 'p')
p.text = block.lstrip()
+++ /dev/null
-"""
-COMMAND-LINE SPECIFIC STUFF
-=============================================================================
-
-The rest of the code is specifically for handling the case where Python
-Markdown is called from the command line.
-"""
-
-import markdown
-import sys
-import logging
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
-
-EXECUTABLE_NAME_FOR_USAGE = "python markdown.py"
-""" The name used in the usage statement displayed for python versions < 2.3.
-(With python 2.3 and higher the usage statement is generated by optparse
-and uses the actual name of the executable called.) """
-
-OPTPARSE_WARNING = """
-Python 2.3 or higher required for advanced command line options.
-For lower versions of Python use:
-
- %s INPUT_FILE > OUTPUT_FILE
-
-""" % EXECUTABLE_NAME_FOR_USAGE
-
-def parse_options():
- """
- Define and parse `optparse` options for command-line usage.
- """
-
- try:
- optparse = __import__("optparse")
- except:
- if len(sys.argv) == 2:
- return {'input': sys.argv[1],
- 'output': None,
- 'safe': False,
- 'extensions': [],
- 'encoding': None }, CRITICAL
- else:
- print OPTPARSE_WARNING
- return None, None
-
- parser = optparse.OptionParser(usage="%prog INPUTFILE [options]")
- parser.add_option("-f", "--file", dest="filename", default=sys.stdout,
- help="write output to OUTPUT_FILE",
- metavar="OUTPUT_FILE")
- parser.add_option("-e", "--encoding", dest="encoding",
- help="encoding for input and output files",)
- parser.add_option("-q", "--quiet", default = CRITICAL,
- action="store_const", const=CRITICAL+10, dest="verbose",
- help="suppress all messages")
- parser.add_option("-v", "--verbose",
- action="store_const", const=INFO, dest="verbose",
- help="print info messages")
- parser.add_option("-s", "--safe", dest="safe", default=False,
- metavar="SAFE_MODE",
- help="safe mode ('replace', 'remove' or 'escape' user's HTML tag)")
- parser.add_option("-o", "--output_format", dest="output_format",
- default='xhtml1', metavar="OUTPUT_FORMAT",
- help="Format of output. One of 'xhtml1' (default) or 'html4'.")
- parser.add_option("--noisy",
- action="store_const", const=DEBUG, dest="verbose",
- help="print debug messages")
- parser.add_option("-x", "--extension", action="append", dest="extensions",
- help = "load extension EXTENSION", metavar="EXTENSION")
-
- (options, args) = parser.parse_args()
-
- if not len(args) == 1:
- parser.print_help()
- return None, None
- else:
- input_file = args[0]
-
- if not options.extensions:
- options.extensions = []
-
- return {'input': input_file,
- 'output': options.filename,
- 'safe_mode': options.safe,
- 'extensions': options.extensions,
- 'encoding': options.encoding,
- 'output_format': options.output_format}, options.verbose
-
-def run():
- """Run Markdown from the command line."""
-
- # Parse options and adjust logging level if necessary
- options, logging_level = parse_options()
- if not options: sys.exit(0)
- if logging_level: logging.getLogger('MARKDOWN').setLevel(logging_level)
-
- # Run
- markdown.markdownFromFile(**options)
-from markdown import message, CRITICAL
-import sys
-
## Import
def importETree():
"""Import the best implementation of ElementTree, return a module object."""
etree_in_c = None
try: # Is it Python 2.5+ with C implemenation of ElementTree installed?
import xml.etree.cElementTree as etree_in_c
+ from xml.etree.ElementTree import Comment
except ImportError:
try: # Is it Python 2.5+ with Python implementation of ElementTree?
import xml.etree.ElementTree as etree
except ImportError:
try: # An earlier version of Python with cElementTree installed?
import cElementTree as etree_in_c
+ from elementtree.ElementTree import Comment
except ImportError:
try: # An earlier version of Python with Python ElementTree?
import elementtree.ElementTree as etree
except ImportError:
- message(CRITICAL, "Failed to import ElementTree")
- sys.exit(1)
- if etree_in_c and etree_in_c.VERSION < "1.0":
- message(CRITICAL, "For cElementTree version 1.0 or higher is required.")
- sys.exit(1)
- elif etree_in_c :
+ raise ImportError("Failed to import ElementTree")
+ if etree_in_c:
+ if etree_in_c.VERSION < "1.0.5":
+ raise RuntimeError("cElementTree version 1.0.5 or higher is required.")
+ # Third party serializers (including ours) test with non-c Comment
+ etree_in_c.test_comment = Comment
return etree_in_c
elif etree.VERSION < "1.1":
- message(CRITICAL, "For ElementTree version 1.1 or higher is required")
- sys.exit(1)
- else :
+ raise RuntimeError("ElementTree version 1.1 or higher is required")
+ else:
return etree
+"""
+Extensions
+-----------------------------------------------------------------------------
+"""
+
+class Extension:
+ """ Base class for extensions to subclass. """
+ def __init__(self, configs = {}):
+ """Create an instance of an Extention.
+
+ Keyword arguments:
+
+ * configs: A dict of configuration setting used by an Extension.
+ """
+ self.config = configs
+
+ def getConfig(self, key, default=''):
+ """ Return a setting for the given key or an empty string. """
+ if key in self.config:
+ return self.config[key][0]
+ else:
+ return default
+
+ def getConfigs(self):
+ """ Return all configs settings as a dict. """
+ return dict([(key, self.getConfig(key)) for key in self.config.keys()])
+
+ def getConfigInfo(self):
+ """ Return all config descriptions as a list of tuples. """
+ return [(key, self.config[key][1]) for key in self.config.keys()]
+
+ def setConfig(self, key, value):
+ """ Set a config setting for `key` with the given `value`. """
+ self.config[key][0] = value
+
+ def extendMarkdown(self, md, md_globals):
+ """
+ Add the various proccesors and patterns to the Markdown Instance.
+
+ This method must be overriden by every extension.
+
+ Keyword arguments:
+
+ * md: The Markdown instance.
+
+ * md_globals: Global variables in the markdown module namespace.
+
+ """
+ raise NotImplementedError, 'Extension "%s.%s" must define an "extendMarkdown"' \
+ 'method.' % (self.__class__.__module__, self.__class__.__name__)
+
... *[ABBR]: Abbreviation
... *[REF]: Abbreviation Reference
... """
- >>> markdown.markdown(text, ['abbr'])
- u'<p>Some text with an <abbr title="Abbreviation">ABBR</abbr> and a <abbr title="Abbreviation Reference">REF</abbr>. Ignore REFERENCE and ref.</p>'
+ >>> print markdown.markdown(text, ['abbr'])
+ <p>Some text with an <abbr title="Abbreviation">ABBR</abbr> and a <abbr title="Abbreviation Reference">REF</abbr>. Ignore REFERENCE and ref.</p>
Copyright 2007-2008
* [Waylan Limberg](http://achinghead.com/)
'''
-import markdown, re
-from markdown import etree
+import re
+import markdown
+from markdown.util import etree
# Global Vars
ABBR_REF_RE = re.compile(r'[*]\[(?P<abbr>[^\]]*)\][ ]?:\s*(?P<title>.*)')
--- /dev/null
+"""
+Attribute List Extension for Python-Markdown
+============================================
+
+Adds attribute list syntax. Inspired by
+[maruku](http://maruku.rubyforge.org/proposal.html#attribute_lists)'s
+feature of the same name.
+
+Copyright 2011 [Waylan Limberg](http://achinghead.com/).
+
+Contact: markdown@freewisdom.org
+
+License: BSD (see ../LICENSE.md for details)
+
+Dependencies:
+* [Python 2.4+](http://python.org)
+* [Markdown 2.1+](http://packages.python.org/Markdown/)
+
+"""
+
+import markdown
+import re
+from markdown.util import isBlockLevel
+
+try:
+ Scanner = re.Scanner
+except AttributeError:
+ # must be on Python 2.4
+ from sre import Scanner
+
+def _handle_double_quote(s, t):
+ k, v = t.split('=')
+ return k, v.strip('"')
+
+def _handle_single_quote(s, t):
+ k, v = t.split('=')
+ return k, v.strip("'")
+
+def _handle_key_value(s, t):
+ return t.split('=')
+
+def _handle_word(s, t):
+ if t.startswith('.'):
+ return u'.', t[1:]
+ if t.startswith('#'):
+ return u'id', t[1:]
+ return t, t
+
+_scanner = Scanner([
+ (r'[^ ]+=".*?"', _handle_double_quote),
+ (r"[^ ]+='.*?'", _handle_single_quote),
+ (r'[^ ]+=[^ ]*', _handle_key_value),
+ (r'[^ ]+', _handle_word),
+ (r' ', None)
+])
+
+def get_attrs(str):
+ """ Parse attribute list and return a list of attribute tuples. """
+ return _scanner.scan(str)[0]
+
+def isheader(elem):
+ return elem.tag in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
+
+class AttrListTreeprocessor(markdown.treeprocessors.Treeprocessor):
+
+ BASE_RE = r'\{\:?([^\}]*)\}'
+ HEADER_RE = re.compile(r'[ ]*%s[ ]*$' % BASE_RE)
+ BLOCK_RE = re.compile(r'\n[ ]*%s[ ]*$' % BASE_RE)
+ INLINE_RE = re.compile(r'^%s' % BASE_RE)
+
+ def run(self, doc):
+ for elem in doc.getiterator():
+ #import pdb; pdb.set_trace()
+ if isBlockLevel(elem.tag):
+ # Block level: check for attrs on last line of text
+ RE = self.BLOCK_RE
+ if isheader(elem):
+ # header: check for attrs at end of line
+ RE = self.HEADER_RE
+ if len(elem) and elem[-1].tail:
+ # has children. Get from tail of last child
+ m = RE.search(elem[-1].tail)
+ if m:
+ self.assign_attrs(elem, m.group(1))
+ elem[-1].tail = elem[-1].tail[:m.start()]
+ if isheader(elem):
+ # clean up trailing #s
+ elem[-1].tail = elem[-1].tail.rstrip('#').rstrip()
+ elif elem.text:
+ # no children. Get from text.
+ m = RE.search(elem.text)
+ if m:
+ self.assign_attrs(elem, m.group(1))
+ elem.text = elem.text[:m.start()]
+ if isheader(elem):
+ # clean up trailing #s
+ elem.text = elem.text.rstrip('#').rstrip()
+ else:
+ # inline: check for attrs at start of tail
+ if elem.tail:
+ m = self.INLINE_RE.match(elem.tail)
+ if m:
+ self.assign_attrs(elem, m.group(1))
+ elem.tail = elem.tail[m.end():]
+
+ def assign_attrs(self, elem, attrs):
+ """ Assign attrs to element. """
+ for k, v in get_attrs(attrs):
+ if k == '.':
+ # add to class
+ cls = elem.get('class')
+ if cls:
+ elem.set('class', '%s %s' % (cls, v))
+ else:
+ elem.set('class', v)
+ else:
+ # assing attr k with v
+ elem.set(k, v)
+
+
+class AttrListExtension(markdown.extensions.Extension):
+ def extendMarkdown(self, md, md_globals):
+ if 'headerid' in md.treeprocessors.keys():
+ # insert after 'headerid' treeprocessor
+ md.treeprocessors.add('attr_list', AttrListTreeprocessor(md), '>headerid')
+ else:
+ # insert after 'inline' treeprocessor
+ md.treeprocessors.add('attr_list', AttrListTreeprocessor(md), '>inline')
+
+
+def makeExtension(configs={}):
+ return AttrListExtension(configs=configs)
Copyright 2006-2008 [Waylan Limberg](http://achinghead.com/).
-Project website: <http://www.freewisdom.org/project/python-markdown/CodeHilite>
+Project website: <http://packages.python.org/Markdown/extensions/code_hilite.html>
Contact: markdown@freewisdom.org
-
-License: BSD (see ../docs/LICENSE for details)
-
+
+License: BSD (see ../LICENSE.md for details)
+
Dependencies:
* [Python 2.3+](http://python.org/)
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Markdown 2.0+](http://packages.python.org/Markdown/)
* [Pygments](http://pygments.org/)
"""
import markdown
-
-# --------------- CONSTANTS YOU MIGHT WANT TO MODIFY -----------------
-
try:
- TAB_LENGTH = markdown.TAB_LENGTH
-except AttributeError:
- TAB_LENGTH = 4
-
+ from pygments import highlight
+ from pygments.lexers import get_lexer_by_name, guess_lexer, TextLexer
+ from pygments.formatters import HtmlFormatter
+ pygments = True
+except ImportError:
+ pygments = False
# ------------------ The Main CodeHilite Class ----------------------
class CodeHilite:
Basic Usage:
>>> code = CodeHilite(src = 'some text')
>>> html = code.hilite()
-
+
* src: Source string or any object with a .readline attribute.
-
+
* linenos: (Boolen) Turn line numbering 'on' or 'off' (off by default).
+ * guess_lang: (Boolen) Turn language auto-detection 'on' or 'off' (on by default).
+
* css_class: Set class name of wrapper div ('codehilite' by default).
-
+
Low Level Usage:
>>> code = CodeHilite()
>>> code.src = 'some text' # String or anything with a .readline attr.
>>> code.linenos = True # True or False; Turns line numbering on or of.
>>> html = code.hilite()
-
+
"""
- def __init__(self, src=None, linenos=False, css_class="codehilite"):
+ def __init__(self, src=None, linenos=False, guess_lang=True,
+ css_class="codehilite", lang=None, style='default',
+ noclasses=False, tab_length=4):
self.src = src
- self.lang = None
+ self.lang = lang
self.linenos = linenos
+ self.guess_lang = guess_lang
self.css_class = css_class
+ self.style = style
+ self.noclasses = noclasses
+ self.tab_length = tab_length
def hilite(self):
"""
- Pass code to the [Pygments](http://pygments.pocoo.org/) highliter with
- optional line numbers. The output should then be styled with css to
- your liking. No styles are applied by default - only styling hooks
- (i.e.: <span class="k">).
+ Pass code to the [Pygments](http://pygments.pocoo.org/) highliter with
+ optional line numbers. The output should then be styled with css to
+ your liking. No styles are applied by default - only styling hooks
+ (i.e.: <span class="k">).
returns : A string of html.
-
+
"""
self.src = self.src.strip('\n')
-
- self._getLang()
-
- try:
- from pygments import highlight
- from pygments.lexers import get_lexer_by_name, guess_lexer, \
- TextLexer
- from pygments.formatters import HtmlFormatter
- except ImportError:
- # just escape and pass through
- txt = self._escape(self.src)
- if self.linenos:
- txt = self._number(txt)
- else :
- txt = '<div class="%s"><pre>%s</pre></div>\n'% \
- (self.css_class, txt)
- return txt
- else:
+
+ if self.lang is None:
+ self._getLang()
+
+ if pygments:
try:
lexer = get_lexer_by_name(self.lang)
except ValueError:
try:
- lexer = guess_lexer(self.src)
+ if self.guess_lang:
+ lexer = guess_lexer(self.src)
+ else:
+ lexer = TextLexer()
except ValueError:
lexer = TextLexer()
- formatter = HtmlFormatter(linenos=self.linenos,
- cssclass=self.css_class)
+ formatter = HtmlFormatter(linenos=self.linenos,
+ cssclass=self.css_class,
+ style=self.style,
+ noclasses=self.noclasses)
return highlight(self.src, lexer, formatter)
-
- def _escape(self, txt):
- """ basic html escaping """
- txt = txt.replace('&', '&')
- txt = txt.replace('<', '<')
- txt = txt.replace('>', '>')
- txt = txt.replace('"', '"')
- return txt
-
- def _number(self, txt):
- """ Use <ol> for line numbering """
- # Fix Whitespace
- txt = txt.replace('\t', ' '*TAB_LENGTH)
- txt = txt.replace(" "*4, " ")
- txt = txt.replace(" "*3, " ")
- txt = txt.replace(" "*2, " ")
-
- # Add line numbers
- lines = txt.splitlines()
- txt = '<div class="codehilite"><pre><ol>\n'
- for line in lines:
- txt += '\t<li>%s</li>\n'% line
- txt += '</ol></pre></div>\n'
- return txt
-
+ else:
+ # just escape and build markup usable by JS highlighting libs
+ txt = self.src.replace('&', '&')
+ txt = txt.replace('<', '<')
+ txt = txt.replace('>', '>')
+ txt = txt.replace('"', '"')
+ classes = []
+ if self.lang:
+ classes.append('language-%s' % self.lang)
+ if self.linenos:
+ classes.append('linenums')
+ class_str = ''
+ if classes:
+ class_str = ' class="%s"' % ' '.join(classes)
+ return '<pre class="%s"><code%s>%s</code></pre>\n'% \
+ (self.css_class, class_str, txt)
def _getLang(self):
- """
- Determines language of a code block from shebang lines and whether said
+ """
+ Determines language of a code block from shebang line and whether said
line should be removed or left in place. If the sheband line contains a
- path (even a single /) then it is assumed to be a real shebang lines and
- left alone. However, if no path is given (e.i.: #!python or :::python)
+ path (even a single /) then it is assumed to be a real shebang line and
+ left alone. However, if no path is given (e.i.: #!python or :::python)
then it is assumed to be a mock shebang for language identifitation of a
- code fragment and removed from the code block prior to processing for
- code highlighting. When a mock shebang (e.i: #!python) is found, line
- numbering is turned on. When colons are found in place of a shebang
- (e.i.: :::python), line numbering is left in the current state - off
+ code fragment and removed from the code block prior to processing for
+ code highlighting. When a mock shebang (e.i: #!python) is found, line
+ numbering is turned on. When colons are found in place of a shebang
+ (e.i.: :::python), line numbering is left in the current state - off
by default.
-
+
"""
import re
-
+
#split text into lines
lines = self.src.split("\n")
#pull first line to examine
fl = lines.pop(0)
-
+
c = re.compile(r'''
- (?:(?:::+)|(?P<shebang>[#]!)) # Shebang or 2 or more colons.
- (?P<path>(?:/\w+)*[/ ])? # Zero or 1 path
- (?P<lang>[\w+-]*) # The language
+ (?:(?:^::+)|(?P<shebang>^[#]!)) # Shebang or 2 or more colons.
+ (?P<path>(?:/\w+)*[/ ])? # Zero or 1 path
+ (?P<lang>[\w+-]*) # The language
''', re.VERBOSE)
# search first line for shebang
m = c.search(fl)
else:
# No match
lines.insert(0, fl)
-
+
self.src = "\n".join(lines).strip("\n")
for block in blocks:
children = block.getchildren()
if len(children) == 1 and children[0].tag == 'code':
- code = CodeHilite(children[0].text,
- linenos=self.config['force_linenos'][0],
- css_class=self.config['css_class'][0])
- placeholder = self.markdown.htmlStash.store(code.hilite(),
+ code = CodeHilite(children[0].text,
+ linenos=self.config['force_linenos'],
+ guess_lang=self.config['guess_lang'],
+ css_class=self.config['css_class'],
+ style=self.config['pygments_style'],
+ noclasses=self.config['noclasses'],
+ tab_length=self.markdown.tab_length)
+ placeholder = self.markdown.htmlStash.store(code.hilite(),
safe=True)
# Clear codeblock in etree instance
block.clear()
- # Change to p element which will later
+ # Change to p element which will later
# be removed when inserting raw html
block.tag = 'p'
block.text = placeholder
# define default configs
self.config = {
'force_linenos' : [False, "Force line numbers - Default: False"],
- 'css_class' : ["codehilite",
+ 'guess_lang' : [True, "Automatic language detection - Default: True"],
+ 'css_class' : ["codehilite",
"Set class name for wrapper <div> - Default: codehilite"],
+ 'pygments_style' : ['default', 'Pygments HTML Formatter Style (Colorscheme) - Default: default'],
+ 'noclasses': [False, 'Use inline styles instead of CSS classes - Default false']
}
-
+
# Override defaults with user settings
for key, value in configs:
- self.setConfig(key, value)
+ # convert strings to booleans
+ if value == 'True': value = True
+ if value == 'False': value = False
+ self.setConfig(key, value)
def extendMarkdown(self, md, md_globals):
""" Add HilitePostprocessor to Markdown instance. """
hiliter = HiliteTreeprocessor(md)
- hiliter.config = self.config
- md.treeprocessors.add("hilite", hiliter, "_begin")
+ hiliter.config = self.getConfigs()
+ md.treeprocessors.add("hilite", hiliter, "<inline")
+
+ md.registerExtension(self)
def makeExtension(configs={}):
-#!/usr/bin/env Python
+#!/usr/bin/env python
"""
Definition List Extension for Python-Markdown
=============================================
"""
-import markdown, re
-from markdown import etree
+import re
+import markdown
+from markdown.util import etree
class DefListProcessor(markdown.blockprocessors.BlockProcessor):
""" Process Definition Lists. """
RE = re.compile(r'(^|\n)[ ]{0,3}:[ ]{1,3}(.*?)(\n|$)')
+ NO_INDENT_RE = re.compile(r'^[ ]{0,3}[^ :]')
def test(self, parent, block):
return bool(self.RE.search(block))
block = blocks.pop(0)
m = self.RE.search(block)
terms = [l.strip() for l in block[:m.start()].split('\n') if l.strip()]
- d, theRest = self.detab(block[m.end():])
+ block = block[m.end():]
+ no_indent = self.NO_INDENT_RE.match(block)
+ if no_indent:
+ d, theRest = (block, None)
+ else:
+ d, theRest = self.detab(block)
if d:
d = '%s\n%s' % (m.group(2), d)
else:
d = m.group(2)
- #import ipdb; ipdb.set_trace()
sibling = self.lastChild(parent)
if not terms and sibling.tag == 'p':
# The previous paragraph contains the terms
ITEM_TYPES = ['dd']
LIST_TYPES = ['dl']
- def create_item(parent, block):
+ def create_item(self, parent, block):
""" Create a new dd and parse the block with it as the parent. """
dd = markdown.etree.SubElement(parent, 'dd')
self.parser.parseBlocks(dd, [block])
import markdown
-extensions = ['fenced_code',
+extensions = ['smart_strong',
+ 'fenced_code',
'footnotes',
- 'headerid',
+ 'attr_list',
'def_list',
'tables',
'abbr',
def extendMarkdown(self, md, md_globals):
""" Register extension instances. """
md.registerExtensions(extensions, self.config)
+ # Turn on processing of markdown text within raw html
+ md.preprocessors['html_block'].markdown_in_raw = True
def makeExtension(configs={}):
return ExtraExtension(configs=dict(configs))
>>> import markdown
>>> text = '''
... A paragraph before a fenced code block:
- ...
+ ...
... ~~~
... Fenced code block
... ~~~
... '''
>>> html = markdown.markdown(text, extensions=['fenced_code'])
- >>> html
- u'<p>A paragraph before a fenced code block:</p>\\n<pre><code>Fenced code block\\n</code></pre>'
+ >>> print html
+ <p>A paragraph before a fenced code block:</p>
+ <pre><code>Fenced code block
+ </code></pre>
Works with safe_mode also (we check this because we are using the HtmlStash):
- >>> markdown.markdown(text, extensions=['fenced_code'], safe_mode='replace')
- u'<p>A paragraph before a fenced code block:</p>\\n<pre><code>Fenced code block\\n</code></pre>'
-
+ >>> print markdown.markdown(text, extensions=['fenced_code'], safe_mode='replace')
+ <p>A paragraph before a fenced code block:</p>
+ <pre><code>Fenced code block
+ </code></pre>
+
Include tilde's in a code block and wrap with blank lines:
>>> text = '''
... ~~~~~~~~
- ...
+ ...
... ~~~~
- ...
... ~~~~~~~~'''
- >>> markdown.markdown(text, extensions=['fenced_code'])
- u'<pre><code>\\n~~~~\\n\\n</code></pre>'
+ >>> print markdown.markdown(text, extensions=['fenced_code'])
+ <pre><code>
+ ~~~~
+ </code></pre>
-Multiple blocks and language tags:
+Language tags:
>>> text = '''
... ~~~~{.python}
- ... block one
- ... ~~~~
- ...
- ... ~~~~.html
- ... <p>block two</p>
+ ... # Some python code
... ~~~~'''
- >>> markdown.markdown(text, extensions=['fenced_code'])
- u'<pre><code class="python">block one\\n</code></pre>\\n\\n<pre><code class="html"><p>block two</p>\\n</code></pre>'
+ >>> print markdown.markdown(text, extensions=['fenced_code'])
+ <pre><code class="python"># Some python code
+ </code></pre>
+
+Optionally backticks instead of tildes as per how github's code block markdown is identified:
+
+ >>> text = '''
+ ... `````
+ ... # Arbitrary code
+ ... ~~~~~ # these tildes will not close the block
+ ... `````'''
+ >>> print markdown.markdown(text, extensions=['fenced_code'])
+ <pre><code># Arbitrary code
+ ~~~~~ # these tildes will not close the block
+ </code></pre>
Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/).
-Project website: <http://www.freewisdom.org/project/python-markdown/Fenced__Code__Blocks>
+Project website: <http://packages.python.org/Markdown/extensions/fenced_code_blocks.html>
Contact: markdown@freewisdom.org
-License: BSD (see ../docs/LICENSE for details)
+License: BSD (see ../docs/LICENSE for details)
Dependencies:
-* [Python 2.3+](http://python.org)
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Python 2.4+](http://python.org)
+* [Markdown 2.0+](http://packages.python.org/Markdown/)
+* [Pygments (optional)](http://pygments.org)
"""
-import markdown, re
+import re
+import markdown
+from markdown.extensions.codehilite import CodeHilite, CodeHiliteExtension
# Global vars
FENCED_BLOCK_RE = re.compile( \
- r'(?P<fence>^~{3,})[ ]*(\{?\.(?P<lang>[a-zA-Z0-9_-]*)\}?)?[ ]*\n(?P<code>.*?)(?P=fence)[ ]*$',
+ r'(?P<fence>^(?:~{3,}|`{3,}))[ ]*(\{?\.?(?P<lang>[a-zA-Z0-9_-]*)\}?)?[ ]*\n(?P<code>.*?)(?<=\n)(?P=fence)[ ]*$',
re.MULTILINE|re.DOTALL
)
CODE_WRAP = '<pre><code%s>%s</code></pre>'
LANG_TAG = ' class="%s"'
-
class FencedCodeExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals):
""" Add FencedBlockPreprocessor to the Markdown instance. """
+ md.registerExtension(self)
- md.preprocessors.add('fenced_code_block',
- FencedBlockPreprocessor(md),
+ md.preprocessors.add('fenced_code_block',
+ FencedBlockPreprocessor(md),
"_begin")
class FencedBlockPreprocessor(markdown.preprocessors.Preprocessor):
-
+
+ def __init__(self, md):
+ markdown.preprocessors.Preprocessor.__init__(self, md)
+
+ self.checked_for_codehilite = False
+ self.codehilite_conf = {}
+
def run(self, lines):
""" Match and store Fenced Code Blocks in the HtmlStash. """
+
+ # Check for code hilite extension
+ if not self.checked_for_codehilite:
+ for ext in self.markdown.registeredExtensions:
+ if isinstance(ext, CodeHiliteExtension):
+ self.codehilite_conf = ext.config
+ break
+
+ self.checked_for_codehilite = True
+
text = "\n".join(lines)
while 1:
m = FENCED_BLOCK_RE.search(text)
lang = ''
if m.group('lang'):
lang = LANG_TAG % m.group('lang')
- code = CODE_WRAP % (lang, self._escape(m.group('code')))
+
+ # If config is not empty, then the codehighlite extension
+ # is enabled, so we call it to highlite the code
+ if self.codehilite_conf:
+ highliter = CodeHilite(m.group('code'),
+ linenos=self.codehilite_conf['force_linenos'][0],
+ guess_lang=self.codehilite_conf['guess_lang'][0],
+ css_class=self.codehilite_conf['css_class'][0],
+ style=self.codehilite_conf['pygments_style'][0],
+ lang=(m.group('lang') or None),
+ noclasses=self.codehilite_conf['noclasses'][0])
+
+ code = highliter.hilite()
+ else:
+ code = CODE_WRAP % (lang, self._escape(m.group('code')))
+
placeholder = self.markdown.htmlStash.store(code, safe=True)
text = '%s\n%s\n%s'% (text[:m.start()], placeholder, text[m.end():])
else:
def makeExtension(configs=None):
- return FencedCodeExtension()
+ return FencedCodeExtension(configs=configs)
if __name__ == "__main__":
"""
-import re, markdown
-from markdown import etree
+import re
+import markdown
+from markdown.util import etree
FN_BACKLINK_TEXT = "zz1337820767766393qq"
NBSP_PLACEHOLDER = "qq3936677670287331zz"
-DEF_RE = re.compile(r'(\ ?\ ?\ ?)\[\^([^\]]*)\]:\s*(.*)')
+DEF_RE = re.compile(r'[ ]{0,3}\[\^([^\]]*)\]:\s*(.*)')
TABBED_RE = re.compile(r'((\t)|( ))(.*)')
class FootnoteExtension(markdown.Extension):
'UNIQUE_IDS':
[False,
"Avoid name collisions across "
- "multiple calls to reset()."]}
+ "multiple calls to reset()."],
+ "BACKLINK_TEXT":
+ ["↩",
+ "The text string that links from the footnote to the reader's place."]
+ }
for key, value in configs:
self.config[key][0] = value
md.inlinePatterns.add("footnote", FootnotePattern(FOOTNOTE_RE, self),
"<reference")
# Insert a tree-processor that would actually add the footnote div
- # This must be before the inline treeprocessor so inline patterns
- # run on the contents of the div.
+ # This must be before all other treeprocessors (i.e., inline and
+ # codehilite) so they can run on the the contents of the div.
md.treeprocessors.add("footnote", FootnoteTreeprocessor(self),
- "<inline")
+ "_begin")
# Insert a postprocessor after amp_substitute oricessor
md.postprocessors.add("footnote", FootnotePostprocessor(self),
">amp_substitute")
for child in element:
if child.text:
if child.text.find(self.getConfig("PLACE_MARKER")) > -1:
- return child, True
+ return child, element, True
if child.tail:
if child.tail.find(self.getConfig("PLACE_MARKER")) > -1:
- return (child, element), False
+ return child, element, False
finder(child)
return None
self.footnotes = footnotes
def run(self, lines):
- lines = self._handleFootnoteDefinitions(lines)
- text = "\n".join(lines)
- return text.split("\n")
-
- def _handleFootnoteDefinitions(self, lines):
"""
- Recursively find all footnote definitions in lines.
+ Loop through lines and find, set, and remove footnote definitions.
Keywords:
* lines: A list of lines of text
-
- Return: A list of lines with footnote definitions removed.
-
- """
- i, id, footnote = self._findFootnoteDefinition(lines)
-
- if id :
- plain = lines[:i]
- detabbed, theRest = self.detectTabbed(lines[i+1:])
- self.footnotes.setFootnote(id,
- footnote + "\n"
- + "\n".join(detabbed))
- more_plain = self._handleFootnoteDefinitions(theRest)
- return plain + [""] + more_plain
- else :
- return lines
-
- def _findFootnoteDefinition(self, lines):
- """
- Find the parts of a footnote definition.
- Keywords:
+ Return: A list of lines of text with footnote definitions removed.
- * lines: A list of lines of text.
-
- Return: A three item tuple containing the index of the first line of a
- footnote definition, the id of the definition and the body of the
- definition.
-
"""
- counter = 0
- for line in lines:
- m = DEF_RE.match(line)
+ newlines = []
+ i = 0
+ #import pdb; pdb.set_trace() #for i, line in enumerate(lines):
+ while True:
+ m = DEF_RE.match(lines[i])
if m:
- return counter, m.group(2), m.group(3)
- counter += 1
- return counter, None, None
+ fn, _i = self.detectTabbed(lines[i+1:])
+ fn.insert(0, m.group(2))
+ i += _i-1 # skip past footnote
+ self.footnotes.setFootnote(m.group(1), "\n".join(fn))
+ else:
+ newlines.append(lines[i])
+ if len(lines) > i+1:
+ i += 1
+ else:
+ break
+ return newlines
def detectTabbed(self, lines):
""" Find indented text and remove indent before further proccesing.
* lines: an array of strings
- Returns: a list of post processed items and the unused
- remainder of the original list
+ Returns: a list of post processed items and the index of last line.
"""
items = []
- item = -1
+ blank_line = False # have we encountered a blank line yet?
i = 0 # to keep track of where we are
def detab(line):
for line in lines:
if line.strip(): # Non-blank line
- line = detab(line)
- if line:
+ detabbed_line = detab(line)
+ if detabbed_line:
+ items.append(detabbed_line)
+ i += 1
+ continue
+ elif not blank_line and not DEF_RE.match(line):
+ # not tabbed but still part of first par.
items.append(line)
i += 1
continue
else:
- return items, lines[i:]
+ return items, i+1
else: # Blank line: _maybe_ we are done.
+ blank_line = True
i += 1 # advance
# Find the next non-blank line
else:
i += 1
- return items, lines[i:]
+ return items, i
class FootnotePattern(markdown.inlinepatterns.Pattern):
self.footnotes = footnotes
def handleMatch(self, m):
- sup = etree.Element("sup")
- a = etree.SubElement(sup, "a")
id = m.group(2)
- sup.set('id', self.footnotes.makeFootnoteRefId(id))
- a.set('href', '#' + self.footnotes.makeFootnoteId(id))
- a.set('rel', 'footnote')
- a.text = str(self.footnotes.footnotes.index(id) + 1)
- return sup
+ if id in self.footnotes.footnotes.keys():
+ sup = etree.Element("sup")
+ a = etree.SubElement(sup, "a")
+ sup.set('id', self.footnotes.makeFootnoteRefId(id))
+ a.set('href', '#' + self.footnotes.makeFootnoteId(id))
+ a.set('rel', 'footnote')
+ a.text = unicode(self.footnotes.footnotes.index(id) + 1)
+ return sup
+ else:
+ return None
class FootnoteTreeprocessor(markdown.treeprocessors.Treeprocessor):
if footnotesDiv:
result = self.footnotes.findFootnotesPlaceholder(root)
if result:
- node, isText = result
+ child, parent, isText = result
+ ind = parent.getchildren().index(child)
if isText:
- node.text = None
- node.getchildren().insert(0, footnotesDiv)
+ parent.remove(child)
+ parent.insert(ind, footnotesDiv)
else:
- child, element = node
- ind = element.getchildren().find(child)
- element.getchildren().insert(ind + 1, footnotesDiv)
+ parent.insert(ind + 1, footnotesDiv)
child.tail = None
- fnPlaceholder.parent.replaceChild(fnPlaceholder, footnotesDiv)
else:
root.append(footnotesDiv)
class FootnotePostprocessor(markdown.postprocessors.Postprocessor):
""" Replace placeholders with html entities. """
+ def __init__(self, footnotes):
+ self.footnotes = footnotes
def run(self, text):
- text = text.replace(FN_BACKLINK_TEXT, "↩")
+ text = text.replace(FN_BACKLINK_TEXT, self.footnotes.getConfig("BACKLINK_TEXT"))
return text.replace(NBSP_PLACEHOLDER, " ")
def makeExtension(configs=[]):
HeaderID Extension for Python-Markdown
======================================
-Adds ability to set HTML IDs for headers.
+Auto-generate id attributes for HTML headers.
Basic usage:
>>> import markdown
- >>> text = "# Some Header # {#some_id}"
+ >>> text = "# Some Header #"
>>> md = markdown.markdown(text, ['headerid'])
- >>> md
- u'<h1 id="some_id">Some Header</h1>'
+ >>> print md
+ <h1 id="some-header">Some Header</h1>
All header IDs are unique:
>>> text = '''
... #Header
- ... #Another Header {#header}
- ... #Third Header {#header}'''
+ ... #Header
+ ... #Header'''
>>> md = markdown.markdown(text, ['headerid'])
- >>> md
- u'<h1 id="header">Header</h1>\\n<h1 id="header_1">Another Header</h1>\\n<h1 id="header_2">Third Header</h1>'
+ >>> print md
+ <h1 id="header">Header</h1>
+ <h1 id="header_1">Header</h1>
+ <h1 id="header_2">Header</h1>
To fit within a html template's hierarchy, set the header base level:
... #Some Header
... ## Next Level'''
>>> md = markdown.markdown(text, ['headerid(level=3)'])
- >>> md
- u'<h3 id="some_header">Some Header</h3>\\n<h4 id="next_level">Next Level</h4>'
+ >>> print md
+ <h3 id="some-header">Some Header</h3>
+ <h4 id="next-level">Next Level</h4>
+
+Works with inline markup.
+
+ >>> text = '#Some *Header* with [markup](http://example.com).'
+ >>> md = markdown.markdown(text, ['headerid'])
+ >>> print md
+ <h1 id="some-header-with-markup">Some <em>Header</em> with <a href="http://example.com">markup</a>.</h1>
Turn off auto generated IDs:
>>> text = '''
... # Some Header
- ... # Header with ID # { #foo }'''
+ ... # Another Header'''
>>> md = markdown.markdown(text, ['headerid(forceid=False)'])
- >>> md
- u'<h1>Some Header</h1>\\n<h1 id="foo">Header with ID</h1>'
+ >>> print md
+ <h1>Some Header</h1>
+ <h1>Another Header</h1>
Use with MetaData extension:
...
... # A Header'''
>>> md = markdown.markdown(text, ['headerid', 'meta'])
- >>> md
- u'<h2>A Header</h2>'
+ >>> print md
+ <h2>A Header</h2>
-Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/).
+Copyright 2007-2011 [Waylan Limberg](http://achinghead.com/).
-Project website: <http://www.freewisdom.org/project/python-markdown/HeaderId>
+Project website: <http://packages.python.org/Markdown/extensions/header_id.html>
Contact: markdown@freewisdom.org
License: BSD (see ../docs/LICENSE for details)
Dependencies:
* [Python 2.3+](http://python.org)
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Markdown 2.0+](http://packages.python.org/Markdown/)
"""
import markdown
-from markdown import etree
+from markdown.util import etree
import re
from string import ascii_lowercase, digits, punctuation
+import logging
+import unicodedata
-ID_CHARS = ascii_lowercase + digits + '-_'
-IDCOUNT_RE = re.compile(r'^(.*)_([0-9]+)$')
+logger = logging.getLogger('MARKDOWN')
+IDCOUNT_RE = re.compile(r'^(.*)_([0-9]+)$')
-class HeaderIdProcessor(markdown.blockprocessors.BlockProcessor):
- """ Replacement BlockProcessor for Header IDs. """
-
- # Detect a header at start of any line in block
- RE = re.compile(r"""(^|\n)
- (?P<level>\#{1,6}) # group('level') = string of hashes
- (?P<header>.*?) # group('header') = Header text
- \#* # optional closing hashes
- (?:[ \t]*\{[ \t]*\#(?P<id>[-_:a-zA-Z0-9]+)[ \t]*\})?
- (\n|$) # ^^ group('id') = id attribute
- """,
- re.VERBOSE)
- IDs = []
+def slugify(value, separator):
+ """ Slugify a string, to make it URL friendly. """
+ value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
+ value = re.sub('[^\w\s-]', '', value.decode('ascii')).strip().lower()
+ return re.sub('[%s\s]+' % separator, separator, value)
- def test(self, parent, block):
- return bool(self.RE.search(block))
- def run(self, parent, blocks):
- block = blocks.pop(0)
- m = self.RE.search(block)
+def unique(id, ids):
+ """ Ensure id is unique in set of ids. Append '_1', '_2'... if not """
+ while id in ids or not id:
+ m = IDCOUNT_RE.match(id)
if m:
- before = block[:m.start()] # All lines before header
- after = block[m.end():] # All lines after header
- if before:
- # As the header was not the first line of the block and the
- # lines before the header must be parsed first,
- # recursively parse this lines as a block.
- self.parser.parseBlocks(parent, [before])
- # Create header using named groups from RE
- start_level, force_id = self._get_meta()
- level = len(m.group('level')) + start_level
- if level > 6:
- level = 6
- h = markdown.etree.SubElement(parent, 'h%d' % level)
- h.text = m.group('header').strip()
- if m.group('id'):
- h.set('id', self._unique_id(m.group('id')))
- elif force_id:
- h.set('id', self._create_id(m.group('header').strip()))
- if after:
- # Insert remaining lines as first block for future parsing.
- blocks.insert(0, after)
+ id = '%s_%d'% (m.group(1), int(m.group(2))+1)
else:
- # This should never happen, but just in case...
- message(CRITICAL, "We've got a problem header!")
+ id = '%s_%d'% (id, 1)
+ ids.append(id)
+ return id
+
+
+def itertext(elem):
+ """ Loop through all children and return text only.
+
+ Reimplements method of same name added to ElementTree in Python 2.7
+
+ """
+ if elem.text:
+ yield elem.text
+ for e in elem:
+ for s in itertext(e):
+ yield s
+ if e.tail:
+ yield e.tail
+
+
+class HeaderIdTreeprocessor(markdown.treeprocessors.Treeprocessor):
+ """ Assign IDs to headers. """
+
+ IDs = set()
+
+ def run(self, doc):
+ start_level, force_id = self._get_meta()
+ slugify = self.config['slugify']
+ sep = self.config['separator']
+ for elem in doc.getiterator():
+ if elem.tag in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']:
+ if force_id:
+ if "id" in elem.attrib:
+ id = elem.id
+ else:
+ id = slugify(''.join(itertext(elem)), sep)
+ elem.set('id', unique(id, self.IDs))
+ if start_level:
+ level = int(elem.tag[-1]) + start_level
+ if level > 6:
+ level = 6
+ elem.tag = 'h%d' % level
+
def _get_meta(self):
""" Return meta data suported by this ext as a tuple """
- level = int(self.config['level'][0]) - 1
- force = self._str2bool(self.config['forceid'][0])
+ level = int(self.config['level']) - 1
+ force = self._str2bool(self.config['forceid'])
if hasattr(self.md, 'Meta'):
if self.md.Meta.has_key('header_level'):
level = int(self.md.Meta['header_level'][0]) - 1
return True
return default
- def _unique_id(self, id):
- """ Ensure ID is unique. Append '_1', '_2'... if not """
- while id in self.IDs:
- m = IDCOUNT_RE.match(id)
- if m:
- id = '%s_%d'% (m.group(1), int(m.group(2))+1)
- else:
- id = '%s_%d'% (id, 1)
- self.IDs.append(id)
- return id
-
- def _create_id(self, header):
- """ Return ID from Header text. """
- h = ''
- for c in header.lower().replace(' ', '_'):
- if c in ID_CHARS:
- h += c
- elif c not in punctuation:
- h += '+'
- return self._unique_id(h)
-
class HeaderIdExtension (markdown.Extension):
def __init__(self, configs):
# set defaults
self.config = {
'level' : ['1', 'Base level for headers.'],
- 'forceid' : ['True', 'Force all headers to have an id.']
+ 'forceid' : ['True', 'Force all headers to have an id.'],
+ 'separator' : ['-', 'Word separator.'],
+ 'slugify' : [slugify, 'Callable to generate anchors'],
}
for key, value in configs:
def extendMarkdown(self, md, md_globals):
md.registerExtension(self)
- self.processor = HeaderIdProcessor(md.parser)
+ self.processor = HeaderIdTreeprocessor()
self.processor.md = md
- self.processor.config = self.config
+ self.processor.config = self.getConfigs()
# Replace existing hasheader in place.
- md.parser.blockprocessors['hashheader'] = self.processor
+ md.treeprocessors.add('headerid', self.processor, '>inline')
def reset(self):
self.processor.IDs = []
Dependencies:
* [Python2.3+](http://python.org)
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Markdown 2.0+](http://packages.python.org/Markdown/)
* [HTML Tidy](http://utidylib.berlios.de/)
* [uTidylib](http://utidylib.berlios.de/)
"""
import markdown
-import tidy
+try:
+ import tidy
+except ImportError:
+ tidy = None
class TidyExtension(markdown.Extension):
# Set defaults to match typical markdown behavior.
self.config = dict(output_xhtml=1,
show_body_only=1,
+ char_encoding='utf8'
)
# Merge in user defined configs overriding any present if nessecary.
for c in configs:
# Save options to markdown instance
md.tidy_options = self.config
# Add TidyProcessor to postprocessors
- md.postprocessors['tidy'] = TidyProcessor(md)
+ if tidy:
+ md.postprocessors['tidy'] = TidyProcessor(md)
class TidyProcessor(markdown.postprocessors.Postprocessor):
def run(self, text):
# Pass text to Tidy. As Tidy does not accept unicode we need to encode
# it and decode its return value.
- return unicode(tidy.parseString(text.encode('utf-8'),
- **self.markdown.tidy_options))
+ enc = self.markdown.tidy_options.get('char_encoding', 'utf8')
+ return unicode(tidy.parseString(text.encode(enc),
+ **self.markdown.tidy_options),
+ encoding=enc)
def makeExtension(configs=None):
+++ /dev/null
-"""
-========================= IMAGE LINKS =================================
-
-
-Turns paragraphs like
-
-<~~~~~~~~~~~~~~~~~~~~~~~~
-dir/subdir
-dir/subdir
-dir/subdir
-~~~~~~~~~~~~~~
-dir/subdir
-dir/subdir
-dir/subdir
-~~~~~~~~~~~~~~~~~~~>
-
-Into mini-photo galleries.
-
-"""
-
-import re, markdown
-import url_manager
-
-
-IMAGE_LINK = """<a href="%s"><img src="%s" title="%s"/></a>"""
-SLIDESHOW_LINK = """<a href="%s" target="_blank">[slideshow]</a>"""
-ALBUM_LINK = """ <a href="%s">[%s]</a>"""
-
-
-class ImageLinksExtension(markdown.Extension):
-
- def extendMarkdown(self, md, md_globals):
-
- md.preprocessors.add("imagelink", ImageLinkPreprocessor(md), "_begin")
-
-
-class ImageLinkPreprocessor(markdown.preprocessors.Preprocessor):
-
- def run(self, lines):
-
- url = url_manager.BlogEntryUrl(url_manager.BlogUrl("all"),
- "2006/08/29/the_rest_of_our")
-
-
- all_images = []
- blocks = []
- in_image_block = False
-
- new_lines = []
-
- for line in lines:
-
- if line.startswith("<~~~~~~~"):
- albums = []
- rows = []
- in_image_block = True
-
- if not in_image_block:
-
- new_lines.append(line)
-
- else:
-
- line = line.strip()
-
- if line.endswith("~~~~~~>") or not line:
- in_image_block = False
- new_block = "<div><br/><center><span class='image-links'>\n"
-
- album_url_hash = {}
-
- for row in rows:
- for photo_url, title in row:
- new_block += " "
- new_block += IMAGE_LINK % (photo_url,
- photo_url.get_thumbnail(),
- title)
-
- album_url_hash[str(photo_url.get_album())] = 1
-
- new_block += "<br/>"
-
- new_block += "</span>"
- new_block += SLIDESHOW_LINK % url.get_slideshow()
-
- album_urls = album_url_hash.keys()
- album_urls.sort()
-
- if len(album_urls) == 1:
- new_block += ALBUM_LINK % (album_urls[0], "complete album")
- else :
- for i in range(len(album_urls)) :
- new_block += ALBUM_LINK % (album_urls[i],
- "album %d" % (i + 1) )
-
- new_lines.append(new_block + "</center><br/></div>")
-
- elif line[1:6] == "~~~~~" :
- rows.append([]) # start a new row
- else :
- parts = line.split()
- line = parts[0]
- title = " ".join(parts[1:])
-
- album, photo = line.split("/")
- photo_url = url.get_photo(album, photo,
- len(all_images)+1)
- all_images.append(photo_url)
- rows[-1].append((photo_url, title))
-
- if not album in albums :
- albums.append(album)
-
- return new_lines
-
-
-def makeExtension(configs):
- return ImageLinksExtension(configs)
-
... The body. This is paragraph one.
... '''
>>> md = markdown.Markdown(['meta'])
- >>> md.convert(text)
- u'<p>The body. This is paragraph one.</p>'
- >>> md.Meta
+ >>> print md.convert(text)
+ <p>The body. This is paragraph one.</p>
+ >>> print md.Meta
{u'blank_data': [u''], u'author': [u'Waylan Limberg', u'John Doe'], u'title': [u'A Test Doc.']}
Make sure text without Meta Data still works (markdown < 1.6b returns a <p>).
>>> text = ' Some Code - not extra lines of meta data.'
>>> md = markdown.Markdown(['meta'])
- >>> md.convert(text)
- u'<pre><code>Some Code - not extra lines of meta data.\\n</code></pre>'
+ >>> print md.convert(text)
+ <pre><code>Some Code - not extra lines of meta data.
+ </code></pre>
>>> md.Meta
{}
Copyright 2007-2008 [Waylan Limberg](http://achinghead.com).
-Project website: <http://www.freewisdom.org/project/python-markdown/Meta-Data>
+Project website: <http://packages.python.org/Markdown/meta_data.html>
Contact: markdown@freewisdom.org
-License: BSD (see ../docs/LICENSE for details)
+License: BSD (see ../LICENSE.md for details)
"""
+import re
-import markdown, re
+import markdown
# Global Vars
META_RE = re.compile(r'^[ ]{0,3}(?P<key>[A-Za-z0-9_-]+):\s*(?P<value>.*)')
m1 = META_RE.match(line)
if m1:
key = m1.group('key').lower().strip()
- meta[key] = [m1.group('value').strip()]
+ value = m1.group('value').strip()
+ try:
+ meta[key].append(value)
+ except KeyError:
+ meta[key] = [value]
else:
m2 = META_MORE_RE.match(line)
if m2 and key:
--- /dev/null
+"""
+NL2BR Extension
+===============
+
+A Python-Markdown extension to treat newlines as hard breaks; like
+StackOverflow and GitHub flavored Markdown do.
+
+Usage:
+
+ >>> import markdown
+ >>> print markdown.markdown('line 1\\nline 2', extensions=['nl2br'])
+ <p>line 1<br />
+ line 2</p>
+
+Copyright 2011 [Brian Neal](http://deathofagremmie.com/)
+
+Dependencies:
+* [Python 2.4+](http://python.org)
+* [Markdown 2.1+](http://packages.python.org/Markdown/)
+
+"""
+
+import markdown
+
+BR_RE = r'\n'
+
+class Nl2BrExtension(markdown.Extension):
+
+ def extendMarkdown(self, md, md_globals):
+ br_tag = markdown.inlinepatterns.SubstituteTagPattern(BR_RE, 'br')
+ md.inlinePatterns.add('nl', br_tag, '_end')
+
+
+def makeExtension(configs=None):
+ return Nl2BrExtension(configs)
+
import markdown
-from markdown import etree
+from markdown.util import etree
-DEFAULT_URL = "http://www.freewisdom.org/projects/python-markdown/"
+DEFAULT_URL = "http://packages.python.org/Markdown/"
DEFAULT_CREATOR = "Yuri Takhteyev"
DEFAULT_TITLE = "Markdown in Python"
-GENERATOR = "http://www.freewisdom.org/projects/python-markdown/markdown2rss"
+GENERATOR = "http://packages.python.org/Markdown/extensions/rss.html"
month_map = { "Jan" : "01",
"Feb" : "02",
--- /dev/null
+#!/usr/bin/env python
+"""
+Sane List Extension for Python-Markdown
+=======================================
+
+Modify the behavior of Lists in Python-Markdown t act in a sane manor.
+
+In standard Markdown sytex, the following would constitute a single
+ordered list. However, with this extension, the output would include
+two lists, the first an ordered list and the second and unordered list.
+
+ 1. ordered
+ 2. list
+
+ * unordered
+ * list
+
+Copyright 2011 - [Waylan Limberg](http://achinghead.com)
+
+"""
+
+import re
+import markdown
+
+
+class SaneOListProcessor(markdown.blockprocessors.OListProcessor):
+
+ CHILD_RE = re.compile(r'^[ ]{0,3}((\d+\.))[ ]+(.*)')
+ SIBLING_TAGS = ['ol']
+
+
+class SaneUListProcessor(markdown.blockprocessors.UListProcessor):
+
+ CHILD_RE = re.compile(r'^[ ]{0,3}(([*+-]))[ ]+(.*)')
+ SIBLING_TAGS = ['ul']
+
+
+class SaneListExtension(markdown.Extension):
+ """ Add sane lists to Markdown. """
+
+ def extendMarkdown(self, md, md_globals):
+ """ Override existing Processors. """
+ md.parser.blockprocessors['olist'] = SaneOListProcessor(md.parser)
+ md.parser.blockprocessors['ulist'] = SaneUListProcessor(md.parser)
+
+
+def makeExtension(configs={}):
+ return SaneListExtension(configs=configs)
+
--- /dev/null
+'''
+Smart_Strong Extension for Python-Markdown
+==========================================
+
+This extention adds smarter handling of double underscores within words.
+
+Simple Usage:
+
+ >>> import markdown
+ >>> print markdown.markdown('Text with double__underscore__words.',
+ ... extensions=['smart_strong'])
+ <p>Text with double__underscore__words.</p>
+ >>> print markdown.markdown('__Strong__ still works.',
+ ... extensions=['smart_strong'])
+ <p><strong>Strong</strong> still works.</p>
+ >>> print markdown.markdown('__this__works__too__.',
+ ... extensions=['smart_strong'])
+ <p><strong>this__works__too</strong>.</p>
+
+Copyright 2011
+[Waylan Limberg](http://achinghead.com)
+
+'''
+
+import re
+import markdown
+from markdown.inlinepatterns import SimpleTagPattern
+
+SMART_STRONG_RE = r'(?<!\w)(_{2})(?!_)(.+?)(?<!_)\2(?!\w)'
+STRONG_RE = r'(\*{2})(.+?)\2'
+
+class SmartEmphasisExtension(markdown.extensions.Extension):
+ """ Add smart_emphasis extension to Markdown class."""
+
+ def extendMarkdown(self, md, md_globals):
+ """ Modify inline patterns. """
+ md.inlinePatterns['strong'] = SimpleTagPattern(STRONG_RE, 'strong')
+ md.inlinePatterns.add('strong2', SimpleTagPattern(SMART_STRONG_RE, 'strong'), '>emphasis2')
+
+def makeExtension(configs={}):
+ return SmartEmphasisExtension(configs=dict(configs))
+
+if __name__ == '__main__':
+ import doctest
+ doctest.testmod()
-#!/usr/bin/env Python
+#!/usr/bin/env python
"""
Tables Extension for Python-Markdown
====================================
Copyright 2009 - [Waylan Limberg](http://achinghead.com)
"""
import markdown
-from markdown import etree
+from markdown.util import etree
class TableProcessor(markdown.blockprocessors.BlockProcessor):
rows = block.split('\n')
return (len(rows) > 2 and '|' in rows[0] and
'|' in rows[1] and '-' in rows[1] and
- rows[1][0] in ['|', ':', '-'])
+ rows[1].strip()[0] in ['|', ':', '-'])
def run(self, parent, blocks):
""" Parse a table block and build table. """
block = blocks.pop(0).split('\n')
- header = block[:2]
+ header = block[0].strip()
+ seperator = block[1].strip()
rows = block[2:]
# Get format type (bordered by pipes or not)
border = False
- if header[0].startswith('|'):
+ if header.startswith('|'):
border = True
# Get alignment of columns
align = []
- for c in self._split_row(header[1], border):
+ for c in self._split_row(seperator, border):
if c.startswith(':') and c.endswith(':'):
align.append('center')
elif c.startswith(':'):
# Build table
table = etree.SubElement(parent, 'table')
thead = etree.SubElement(table, 'thead')
- self._build_row(header[0], thead, align, border)
+ self._build_row(header, thead, align, border)
tbody = etree.SubElement(table, 'tbody')
for row in rows:
- self._build_row(row, tbody, align, border)
+ self._build_row(row.strip(), tbody, align, border)
def _build_row(self, row, parent, align, border):
""" Given a row of text, build table cells. """
(c) 2008 [Jack Miller](http://codezen.org)
Dependencies:
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Markdown 2.1+](http://packages.python.org/Markdown/)
"""
import markdown
-from markdown import etree
+from markdown.util import etree
+from markdown.extensions.headerid import slugify, unique, itertext
+
import re
+
class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
# Iterator wrapper to get parent and child all at once
def iterparent(self, root):
yield parent, child
def run(self, doc):
+ marker_found = False
+
div = etree.Element("div")
div.attrib["class"] = "toc"
last_li = None
# Add title to the div
- if self.config["title"][0]:
+ if self.config["title"]:
header = etree.SubElement(div, "span")
header.attrib["class"] = "toctitle"
- header.text = self.config["title"][0]
+ header.text = self.config["title"]
level = 0
list_stack=[div]
used_ids.append(c.attrib["id"])
for (p, c) in self.iterparent(doc):
- if not c.text:
+ text = ''.join(itertext(c)).strip()
+ if not text:
continue
# To keep the output from screwing up the
# would causes an enless loop of placing a new TOC
# inside previously generated TOC.
- if c.text.find(self.config["marker"][0]) > -1 and not header_rgx.match(c.tag):
+ if c.text and c.text.strip() == self.config["marker"] and \
+ not header_rgx.match(c.tag) and c.tag not in ['pre', 'code']:
for i in range(len(p)):
if p[i] == c:
p[i] = div
break
+ marker_found = True
if header_rgx.match(c.tag):
- tag_level = int(c.tag[-1])
-
- while tag_level < level:
- list_stack.pop()
- level -= 1
-
- if tag_level > level:
- newlist = etree.Element("ul")
- if last_li:
- last_li.append(newlist)
+ try:
+ tag_level = int(c.tag[-1])
+
+ while tag_level < level:
+ list_stack.pop()
+ level -= 1
+
+ if tag_level > level:
+ newlist = etree.Element("ul")
+ if last_li:
+ last_li.append(newlist)
+ else:
+ list_stack[-1].append(newlist)
+ list_stack.append(newlist)
+ if level == 0:
+ level = tag_level
+ else:
+ level += 1
+
+ # Do not override pre-existing ids
+ if not "id" in c.attrib:
+ id = unique(self.config["slugify"](text, '-'), used_ids)
+ c.attrib["id"] = id
else:
- list_stack[-1].append(newlist)
- list_stack.append(newlist)
- level += 1
-
- # Do not override pre-existing ids
- if not "id" in c.attrib:
- id = self.config["slugify"][0](c.text)
- if id in used_ids:
- ctr = 1
- while "%s_%d" % (id, ctr) in used_ids:
- ctr += 1
- id = "%s_%d" % (id, ctr)
- used_ids.append(id)
- c.attrib["id"] = id
- else:
- id = c.attrib["id"]
-
- # List item link, to be inserted into the toc div
- last_li = etree.Element("li")
- link = etree.SubElement(last_li, "a")
- link.text = c.text
- link.attrib["href"] = '#' + id
-
- if int(self.config["anchorlink"][0]):
- anchor = etree.SubElement(c, "a")
- anchor.text = c.text
- anchor.attrib["href"] = "#" + id
- anchor.attrib["class"] = "toclink"
- c.text = ""
-
- list_stack[-1].append(last_li)
+ id = c.attrib["id"]
+
+ # List item link, to be inserted into the toc div
+ last_li = etree.Element("li")
+ link = etree.SubElement(last_li, "a")
+ link.text = text
+ link.attrib["href"] = '#' + id
+
+ if self.config["anchorlink"] in [1, '1', True, 'True', 'true']:
+ anchor = etree.Element("a")
+ anchor.text = c.text
+ anchor.attrib["href"] = "#" + id
+ anchor.attrib["class"] = "toclink"
+ c.text = ""
+ for elem in c.getchildren():
+ anchor.append(elem)
+ c.remove(elem)
+ c.append(anchor)
+
+ list_stack[-1].append(last_li)
+ except IndexError:
+ # We have bad ordering of headers. Just move on.
+ pass
+ if not marker_found:
+ # searialize and attach to markdown instance.
+ prettify = self.markdown.treeprocessors.get('prettify')
+ if prettify: prettify.run(div)
+ toc = self.markdown.serializer(div)
+ for pp in self.markdown.postprocessors.values():
+ toc = pp.run(toc)
+ self.markdown.toc = toc
class TocExtension(markdown.Extension):
def __init__(self, configs):
self.config = { "marker" : ["[TOC]",
"Text to find and replace with Table of Contents -"
"Defaults to \"[TOC]\""],
- "slugify" : [self.slugify,
+ "slugify" : [slugify,
"Function to generate anchors based on header text-"
- "Defaults to a built in slugify function."],
+ "Defaults to the headerid ext's slugify function."],
"title" : [None,
"Title to insert into TOC <div> - "
"Defaults to None"],
for key, value in configs:
self.setConfig(key, value)
- # This is exactly the same as Django's slugify
- def slugify(self, value):
- """ Slugify a string, to make it URL friendly. """
- import unicodedata
- value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
- value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
- return re.sub('[-\s]+','-',value)
-
def extendMarkdown(self, md, md_globals):
tocext = TocTreeprocessor(md)
- tocext.config = self.config
- md.treeprocessors.add("toc", tocext, "_begin")
+ tocext.config = self.getConfigs()
+ # Headerid ext is set to '>inline'. With this set to '<prettify',
+ # it should always come after headerid ext (and honor ids assinged
+ # by the header id extension) if both are used. Same goes for
+ # attr_list extension. This must come last because we don't want
+ # to redefine ids after toc is created. But we do want toc prettified.
+ md.treeprocessors.add("toc", tocext, "<prettify")
def makeExtension(configs={}):
return TocExtension(configs=configs)
>>> import markdown
>>> text = "Some text with a [[WikiLink]]."
>>> html = markdown.markdown(text, ['wikilinks'])
- >>> html
- u'<p>Some text with a <a class="wikilink" href="/WikiLink/">WikiLink</a>.</p>'
+ >>> print html
+ <p>Some text with a <a class="wikilink" href="/WikiLink/">WikiLink</a>.</p>
Whitespace behavior:
- >>> markdown.markdown('[[ foo bar_baz ]]', ['wikilinks'])
- u'<p><a class="wikilink" href="/foo_bar_baz/">foo bar_baz</a></p>'
- >>> markdown.markdown('foo [[ ]] bar', ['wikilinks'])
- u'<p>foo bar</p>'
+ >>> print markdown.markdown('[[ foo bar_baz ]]', ['wikilinks'])
+ <p><a class="wikilink" href="/foo_bar_baz/">foo bar_baz</a></p>
+ >>> print markdown.markdown('foo [[ ]] bar', ['wikilinks'])
+ <p>foo bar</p>
To define custom settings the simple way:
- >>> markdown.markdown(text,
+ >>> print markdown.markdown(text,
... ['wikilinks(base_url=/wiki/,end_url=.html,html_class=foo)']
... )
- u'<p>Some text with a <a class="foo" href="/wiki/WikiLink.html">WikiLink</a>.</p>'
+ <p>Some text with a <a class="foo" href="/wiki/WikiLink.html">WikiLink</a>.</p>
Custom settings the complex way:
... ('end_url', '.html'),
... ('html_class', '') ]},
... safe_mode = True)
- >>> md.convert(text)
- u'<p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p>'
+ >>> print md.convert(text)
+ <p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p>
Use MetaData with mdx_meta.py (Note the blank html_class in MetaData):
...
... Some text with a [[WikiLink]]."""
>>> md = markdown.Markdown(extensions=['meta', 'wikilinks'])
- >>> md.convert(text)
- u'<p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p>'
+ >>> print md.convert(text)
+ <p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p>
MetaData should not carry over to next document:
- >>> md.convert("No [[MetaData]] here.")
- u'<p>No <a class="wikilink" href="/MetaData/">MetaData</a> here.</p>'
+ >>> print md.convert("No [[MetaData]] here.")
+ <p>No <a class="wikilink" href="/MetaData/">MetaData</a> here.</p>
Define a custom URL builder:
... return '/bar/'
>>> md = markdown.Markdown(extensions=['wikilinks'],
... extension_configs={'wikilinks' : [('build_url', my_url_builder)]})
- >>> md.convert('[[foo]]')
- u'<p><a class="wikilink" href="/bar/">foo</a></p>'
+ >>> print md.convert('[[foo]]')
+ <p><a class="wikilink" href="/bar/">foo</a></p>
From the command line:
Dependencies:
* [Python 2.3+](http://python.org)
-* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/)
+* [Markdown 2.0+](http://packages.python.org/Markdown/)
'''
import markdown
self.md = md
# append to end of inline patterns
- WIKILINK_RE = r'\[\[([A-Za-z0-9_ -]+)\]\]'
- wikilinkPattern = WikiLinks(WIKILINK_RE, self.config)
+ WIKILINK_RE = r'\[\[([\w0-9_ -]+)\]\]'
+ wikilinkPattern = WikiLinks(WIKILINK_RE, self.getConfigs())
wikilinkPattern.md = md
md.inlinePatterns.add('wikilink', wikilinkPattern, "<not_strong")
if m.group(2).strip():
base_url, end_url, html_class = self._getMeta()
label = m.group(2).strip()
- url = self.config['build_url'][0](label, base_url, end_url)
- a = markdown.etree.Element('a')
+ url = self.config['build_url'](label, base_url, end_url)
+ a = markdown.util.etree.Element('a')
a.text = label
a.set('href', url)
if html_class:
def _getMeta(self):
""" Return meta data or config data. """
- base_url = self.config['base_url'][0]
- end_url = self.config['end_url'][0]
- html_class = self.config['html_class'][0]
+ base_url = self.config['base_url']
+ end_url = self.config['end_url']
+ html_class = self.config['html_class']
if hasattr(self.md, 'Meta'):
if self.md.Meta.has_key('wiki_base_url'):
base_url = self.md.Meta['wiki_base_url'][0]
+++ /dev/null
-# markdown/html4.py
-#
-# Add html4 serialization to older versions of Elementree
-# Taken from ElementTree 1.3 preview with slight modifications
-#
-# Copyright (c) 1999-2007 by Fredrik Lundh. All rights reserved.
-#
-# fredrik@pythonware.com
-# http://www.pythonware.com
-#
-# --------------------------------------------------------------------
-# The ElementTree toolkit is
-#
-# Copyright (c) 1999-2007 by Fredrik Lundh
-#
-# By obtaining, using, and/or copying this software and/or its
-# associated documentation, you agree that you have read, understood,
-# and will comply with the following terms and conditions:
-#
-# Permission to use, copy, modify, and distribute this software and
-# its associated documentation for any purpose and without fee is
-# hereby granted, provided that the above copyright notice appears in
-# all copies, and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of
-# Secret Labs AB or the author not be used in advertising or publicity
-# pertaining to distribution of the software without specific, written
-# prior permission.
-#
-# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
-# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
-# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
-# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
-# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-# OF THIS SOFTWARE.
-# --------------------------------------------------------------------
-
-
-import markdown
-ElementTree = markdown.etree.ElementTree
-QName = markdown.etree.QName
-Comment = markdown.etree.Comment
-PI = markdown.etree.PI
-ProcessingInstruction = markdown.etree.ProcessingInstruction
-
-HTML_EMPTY = ("area", "base", "basefont", "br", "col", "frame", "hr",
- "img", "input", "isindex", "link", "meta" "param")
-
-try:
- HTML_EMPTY = set(HTML_EMPTY)
-except NameError:
- pass
-
-_namespace_map = {
- # "well-known" namespace prefixes
- "http://www.w3.org/XML/1998/namespace": "xml",
- "http://www.w3.org/1999/xhtml": "html",
- "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
- "http://schemas.xmlsoap.org/wsdl/": "wsdl",
- # xml schema
- "http://www.w3.org/2001/XMLSchema": "xs",
- "http://www.w3.org/2001/XMLSchema-instance": "xsi",
- # dublic core
- "http://purl.org/dc/elements/1.1/": "dc",
-}
-
-
-def _raise_serialization_error(text):
- raise TypeError(
- "cannot serialize %r (type %s)" % (text, type(text).__name__)
- )
-
-def _encode(text, encoding):
- try:
- return text.encode(encoding, "xmlcharrefreplace")
- except (TypeError, AttributeError):
- _raise_serialization_error(text)
-
-def _escape_cdata(text, encoding):
- # escape character data
- try:
- # it's worth avoiding do-nothing calls for strings that are
- # shorter than 500 character, or so. assume that's, by far,
- # the most common case in most applications.
- if "&" in text:
- text = text.replace("&", "&")
- if "<" in text:
- text = text.replace("<", "<")
- if ">" in text:
- text = text.replace(">", ">")
- return text.encode(encoding, "xmlcharrefreplace")
- except (TypeError, AttributeError):
- _raise_serialization_error(text)
-
-
-def _escape_attrib(text, encoding):
- # escape attribute value
- try:
- if "&" in text:
- text = text.replace("&", "&")
- if "<" in text:
- text = text.replace("<", "<")
- if ">" in text:
- text = text.replace(">", ">")
- if "\"" in text:
- text = text.replace("\"", """)
- if "\n" in text:
- text = text.replace("\n", " ")
- return text.encode(encoding, "xmlcharrefreplace")
- except (TypeError, AttributeError):
- _raise_serialization_error(text)
-
-def _escape_attrib_html(text, encoding):
- # escape attribute value
- try:
- if "&" in text:
- text = text.replace("&", "&")
- if ">" in text:
- text = text.replace(">", ">")
- if "\"" in text:
- text = text.replace("\"", """)
- return text.encode(encoding, "xmlcharrefreplace")
- except (TypeError, AttributeError):
- _raise_serialization_error(text)
-
-
-def _serialize_html(write, elem, encoding, qnames, namespaces):
- tag = elem.tag
- text = elem.text
- if tag is Comment:
- write("<!--%s-->" % _escape_cdata(text, encoding))
- elif tag is ProcessingInstruction:
- write("<?%s?>" % _escape_cdata(text, encoding))
- else:
- tag = qnames[tag]
- if tag is None:
- if text:
- write(_escape_cdata(text, encoding))
- for e in elem:
- _serialize_html(write, e, encoding, qnames, None)
- else:
- write("<" + tag)
- items = elem.items()
- if items or namespaces:
- items.sort() # lexical order
- for k, v in items:
- if isinstance(k, QName):
- k = k.text
- if isinstance(v, QName):
- v = qnames[v.text]
- else:
- v = _escape_attrib_html(v, encoding)
- # FIXME: handle boolean attributes
- write(" %s=\"%s\"" % (qnames[k], v))
- if namespaces:
- items = namespaces.items()
- items.sort(key=lambda x: x[1]) # sort on prefix
- for v, k in items:
- if k:
- k = ":" + k
- write(" xmlns%s=\"%s\"" % (
- k.encode(encoding),
- _escape_attrib(v, encoding)
- ))
- write(">")
- tag = tag.lower()
- if text:
- if tag == "script" or tag == "style":
- write(_encode(text, encoding))
- else:
- write(_escape_cdata(text, encoding))
- for e in elem:
- _serialize_html(write, e, encoding, qnames, None)
- if tag not in HTML_EMPTY:
- write("</" + tag + ">")
- if elem.tail:
- write(_escape_cdata(elem.tail, encoding))
-
-def write_html(root, f,
- # keyword arguments
- encoding="us-ascii",
- default_namespace=None):
- assert root is not None
- if not hasattr(f, "write"):
- f = open(f, "wb")
- write = f.write
- if not encoding:
- encoding = "us-ascii"
- qnames, namespaces = _namespaces(
- root, encoding, default_namespace
- )
- _serialize_html(
- write, root, encoding, qnames, namespaces
- )
-
-# --------------------------------------------------------------------
-# serialization support
-
-def _namespaces(elem, encoding, default_namespace=None):
- # identify namespaces used in this tree
-
- # maps qnames to *encoded* prefix:local names
- qnames = {None: None}
-
- # maps uri:s to prefixes
- namespaces = {}
- if default_namespace:
- namespaces[default_namespace] = ""
-
- def encode(text):
- return text.encode(encoding)
-
- def add_qname(qname):
- # calculate serialized qname representation
- try:
- if qname[:1] == "{":
- uri, tag = qname[1:].split("}", 1)
- prefix = namespaces.get(uri)
- if prefix is None:
- prefix = _namespace_map.get(uri)
- if prefix is None:
- prefix = "ns%d" % len(namespaces)
- if prefix != "xml":
- namespaces[uri] = prefix
- if prefix:
- qnames[qname] = encode("%s:%s" % (prefix, tag))
- else:
- qnames[qname] = encode(tag) # default element
- else:
- if default_namespace:
- # FIXME: can this be handled in XML 1.0?
- raise ValueError(
- "cannot use non-qualified names with "
- "default_namespace option"
- )
- qnames[qname] = encode(qname)
- except TypeError:
- _raise_serialization_error(qname)
-
- # populate qname and namespaces table
- try:
- iterate = elem.iter
- except AttributeError:
- iterate = elem.getiterator # cET compatibility
- for elem in iterate():
- tag = elem.tag
- if isinstance(tag, QName) and tag.text not in qnames:
- add_qname(tag.text)
- elif isinstance(tag, basestring):
- if tag not in qnames:
- add_qname(tag)
- elif tag is not None and tag is not Comment and tag is not PI:
- _raise_serialization_error(tag)
- for key, value in elem.items():
- if isinstance(key, QName):
- key = key.text
- if key not in qnames:
- add_qname(key)
- if isinstance(value, QName) and value.text not in qnames:
- add_qname(value.text)
- text = elem.text
- if isinstance(text, QName) and text.text not in qnames:
- add_qname(text.text)
- return qnames, namespaces
-
-def to_html_string(element, encoding=None):
- class dummy:
- pass
- data = []
- file = dummy()
- file.write = data.append
- write_html(ElementTree(element).getroot(),file,encoding)
- return "".join(data)
* finally we apply strong and emphasis
"""
-import markdown
+import util
+import odict
import re
from urlparse import urlparse, urlunparse
import sys
-if sys.version >= "3.0":
- from html import entities as htmlentitydefs
-else:
- import htmlentitydefs
+# If you see an ImportError for htmlentitydefs after using 2to3 to convert for
+# use by Python3, then you are probably using the buggy version from Python 3.0.
+# We recomend using the tool from Python 3.1 even if you will be running the
+# code on Python 3.0. The following line should be converted by the tool to:
+# `from html import entities` and later calls to `htmlentitydefs` should be
+# changed to call `entities`. Python 3.1's tool does this but 3.0's does not.
+import htmlentitydefs
+
+
+def build_inlinepatterns(md_instance, **kwargs):
+ """ Build the default set of inline patterns for Markdown. """
+ inlinePatterns = odict.OrderedDict()
+ inlinePatterns["backtick"] = BacktickPattern(BACKTICK_RE)
+ inlinePatterns["escape"] = EscapePattern(ESCAPE_RE, md_instance)
+ inlinePatterns["reference"] = ReferencePattern(REFERENCE_RE, md_instance)
+ inlinePatterns["link"] = LinkPattern(LINK_RE, md_instance)
+ inlinePatterns["image_link"] = ImagePattern(IMAGE_LINK_RE, md_instance)
+ inlinePatterns["image_reference"] = \
+ ImageReferencePattern(IMAGE_REFERENCE_RE, md_instance)
+ inlinePatterns["short_reference"] = \
+ ReferencePattern(SHORT_REF_RE, md_instance)
+ inlinePatterns["autolink"] = AutolinkPattern(AUTOLINK_RE, md_instance)
+ inlinePatterns["automail"] = AutomailPattern(AUTOMAIL_RE, md_instance)
+ inlinePatterns["linebreak2"] = SubstituteTagPattern(LINE_BREAK_2_RE, 'br')
+ inlinePatterns["linebreak"] = SubstituteTagPattern(LINE_BREAK_RE, 'br')
+ if md_instance.safeMode != 'escape':
+ inlinePatterns["html"] = HtmlPattern(HTML_RE, md_instance)
+ inlinePatterns["entity"] = HtmlPattern(ENTITY_RE, md_instance)
+ inlinePatterns["not_strong"] = SimpleTextPattern(NOT_STRONG_RE)
+ inlinePatterns["strong_em"] = DoubleTagPattern(STRONG_EM_RE, 'strong,em')
+ inlinePatterns["strong"] = SimpleTagPattern(STRONG_RE, 'strong')
+ inlinePatterns["emphasis"] = SimpleTagPattern(EMPHASIS_RE, 'em')
+ if md_instance.smart_emphasis:
+ inlinePatterns["emphasis2"] = SimpleTagPattern(SMART_EMPHASIS_RE, 'em')
+ else:
+ inlinePatterns["emphasis2"] = SimpleTagPattern(EMPHASIS_2_RE, 'em')
+ return inlinePatterns
"""
The actual regular expressions for patterns
EMPHASIS_RE = r'(\*)([^\*]+)\2' # *emphasis*
STRONG_RE = r'(\*{2}|_{2})(.+?)\2' # **strong**
STRONG_EM_RE = r'(\*{3}|_{3})(.+?)\2' # ***strong***
-
-if markdown.SMART_EMPHASIS:
- EMPHASIS_2_RE = r'(?<!\w)(_)(\S.+?)\2(?!\w)' # _emphasis_
-else:
- EMPHASIS_2_RE = r'(_)(.+?)\2' # _emphasis_
-
+SMART_EMPHASIS_RE = r'(?<!\w)(_)(?!_)(.+?)(?<!_)\2(?!\w)' # _smart_emphasis_
+EMPHASIS_2_RE = r'(_)(.+?)\2' # _emphasis_
LINK_RE = NOIMG + BRK + \
-r'''\(\s*(<.*?>|((?:(?:\(.*?\))|[^\(\)]))*?)\s*((['"])(.*?)\12)?\)'''
-# [text](url) or [text](<url>)
+r'''\(\s*(<.*?>|((?:(?:\(.*?\))|[^\(\)]))*?)\s*((['"])(.*?)\12\s*)?\)'''
+# [text](url) or [text](<url>) or [text](url "title")
IMAGE_LINK_RE = r'\!' + BRK + r'\s*\((<.*?>|([^\)]*))\)'
#  or 
-REFERENCE_RE = NOIMG + BRK+ r'\s*\[([^\]]*)\]' # [Google][3]
-IMAGE_REFERENCE_RE = r'\!' + BRK + '\s*\[([^\]]*)\]' # ![alt text][2]
+REFERENCE_RE = NOIMG + BRK+ r'\s?\[([^\]]*)\]' # [Google][3]
+SHORT_REF_RE = NOIMG + r'\[([^\]]+)\]' # [Google]
+IMAGE_REFERENCE_RE = r'\!' + BRK + '\s?\[([^\]]*)\]' # ![alt text][2]
NOT_STRONG_RE = r'((^| )(\*|_)( |$))' # stand-alone * or _
-AUTOLINK_RE = r'<((?:f|ht)tps?://[^>]*)>' # <http://www.123.com>
+AUTOLINK_RE = r'<((?:[Ff]|[Hh][Tt])[Tt][Pp][Ss]?://[^>]*)>' # <http://www.123.com>
AUTOMAIL_RE = r'<([^> \!]*@[^> ]*)>' # <me@example.com>
HTML_RE = r'(\<([a-zA-Z/][^\>]*?|\!--.*?--)\>)' # <...>
class Pattern:
"""Base class that inline patterns subclass. """
- def __init__ (self, pattern, markdown_instance=None):
+ def __init__(self, pattern, markdown_instance=None):
"""
Create an instant of an inline pattern.
"""
self.pattern = pattern
- self.compiled_re = re.compile("^(.*?)%s(.*?)$" % pattern, re.DOTALL)
+ self.compiled_re = re.compile("^(.*?)%s(.*?)$" % pattern,
+ re.DOTALL | re.UNICODE)
# Api for Markdown to pass safe_mode into instance
self.safe_mode = False
if markdown_instance:
self.markdown = markdown_instance
- def getCompiledRegExp (self):
+ def getCompiledRegExp(self):
""" Return a compiled regular expression. """
return self.compiled_re
""" Return class name, to define pattern type """
return self.__class__.__name__
-BasePattern = Pattern # for backward compatibility
+ def unescape(self, text):
+ """ Return unescaped text given text with an inline placeholder. """
+ try:
+ stash = self.markdown.treeprocessors['inline'].stashed_nodes
+ except KeyError:
+ return text
+ def get_stash(m):
+ id = m.group(1)
+ if id in stash:
+ return stash.get(id)
+ return util.INLINE_PLACEHOLDER_RE.sub(get_stash, text)
-class SimpleTextPattern (Pattern):
+
+class SimpleTextPattern(Pattern):
""" Return a simple text of group(2) of a Pattern. """
def handleMatch(self, m):
text = m.group(2)
- if text == markdown.INLINE_PLACEHOLDER_PREFIX:
+ if text == util.INLINE_PLACEHOLDER_PREFIX:
return None
return text
-class SimpleTagPattern (Pattern):
+
+class EscapePattern(Pattern):
+ """ Return an escaped character. """
+
+ def handleMatch(self, m):
+ char = m.group(2)
+ if char in self.markdown.ESCAPED_CHARS:
+ return '%s%s%s' % (util.STX, ord(char), util.ETX)
+ else:
+ return '\\%s' % char
+
+
+class SimpleTagPattern(Pattern):
"""
Return element of type `tag` with a text attribute of group(3)
of a Pattern.
self.tag = tag
def handleMatch(self, m):
- el = markdown.etree.Element(self.tag)
+ el = util.etree.Element(self.tag)
el.text = m.group(3)
return el
-class SubstituteTagPattern (SimpleTagPattern):
+class SubstituteTagPattern(SimpleTagPattern):
""" Return a eLement of type `tag` with no children. """
def handleMatch (self, m):
- return markdown.etree.Element(self.tag)
+ return util.etree.Element(self.tag)
-class BacktickPattern (Pattern):
+class BacktickPattern(Pattern):
""" Return a `<code>` element containing the matching text. """
def __init__ (self, pattern):
Pattern.__init__(self, pattern)
self.tag = "code"
def handleMatch(self, m):
- el = markdown.etree.Element(self.tag)
- el.text = markdown.AtomicString(m.group(3).strip())
+ el = util.etree.Element(self.tag)
+ el.text = util.AtomicString(m.group(3).strip())
return el
-class DoubleTagPattern (SimpleTagPattern):
+class DoubleTagPattern(SimpleTagPattern):
"""Return a ElementTree element nested in tag2 nested in tag1.
Useful for strong emphasis etc.
"""
def handleMatch(self, m):
tag1, tag2 = self.tag.split(",")
- el1 = markdown.etree.Element(tag1)
- el2 = markdown.etree.SubElement(el1, tag2)
+ el1 = util.etree.Element(tag1)
+ el2 = util.etree.SubElement(el1, tag2)
el2.text = m.group(3)
return el1
-class HtmlPattern (Pattern):
+class HtmlPattern(Pattern):
""" Store raw inline html and return a placeholder. """
def handleMatch (self, m):
- rawhtml = m.group(2)
- inline = True
+ rawhtml = self.unescape(m.group(2))
place_holder = self.markdown.htmlStash.store(rawhtml)
return place_holder
-
-class LinkPattern (Pattern):
+ def unescape(self, text):
+ """ Return unescaped text given text with an inline placeholder. """
+ try:
+ stash = self.markdown.treeprocessors['inline'].stashed_nodes
+ except KeyError:
+ return text
+ def get_stash(m):
+ id = m.group(1)
+ value = stash.get(id)
+ if value is not None:
+ try:
+ return self.markdown.serializer(value)
+ except:
+ return '\%s' % value
+
+ return util.INLINE_PLACEHOLDER_RE.sub(get_stash, text)
+
+
+class LinkPattern(Pattern):
""" Return a link element from the given match. """
def handleMatch(self, m):
- el = markdown.etree.Element("a")
+ el = util.etree.Element("a")
el.text = m.group(2)
- title = m.group(11)
+ title = m.group(13)
href = m.group(9)
if href:
if href[0] == "<":
href = href[1:-1]
- el.set("href", self.sanitize_url(href.strip()))
+ el.set("href", self.sanitize_url(self.unescape(href.strip())))
else:
el.set("href", "")
if title:
- title = dequote(title) #.replace('"', """)
+ title = dequote(self.unescape(title))
el.set("title", title)
return el
`username:password@host:port`.
"""
+ if not self.markdown.safeMode:
+ # Return immediately bipassing parsing.
+ return url
+
+ try:
+ scheme, netloc, path, params, query, fragment = url = urlparse(url)
+ except ValueError:
+ # Bad url - so bad it couldn't be parsed.
+ return ''
+
locless_schemes = ['', 'mailto', 'news']
- scheme, netloc, path, params, query, fragment = url = urlparse(url)
- safe_url = False
- if netloc != '' or scheme in locless_schemes:
- safe_url = True
+ if netloc == '' and scheme not in locless_schemes:
+ # This fails regardless of anything else.
+ # Return immediately to save additional proccessing
+ return ''
for part in url[2:]:
if ":" in part:
- safe_url = False
+ # Not a safe url
+ return ''
- if self.markdown.safeMode and not safe_url:
- return ''
- else:
- return urlunparse(url)
+ # Url passes all tests. Return url as-is.
+ return urlunparse(url)
class ImagePattern(LinkPattern):
""" Return a img element from the given match. """
def handleMatch(self, m):
- el = markdown.etree.Element("img")
+ el = util.etree.Element("img")
src_parts = m.group(9).split()
if src_parts:
src = src_parts[0]
if src[0] == "<" and src[-1] == ">":
src = src[1:-1]
- el.set('src', self.sanitize_url(src))
+ el.set('src', self.sanitize_url(self.unescape(src)))
else:
el.set('src', "")
if len(src_parts) > 1:
- el.set('title', dequote(" ".join(src_parts[1:])))
+ el.set('title', dequote(self.unescape(" ".join(src_parts[1:]))))
- if markdown.ENABLE_ATTRIBUTES:
+ if self.markdown.enable_attributes:
truealt = handleAttributes(m.group(2), el)
else:
truealt = m.group(2)
class ReferencePattern(LinkPattern):
""" Match to a stored reference and return link element. """
+
+ NEWLINE_CLEANUP_RE = re.compile(r'[ ]?\n', re.MULTILINE)
+
def handleMatch(self, m):
- if m.group(9):
+ try:
id = m.group(9).lower()
- else:
- # if we got something like "[Google][]"
+ except IndexError:
+ id = None
+ if not id:
+ # if we got something like "[Google][]" or "[Goggle]"
# we'll use "google" as the id
id = m.group(2).lower()
+ # Clean up linebreaks in id
+ id = self.NEWLINE_CLEANUP_RE.sub(' ', id)
if not id in self.markdown.references: # ignore undefined refs
return None
href, title = self.markdown.references[id]
return self.makeTag(href, title, text)
def makeTag(self, href, title, text):
- el = markdown.etree.Element('a')
+ el = util.etree.Element('a')
el.set('href', self.sanitize_url(href))
if title:
return el
-class ImageReferencePattern (ReferencePattern):
+class ImageReferencePattern(ReferencePattern):
""" Match to a stored reference and return img element. """
def makeTag(self, href, title, text):
- el = markdown.etree.Element("img")
+ el = util.etree.Element("img")
el.set("src", self.sanitize_url(href))
if title:
el.set("title", title)
return el
-class AutolinkPattern (Pattern):
+class AutolinkPattern(Pattern):
""" Return a link Element given an autolink (`<http://example/com>`). """
def handleMatch(self, m):
- el = markdown.etree.Element("a")
- el.set('href', m.group(2))
- el.text = markdown.AtomicString(m.group(2))
+ el = util.etree.Element("a")
+ el.set('href', self.unescape(m.group(2)))
+ el.text = util.AtomicString(m.group(2))
return el
-class AutomailPattern (Pattern):
+class AutomailPattern(Pattern):
"""
Return a mailto link Element given an automail link (`<foo@example.com>`).
"""
def handleMatch(self, m):
- el = markdown.etree.Element('a')
- email = m.group(2)
+ el = util.etree.Element('a')
+ email = self.unescape(m.group(2))
if email.startswith("mailto:"):
email = email[len("mailto:"):]
"""Return entity definition by code, or the code if not defined."""
entity = htmlentitydefs.codepoint2name.get(code)
if entity:
- return "%s%s;" % (markdown.AMP_SUBSTITUTE, entity)
+ return "%s%s;" % (util.AMP_SUBSTITUTE, entity)
else:
- return "%s#%d;" % (markdown.AMP_SUBSTITUTE, code)
+ return "%s#%d;" % (util.AMP_SUBSTITUTE, code)
letters = [codepoint2name(ord(letter)) for letter in email]
- el.text = markdown.AtomicString(''.join(letters))
+ el.text = util.AtomicString(''.join(letters))
mailto = "mailto:" + email
- mailto = "".join([markdown.AMP_SUBSTITUTE + '#%d;' %
+ mailto = "".join([util.AMP_SUBSTITUTE + '#%d;' %
ord(letter) for letter in mailto])
el.set('href', mailto)
return el
""" Change location of an existing item. """
n = self.keyOrder.index(key)
del self.keyOrder[n]
- i = self.index_for_location(location)
try:
+ i = self.index_for_location(location)
if i is not None:
self.keyOrder.insert(i, key)
else:
self.keyOrder.append(key)
- except Error:
+ except Exception as e:
# restore to prevent data loss and reraise
self.keyOrder.insert(n, key)
- raise Error
+ raise e
"""
+import re
+import util
+import odict
-import markdown
+def build_postprocessors(md_instance, **kwargs):
+ """ Build the default postprocessors for Markdown. """
+ postprocessors = odict.OrderedDict()
+ postprocessors["raw_html"] = RawHtmlPostprocessor(md_instance)
+ postprocessors["amp_substitute"] = AndSubstitutePostprocessor()
+ postprocessors["unescape"] = UnescapePostprocessor()
+ return postprocessors
-class Processor:
- def __init__(self, markdown_instance=None):
- if markdown_instance:
- self.markdown = markdown_instance
-class Postprocessor(Processor):
+class Postprocessor(util.Processor):
"""
Postprocessors are run after the ElementTree it converted back into text.
elif str(self.markdown.safeMode).lower() == 'remove':
html = ''
else:
- html = markdown.HTML_REMOVED_TEXT
- if safe or not self.markdown.safeMode:
+ html = self.markdown.html_replacement_text
+ if self.isblocklevel(html) and (safe or not self.markdown.safeMode):
text = text.replace("<p>%s</p>" %
- (markdown.preprocessors.HTML_PLACEHOLDER % i),
+ (self.markdown.htmlStash.get_placeholder(i)),
html + "\n")
- text = text.replace(markdown.preprocessors.HTML_PLACEHOLDER % i,
+ text = text.replace(self.markdown.htmlStash.get_placeholder(i),
html)
return text
html = html.replace('>', '>')
return html.replace('"', '"')
+ def isblocklevel(self, html):
+ m = re.match(r'^\<\/?([^ >]+)', html)
+ if m:
+ if m.group(1)[0] in ('!', '?', '@', '%'):
+ # Comment, php etc...
+ return True
+ return util.isBlockLevel(m.group(1))
+ return False
+
class AndSubstitutePostprocessor(Postprocessor):
""" Restore valid entities """
- def __init__(self):
- pass
def run(self, text):
- text = text.replace(markdown.AMP_SUBSTITUTE, "&")
+ text = text.replace(util.AMP_SUBSTITUTE, "&")
return text
+
+
+class UnescapePostprocessor(Postprocessor):
+ """ Restore escaped chars """
+
+ RE = re.compile('%s(\d+)%s' % (util.STX, util.ETX))
+
+ def unescape(self, m):
+ return unichr(int(m.group(1)))
+
+ def run(self, text):
+ return self.RE.sub(self.unescape, text)
-
"""
PRE-PROCESSORS
=============================================================================
"""
import re
-import markdown
+import util
+import odict
+
-HTML_PLACEHOLDER_PREFIX = markdown.STX+"wzxhzdk:"
-HTML_PLACEHOLDER = HTML_PLACEHOLDER_PREFIX + "%d" + markdown.ETX
+def build_preprocessors(md_instance, **kwargs):
+ """ Build the default set of preprocessors used by Markdown. """
+ preprocessors = odict.OrderedDict()
+ if md_instance.safeMode != 'escape':
+ preprocessors["html_block"] = HtmlBlockPreprocessor(md_instance)
+ preprocessors["reference"] = ReferencePreprocessor(md_instance)
+ return preprocessors
-class Processor:
- def __init__(self, markdown_instance=None):
- if markdown_instance:
- self.markdown = markdown_instance
-class Preprocessor (Processor):
+class Preprocessor(util.Processor):
"""
Preprocessors are run after the text is broken into lines.
"""
pass
-class HtmlStash:
- """
- This class is used for stashing HTML objects that we extract
- in the beginning and replace with place-holders.
- """
-
- def __init__ (self):
- """ Create a HtmlStash. """
- self.html_counter = 0 # for counting inline html segments
- self.rawHtmlBlocks=[]
-
- def store(self, html, safe=False):
- """
- Saves an HTML segment for later reinsertion. Returns a
- placeholder string that needs to be inserted into the
- document.
-
- Keyword arguments:
-
- * html: an html segment
- * safe: label an html segment as safe for safemode
-
- Returns : a placeholder string
-
- """
- self.rawHtmlBlocks.append((html, safe))
- placeholder = HTML_PLACEHOLDER % self.html_counter
- self.html_counter += 1
- return placeholder
-
- def reset(self):
- self.html_counter = 0
- self.rawHtmlBlocks = []
-
class HtmlBlockPreprocessor(Preprocessor):
"""Remove html blocks from the text and store them for later retrieval."""
right_tag_patterns = ["</%s>", "%s>"]
+ attrs_pattern = r"""
+ \s+(?P<attr>[^>"'/= ]+)=(?P<q>['"])(?P<value>.*?)(?P=q) # attr="value"
+ | # OR
+ \s+(?P<attr1>[^>"'/= ]+)=(?P<value1>[^> ]+) # attr=value
+ | # OR
+ \s+(?P<attr2>[^>"'/= ]+) # attr
+ """
+ left_tag_pattern = r'^\<(?P<tag>[^> ]+)(?P<attrs>(%s)*)\s*\/?\>?' % attrs_pattern
+ attrs_re = re.compile(attrs_pattern, re.VERBOSE)
+ left_tag_re = re.compile(left_tag_pattern, re.VERBOSE)
+ markdown_in_raw = False
def _get_left_tag(self, block):
- return block[1:].replace(">", " ", 1).split()[0].lower()
-
- def _get_right_tag(self, left_tag, block):
+ m = self.left_tag_re.match(block)
+ if m:
+ tag = m.group('tag')
+ raw_attrs = m.group('attrs')
+ attrs = {}
+ if raw_attrs:
+ for ma in self.attrs_re.finditer(raw_attrs):
+ if ma.group('attr'):
+ if ma.group('value'):
+ attrs[ma.group('attr').strip()] = ma.group('value')
+ else:
+ attrs[ma.group('attr').strip()] = ""
+ elif ma.group('attr1'):
+ if ma.group('value1'):
+ attrs[ma.group('attr1').strip()] = ma.group('value1')
+ else:
+ attrs[ma.group('attr1').strip()] = ""
+ elif ma.group('attr2'):
+ attrs[ma.group('attr2').strip()] = ""
+ return tag, len(m.group(0)), attrs
+ else:
+ tag = block[1:].split(">", 1)[0].lower()
+ return tag, len(tag)+2, {}
+
+ def _recursive_tagfind(self, ltag, rtag, start_index, block):
+ while 1:
+ i = block.find(rtag, start_index)
+ if i == -1:
+ return -1
+ j = block.find(ltag, start_index)
+ # if no ltag, or rtag found before another ltag, return index
+ if (j > i or j == -1):
+ return i + len(rtag)
+ # another ltag found before rtag, use end of ltag as starting
+ # point and search again
+ j = block.find('>', j)
+ start_index = self._recursive_tagfind(ltag, rtag, j + 1, block)
+ if start_index == -1:
+ # HTML potentially malformed- ltag has no corresponding
+ # rtag
+ return -1
+
+ def _get_right_tag(self, left_tag, left_index, block):
for p in self.right_tag_patterns:
tag = p % left_tag
- i = block.rfind(tag)
+ i = self._recursive_tagfind("<%s" % left_tag, tag, left_index, block)
if i > 2:
- return tag.lstrip("<").rstrip(">"), i + len(p)-2 + len(left_tag)
- return block.rstrip()[-len(left_tag)-2:-1].lower(), len(block)
-
+ return tag.lstrip("<").rstrip(">"), i
+ return block.rstrip()[-left_index:-1].lower(), len(block)
+
def _equal_tags(self, left_tag, right_tag):
- if left_tag == 'div' or left_tag[0] in ['?', '@', '%']: # handle PHP, etc.
+ if left_tag[0] in ['?', '@', '%']: # handle PHP, etc.
return True
if ("/" + left_tag) == right_tag:
return True
if (right_tag == "--" and left_tag == "--"):
return True
elif left_tag == right_tag[1:] \
- and right_tag[0] != "<":
+ and right_tag[0] == "/":
return True
else:
return False
block = block[1:]
if not in_tag:
- if block.startswith("<"):
- left_tag = self._get_left_tag(block)
- right_tag, data_index = self._get_right_tag(left_tag, block)
+ if block.startswith("<") and len(block.strip()) > 1:
if block[1] == "!":
# is a comment block
- left_tag = "--"
- right_tag, data_index = self._get_right_tag(left_tag, block)
- # keep checking conditions below and maybe just append
+ left_tag, left_index, attrs = "--", 2, {}
+ else:
+ left_tag, left_index, attrs = self._get_left_tag(block)
+ right_tag, data_index = self._get_right_tag(left_tag,
+ left_index,
+ block)
+ # keep checking conditions below and maybe just append
if data_index < len(block) \
- and markdown.isBlockLevel(left_tag):
+ and (util.isBlockLevel(left_tag)
+ or left_tag == '--'):
text.insert(0, block[data_index:])
block = block[:data_index]
- if not (markdown.isBlockLevel(left_tag) \
+ if not (util.isBlockLevel(left_tag) \
or block[1] in ["!", "?", "@", "%"]):
new_blocks.append(block)
continue
if block.rstrip().endswith(">") \
and self._equal_tags(left_tag, right_tag):
- new_blocks.append(
- self.markdown.htmlStash.store(block.strip()))
+ if self.markdown_in_raw and 'markdown' in attrs.keys():
+ start = re.sub(r'\smarkdown(=[\'"]?[^> ]*[\'"]?)?',
+ '', block[:left_index])
+ end = block[-len(right_tag)-2:]
+ block = block[left_index:-len(right_tag)-2]
+ new_blocks.append(
+ self.markdown.htmlStash.store(start))
+ new_blocks.append(block)
+ new_blocks.append(
+ self.markdown.htmlStash.store(end))
+ else:
+ new_blocks.append(
+ self.markdown.htmlStash.store(block.strip()))
continue
- else: #if not block[1] == "!":
+ else:
# if is block level tag and is not complete
- if markdown.isBlockLevel(left_tag) or left_tag == "--" \
+ if util.isBlockLevel(left_tag) or left_tag == "--" \
and not block.rstrip().endswith(">"):
items.append(block.strip())
in_tag = True
new_blocks.append(block)
else:
- items.append(block.strip())
+ items.append(block)
- right_tag, data_index = self._get_right_tag(left_tag, block)
+ right_tag, data_index = self._get_right_tag(left_tag, 0, block)
if self._equal_tags(left_tag, right_tag):
# if find closing tag
+
+ if data_index < len(block):
+ # we have more text after right_tag
+ items[-1] = block[:data_index]
+ text.insert(0, block[data_index:])
+
in_tag = False
- new_blocks.append(
- self.markdown.htmlStash.store('\n\n'.join(items)))
+ if self.markdown_in_raw and 'markdown' in attrs.keys():
+ start = re.sub(r'\smarkdown(=[\'"]?[^> ]*[\'"]?)?',
+ '', items[0][:left_index])
+ items[0] = items[0][left_index:]
+ end = items[-1][-len(right_tag)-2:]
+ items[-1] = items[-1][:-len(right_tag)-2]
+ new_blocks.append(
+ self.markdown.htmlStash.store(start))
+ new_blocks.extend(items)
+ new_blocks.append(
+ self.markdown.htmlStash.store(end))
+ else:
+ new_blocks.append(
+ self.markdown.htmlStash.store('\n\n'.join(items)))
items = []
if items:
- new_blocks.append(self.markdown.htmlStash.store('\n\n'.join(items)))
+ if self.markdown_in_raw and 'markdown' in attrs.keys():
+ start = re.sub(r'\smarkdown(=[\'"]?[^> ]*[\'"]?)?',
+ '', items[0][:left_index])
+ items[0] = items[0][left_index:]
+ end = items[-1][-len(right_tag)-2:]
+ items[-1] = items[-1][:-len(right_tag)-2]
+ new_blocks.append(
+ self.markdown.htmlStash.store(start))
+ new_blocks.extend(items)
+ if end.strip():
+ new_blocks.append(
+ self.markdown.htmlStash.store(end))
+ else:
+ new_blocks.append(
+ self.markdown.htmlStash.store('\n\n'.join(items)))
+ #new_blocks.append(self.markdown.htmlStash.store('\n\n'.join(items)))
new_blocks.append('\n')
new_text = "\n\n".join(new_blocks)
class ReferencePreprocessor(Preprocessor):
""" Remove reference definitions from text and store for later use. """
- RE = re.compile(r'^(\ ?\ ?\ ?)\[([^\]]*)\]:\s*([^ ]*)(.*)$', re.DOTALL)
+ TITLE = r'[ ]*(\"(.*)\"|\'(.*)\'|\((.*)\))[ ]*'
+ RE = re.compile(r'^[ ]{0,3}\[([^\]]*)\]:\s*([^ ]*)[ ]*(%s)?$' % TITLE, re.DOTALL)
+ TITLE_RE = re.compile(r'^%s$' % TITLE)
def run (self, lines):
new_text = [];
- for line in lines:
+ while lines:
+ line = lines.pop(0)
m = self.RE.match(line)
if m:
- id = m.group(2).strip().lower()
- t = m.group(4).strip() # potential title
+ id = m.group(1).strip().lower()
+ link = m.group(2).lstrip('<').rstrip('>')
+ t = m.group(5) or m.group(6) or m.group(7)
if not t:
- self.markdown.references[id] = (m.group(3), t)
- elif (len(t) >= 2
- and (t[0] == t[-1] == "\""
- or t[0] == t[-1] == "\'"
- or (t[0] == "(" and t[-1] == ")") ) ):
- self.markdown.references[id] = (m.group(3), t[1:-1])
- else:
- new_text.append(line)
+ # Check next line for title
+ tm = self.TITLE_RE.match(lines[0])
+ if tm:
+ lines.pop(0)
+ t = tm.group(2) or tm.group(3) or tm.group(4)
+ self.markdown.references[id] = (link, t)
else:
new_text.append(line)
--- /dev/null
+# markdown/searializers.py
+#
+# Add x/html serialization to Elementree
+# Taken from ElementTree 1.3 preview with slight modifications
+#
+# Copyright (c) 1999-2007 by Fredrik Lundh. All rights reserved.
+#
+# fredrik@pythonware.com
+# http://www.pythonware.com
+#
+# --------------------------------------------------------------------
+# The ElementTree toolkit is
+#
+# Copyright (c) 1999-2007 by Fredrik Lundh
+#
+# By obtaining, using, and/or copying this software and/or its
+# associated documentation, you agree that you have read, understood,
+# and will comply with the following terms and conditions:
+#
+# Permission to use, copy, modify, and distribute this software and
+# its associated documentation for any purpose and without fee is
+# hereby granted, provided that the above copyright notice appears in
+# all copies, and that both that copyright notice and this permission
+# notice appear in supporting documentation, and that the name of
+# Secret Labs AB or the author not be used in advertising or publicity
+# pertaining to distribution of the software without specific, written
+# prior permission.
+#
+# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
+# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
+# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
+# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+# OF THIS SOFTWARE.
+# --------------------------------------------------------------------
+
+
+import util
+ElementTree = util.etree.ElementTree
+QName = util.etree.QName
+if hasattr(util.etree, 'test_comment'):
+ Comment = util.etree.test_comment
+else:
+ Comment = util.etree.Comment
+PI = util.etree.PI
+ProcessingInstruction = util.etree.ProcessingInstruction
+
+__all__ = ['to_html_string', 'to_xhtml_string']
+
+HTML_EMPTY = ("area", "base", "basefont", "br", "col", "frame", "hr",
+ "img", "input", "isindex", "link", "meta" "param")
+
+try:
+ HTML_EMPTY = set(HTML_EMPTY)
+except NameError:
+ pass
+
+_namespace_map = {
+ # "well-known" namespace prefixes
+ "http://www.w3.org/XML/1998/namespace": "xml",
+ "http://www.w3.org/1999/xhtml": "html",
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
+ "http://schemas.xmlsoap.org/wsdl/": "wsdl",
+ # xml schema
+ "http://www.w3.org/2001/XMLSchema": "xs",
+ "http://www.w3.org/2001/XMLSchema-instance": "xsi",
+ # dublic core
+ "http://purl.org/dc/elements/1.1/": "dc",
+}
+
+
+def _raise_serialization_error(text):
+ raise TypeError(
+ "cannot serialize %r (type %s)" % (text, type(text).__name__)
+ )
+
+def _encode(text, encoding):
+ try:
+ return text.encode(encoding, "xmlcharrefreplace")
+ except (TypeError, AttributeError):
+ _raise_serialization_error(text)
+
+def _escape_cdata(text):
+ # escape character data
+ try:
+ # it's worth avoiding do-nothing calls for strings that are
+ # shorter than 500 character, or so. assume that's, by far,
+ # the most common case in most applications.
+ if "&" in text:
+ text = text.replace("&", "&")
+ if "<" in text:
+ text = text.replace("<", "<")
+ if ">" in text:
+ text = text.replace(">", ">")
+ return text
+ except (TypeError, AttributeError):
+ _raise_serialization_error(text)
+
+
+def _escape_attrib(text):
+ # escape attribute value
+ try:
+ if "&" in text:
+ text = text.replace("&", "&")
+ if "<" in text:
+ text = text.replace("<", "<")
+ if ">" in text:
+ text = text.replace(">", ">")
+ if "\"" in text:
+ text = text.replace("\"", """)
+ if "\n" in text:
+ text = text.replace("\n", " ")
+ return text
+ except (TypeError, AttributeError):
+ _raise_serialization_error(text)
+
+def _escape_attrib_html(text):
+ # escape attribute value
+ try:
+ if "&" in text:
+ text = text.replace("&", "&")
+ if "<" in text:
+ text = text.replace("<", "<")
+ if ">" in text:
+ text = text.replace(">", ">")
+ if "\"" in text:
+ text = text.replace("\"", """)
+ return text
+ except (TypeError, AttributeError):
+ _raise_serialization_error(text)
+
+
+def _serialize_html(write, elem, qnames, namespaces, format):
+ tag = elem.tag
+ text = elem.text
+ if tag is Comment:
+ write("<!--%s-->" % _escape_cdata(text))
+ elif tag is ProcessingInstruction:
+ write("<?%s?>" % _escape_cdata(text))
+ else:
+ tag = qnames[tag]
+ if tag is None:
+ if text:
+ write(_escape_cdata(text))
+ for e in elem:
+ _serialize_html(write, e, qnames, None, format)
+ else:
+ write("<" + tag)
+ items = elem.items()
+ if items or namespaces:
+ items.sort() # lexical order
+ for k, v in items:
+ if isinstance(k, QName):
+ k = k.text
+ if isinstance(v, QName):
+ v = qnames[v.text]
+ else:
+ v = _escape_attrib_html(v)
+ if qnames[k] == v and format == 'html':
+ # handle boolean attributes
+ write(" %s" % v)
+ else:
+ write(" %s=\"%s\"" % (qnames[k], v))
+ if namespaces:
+ items = namespaces.items()
+ items.sort(key=lambda x: x[1]) # sort on prefix
+ for v, k in items:
+ if k:
+ k = ":" + k
+ write(" xmlns%s=\"%s\"" % (k, _escape_attrib(v)))
+ if format == "xhtml" and tag in HTML_EMPTY:
+ write(" />")
+ else:
+ write(">")
+ tag = tag.lower()
+ if text:
+ if tag == "script" or tag == "style":
+ write(text)
+ else:
+ write(_escape_cdata(text))
+ for e in elem:
+ _serialize_html(write, e, qnames, None, format)
+ if tag not in HTML_EMPTY:
+ write("</" + tag + ">")
+ if elem.tail:
+ write(_escape_cdata(elem.tail))
+
+def _write_html(root,
+ encoding=None,
+ default_namespace=None,
+ format="html"):
+ assert root is not None
+ data = []
+ write = data.append
+ qnames, namespaces = _namespaces(root, default_namespace)
+ _serialize_html(write, root, qnames, namespaces, format)
+ if encoding is None:
+ return "".join(data)
+ else:
+ return _encode("".join(data))
+
+
+# --------------------------------------------------------------------
+# serialization support
+
+def _namespaces(elem, default_namespace=None):
+ # identify namespaces used in this tree
+
+ # maps qnames to *encoded* prefix:local names
+ qnames = {None: None}
+
+ # maps uri:s to prefixes
+ namespaces = {}
+ if default_namespace:
+ namespaces[default_namespace] = ""
+
+ def add_qname(qname):
+ # calculate serialized qname representation
+ try:
+ if qname[:1] == "{":
+ uri, tag = qname[1:].split("}", 1)
+ prefix = namespaces.get(uri)
+ if prefix is None:
+ prefix = _namespace_map.get(uri)
+ if prefix is None:
+ prefix = "ns%d" % len(namespaces)
+ if prefix != "xml":
+ namespaces[uri] = prefix
+ if prefix:
+ qnames[qname] = "%s:%s" % (prefix, tag)
+ else:
+ qnames[qname] = tag # default element
+ else:
+ if default_namespace:
+ raise ValueError(
+ "cannot use non-qualified names with "
+ "default_namespace option"
+ )
+ qnames[qname] = qname
+ except TypeError:
+ _raise_serialization_error(qname)
+
+ # populate qname and namespaces table
+ try:
+ iterate = elem.iter
+ except AttributeError:
+ iterate = elem.getiterator # cET compatibility
+ for elem in iterate():
+ tag = elem.tag
+ if isinstance(tag, QName) and tag.text not in qnames:
+ add_qname(tag.text)
+ elif isinstance(tag, basestring):
+ if tag not in qnames:
+ add_qname(tag)
+ elif tag is not None and tag is not Comment and tag is not PI:
+ _raise_serialization_error(tag)
+ for key, value in elem.items():
+ if isinstance(key, QName):
+ key = key.text
+ if key not in qnames:
+ add_qname(key)
+ if isinstance(value, QName) and value.text not in qnames:
+ add_qname(value.text)
+ text = elem.text
+ if isinstance(text, QName) and text.text not in qnames:
+ add_qname(text.text)
+ return qnames, namespaces
+
+def to_html_string(element):
+ return _write_html(ElementTree(element).getroot(), format="html")
+
+def to_xhtml_string(element):
+ return _write_html(ElementTree(element).getroot(), format="xhtml")
-import markdown
import re
+import inlinepatterns
+import util
+import odict
+
+
+def build_treeprocessors(md_instance, **kwargs):
+ """ Build the default treeprocessors for Markdown. """
+ treeprocessors = odict.OrderedDict()
+ treeprocessors["inline"] = InlineProcessor(md_instance)
+ treeprocessors["prettify"] = PrettifyTreeprocessor(md_instance)
+ return treeprocessors
+
def isString(s):
""" Check if it's string """
- return isinstance(s, unicode) or isinstance(s, str)
+ if not isinstance(s, util.AtomicString):
+ return isinstance(s, basestring)
+ return False
+
class Processor:
def __init__(self, markdown_instance=None):
if markdown_instance:
self.markdown = markdown_instance
+
class Treeprocessor(Processor):
"""
Treeprocessors are run on the ElementTree object before serialization.
A Treeprocessor that traverses a tree, applying inline patterns.
"""
- def __init__ (self, md):
- self.__placeholder_prefix = markdown.INLINE_PLACEHOLDER_PREFIX
- self.__placeholder_suffix = markdown.ETX
+ def __init__(self, md):
+ self.__placeholder_prefix = util.INLINE_PLACEHOLDER_PREFIX
+ self.__placeholder_suffix = util.ETX
self.__placeholder_length = 4 + len(self.__placeholder_prefix) \
+ len(self.__placeholder_suffix)
- self.__placeholder_re = re.compile(markdown.INLINE_PLACEHOLDER % r'([0-9]{4})')
+ self.__placeholder_re = util.INLINE_PLACEHOLDER_RE
self.markdown = md
def __makePlaceholder(self, type):
""" Generate a placeholder """
id = "%04d" % len(self.stashed_nodes)
- hash = markdown.INLINE_PLACEHOLDER % id
+ hash = util.INLINE_PLACEHOLDER % id
return hash, id
def __findPlaceholder(self, data, index):
* index: index, from which we start search
Returns: placeholder id and string index, after the found placeholder.
+
"""
-
m = self.__placeholder_re.search(data, index)
if m:
return m.group(1), m.end()
Returns: String with placeholders.
"""
- if not isinstance(data, markdown.AtomicString):
+ if not isinstance(data, util.AtomicString):
startIndex = 0
while patternIndex < len(self.markdown.inlinePatterns):
data, matched, startIndex = self.__applyPattern(
* parent: Element, which contains processing inline data
Returns: list with ElementTree elements with applied inline patterns.
+
"""
def linkText(text):
if text:
parent.text += text
else:
parent.text = text
-
result = []
strartIndex = 0
while data:
for child in [node] + node.getchildren():
if child.tail:
if child.tail.strip():
- self.__processElementText(node, child, False)
+ self.__processElementText(node, child,False)
if child.text:
if child.text.strip():
self.__processElementText(child, child)
result.append(node)
else: # wrong placeholder
- end = index + len(prefix)
+ end = index + len(self.__placeholder_prefix)
linkText(data[strartIndex:end])
strartIndex = end
else:
text = data[strartIndex:]
+ if isinstance(data, util.AtomicString):
+ # We don't want to loose the AtomicString
+ text = util.AtomicString(text)
linkText(text)
data = ""
* data: the text to be processed
* pattern: the pattern to be checked
* patternIndex: index of current pattern
- * startIndex: string index, from which we starting search
+ * startIndex: string index, from which we start searching
Returns: String with placeholders instead of ElementTree elements.
node = pattern.handleMatch(match)
if node is None:
- return data, True, len(leftData) + match.span(len(match.groups()))[0]
+ return data, True, len(leftData)+match.span(len(match.groups()))[0]
if not isString(node):
- if not isinstance(node.text, markdown.AtomicString):
+ if not isinstance(node.text, util.AtomicString):
# We need to process current node too
for child in [node] + node.getchildren():
if not isString(node):
- if child.text:
+ if child.text:
child.text = self.__handleInline(child.text,
patternIndex + 1)
if child.tail:
Iterate over ElementTree, find elements with inline tag, apply inline
patterns and append newly created Elements to tree. If you don't
- want process your data with inline paterns, instead of normal string,
+ want to process your data with inline paterns, instead of normal string,
use subclass AtomicString:
- node.text = markdown.AtomicString("data won't be processed with inline patterns")
+ node.text = markdown.AtomicString("This will not be processed.")
Arguments:
- * markdownTree: ElementTree object, representing Markdown tree.
+ * tree: ElementTree object, representing Markdown tree.
Returns: ElementTree object with applied inline patterns.
currElement = stack.pop()
insertQueue = []
for child in currElement.getchildren():
- if child.text and not isinstance(child.text, markdown.AtomicString):
+ if child.text and not isinstance(child.text, util.AtomicString):
text = child.text
child.text = None
lst = self.__processPlaceholders(self.__handleInline(
text), child)
stack += lst
insertQueue.append((child, lst))
-
+ if child.tail:
+ tail = self.__handleInline(child.tail)
+ dumby = util.etree.Element('d')
+ tailResult = self.__processPlaceholders(tail, dumby)
+ if dumby.text:
+ child.tail = dumby.text
+ else:
+ child.tail = None
+ pos = currElement.getchildren().index(child) + 1
+ tailResult.reverse()
+ for newChild in tailResult:
+ currElement.insert(pos, newChild)
if child.getchildren():
stack.append(child)
for element, lst in insertQueue:
- if element.text:
- element.text = \
- markdown.inlinepatterns.handleAttributes(element.text,
- element)
+ if self.markdown.enable_attributes:
+ if element.text:
+ element.text = \
+ inlinepatterns.handleAttributes(element.text,
+ element)
i = 0
for newChild in lst:
- # Processing attributes
- if newChild.tail:
- newChild.tail = \
- markdown.inlinepatterns.handleAttributes(newChild.tail,
- element)
- if newChild.text:
- newChild.text = \
- markdown.inlinepatterns.handleAttributes(newChild.text,
- newChild)
+ if self.markdown.enable_attributes:
+ # Processing attributes
+ if newChild.tail:
+ newChild.tail = \
+ inlinepatterns.handleAttributes(newChild.tail,
+ element)
+ if newChild.text:
+ newChild.text = \
+ inlinepatterns.handleAttributes(newChild.text,
+ newChild)
element.insert(i, newChild)
i += 1
return tree
""" Recursively add linebreaks to ElementTree children. """
i = "\n"
- if markdown.isBlockLevel(elem.tag) and elem.tag not in ['code', 'pre']:
+ if util.isBlockLevel(elem.tag) and elem.tag not in ['code', 'pre']:
if (not elem.text or not elem.text.strip()) \
- and len(elem) and markdown.isBlockLevel(elem[0].tag):
+ and len(elem) and util.isBlockLevel(elem[0].tag):
elem.text = i
for e in elem:
- if markdown.isBlockLevel(e.tag):
+ if util.isBlockLevel(e.tag):
self._prettifyETree(e)
if not elem.tail or not elem.tail.strip():
elem.tail = i
--- /dev/null
+# -*- coding: utf-8 -*-
+import re
+from logging import CRITICAL
+
+import etree_loader
+
+
+"""
+CONSTANTS
+=============================================================================
+"""
+
+"""
+Constants you might want to modify
+-----------------------------------------------------------------------------
+"""
+
+BLOCK_LEVEL_ELEMENTS = re.compile("^(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul"
+ "|script|noscript|form|fieldset|iframe|math"
+ "|hr|hr/|style|li|dt|dd|thead|tbody"
+ "|tr|th|td|section|footer|header|group|figure"
+ "|figcaption|aside|article|canvas|output"
+ "|progress|video)$")
+# Placeholders
+STX = u'\u0002' # Use STX ("Start of text") for start-of-placeholder
+ETX = u'\u0003' # Use ETX ("End of text") for end-of-placeholder
+INLINE_PLACEHOLDER_PREFIX = STX+"klzzwxh:"
+INLINE_PLACEHOLDER = INLINE_PLACEHOLDER_PREFIX + "%s" + ETX
+INLINE_PLACEHOLDER_RE = re.compile(INLINE_PLACEHOLDER % r'([0-9]{4})')
+AMP_SUBSTITUTE = STX+"amp"+ETX
+
+"""
+Constants you probably do not need to change
+-----------------------------------------------------------------------------
+"""
+
+RTL_BIDI_RANGES = ( (u'\u0590', u'\u07FF'),
+ # Hebrew (0590-05FF), Arabic (0600-06FF),
+ # Syriac (0700-074F), Arabic supplement (0750-077F),
+ # Thaana (0780-07BF), Nko (07C0-07FF).
+ (u'\u2D30', u'\u2D7F'), # Tifinagh
+ )
+
+# Extensions should use "markdown.util.etree" instead of "etree" (or do `from
+# markdown.util import etree`). Do not import it by yourself.
+
+etree = etree_loader.importETree()
+
+"""
+AUXILIARY GLOBAL FUNCTIONS
+=============================================================================
+"""
+
+
+def isBlockLevel(tag):
+ """Check if the tag is a block level HTML tag."""
+ if isinstance(tag, basestring):
+ return BLOCK_LEVEL_ELEMENTS.match(tag)
+ # Some ElementTree tags are not strings, so return False.
+ return False
+
+"""
+MISC AUXILIARY CLASSES
+=============================================================================
+"""
+
+class AtomicString(unicode):
+ """A string which should not be further processed."""
+ pass
+
+
+class Processor:
+ def __init__(self, markdown_instance=None):
+ if markdown_instance:
+ self.markdown = markdown_instance
+
+
+class HtmlStash:
+ """
+ This class is used for stashing HTML objects that we extract
+ in the beginning and replace with place-holders.
+ """
+
+ def __init__ (self):
+ """ Create a HtmlStash. """
+ self.html_counter = 0 # for counting inline html segments
+ self.rawHtmlBlocks=[]
+
+ def store(self, html, safe=False):
+ """
+ Saves an HTML segment for later reinsertion. Returns a
+ placeholder string that needs to be inserted into the
+ document.
+
+ Keyword arguments:
+
+ * html: an html segment
+ * safe: label an html segment as safe for safemode
+
+ Returns : a placeholder string
+
+ """
+ self.rawHtmlBlocks.append((html, safe))
+ placeholder = self.get_placeholder(self.html_counter)
+ self.html_counter += 1
+ return placeholder
+
+ def reset(self):
+ self.html_counter = 0
+ self.rawHtmlBlocks = []
+
+ def get_placeholder(self, key):
+ return "%swzxhzdk:%d%s" % (STX, key, ETX)
+
--- /dev/null
+#!/usr/bin/env python
+
+import tests
+
+tests.run()
--- /dev/null
+[nosetests]
+with-doctest=1
import sys, os
from distutils.core import setup
from distutils.command.install_scripts import install_scripts
+from distutils.command.build import build
+from distutils.core import Command
+from distutils.util import change_root, newer
+import codecs
-version = '2.0.3'
+# Try to run 2to3 automaticaly when building in Python 3.x
+try:
+ from distutils.command.build_py import build_py_2to3 as build_py
+except ImportError:
+ if sys.version_info >= (3, 0):
+ raise ImportError("build_py_2to3 is required to build in Python 3.x.")
+ from distutils.command.build_py import build_py
+
+version = '2.2.0'
+
+# The command line script name. Currently set to "markdown_py" so as not to
+# conflict with the perl implimentation (which uses "markdown"). We can't use
+# "markdown.py" as the default config on some systems will cause the script to
+# try to import itself rather than the library which will raise an error.
+SCRIPT_NAME = 'markdown_py'
class md_install_scripts(install_scripts):
- """ Customized install_scripts. Create markdown.bat for win32. """
+ """ Customized install_scripts. Create markdown_py.bat for win32. """
def run(self):
install_scripts.run(self)
if sys.platform == 'win32':
try:
script_dir = os.path.join(sys.prefix, 'Scripts')
- script_path = os.path.join(script_dir, 'markdown')
+ script_path = os.path.join(script_dir, SCRIPT_NAME)
bat_str = '@"%s" "%s" %%*' % (sys.executable, script_path)
- bat_path = os.path.join(self.install_dir, 'markdown.bat')
- f = file(bat_path, 'w')
+ bat_path = os.path.join(self.install_dir, '%s.bat' %SCRIPT_NAME)
+ f = open(bat_path, 'w')
f.write(bat_str)
f.close()
- print 'Created:', bat_path
- except Exception, e:
- print 'ERROR: Unable to create %s: %s' % (bat_path, e)
+ print ('Created: %s' % bat_path)
+ except Exception:
+ _, err, _ = sys.exc_info() # for both 2.x & 3.x compatability
+ print ('ERROR: Unable to create %s: %s' % (bat_path, err))
+
+
+class build_docs(Command):
+ """ Build markdown documentation into html."""
+
+ description = '"build" documentation (convert markdown text to html)'
+
+ user_options = [
+ ('build-base=', 'd', 'directory to "build" to'),
+ ('force', 'f', 'forcibly build everything (ignore file timestamps)'),
+ ]
+
+ boolean_options = ['force']
+
+ def initialize_options(self):
+ self.build_base = None
+ self.force = None
+ self.docs = None
+ self.sitemap = ''
+
+ def finalize_options(self):
+ self.set_undefined_options('build',
+ ('build_base', 'build_base'),
+ ('force', 'force'))
+ self.docs = self._get_docs()
+
+ def _get_docs(self):
+ for root, dirs, files in os.walk('docs'):
+ for file in files:
+ if not file.startswith('_'):
+ path = os.path.join(root, file)
+ yield path
+
+ def _get_context(self, src, path):
+ """ Build and return context to pass to template. """
+ # set defaults
+ c = {
+ 'title' : '',
+ 'prev_url' : '',
+ 'prev_title' : '',
+ 'next_url' : '',
+ 'next_title' : '',
+ 'crumb' : '',
+ 'version' : version,
+ }
+ c['body'] = self.md.convert(src)
+ c['toc'] = self.md.toc
+ for k, v in self.md.Meta.items():
+ c[k] = ' '.join(v)
+ self.md.reset()
+ # Manipulate path
+ path = path[len(os.path.join(self.build_base, 'docs/')):]
+ dir, file = os.path.split(path)
+ name, ext = os.path.splitext(file)
+ parts = [x for x in dir.split(os.sep) if x]
+ c['source'] = '%s.txt' % name
+ c['base'] = '../'*len(parts)
+ # Build page title
+ if name.lower() != 'index' or parts:
+ c['page_title'] = '%s — Python Markdown' % c['title']
+ else:
+ c['page_title'] = 'Python Markdown'
+ # Build crumb trail
+ crumbs = []
+ ctemp = '<li><a href="%s">%s</a> »</li>'
+ for n, part in enumerate(parts):
+ href = ('../'*n) + 'index.html'
+ label = part.replace('_', ' ').capitalize()
+ crumbs.append(ctemp % (href, label))
+ if c['title'] and name.lower() != 'index':
+ crumbs.append(ctemp % (file, c['title']))
+ c['crumb'] = '\n'.join(crumbs)
+ return c
+
+ def run(self):
+ # Before importing markdown, tweak sys.path to import from the
+ # build directory (2to3 might have run on the library).
+ bld_cmd = self.get_finalized_command("build")
+ sys.path.insert(0, bld_cmd.build_lib)
+ try:
+ import markdown
+ except ImportError:
+ print ('skipping build_docs: Markdown "import" failed!')
+ else:
+ template = codecs.open('docs/_template.html', encoding='utf-8').read()
+ self.md = markdown.Markdown(extensions=['extra', 'toc', 'meta'])
+ for infile in self.docs:
+ outfile, ext = os.path.splitext(infile)
+ if ext == '.txt':
+ # Copy src to .txt file
+ srcfile = outfile + '.txt'
+ srcfile = change_root(self.build_base, srcfile)
+ self.mkpath(os.path.split(srcfile)[0])
+ self.copy_file(infile, srcfile)
+ # Render html file
+ outfile += '.html'
+ outfile = change_root(self.build_base, outfile)
+ self.mkpath(os.path.split(outfile)[0])
+ if self.force or newer(infile, outfile):
+ if self.verbose:
+ print ('Converting %s -> %s' % (infile, outfile))
+ if not self.dry_run:
+ src = codecs.open(infile, encoding='utf-8').read()
+ out = template % self._get_context(src, outfile)
+ doc = open(outfile, 'wb')
+ doc.write(out.encode('utf-8'))
+ doc.close()
+ else:
+ outfile = change_root(self.build_base, infile)
+ self.mkpath(os.path.split(outfile)[0])
+ self.copy_file(infile, outfile)
+
+
+class md_build(build):
+ """ Run "build_docs" command from "build" command. """
+ def has_docs(self):
+ return True
+
+ sub_commands = build.sub_commands + [('build_docs', has_docs)]
+
data = dict(
name = 'Markdown',
version = version,
- url = 'http://www.freewisdom.org/projects/python-markdown',
+ url = 'http://packages.python.org/Markdown/',
download_url = 'http://pypi.python.org/packages/source/M/Markdown/Markdown-%s.tar.gz' % version,
description = 'Python implementation of Markdown.',
- author = 'Manfred Stienstra and Yuri takhteyev',
- author_email = 'yuri [at] freewisdom.org',
+ author = 'Manfred Stienstra, Yuri takhteyev and Waylan limberg',
+ author_email = 'markdown [at] freewisdom.org',
maintainer = 'Waylan Limberg',
maintainer_email = 'waylan [at] gmail.com',
license = 'BSD License',
packages = ['markdown', 'markdown.extensions'],
- scripts = ['bin/markdown'],
- cmdclass = {'install_scripts': md_install_scripts},
+ scripts = ['bin/%s' % SCRIPT_NAME],
+ cmdclass = {'install_scripts': md_install_scripts,
+ 'build_py': build_py,
+ 'build_docs': build_docs,
+ 'build': md_build},
classifiers = ['Development Status :: 5 - Production/Stable',
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.3',
'Programming Language :: Python :: 2.4',
'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
+ 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.0',
+ 'Programming Language :: Python :: 3.1',
+ 'Programming Language :: Python :: 3.2',
'Topic :: Communications :: Email :: Filters',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries',
'Topic :: Internet :: WWW/HTTP :: Site Management',
'Topic :: Text Processing :: Filters',
'Topic :: Text Processing :: Markup :: HTML',
],
- )
+ )
if sys.version[:3] < '2.5':
data['install_requires'] = ['elementtree']
setup(**data)
+
--- /dev/null
+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_config(dir_name):
+ """ Get config for given directory name. """
+ config = util.CustomConfigParser({'normalize': '0',
+ 'skip': '0',
+ 'input_ext': '.txt',
+ 'output_ext': '.html'})
+ config.read(os.path.join(dir_name, 'test.cfg'))
+ return config
+
+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, v in config.items(section):
+ # Filter out args unique to testing framework
+ if key not in ['normalize', 'skip', 'input_ext', 'output_ext']:
+ 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', 'xmlcharrefreplace'),
+ 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.get(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.get(cfg_section, 'normalize'):
+ # Normalize whitespace before comparing.
+ expected_output = normalize(expected_output)
+ output = normalize(output)
+ elif config.get(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 = get_config(dir_name)
+ # 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 generate(file, config):
+ """ Write expected output file for given input. """
+ cfg_section = get_section(file, config)
+ if config.get(cfg_section, 'skip'):
+ print 'Skipping:', file
+ return None
+ input_file = file + config.get(cfg_section, 'input_ext')
+ output_file = file + config.get(cfg_section, 'output_ext')
+ if not os.path.isfile(output_file) or \
+ os.path.getmtime(output_file) < os.path.getmtime(input_file):
+ print 'Generating:', file
+ markdown.markdownFromFile(input=input_file, output=output_file,
+ encoding='utf-8', **get_args(file, config))
+ else:
+ print 'Already up-to-date:', file
+
+def generate_all():
+ """ Generate expected output for all outdated tests. """
+ for dir_name, sub_dirs, files in os.walk(test_dir):
+ # Get dir specific config settings.
+ config = get_config(dir_name)
+ # 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'):
+ generate(os.path.join(dir_name, root), config)
+
+
+def run():
+ nose.main(addplugins=[HtmlOutput(), Markdown()])
+
--- /dev/null
+<p>AT&T has an ampersand in their name.</p>
+<p>AT&T is another way to write it.</p>
+<p>This & that.</p>
+<p>4 < 5.</p>
+<p>6 > 5.</p>
+<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p>
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
\ No newline at end of file
--- /dev/null
+AT&T has an ampersand in their name.
+
+AT&T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/ "AT&T"
\ No newline at end of file
--- /dev/null
+<p><a href="simple link" title="title">link</a>
+<img alt="image" src="http://example.com/image.jpg" />
+<a href="http://example.com/(()((())923)(">link</a>
+<img alt="image" src="link(()))(" /></p>
\ No newline at end of file
--- /dev/null
+[link](<simple link> "title")
+
+[link](<http://example.com/(()((())923)(>)
+))(>)
--- /dev/null
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+<p>Https link: <a href="https://example.com">https://example.com</a></p>
+<p>Ftp link: <a href="ftp://example.com">ftp://example.com</a></p>
+<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p>
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+<blockquote>
+<p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+<p>Auto-links should not occur here: <code><http://example.com/></code></p>
+<pre><code>or here: <http://example.com/>
+</code></pre>
\ No newline at end of file
--- /dev/null
+Link: <http://example.com/>.
+
+Https link: <https://example.com>
+
+Ftp link: <ftp://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/>
--- /dev/null
+<p>These should all get escaped:</p>
+<p>Backslash: \</p>
+<p>Backtick: `</p>
+<p>Asterisk: *</p>
+<p>Underscore: _</p>
+<p>Left brace: {</p>
+<p>Right brace: }</p>
+<p>Left bracket: [</p>
+<p>Right bracket: ]</p>
+<p>Left paren: (</p>
+<p>Right paren: )</p>
+<p>Greater-than: ></p>
+<p>Hash: #</p>
+<p>Period: .</p>
+<p>Bang: !</p>
+<p>Plus: +</p>
+<p>Minus: -</p>
+<p>These should not, because they occur within a code block:</p>
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+<p>Nor should these, which occur in code spans:</p>
+<p>Backslash: <code>\\</code></p>
+<p>Backtick: <code>\`</code></p>
+<p>Asterisk: <code>\*</code></p>
+<p>Underscore: <code>\_</code></p>
+<p>Left brace: <code>\{</code></p>
+<p>Right brace: <code>\}</code></p>
+<p>Left bracket: <code>\[</code></p>
+<p>Right bracket: <code>\]</code></p>
+<p>Left paren: <code>\(</code></p>
+<p>Right paren: <code>\)</code></p>
+<p>Greater-than: <code>\></code></p>
+<p>Hash: <code>\#</code></p>
+<p>Period: <code>\.</code></p>
+<p>Bang: <code>\!</code></p>
+<p>Plus: <code>\+</code></p>
+<p>Minus: <code>\-</code></p>
\ No newline at end of file
--- /dev/null
+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: `\-`
--- /dev/null
+<blockquote>
+<p>Example:</p>
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+<p>Or:</p>
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> Example:
+>
+> sub status {
+> print "working";
+> }
+>
+> Or:
+>
+> sub status {
+> return "working";
+> }
--- /dev/null
+<ul>
+<li>
+<p>A list item with a code block</p>
+<pre><code>Some *code*
+</code></pre>
+</li>
+<li>
+<p>Another list item</p>
+<pre><code>More code
+
+And more code
+</code></pre>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+* A list item with a code block
+
+ Some *code*
+
+* Another list item
+
+ More code
+
+ And more code
+
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+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.
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+Dashes:
+
+---
+
+ ---
+
+ ---
+
+ ---
+
+ ---
+
+- - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+ ***
+
+ ***
+
+ ***
+
+* * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+ ___
+
+ ___
+
+ ___
+
+_ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+</div>
+<div>bar</div>
+</div>
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
--- /dev/null
+<p>Here's a simple block:</p>
+<div>
+ foo
+</div>
+
+<p>This should be a code block, though:</p>
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+<p>As should this:</p>
+<pre><code><div>foo</div>
+</code></pre>
+<p>Now, nested:</p>
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+<p>This should just be an HTML comment:</p>
+<!-- Comment -->
+
+<p>Multiline:</p>
+<!--
+Blah
+Blah
+-->
+
+<p>Code block:</p>
+<pre><code><!-- Comment -->
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<!-- foo -->
+
+<p>Code:</p>
+<pre><code><hr />
+</code></pre>
+<p>Hr's:</p>
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+
+<p><some <a href="http://example.com">weird</a> stuff></p>
\ No newline at end of file
--- /dev/null
+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" >
+
+<some [weird](http://example.com) stuff>
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+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]().
--- /dev/null
+<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>
+<p>With <a href="http://example.com/" title="Angle Brackets">angle brackets</a>.</p>
+<p>And <a href="http://example.com/" title="Without angle brackets.">without</a>.</p>
+<p>With <a href="http://example.com" title="Yes this works">line
+breaks</a></p>
+<p>and <a href="http://example.com" title="Yes this works">line
+breaks</a> with one space.</p>
+<p>and [line<br />
+breaks[] with two spaces.</p>
+<p><a href="http://example.com" title="No more hanging empty bracket!">short ref</a></p>
+<p><a href="http://example.com" title="No more hanging empty bracket!">short
+ref</a></p>
+<p><a href="http://example.com" title="Title on next line.">a ref</a></p>
\ No newline at end of file
--- /dev/null
+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/
+
+With [angle brackets][].
+
+And [without][].
+
+[angle brackets]: <http://example.com/> "Angle Brackets"
+[without]: http://example.com/ "Without angle brackets."
+
+With [line
+breaks][]
+
+and [line
+breaks][] with one space.
+
+and [line
+breaks[] with two spaces.
+
+[line breaks]: http://example.com "Yes this works"
+
+[short ref]
+
+[short
+ref]
+
+[short ref]: http://example.com "No more hanging empty bracket!"
+
+[a ref]
+
+[a ref]: http://example.com
+ "Title on next line."
--- /dev/null
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
\ No newline at end of file
--- /dev/null
+Foo [bar][].
+
+Foo [bar](/url/ "Title with "quotes" inside").
+
+
+ [bar]: /url/ "Title with "quotes" inside"
+
--- /dev/null
+<h1>Markdown: Basics</h1>
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<h2>Getting the Gist of Markdown's Formatting Syntax</h2>
+<p>This page offers a brief overview of what it's like to use Markdown.
+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.</p>
+<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.</p>
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>
+<h2>Paragraphs, Headers, Blockquotes</h2>
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.
+Setext-style headers for <code><h1></code> and <code><h2></code> are created by
+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.
+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.</p>
+<p>Blockquotes are indicated using email-style '<code>></code>' angle brackets.</p>
+<p>Markdown:</p>
+<pre><code>A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+> This is a blockquote.
+>
+> This is the second paragraph in the blockquote.
+>
+> ## This is an H2 in a blockquote
+</code></pre>
+<p>Output:</p>
+<pre><code><h1>A First Level Header</h1>
+
+<h2>A Second Level Header</h2>
+
+<p>Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.</p>
+
+<p>The quick brown fox jumped over the lazy
+dog's back.</p>
+
+<h3>Header 3</h3>
+
+<blockquote>
+ <p>This is a blockquote.</p>
+
+ <p>This is the second paragraph in the blockquote.</p>
+
+ <h2>This is an H2 in a blockquote</h2>
+</blockquote>
+</code></pre>
+<h3>Phrase Emphasis</h3>
+<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>
+<p>Markdown:</p>
+<pre><code>Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+</code></pre>
+<p>Output:</p>
+<pre><code><p>Some of these words <em>are emphasized</em>.
+Some of these words <em>are emphasized also</em>.</p>
+
+<p>Use two asterisks for <strong>strong emphasis</strong>.
+Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+</code></pre>
+<h2>Lists</h2>
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
+<pre><code>* Candy.
+* Gum.
+* Booze.
+</code></pre>
+<p>this:</p>
+<pre><code>+ Candy.
++ Gum.
++ Booze.
+</code></pre>
+<p>and this:</p>
+<pre><code>- Candy.
+- Gum.
+- Booze.
+</code></pre>
+<p>all produce the same output:</p>
+<pre><code><ul>
+<li>Candy.</li>
+<li>Gum.</li>
+<li>Booze.</li>
+</ul>
+</code></pre>
+<p>Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:</p>
+<pre><code>1. Red
+2. Green
+3. Blue
+</code></pre>
+<p>Output:</p>
+<pre><code><ol>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ol>
+</code></pre>
+<p>If you put blank lines between items, you'll get <code><p></code> tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:</p>
+<pre><code>* A list item.
+
+ With multiple paragraphs.
+
+* Another item in the list.
+</code></pre>
+<p>Output:</p>
+<pre><code><ul>
+<li><p>A list item.</p>
+<p>With multiple paragraphs.</p></li>
+<li><p>Another item in the list.</p></li>
+</ul>
+</code></pre>
+<h3>Links</h3>
+<p>Markdown supports two styles for creating links: <em>inline</em> and
+<em>reference</em>. With both styles, you use square brackets to delimit the
+text you want to turn into a link.</p>
+<p>Inline-style links use parentheses immediately after the link text.
+For example:</p>
+<pre><code>This is an [example link](http://example.com/).
+</code></pre>
+<p>Output:</p>
+<pre><code><p>This is an <a href="http://example.com/">
+example link</a>.</p>
+</code></pre>
+<p>Optionally, you may include a title attribute in the parentheses:</p>
+<pre><code>This is an [example link](http://example.com/ "With a Title").
+</code></pre>
+<p>Output:</p>
+<pre><code><p>This is an <a href="http://example.com/" title="With a Title">
+example link</a>.</p>
+</code></pre>
+<p>Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:</p>
+<pre><code>I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/ "Google"
+[2]: http://search.yahoo.com/ "Yahoo Search"
+[3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Output:</p>
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from <a href="http://search.yahoo.com/"
+title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
+title="MSN Search">MSN</a>.</p>
+</code></pre>
+<p>The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are <em>not</em> case sensitive:</p>
+<pre><code>I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+</code></pre>
+<p>Output:</p>
+<pre><code><p>I start my morning with a cup of coffee and
+<a href="http://www.nytimes.com/">The New York Times</a>.</p>
+</code></pre>
+<h3>Images</h3>
+<p>Image syntax is very much like link syntax.</p>
+<p>Inline (titles are optional):</p>
+<pre><code>
+</code></pre>
+<p>Reference-style:</p>
+<pre><code>![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+</code></pre>
+<p>Both of the above examples produce the same output:</p>
+<pre><code><img src="/path/to/img.jpg" alt="alt text" title="Title" />
+</code></pre>
+<h3>Code</h3>
+<p>In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (<code>&</code>) and angle brackets (<code><</code> or
+<code>></code>) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:</p>
+<pre><code>I strongly recommend against using any `<blink>` tags.
+
+I wish SmartyPants used named entities like `&mdash;`
+instead of decimal-encoded entites like `&#8212;`.
+</code></pre>
+<p>Output:</p>
+<pre><code><p>I strongly recommend against using any
+<code>&lt;blink&gt;</code> tags.</p>
+
+<p>I wish SmartyPants used named entities like
+<code>&amp;mdash;</code> instead of decimal-encoded
+entites like <code>&amp;#8212;</code>.</p>
+</code></pre>
+<p>To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, <code>&</code>, <code><</code>,
+and <code>></code> characters will be escaped automatically.</p>
+<p>Markdown:</p>
+<pre><code>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+ <blockquote>
+ <p>For example.</p>
+ </blockquote>
+</code></pre>
+<p>Output:</p>
+<pre><code><p>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:</p>
+
+<pre><code>&lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+&lt;/blockquote&gt;
+</code></pre>
+</code></pre>
\ No newline at end of file
--- /dev/null
+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):
+
+ 
+
+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 `—`
+ instead of decimal-encoded entites like `—`.
+
+Output:
+
+ <p>I strongly recommend against using any
+ <code><blink></code> tags.</p>
+
+ <p>I wish SmartyPants used named entities like
+ <code>&mdash;</code> instead of decimal-encoded
+ entites like <code>&#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><blockquote>
+ <p>For example.</p>
+ </blockquote>
+ </code></pre>
--- /dev/null
+<h1>Markdown: Syntax</h1>
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a><ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul>
+</li>
+<li><a href="#block">Block Elements</a><ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul>
+</li>
+<li><a href="#span">Span Elements</a><ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul>
+</li>
+<li><a href="#misc">Miscellaneous</a><ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul>
+</li>
+</ul>
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+<hr />
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,
+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>
+<p>For example, to add an HTML table to a Markdown article:</p>
+<pre><code>This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+</code></pre>
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code><</code>
+and <code>&</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&lt;</code>, and
+<code>&amp;</code>.</p>
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+<pre><code>http://images.google.com/images?num=30&q=larry+bird
+</code></pre>
+<p>you need to encode the URL as:</p>
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;</code>.</p>
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+<pre><code>&copy;
+</code></pre>
+<p>and Markdown will leave it alone. But if you write:</p>
+<pre><code>AT&T
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>AT&amp;T
+</code></pre>
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+<pre><code>4 < 5
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>4 &lt; 5
+</code></pre>
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code><</code>
+and <code>&</code> in your example code needs to be escaped.)</p>
+<hr />
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code><br /></code> tag.</p>
+<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic
+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>></code> before every line:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Markdown allows you to be lazy and only put the <code>></code> before the first
+line of a hard-wrapped paragraph:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>></code>:</p>
+<pre><code>> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+</code></pre>
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+<pre><code>> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+</code></pre>
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+<p>is equivalent to:</p>
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+<p>and:</p>
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+<p>Ordered lists use numbers followed by periods:</p>
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+<pre><code><ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</code></pre>
+<p>If you instead wrote the list in Markdown like this:</p>
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+<p>or even:</p>
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>But if you want to be lazy, you don't have to:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code><p></code> tags in the HTML output. For example, this input:</p>
+<pre><code>* Bird
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+</code></pre>
+<p>But this:</p>
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+</code></pre>
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+<p>To put a blockquote within a list item, the blockquote's <code>></code>
+delimiters need to be indented:</p>
+<pre><code>* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+</code></pre>
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+<pre><code>* A list item with a code block:
+
+ <code goes here>
+</code></pre>
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+<pre><code>1986. What a great season.
+</code></pre>
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+<pre><code>1986\. What a great season.
+</code></pre>
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code><pre></code> and <code><code></code> tags.</p>
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+<p>Markdown will generate:</p>
+<pre><code><p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+</code></pre>
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+<p>will turn into:</p>
+<pre><code><p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+ beep
+end tell
+</code></pre>
+</code></pre>
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+<pre><code> <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+</code></pre>
+<p>will turn into:</p>
+<pre><code><pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+</code></pre>
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+<hr />
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+<p>In both styles, the link text is delimited by [square brackets].</p>
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+<p>Will produce:</p>
+<pre><code><p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+</code></pre>
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+<p>You can optionally use a space to separate the sets of brackets:</p>
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>Square brackets containing the link identifier (optionally
+ indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+ in double or single quotes.</li>
+</ul>
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+<pre><code>[id]: <http://example.com/> "Optional Title Here"
+</code></pre>
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+<p>are equivalent.</p>
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+<pre><code>[Google][]
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Google]: http://google.com/
+</code></pre>
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+<p>Here's an example of reference links in action:</p>
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Using the implicit link name shortcut, you could instead write:</p>
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Both of the above examples will produce the following HTML output:</p>
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+</code></pre>
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code><strong></code> tag. E.g., this input:</p>
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+<p>will produce:</p>
+<pre><code><em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+</code></pre>
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+<p>Emphasis can be used in the middle of a word:</p>
+<pre><code>un*fucking*believable
+</code></pre>
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+<pre><code>Use the `printf()` function.
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>Use the <code>printf()</code> function.</p>
+</code></pre>
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+<p>which will produce this:</p>
+<pre><code><p><code>There is a literal backtick (`) here.</code></p>
+</code></pre>
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+</code></pre>
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+<pre><code>Please don't use any `<blink>` tags.
+</code></pre>
+<p>into:</p>
+<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+</code></pre>
+<p>You can write this:</p>
+<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+</code></pre>
+<p>to produce:</p>
+<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+</code></pre>
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+<p>Inline image syntax looks like this:</p>
+<pre><code>
+
+
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+ attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
+</ul>
+<p>Reference-style image syntax looks like this:</p>
+<pre><code>![Alt text][id]
+</code></pre>
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code><img></code> tags.</p>
+<hr />
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+<pre><code><http://example.com/>
+</code></pre>
+<p>Markdown will turn this into:</p>
+<pre><code><a href="http://example.com/">http://example.com/</a>
+</code></pre>
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+<pre><code><address@example.com>
+</code></pre>
+<p>into something like this:</p>
+<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+</code></pre>
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes
+before the asterisks, like this:</p>
+<pre><code>\*literal asterisks\*
+</code></pre>
+<p>Markdown provides backslash escapes for the following characters:</p>
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
\ No newline at end of file
--- /dev/null
+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. `<`, and
+`&`.
+
+Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '`AT&T`'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+you need to encode the URL as:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+in your anchor tag `href` attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.
+
+Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into `&`.
+
+So, if you want to include a copyright symbol in your article, you can write:
+
+ ©
+
+and Markdown will leave it alone. But if you write:
+
+ AT&T
+
+Markdown will translate it to:
+
+ AT&T
+
+Similarly, because Markdown supports [inline HTML](#html), if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:
+
+ 4 < 5
+
+Markdown will translate it to:
+
+ 4 < 5
+
+However, inside Markdown code spans and blocks, angle brackets and
+ampersands are *always* encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single `<`
+and `&` in your example code needs to be escaped.)
+
+
+* * *
+
+
+<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">
+ © 2004 Foo Corporation
+ </div>
+
+will turn into:
+
+ <pre><code><div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+ </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><blink></code> tags.</p>
+
+You can write this:
+
+ `—` is the decimal-encoded equivalent of `—`.
+
+to produce:
+
+ <p><code>&#8212;</code> is the decimal-encoded
+ equivalent of <code>&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:
+
+ 
+
+ 
+
+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="mailto:addre
+ ss@example.co
+ m">address@exa
+ mple.com</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
+
--- /dev/null
+<blockquote>
+<p>foo</p>
+<blockquote>
+<p>bar</p>
+</blockquote>
+<p>foo</p>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> foo
+>
+> > bar
+>
+> foo
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+## 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
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
+***This is strong and em.***
+
+So is ***this*** word.
+
+___This is strong and em.___
+
+So is ___this___ word.
--- /dev/null
+<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>
\ No newline at end of file
--- /dev/null
++ 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
--- /dev/null
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> A list within a blockquote:
+>
+> * asterisk 1
+> * asterisk 2
+> * asterisk 3
--- /dev/null
+<h1 id="setext">This is a sextext header</h1>
+<p class="myclass" id="par1">A paragraph with some text.
+Line two of the paragraph.</p>
+<h2 class="someclass" id="sextext2">This is another</h2>
+<p>Test some <em class="inline">inline</em> text.
+A <a class="linkkyclass" href="http://example.com" title="A title.">link</a>
+And a <strong class="nest">nested <a class="linky2" href="http://example.com" title="Some title">link</a></strong></p>
+<h3 id="hash">This is a hash Header</h3>
+<p bar="b az" baz="blah blah" foo="foo" title="I wasn't kidding!">And now some random attributes.</p>
+<h3 id="hash2">No closing hash header</h3>
+<p class="foo bar addme" id="overridden">Now test overrides</p>
+<pre><code># A code block which contains attr_list syntax
+# This should be ignored.
+{: #someid .someclass }
+</code></pre>
+<h3 id="hash3">No colon for compatability with Headerid ext</h3>
+<p id="the_end">Also a codespan: <code class="foo">{: .someclass}</code>.</p>
\ No newline at end of file
--- /dev/null
+This is a sextext header {: #setext}
+====================================
+
+A paragraph with some text.
+Line two of the paragraph.
+{: #par1 .myclass }
+
+This is another {: #sextext2 .someclass}
+----------------------------------------
+
+Test some _inline_{: .inline} text.
+A [link](http://example.com){: .linkkyclass title="A title."}
+And a __nested [link][]{: .linky2}__{: .nest}
+
+[link]: http://example.com "Some title"
+
+### This is a hash Header ### {: #hash}
+
+And now some random attributes.
+{:foo bar='b az' baz="blah blah" title="I wasn't kidding!" }
+
+### No closing hash header {: #hash2}
+
+Now test overrides
+{: #overrideme .andme id=overridden class='foo bar' .addme }
+
+ # A code block which contains attr_list syntax
+ # This should be ignored.
+ {: #someid .someclass }
+
+### No colon for compatability with Headerid ext { #hash3 }
+
+Also a codespan: `{: .someclass}`{: .foo}.
+{: #the_end}
+
--- /dev/null
+<p>Some text</p>
+<table class="codehilitetable"><tr><td class="linenos"><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>
+ <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">"^(.*)</span><span class="si">%s</span><span class="s">(.*)$"</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>
+
+<span class="k">def</span> <span class="nf">getCompiledRegExp</span> <span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="p">:</span>
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">compiled_re</span>
+</pre></div>
+</td></tr></table>
+
+<p>More text</p>
\ No newline at end of file
--- /dev/null
+
+Some text
+
+ #!python
+ def __init__ (self, pattern) :
+ self.pattern = pattern
+ self.compiled_re = re.compile("^(.*)%s(.*)$" % pattern, re.DOTALL)
+
+ def getCompiledRegExp (self) :
+ return self.compiled_re
+
+More text
\ No newline at end of file
--- /dev/null
+<p>An <abbr title="Abbreviation">ABBR</abbr>: "<abbr title="Reference">REF</abbr>".
+ref and REFERENCE should be ignored.</p>
+<p>The <abbr title="Hyper Text Markup Language">HTML</abbr> specification
+is maintained by the <abbr title="World Wide Web Consortium">W3C</abbr>.</p>
\ No newline at end of file
--- /dev/null
+An ABBR: "REF".
+ref and REFERENCE should be ignored.
+
+*[REF]: Reference
+*[ABBR]: This gets overriden by the next one.
+*[ABBR]: Abbreviation
+
+The HTML specification
+is maintained by the W3C.
+
+*[HTML]: Hyper Text Markup Language
+*[W3C]: World Wide Web Consortium
+
--- /dev/null
+<p>This is the body with a footnote<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> or two<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> or more<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> <sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup> <sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup>.</p>
+<p>Also a reference that does not exist[^6].</p>
+<div class="footnote">
+<hr />
+<ol>
+<li id="fn:1">
+<p>Footnote that ends with a list:</p>
+<ul>
+<li>item 1</li>
+<li>item 2</li>
+</ul>
+<p><a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
+</li>
+<li id="fn:2">
+<blockquote>
+<p>This footnote is a blockquote.</p>
+</blockquote>
+<p><a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">↩</a></p>
+</li>
+<li id="fn:3">
+<p>A simple oneliner. <a href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">↩</a></p>
+</li>
+<li id="fn:4">
+<p>A footnote with multiple paragraphs.</p>
+<p>Paragraph two. <a href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">↩</a></p>
+</li>
+<li id="fn:5">
+<p>First line of first paragraph.
+Second line of first paragraph is not intended.
+Nor is third... <a href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">↩</a></p>
+</li>
+</ol>
+</div>
\ No newline at end of file
--- /dev/null
+This is the body with a footnote[^1] or two[^2] or more[^3] [^4] [^5].
+
+Also a reference that does not exist[^6].
+
+[^1]: Footnote that ends with a list:
+
+ * item 1
+ * item 2
+
+[^2]: > This footnote is a blockquote.
+
+[^3]: A simple oneliner.
+
+[^4]: A footnote with multiple paragraphs.
+
+ Paragraph two.
+
+[^5]: First line of first paragraph.
+Second line of first paragraph is not intended.
+Nor is third...
--- /dev/null
+<p>Something<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>
+<p>Something<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup></p>
+<p>Something<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup></p>
+<p>Something<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup></p>
+<p>Something<sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup></p>
+<p>Something<sup id="fnref:6"><a href="#fn:6" rel="footnote">6</a></sup></p>
+<p>Something<sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup></p>
+<p>Something<sup id="fnref:8"><a href="#fn:8" rel="footnote">8</a></sup></p>
+<p>Something<sup id="fnref:9"><a href="#fn:9" rel="footnote">9</a></sup></p>
+<p>Something<sup id="fnref:10"><a href="#fn:10" rel="footnote">10</a></sup></p>
+<p>Something<sup id="fnref:11"><a href="#fn:11" rel="footnote">11</a></sup></p>
+<p>Something<sup id="fnref:12"><a href="#fn:12" rel="footnote">12</a></sup></p>
+<p>Something<sup id="fnref:13"><a href="#fn:13" rel="footnote">13</a></sup></p>
+<p>Something<sup id="fnref:14"><a href="#fn:14" rel="footnote">14</a></sup></p>
+<p>Something<sup id="fnref:15"><a href="#fn:15" rel="footnote">15</a></sup></p>
+<p>Something<sup id="fnref:16"><a href="#fn:16" rel="footnote">16</a></sup></p>
+<p>Something<sup id="fnref:17"><a href="#fn:17" rel="footnote">17</a></sup></p>
+<p>Something<sup id="fnref:18"><a href="#fn:18" rel="footnote">18</a></sup></p>
+<p>Something<sup id="fnref:19"><a href="#fn:19" rel="footnote">19</a></sup></p>
+<p>Something<sup id="fnref:20"><a href="#fn:20" rel="footnote">20</a></sup></p>
+<p>Something<sup id="fnref:21"><a href="#fn:21" rel="footnote">21</a></sup></p>
+<p>Something<sup id="fnref:22"><a href="#fn:22" rel="footnote">22</a></sup></p>
+<p>Something<sup id="fnref:23"><a href="#fn:23" rel="footnote">23</a></sup></p>
+<p>Something<sup id="fnref:24"><a href="#fn:24" rel="footnote">24</a></sup></p>
+<p>Something<sup id="fnref:25"><a href="#fn:25" rel="footnote">25</a></sup></p>
+<p>Something<sup id="fnref:26"><a href="#fn:26" rel="footnote">26</a></sup></p>
+<p>Something<sup id="fnref:27"><a href="#fn:27" rel="footnote">27</a></sup></p>
+<p>Something<sup id="fnref:28"><a href="#fn:28" rel="footnote">28</a></sup></p>
+<p>Something<sup id="fnref:29"><a href="#fn:29" rel="footnote">29</a></sup></p>
+<p>Something<sup id="fnref:30"><a href="#fn:30" rel="footnote">30</a></sup></p>
+<p>Something<sup id="fnref:31"><a href="#fn:31" rel="footnote">31</a></sup></p>
+<p>Something<sup id="fnref:32"><a href="#fn:32" rel="footnote">32</a></sup></p>
+<p>Something<sup id="fnref:33"><a href="#fn:33" rel="footnote">33</a></sup></p>
+<p>Something<sup id="fnref:34"><a href="#fn:34" rel="footnote">34</a></sup></p>
+<p>Something<sup id="fnref:35"><a href="#fn:35" rel="footnote">35</a></sup></p>
+<p>Something<sup id="fnref:36"><a href="#fn:36" rel="footnote">36</a></sup></p>
+<p>Something<sup id="fnref:37"><a href="#fn:37" rel="footnote">37</a></sup></p>
+<p>Something<sup id="fnref:38"><a href="#fn:38" rel="footnote">38</a></sup></p>
+<p>Something<sup id="fnref:39"><a href="#fn:39" rel="footnote">39</a></sup></p>
+<p>Something<sup id="fnref:40"><a href="#fn:40" rel="footnote">40</a></sup></p>
+<p>Something<sup id="fnref:41"><a href="#fn:41" rel="footnote">41</a></sup></p>
+<p>Something<sup id="fnref:42"><a href="#fn:42" rel="footnote">42</a></sup></p>
+<p>Something<sup id="fnref:43"><a href="#fn:43" rel="footnote">43</a></sup></p>
+<p>Something<sup id="fnref:44"><a href="#fn:44" rel="footnote">44</a></sup></p>
+<p>Something<sup id="fnref:45"><a href="#fn:45" rel="footnote">45</a></sup></p>
+<p>Something<sup id="fnref:46"><a href="#fn:46" rel="footnote">46</a></sup></p>
+<p>Something<sup id="fnref:47"><a href="#fn:47" rel="footnote">47</a></sup></p>
+<p>Something<sup id="fnref:48"><a href="#fn:48" rel="footnote">48</a></sup></p>
+<p>Something<sup id="fnref:49"><a href="#fn:49" rel="footnote">49</a></sup></p>
+<p>Something<sup id="fnref:50"><a href="#fn:50" rel="footnote">50</a></sup></p>
+<p>Something<sup id="fnref:51"><a href="#fn:51" rel="footnote">51</a></sup></p>
+<p>Something<sup id="fnref:52"><a href="#fn:52" rel="footnote">52</a></sup></p>
+<p>Something<sup id="fnref:53"><a href="#fn:53" rel="footnote">53</a></sup></p>
+<p>Something<sup id="fnref:54"><a href="#fn:54" rel="footnote">54</a></sup></p>
+<p>Something<sup id="fnref:55"><a href="#fn:55" rel="footnote">55</a></sup></p>
+<p>Something<sup id="fnref:56"><a href="#fn:56" rel="footnote">56</a></sup></p>
+<p>Something<sup id="fnref:57"><a href="#fn:57" rel="footnote">57</a></sup></p>
+<p>Something<sup id="fnref:58"><a href="#fn:58" rel="footnote">58</a></sup></p>
+<p>Something<sup id="fnref:59"><a href="#fn:59" rel="footnote">59</a></sup></p>
+<p>Something<sup id="fnref:60"><a href="#fn:60" rel="footnote">60</a></sup></p>
+<p>Something<sup id="fnref:61"><a href="#fn:61" rel="footnote">61</a></sup></p>
+<p>Something<sup id="fnref:62"><a href="#fn:62" rel="footnote">62</a></sup></p>
+<p>Something<sup id="fnref:63"><a href="#fn:63" rel="footnote">63</a></sup></p>
+<p>Something<sup id="fnref:64"><a href="#fn:64" rel="footnote">64</a></sup></p>
+<p>Something<sup id="fnref:65"><a href="#fn:65" rel="footnote">65</a></sup></p>
+<p>Something<sup id="fnref:66"><a href="#fn:66" rel="footnote">66</a></sup></p>
+<p>Something<sup id="fnref:67"><a href="#fn:67" rel="footnote">67</a></sup></p>
+<p>Something<sup id="fnref:68"><a href="#fn:68" rel="footnote">68</a></sup></p>
+<p>Something<sup id="fnref:69"><a href="#fn:69" rel="footnote">69</a></sup></p>
+<p>Something<sup id="fnref:70"><a href="#fn:70" rel="footnote">70</a></sup></p>
+<p>Something<sup id="fnref:71"><a href="#fn:71" rel="footnote">71</a></sup></p>
+<p>Something<sup id="fnref:72"><a href="#fn:72" rel="footnote">72</a></sup></p>
+<p>Something<sup id="fnref:73"><a href="#fn:73" rel="footnote">73</a></sup></p>
+<p>Something<sup id="fnref:74"><a href="#fn:74" rel="footnote">74</a></sup></p>
+<p>Something<sup id="fnref:75"><a href="#fn:75" rel="footnote">75</a></sup></p>
+<p>Something<sup id="fnref:76"><a href="#fn:76" rel="footnote">76</a></sup></p>
+<p>Something<sup id="fnref:77"><a href="#fn:77" rel="footnote">77</a></sup></p>
+<p>Something<sup id="fnref:78"><a href="#fn:78" rel="footnote">78</a></sup></p>
+<p>Something<sup id="fnref:79"><a href="#fn:79" rel="footnote">79</a></sup></p>
+<p>Something<sup id="fnref:80"><a href="#fn:80" rel="footnote">80</a></sup></p>
+<p>Something<sup id="fnref:81"><a href="#fn:81" rel="footnote">81</a></sup></p>
+<p>Something<sup id="fnref:82"><a href="#fn:82" rel="footnote">82</a></sup></p>
+<p>Something<sup id="fnref:83"><a href="#fn:83" rel="footnote">83</a></sup></p>
+<p>Something<sup id="fnref:84"><a href="#fn:84" rel="footnote">84</a></sup></p>
+<p>Something<sup id="fnref:85"><a href="#fn:85" rel="footnote">85</a></sup></p>
+<p>Something<sup id="fnref:86"><a href="#fn:86" rel="footnote">86</a></sup></p>
+<p>Something<sup id="fnref:87"><a href="#fn:87" rel="footnote">87</a></sup></p>
+<p>Something<sup id="fnref:88"><a href="#fn:88" rel="footnote">88</a></sup></p>
+<p>Something<sup id="fnref:89"><a href="#fn:89" rel="footnote">89</a></sup></p>
+<p>Something<sup id="fnref:90"><a href="#fn:90" rel="footnote">90</a></sup></p>
+<p>Something<sup id="fnref:91"><a href="#fn:91" rel="footnote">91</a></sup></p>
+<p>Something<sup id="fnref:92"><a href="#fn:92" rel="footnote">92</a></sup></p>
+<p>Something<sup id="fnref:93"><a href="#fn:93" rel="footnote">93</a></sup></p>
+<p>Something<sup id="fnref:94"><a href="#fn:94" rel="footnote">94</a></sup></p>
+<p>Something<sup id="fnref:95"><a href="#fn:95" rel="footnote">95</a></sup></p>
+<p>Something<sup id="fnref:96"><a href="#fn:96" rel="footnote">96</a></sup></p>
+<p>Something<sup id="fnref:97"><a href="#fn:97" rel="footnote">97</a></sup></p>
+<p>Something<sup id="fnref:98"><a href="#fn:98" rel="footnote">98</a></sup></p>
+<p>Something<sup id="fnref:99"><a href="#fn:99" rel="footnote">99</a></sup></p>
+<p>Something<sup id="fnref:100"><a href="#fn:100" rel="footnote">100</a></sup></p>
+<p>Something<sup id="fnref:101"><a href="#fn:101" rel="footnote">101</a></sup></p>
+<p>Something<sup id="fnref:102"><a href="#fn:102" rel="footnote">102</a></sup></p>
+<p>Something<sup id="fnref:103"><a href="#fn:103" rel="footnote">103</a></sup></p>
+<p>Something<sup id="fnref:104"><a href="#fn:104" rel="footnote">104</a></sup></p>
+<p>Something<sup id="fnref:105"><a href="#fn:105" rel="footnote">105</a></sup></p>
+<p>Something<sup id="fnref:106"><a href="#fn:106" rel="footnote">106</a></sup></p>
+<p>Something<sup id="fnref:107"><a href="#fn:107" rel="footnote">107</a></sup></p>
+<p>Something<sup id="fnref:108"><a href="#fn:108" rel="footnote">108</a></sup></p>
+<p>Something<sup id="fnref:109"><a href="#fn:109" rel="footnote">109</a></sup></p>
+<p>Something<sup id="fnref:110"><a href="#fn:110" rel="footnote">110</a></sup></p>
+<p>Something<sup id="fnref:111"><a href="#fn:111" rel="footnote">111</a></sup></p>
+<p>Something<sup id="fnref:112"><a href="#fn:112" rel="footnote">112</a></sup></p>
+<p>Something<sup id="fnref:113"><a href="#fn:113" rel="footnote">113</a></sup></p>
+<p>Something<sup id="fnref:114"><a href="#fn:114" rel="footnote">114</a></sup></p>
+<p>Something<sup id="fnref:115"><a href="#fn:115" rel="footnote">115</a></sup></p>
+<p>Something<sup id="fnref:116"><a href="#fn:116" rel="footnote">116</a></sup></p>
+<p>Something<sup id="fnref:117"><a href="#fn:117" rel="footnote">117</a></sup></p>
+<p>Something<sup id="fnref:118"><a href="#fn:118" rel="footnote">118</a></sup></p>
+<p>Something<sup id="fnref:119"><a href="#fn:119" rel="footnote">119</a></sup></p>
+<p>Something<sup id="fnref:120"><a href="#fn:120" rel="footnote">120</a></sup></p>
+<p>Something<sup id="fnref:121"><a href="#fn:121" rel="footnote">121</a></sup></p>
+<p>Something<sup id="fnref:122"><a href="#fn:122" rel="footnote">122</a></sup></p>
+<p>Something<sup id="fnref:123"><a href="#fn:123" rel="footnote">123</a></sup></p>
+<p>Something<sup id="fnref:124"><a href="#fn:124" rel="footnote">124</a></sup></p>
+<p>Something<sup id="fnref:125"><a href="#fn:125" rel="footnote">125</a></sup></p>
+<p>Something<sup id="fnref:126"><a href="#fn:126" rel="footnote">126</a></sup></p>
+<p>Something<sup id="fnref:127"><a href="#fn:127" rel="footnote">127</a></sup></p>
+<p>Something<sup id="fnref:128"><a href="#fn:128" rel="footnote">128</a></sup></p>
+<p>Something<sup id="fnref:129"><a href="#fn:129" rel="footnote">129</a></sup></p>
+<p>Something<sup id="fnref:130"><a href="#fn:130" rel="footnote">130</a></sup></p>
+<p>Something<sup id="fnref:131"><a href="#fn:131" rel="footnote">131</a></sup></p>
+<p>Something<sup id="fnref:132"><a href="#fn:132" rel="footnote">132</a></sup></p>
+<p>Something<sup id="fnref:133"><a href="#fn:133" rel="footnote">133</a></sup></p>
+<p>Something<sup id="fnref:134"><a href="#fn:134" rel="footnote">134</a></sup></p>
+<p>Something<sup id="fnref:135"><a href="#fn:135" rel="footnote">135</a></sup></p>
+<p>Something<sup id="fnref:136"><a href="#fn:136" rel="footnote">136</a></sup></p>
+<p>Something<sup id="fnref:137"><a href="#fn:137" rel="footnote">137</a></sup></p>
+<p>Something<sup id="fnref:138"><a href="#fn:138" rel="footnote">138</a></sup></p>
+<p>Something<sup id="fnref:139"><a href="#fn:139" rel="footnote">139</a></sup></p>
+<p>Something<sup id="fnref:140"><a href="#fn:140" rel="footnote">140</a></sup></p>
+<p>Something<sup id="fnref:141"><a href="#fn:141" rel="footnote">141</a></sup></p>
+<p>Something<sup id="fnref:142"><a href="#fn:142" rel="footnote">142</a></sup></p>
+<p>Something<sup id="fnref:143"><a href="#fn:143" rel="footnote">143</a></sup></p>
+<p>Something<sup id="fnref:144"><a href="#fn:144" rel="footnote">144</a></sup></p>
+<p>Something<sup id="fnref:145"><a href="#fn:145" rel="footnote">145</a></sup></p>
+<p>Something<sup id="fnref:146"><a href="#fn:146" rel="footnote">146</a></sup></p>
+<p>Something<sup id="fnref:147"><a href="#fn:147" rel="footnote">147</a></sup></p>
+<p>Something<sup id="fnref:148"><a href="#fn:148" rel="footnote">148</a></sup></p>
+<p>Something<sup id="fnref:149"><a href="#fn:149" rel="footnote">149</a></sup></p>
+<p>Something<sup id="fnref:150"><a href="#fn:150" rel="footnote">150</a></sup></p>
+<p>Something<sup id="fnref:151"><a href="#fn:151" rel="footnote">151</a></sup></p>
+<p>Something<sup id="fnref:152"><a href="#fn:152" rel="footnote">152</a></sup></p>
+<p>Something<sup id="fnref:153"><a href="#fn:153" rel="footnote">153</a></sup></p>
+<p>Something<sup id="fnref:154"><a href="#fn:154" rel="footnote">154</a></sup></p>
+<p>Something<sup id="fnref:155"><a href="#fn:155" rel="footnote">155</a></sup></p>
+<p>Something<sup id="fnref:156"><a href="#fn:156" rel="footnote">156</a></sup></p>
+<p>Something<sup id="fnref:157"><a href="#fn:157" rel="footnote">157</a></sup></p>
+<p>Something<sup id="fnref:158"><a href="#fn:158" rel="footnote">158</a></sup></p>
+<p>Something<sup id="fnref:159"><a href="#fn:159" rel="footnote">159</a></sup></p>
+<p>Something<sup id="fnref:160"><a href="#fn:160" rel="footnote">160</a></sup></p>
+<p>Something<sup id="fnref:161"><a href="#fn:161" rel="footnote">161</a></sup></p>
+<p>Something<sup id="fnref:162"><a href="#fn:162" rel="footnote">162</a></sup></p>
+<p>Something<sup id="fnref:163"><a href="#fn:163" rel="footnote">163</a></sup></p>
+<p>Something<sup id="fnref:164"><a href="#fn:164" rel="footnote">164</a></sup></p>
+<p>Something<sup id="fnref:165"><a href="#fn:165" rel="footnote">165</a></sup></p>
+<p>Something<sup id="fnref:166"><a href="#fn:166" rel="footnote">166</a></sup></p>
+<p>Something<sup id="fnref:167"><a href="#fn:167" rel="footnote">167</a></sup></p>
+<p>Something<sup id="fnref:168"><a href="#fn:168" rel="footnote">168</a></sup></p>
+<p>Something<sup id="fnref:169"><a href="#fn:169" rel="footnote">169</a></sup></p>
+<p>Something<sup id="fnref:170"><a href="#fn:170" rel="footnote">170</a></sup></p>
+<p>Something<sup id="fnref:171"><a href="#fn:171" rel="footnote">171</a></sup></p>
+<p>Something<sup id="fnref:172"><a href="#fn:172" rel="footnote">172</a></sup></p>
+<p>Something<sup id="fnref:173"><a href="#fn:173" rel="footnote">173</a></sup></p>
+<p>Something<sup id="fnref:174"><a href="#fn:174" rel="footnote">174</a></sup></p>
+<p>Something<sup id="fnref:175"><a href="#fn:175" rel="footnote">175</a></sup></p>
+<p>Something<sup id="fnref:176"><a href="#fn:176" rel="footnote">176</a></sup></p>
+<p>Something<sup id="fnref:177"><a href="#fn:177" rel="footnote">177</a></sup></p>
+<p>Something<sup id="fnref:178"><a href="#fn:178" rel="footnote">178</a></sup></p>
+<p>Something<sup id="fnref:179"><a href="#fn:179" rel="footnote">179</a></sup></p>
+<p>Something<sup id="fnref:180"><a href="#fn:180" rel="footnote">180</a></sup></p>
+<p>Something<sup id="fnref:181"><a href="#fn:181" rel="footnote">181</a></sup></p>
+<p>Something<sup id="fnref:182"><a href="#fn:182" rel="footnote">182</a></sup></p>
+<p>Something<sup id="fnref:183"><a href="#fn:183" rel="footnote">183</a></sup></p>
+<p>Something<sup id="fnref:184"><a href="#fn:184" rel="footnote">184</a></sup></p>
+<p>Something<sup id="fnref:185"><a href="#fn:185" rel="footnote">185</a></sup></p>
+<p>Something<sup id="fnref:186"><a href="#fn:186" rel="footnote">186</a></sup></p>
+<p>Something<sup id="fnref:187"><a href="#fn:187" rel="footnote">187</a></sup></p>
+<p>Something<sup id="fnref:188"><a href="#fn:188" rel="footnote">188</a></sup></p>
+<p>Something<sup id="fnref:189"><a href="#fn:189" rel="footnote">189</a></sup></p>
+<p>Something<sup id="fnref:190"><a href="#fn:190" rel="footnote">190</a></sup></p>
+<p>Something<sup id="fnref:191"><a href="#fn:191" rel="footnote">191</a></sup></p>
+<p>Something<sup id="fnref:192"><a href="#fn:192" rel="footnote">192</a></sup></p>
+<p>Something<sup id="fnref:193"><a href="#fn:193" rel="footnote">193</a></sup></p>
+<p>Something<sup id="fnref:194"><a href="#fn:194" rel="footnote">194</a></sup></p>
+<p>Something<sup id="fnref:195"><a href="#fn:195" rel="footnote">195</a></sup></p>
+<p>Something<sup id="fnref:196"><a href="#fn:196" rel="footnote">196</a></sup></p>
+<p>Something<sup id="fnref:197"><a href="#fn:197" rel="footnote">197</a></sup></p>
+<p>Something<sup id="fnref:198"><a href="#fn:198" rel="footnote">198</a></sup></p>
+<p>Something<sup id="fnref:199"><a href="#fn:199" rel="footnote">199</a></sup></p>
+<p>Something<sup id="fnref:200"><a href="#fn:200" rel="footnote">200</a></sup></p>
+<p>Something<sup id="fnref:201"><a href="#fn:201" rel="footnote">201</a></sup></p>
+<p>Something<sup id="fnref:202"><a href="#fn:202" rel="footnote">202</a></sup></p>
+<p>Something<sup id="fnref:203"><a href="#fn:203" rel="footnote">203</a></sup></p>
+<p>Something<sup id="fnref:204"><a href="#fn:204" rel="footnote">204</a></sup></p>
+<p>Something<sup id="fnref:205"><a href="#fn:205" rel="footnote">205</a></sup></p>
+<p>Something<sup id="fnref:206"><a href="#fn:206" rel="footnote">206</a></sup></p>
+<p>Something<sup id="fnref:207"><a href="#fn:207" rel="footnote">207</a></sup></p>
+<p>Something<sup id="fnref:208"><a href="#fn:208" rel="footnote">208</a></sup></p>
+<p>Something<sup id="fnref:209"><a href="#fn:209" rel="footnote">209</a></sup></p>
+<p>Something<sup id="fnref:210"><a href="#fn:210" rel="footnote">210</a></sup></p>
+<p>Something<sup id="fnref:211"><a href="#fn:211" rel="footnote">211</a></sup></p>
+<p>Something<sup id="fnref:212"><a href="#fn:212" rel="footnote">212</a></sup></p>
+<p>Something<sup id="fnref:213"><a href="#fn:213" rel="footnote">213</a></sup></p>
+<p>Something<sup id="fnref:214"><a href="#fn:214" rel="footnote">214</a></sup></p>
+<p>Something<sup id="fnref:215"><a href="#fn:215" rel="footnote">215</a></sup></p>
+<p>Something<sup id="fnref:216"><a href="#fn:216" rel="footnote">216</a></sup></p>
+<p>Something<sup id="fnref:217"><a href="#fn:217" rel="footnote">217</a></sup></p>
+<p>Something<sup id="fnref:218"><a href="#fn:218" rel="footnote">218</a></sup></p>
+<p>Something<sup id="fnref:219"><a href="#fn:219" rel="footnote">219</a></sup></p>
+<p>Something<sup id="fnref:220"><a href="#fn:220" rel="footnote">220</a></sup></p>
+<p>Something<sup id="fnref:221"><a href="#fn:221" rel="footnote">221</a></sup></p>
+<p>Something<sup id="fnref:222"><a href="#fn:222" rel="footnote">222</a></sup></p>
+<p>Something<sup id="fnref:223"><a href="#fn:223" rel="footnote">223</a></sup></p>
+<p>Something<sup id="fnref:224"><a href="#fn:224" rel="footnote">224</a></sup></p>
+<p>Something<sup id="fnref:225"><a href="#fn:225" rel="footnote">225</a></sup></p>
+<p>Something<sup id="fnref:226"><a href="#fn:226" rel="footnote">226</a></sup></p>
+<p>Something<sup id="fnref:227"><a href="#fn:227" rel="footnote">227</a></sup></p>
+<p>Something<sup id="fnref:228"><a href="#fn:228" rel="footnote">228</a></sup></p>
+<p>Something<sup id="fnref:229"><a href="#fn:229" rel="footnote">229</a></sup></p>
+<p>Something<sup id="fnref:230"><a href="#fn:230" rel="footnote">230</a></sup></p>
+<p>Something<sup id="fnref:231"><a href="#fn:231" rel="footnote">231</a></sup></p>
+<p>Something<sup id="fnref:232"><a href="#fn:232" rel="footnote">232</a></sup></p>
+<p>Something<sup id="fnref:233"><a href="#fn:233" rel="footnote">233</a></sup></p>
+<p>Something<sup id="fnref:234"><a href="#fn:234" rel="footnote">234</a></sup></p>
+<p>Something<sup id="fnref:235"><a href="#fn:235" rel="footnote">235</a></sup></p>
+<p>Something<sup id="fnref:236"><a href="#fn:236" rel="footnote">236</a></sup></p>
+<p>Something<sup id="fnref:237"><a href="#fn:237" rel="footnote">237</a></sup></p>
+<p>Something<sup id="fnref:238"><a href="#fn:238" rel="footnote">238</a></sup></p>
+<p>Something<sup id="fnref:239"><a href="#fn:239" rel="footnote">239</a></sup></p>
+<p>Something<sup id="fnref:240"><a href="#fn:240" rel="footnote">240</a></sup></p>
+<p>Something<sup id="fnref:241"><a href="#fn:241" rel="footnote">241</a></sup></p>
+<p>Something<sup id="fnref:242"><a href="#fn:242" rel="footnote">242</a></sup></p>
+<p>Something<sup id="fnref:243"><a href="#fn:243" rel="footnote">243</a></sup></p>
+<p>Something<sup id="fnref:244"><a href="#fn:244" rel="footnote">244</a></sup></p>
+<p>Something<sup id="fnref:245"><a href="#fn:245" rel="footnote">245</a></sup></p>
+<p>Something<sup id="fnref:246"><a href="#fn:246" rel="footnote">246</a></sup></p>
+<p>Something<sup id="fnref:247"><a href="#fn:247" rel="footnote">247</a></sup></p>
+<p>Something<sup id="fnref:248"><a href="#fn:248" rel="footnote">248</a></sup></p>
+<p>Something<sup id="fnref:249"><a href="#fn:249" rel="footnote">249</a></sup></p>
+<p>Something<sup id="fnref:250"><a href="#fn:250" rel="footnote">250</a></sup></p>
+<p>Something<sup id="fnref:251"><a href="#fn:251" rel="footnote">251</a></sup></p>
+<p>Something<sup id="fnref:252"><a href="#fn:252" rel="footnote">252</a></sup></p>
+<p>Something<sup id="fnref:253"><a href="#fn:253" rel="footnote">253</a></sup></p>
+<p>Something<sup id="fnref:254"><a href="#fn:254" rel="footnote">254</a></sup></p>
+<p>Something<sup id="fnref:255"><a href="#fn:255" rel="footnote">255</a></sup></p>
+<p>Something<sup id="fnref:256"><a href="#fn:256" rel="footnote">256</a></sup></p>
+<p>Something<sup id="fnref:257"><a href="#fn:257" rel="footnote">257</a></sup></p>
+<p>Something<sup id="fnref:258"><a href="#fn:258" rel="footnote">258</a></sup></p>
+<p>Something<sup id="fnref:259"><a href="#fn:259" rel="footnote">259</a></sup></p>
+<p>Something<sup id="fnref:260"><a href="#fn:260" rel="footnote">260</a></sup></p>
+<p>Something<sup id="fnref:261"><a href="#fn:261" rel="footnote">261</a></sup></p>
+<p>Something<sup id="fnref:262"><a href="#fn:262" rel="footnote">262</a></sup></p>
+<p>Something<sup id="fnref:263"><a href="#fn:263" rel="footnote">263</a></sup></p>
+<p>Something<sup id="fnref:264"><a href="#fn:264" rel="footnote">264</a></sup></p>
+<p>Something<sup id="fnref:265"><a href="#fn:265" rel="footnote">265</a></sup></p>
+<p>Something<sup id="fnref:266"><a href="#fn:266" rel="footnote">266</a></sup></p>
+<p>Something<sup id="fnref:267"><a href="#fn:267" rel="footnote">267</a></sup></p>
+<p>Something<sup id="fnref:268"><a href="#fn:268" rel="footnote">268</a></sup></p>
+<p>Something<sup id="fnref:269"><a href="#fn:269" rel="footnote">269</a></sup></p>
+<p>Something<sup id="fnref:270"><a href="#fn:270" rel="footnote">270</a></sup></p>
+<p>Something<sup id="fnref:271"><a href="#fn:271" rel="footnote">271</a></sup></p>
+<p>Something<sup id="fnref:272"><a href="#fn:272" rel="footnote">272</a></sup></p>
+<p>Something<sup id="fnref:273"><a href="#fn:273" rel="footnote">273</a></sup></p>
+<p>Something<sup id="fnref:274"><a href="#fn:274" rel="footnote">274</a></sup></p>
+<p>Something<sup id="fnref:275"><a href="#fn:275" rel="footnote">275</a></sup></p>
+<p>Something<sup id="fnref:276"><a href="#fn:276" rel="footnote">276</a></sup></p>
+<p>Something<sup id="fnref:277"><a href="#fn:277" rel="footnote">277</a></sup></p>
+<p>Something<sup id="fnref:278"><a href="#fn:278" rel="footnote">278</a></sup></p>
+<p>Something<sup id="fnref:279"><a href="#fn:279" rel="footnote">279</a></sup></p>
+<p>Something<sup id="fnref:280"><a href="#fn:280" rel="footnote">280</a></sup></p>
+<p>Something<sup id="fnref:281"><a href="#fn:281" rel="footnote">281</a></sup></p>
+<p>Something<sup id="fnref:282"><a href="#fn:282" rel="footnote">282</a></sup></p>
+<p>Something<sup id="fnref:283"><a href="#fn:283" rel="footnote">283</a></sup></p>
+<p>Something<sup id="fnref:284"><a href="#fn:284" rel="footnote">284</a></sup></p>
+<p>Something<sup id="fnref:285"><a href="#fn:285" rel="footnote">285</a></sup></p>
+<p>Something<sup id="fnref:286"><a href="#fn:286" rel="footnote">286</a></sup></p>
+<p>Something<sup id="fnref:287"><a href="#fn:287" rel="footnote">287</a></sup></p>
+<p>Something<sup id="fnref:288"><a href="#fn:288" rel="footnote">288</a></sup></p>
+<p>Something<sup id="fnref:289"><a href="#fn:289" rel="footnote">289</a></sup></p>
+<p>Something<sup id="fnref:290"><a href="#fn:290" rel="footnote">290</a></sup></p>
+<p>Something<sup id="fnref:291"><a href="#fn:291" rel="footnote">291</a></sup></p>
+<p>Something<sup id="fnref:292"><a href="#fn:292" rel="footnote">292</a></sup></p>
+<p>Something<sup id="fnref:293"><a href="#fn:293" rel="footnote">293</a></sup></p>
+<p>Something<sup id="fnref:294"><a href="#fn:294" rel="footnote">294</a></sup></p>
+<p>Something<sup id="fnref:295"><a href="#fn:295" rel="footnote">295</a></sup></p>
+<p>Something<sup id="fnref:296"><a href="#fn:296" rel="footnote">296</a></sup></p>
+<p>Something<sup id="fnref:297"><a href="#fn:297" rel="footnote">297</a></sup></p>
+<p>Something<sup id="fnref:298"><a href="#fn:298" rel="footnote">298</a></sup></p>
+<p>Something<sup id="fnref:299"><a href="#fn:299" rel="footnote">299</a></sup></p>
+<p>Something<sup id="fnref:300"><a href="#fn:300" rel="footnote">300</a></sup></p>
+<p>Something<sup id="fnref:301"><a href="#fn:301" rel="footnote">301</a></sup></p>
+<p>Something<sup id="fnref:302"><a href="#fn:302" rel="footnote">302</a></sup></p>
+<p>Something<sup id="fnref:303"><a href="#fn:303" rel="footnote">303</a></sup></p>
+<p>Something<sup id="fnref:304"><a href="#fn:304" rel="footnote">304</a></sup></p>
+<p>Something<sup id="fnref:305"><a href="#fn:305" rel="footnote">305</a></sup></p>
+<p>Something<sup id="fnref:306"><a href="#fn:306" rel="footnote">306</a></sup></p>
+<p>Something<sup id="fnref:307"><a href="#fn:307" rel="footnote">307</a></sup></p>
+<p>Something<sup id="fnref:308"><a href="#fn:308" rel="footnote">308</a></sup></p>
+<p>Something<sup id="fnref:309"><a href="#fn:309" rel="footnote">309</a></sup></p>
+<p>Something<sup id="fnref:310"><a href="#fn:310" rel="footnote">310</a></sup></p>
+<p>Something<sup id="fnref:311"><a href="#fn:311" rel="footnote">311</a></sup></p>
+<p>Something<sup id="fnref:312"><a href="#fn:312" rel="footnote">312</a></sup></p>
+<p>Something<sup id="fnref:313"><a href="#fn:313" rel="footnote">313</a></sup></p>
+<p>Something<sup id="fnref:314"><a href="#fn:314" rel="footnote">314</a></sup></p>
+<p>Something<sup id="fnref:315"><a href="#fn:315" rel="footnote">315</a></sup></p>
+<p>Something<sup id="fnref:316"><a href="#fn:316" rel="footnote">316</a></sup></p>
+<p>Something<sup id="fnref:317"><a href="#fn:317" rel="footnote">317</a></sup></p>
+<p>Something<sup id="fnref:318"><a href="#fn:318" rel="footnote">318</a></sup></p>
+<p>Something<sup id="fnref:319"><a href="#fn:319" rel="footnote">319</a></sup></p>
+<p>Something<sup id="fnref:320"><a href="#fn:320" rel="footnote">320</a></sup></p>
+<p>Something<sup id="fnref:321"><a href="#fn:321" rel="footnote">321</a></sup></p>
+<p>Something<sup id="fnref:322"><a href="#fn:322" rel="footnote">322</a></sup></p>
+<p>Something<sup id="fnref:323"><a href="#fn:323" rel="footnote">323</a></sup></p>
+<p>Something<sup id="fnref:324"><a href="#fn:324" rel="footnote">324</a></sup></p>
+<p>Something<sup id="fnref:325"><a href="#fn:325" rel="footnote">325</a></sup></p>
+<p>Something<sup id="fnref:326"><a href="#fn:326" rel="footnote">326</a></sup></p>
+<p>Something<sup id="fnref:327"><a href="#fn:327" rel="footnote">327</a></sup></p>
+<p>Something<sup id="fnref:328"><a href="#fn:328" rel="footnote">328</a></sup></p>
+<p>Something<sup id="fnref:329"><a href="#fn:329" rel="footnote">329</a></sup></p>
+<p>Something<sup id="fnref:330"><a href="#fn:330" rel="footnote">330</a></sup></p>
+<p>Something<sup id="fnref:331"><a href="#fn:331" rel="footnote">331</a></sup></p>
+<p>Something<sup id="fnref:332"><a href="#fn:332" rel="footnote">332</a></sup></p>
+<p>Something<sup id="fnref:333"><a href="#fn:333" rel="footnote">333</a></sup></p>
+<p>Something<sup id="fnref:334"><a href="#fn:334" rel="footnote">334</a></sup></p>
+<p>Something<sup id="fnref:335"><a href="#fn:335" rel="footnote">335</a></sup></p>
+<p>Something<sup id="fnref:336"><a href="#fn:336" rel="footnote">336</a></sup></p>
+<p>Something<sup id="fnref:337"><a href="#fn:337" rel="footnote">337</a></sup></p>
+<p>Something<sup id="fnref:338"><a href="#fn:338" rel="footnote">338</a></sup></p>
+<p>Something<sup id="fnref:339"><a href="#fn:339" rel="footnote">339</a></sup></p>
+<p>Something<sup id="fnref:340"><a href="#fn:340" rel="footnote">340</a></sup></p>
+<p>Something<sup id="fnref:341"><a href="#fn:341" rel="footnote">341</a></sup></p>
+<p>Something<sup id="fnref:342"><a href="#fn:342" rel="footnote">342</a></sup></p>
+<p>Something<sup id="fnref:343"><a href="#fn:343" rel="footnote">343</a></sup></p>
+<p>Something<sup id="fnref:344"><a href="#fn:344" rel="footnote">344</a></sup></p>
+<p>Something<sup id="fnref:345"><a href="#fn:345" rel="footnote">345</a></sup></p>
+<p>Something<sup id="fnref:346"><a href="#fn:346" rel="footnote">346</a></sup></p>
+<p>Something<sup id="fnref:347"><a href="#fn:347" rel="footnote">347</a></sup></p>
+<p>Something<sup id="fnref:348"><a href="#fn:348" rel="footnote">348</a></sup></p>
+<p>Something<sup id="fnref:349"><a href="#fn:349" rel="footnote">349</a></sup></p>
+<p>Something<sup id="fnref:350"><a href="#fn:350" rel="footnote">350</a></sup></p>
+<p>Something<sup id="fnref:351"><a href="#fn:351" rel="footnote">351</a></sup></p>
+<p>Something<sup id="fnref:352"><a href="#fn:352" rel="footnote">352</a></sup></p>
+<p>Something<sup id="fnref:353"><a href="#fn:353" rel="footnote">353</a></sup></p>
+<p>Something<sup id="fnref:354"><a href="#fn:354" rel="footnote">354</a></sup></p>
+<p>Something<sup id="fnref:355"><a href="#fn:355" rel="footnote">355</a></sup></p>
+<p>Something<sup id="fnref:356"><a href="#fn:356" rel="footnote">356</a></sup></p>
+<p>Something<sup id="fnref:357"><a href="#fn:357" rel="footnote">357</a></sup></p>
+<p>Something<sup id="fnref:358"><a href="#fn:358" rel="footnote">358</a></sup></p>
+<p>Something<sup id="fnref:359"><a href="#fn:359" rel="footnote">359</a></sup></p>
+<p>Something<sup id="fnref:360"><a href="#fn:360" rel="footnote">360</a></sup></p>
+<p>Something<sup id="fnref:361"><a href="#fn:361" rel="footnote">361</a></sup></p>
+<p>Something<sup id="fnref:362"><a href="#fn:362" rel="footnote">362</a></sup></p>
+<p>Something<sup id="fnref:363"><a href="#fn:363" rel="footnote">363</a></sup></p>
+<p>Something<sup id="fnref:364"><a href="#fn:364" rel="footnote">364</a></sup></p>
+<p>Something<sup id="fnref:365"><a href="#fn:365" rel="footnote">365</a></sup></p>
+<p>Something<sup id="fnref:366"><a href="#fn:366" rel="footnote">366</a></sup></p>
+<p>Something<sup id="fnref:367"><a href="#fn:367" rel="footnote">367</a></sup></p>
+<p>Something<sup id="fnref:368"><a href="#fn:368" rel="footnote">368</a></sup></p>
+<p>Something<sup id="fnref:369"><a href="#fn:369" rel="footnote">369</a></sup></p>
+<p>Something<sup id="fnref:370"><a href="#fn:370" rel="footnote">370</a></sup></p>
+<p>Something<sup id="fnref:371"><a href="#fn:371" rel="footnote">371</a></sup></p>
+<p>Something<sup id="fnref:372"><a href="#fn:372" rel="footnote">372</a></sup></p>
+<p>Something<sup id="fnref:373"><a href="#fn:373" rel="footnote">373</a></sup></p>
+<p>Something<sup id="fnref:374"><a href="#fn:374" rel="footnote">374</a></sup></p>
+<p>Something<sup id="fnref:375"><a href="#fn:375" rel="footnote">375</a></sup></p>
+<p>Something<sup id="fnref:376"><a href="#fn:376" rel="footnote">376</a></sup></p>
+<p>Something<sup id="fnref:377"><a href="#fn:377" rel="footnote">377</a></sup></p>
+<p>Something<sup id="fnref:378"><a href="#fn:378" rel="footnote">378</a></sup></p>
+<p>Something<sup id="fnref:379"><a href="#fn:379" rel="footnote">379</a></sup></p>
+<p>Something<sup id="fnref:380"><a href="#fn:380" rel="footnote">380</a></sup></p>
+<p>Something<sup id="fnref:381"><a href="#fn:381" rel="footnote">381</a></sup></p>
+<p>Something<sup id="fnref:382"><a href="#fn:382" rel="footnote">382</a></sup></p>
+<p>Something<sup id="fnref:383"><a href="#fn:383" rel="footnote">383</a></sup></p>
+<p>Something<sup id="fnref:384"><a href="#fn:384" rel="footnote">384</a></sup></p>
+<p>Something<sup id="fnref:385"><a href="#fn:385" rel="footnote">385</a></sup></p>
+<p>Something<sup id="fnref:386"><a href="#fn:386" rel="footnote">386</a></sup></p>
+<p>Something<sup id="fnref:387"><a href="#fn:387" rel="footnote">387</a></sup></p>
+<p>Something<sup id="fnref:388"><a href="#fn:388" rel="footnote">388</a></sup></p>
+<p>Something<sup id="fnref:389"><a href="#fn:389" rel="footnote">389</a></sup></p>
+<p>Something<sup id="fnref:390"><a href="#fn:390" rel="footnote">390</a></sup></p>
+<p>Something<sup id="fnref:391"><a href="#fn:391" rel="footnote">391</a></sup></p>
+<p>Something<sup id="fnref:392"><a href="#fn:392" rel="footnote">392</a></sup></p>
+<p>Something<sup id="fnref:393"><a href="#fn:393" rel="footnote">393</a></sup></p>
+<p>Something<sup id="fnref:394"><a href="#fn:394" rel="footnote">394</a></sup></p>
+<p>Something<sup id="fnref:395"><a href="#fn:395" rel="footnote">395</a></sup></p>
+<p>Something<sup id="fnref:396"><a href="#fn:396" rel="footnote">396</a></sup></p>
+<p>Something<sup id="fnref:397"><a href="#fn:397" rel="footnote">397</a></sup></p>
+<p>Something<sup id="fnref:398"><a href="#fn:398" rel="footnote">398</a></sup></p>
+<p>Something<sup id="fnref:399"><a href="#fn:399" rel="footnote">399</a></sup></p>
+<p>Something<sup id="fnref:400"><a href="#fn:400" rel="footnote">400</a></sup></p>
+<p>Something<sup id="fnref:401"><a href="#fn:401" rel="footnote">401</a></sup></p>
+<p>Something<sup id="fnref:402"><a href="#fn:402" rel="footnote">402</a></sup></p>
+<p>Something<sup id="fnref:403"><a href="#fn:403" rel="footnote">403</a></sup></p>
+<p>Something<sup id="fnref:404"><a href="#fn:404" rel="footnote">404</a></sup></p>
+<p>Something<sup id="fnref:405"><a href="#fn:405" rel="footnote">405</a></sup></p>
+<p>Something<sup id="fnref:406"><a href="#fn:406" rel="footnote">406</a></sup></p>
+<p>Something<sup id="fnref:407"><a href="#fn:407" rel="footnote">407</a></sup></p>
+<p>Something<sup id="fnref:408"><a href="#fn:408" rel="footnote">408</a></sup></p>
+<p>Something<sup id="fnref:409"><a href="#fn:409" rel="footnote">409</a></sup></p>
+<p>Something<sup id="fnref:410"><a href="#fn:410" rel="footnote">410</a></sup></p>
+<p>Something<sup id="fnref:411"><a href="#fn:411" rel="footnote">411</a></sup></p>
+<p>Something<sup id="fnref:412"><a href="#fn:412" rel="footnote">412</a></sup></p>
+<p>Something<sup id="fnref:413"><a href="#fn:413" rel="footnote">413</a></sup></p>
+<p>Something<sup id="fnref:414"><a href="#fn:414" rel="footnote">414</a></sup></p>
+<p>Something<sup id="fnref:415"><a href="#fn:415" rel="footnote">415</a></sup></p>
+<p>Something<sup id="fnref:416"><a href="#fn:416" rel="footnote">416</a></sup></p>
+<p>Something<sup id="fnref:417"><a href="#fn:417" rel="footnote">417</a></sup></p>
+<p>Something<sup id="fnref:418"><a href="#fn:418" rel="footnote">418</a></sup></p>
+<p>Something<sup id="fnref:419"><a href="#fn:419" rel="footnote">419</a></sup></p>
+<p>Something<sup id="fnref:420"><a href="#fn:420" rel="footnote">420</a></sup></p>
+<p>Something<sup id="fnref:421"><a href="#fn:421" rel="footnote">421</a></sup></p>
+<p>Something<sup id="fnref:422"><a href="#fn:422" rel="footnote">422</a></sup></p>
+<p>Something<sup id="fnref:423"><a href="#fn:423" rel="footnote">423</a></sup></p>
+<p>Something<sup id="fnref:424"><a href="#fn:424" rel="footnote">424</a></sup></p>
+<p>Something<sup id="fnref:425"><a href="#fn:425" rel="footnote">425</a></sup></p>
+<p>Something<sup id="fnref:426"><a href="#fn:426" rel="footnote">426</a></sup></p>
+<p>Something<sup id="fnref:427"><a href="#fn:427" rel="footnote">427</a></sup></p>
+<p>Something<sup id="fnref:428"><a href="#fn:428" rel="footnote">428</a></sup></p>
+<p>Something<sup id="fnref:429"><a href="#fn:429" rel="footnote">429</a></sup></p>
+<p>Something<sup id="fnref:430"><a href="#fn:430" rel="footnote">430</a></sup></p>
+<p>Something<sup id="fnref:431"><a href="#fn:431" rel="footnote">431</a></sup></p>
+<p>Something<sup id="fnref:432"><a href="#fn:432" rel="footnote">432</a></sup></p>
+<p>Something<sup id="fnref:433"><a href="#fn:433" rel="footnote">433</a></sup></p>
+<p>Something<sup id="fnref:434"><a href="#fn:434" rel="footnote">434</a></sup></p>
+<p>Something<sup id="fnref:435"><a href="#fn:435" rel="footnote">435</a></sup></p>
+<p>Something<sup id="fnref:436"><a href="#fn:436" rel="footnote">436</a></sup></p>
+<p>Something<sup id="fnref:437"><a href="#fn:437" rel="footnote">437</a></sup></p>
+<p>Something<sup id="fnref:438"><a href="#fn:438" rel="footnote">438</a></sup></p>
+<p>Something<sup id="fnref:439"><a href="#fn:439" rel="footnote">439</a></sup></p>
+<p>Something<sup id="fnref:440"><a href="#fn:440" rel="footnote">440</a></sup></p>
+<p>Something<sup id="fnref:441"><a href="#fn:441" rel="footnote">441</a></sup></p>
+<p>Something<sup id="fnref:442"><a href="#fn:442" rel="footnote">442</a></sup></p>
+<p>Something<sup id="fnref:443"><a href="#fn:443" rel="footnote">443</a></sup></p>
+<p>Something<sup id="fnref:444"><a href="#fn:444" rel="footnote">444</a></sup></p>
+<p>Something<sup id="fnref:445"><a href="#fn:445" rel="footnote">445</a></sup></p>
+<p>Something<sup id="fnref:446"><a href="#fn:446" rel="footnote">446</a></sup></p>
+<p>Something<sup id="fnref:447"><a href="#fn:447" rel="footnote">447</a></sup></p>
+<p>Something<sup id="fnref:448"><a href="#fn:448" rel="footnote">448</a></sup></p>
+<p>Something<sup id="fnref:449"><a href="#fn:449" rel="footnote">449</a></sup></p>
+<p>Something<sup id="fnref:450"><a href="#fn:450" rel="footnote">450</a></sup></p>
+<p>Something<sup id="fnref:451"><a href="#fn:451" rel="footnote">451</a></sup></p>
+<p>Something<sup id="fnref:452"><a href="#fn:452" rel="footnote">452</a></sup></p>
+<p>Something<sup id="fnref:453"><a href="#fn:453" rel="footnote">453</a></sup></p>
+<p>Something<sup id="fnref:454"><a href="#fn:454" rel="footnote">454</a></sup></p>
+<p>Something<sup id="fnref:455"><a href="#fn:455" rel="footnote">455</a></sup></p>
+<p>Something<sup id="fnref:456"><a href="#fn:456" rel="footnote">456</a></sup></p>
+<p>Something<sup id="fnref:457"><a href="#fn:457" rel="footnote">457</a></sup></p>
+<p>Something<sup id="fnref:458"><a href="#fn:458" rel="footnote">458</a></sup></p>
+<p>Something<sup id="fnref:459"><a href="#fn:459" rel="footnote">459</a></sup></p>
+<p>Something<sup id="fnref:460"><a href="#fn:460" rel="footnote">460</a></sup></p>
+<p>Something<sup id="fnref:461"><a href="#fn:461" rel="footnote">461</a></sup></p>
+<p>Something<sup id="fnref:462"><a href="#fn:462" rel="footnote">462</a></sup></p>
+<p>Something<sup id="fnref:463"><a href="#fn:463" rel="footnote">463</a></sup></p>
+<p>Something<sup id="fnref:464"><a href="#fn:464" rel="footnote">464</a></sup></p>
+<p>Something<sup id="fnref:465"><a href="#fn:465" rel="footnote">465</a></sup></p>
+<p>Something<sup id="fnref:466"><a href="#fn:466" rel="footnote">466</a></sup></p>
+<p>Something<sup id="fnref:467"><a href="#fn:467" rel="footnote">467</a></sup></p>
+<p>Something<sup id="fnref:468"><a href="#fn:468" rel="footnote">468</a></sup></p>
+<p>Something<sup id="fnref:469"><a href="#fn:469" rel="footnote">469</a></sup></p>
+<p>Something<sup id="fnref:470"><a href="#fn:470" rel="footnote">470</a></sup></p>
+<p>Something<sup id="fnref:471"><a href="#fn:471" rel="footnote">471</a></sup></p>
+<p>Something<sup id="fnref:472"><a href="#fn:472" rel="footnote">472</a></sup></p>
+<p>Something<sup id="fnref:473"><a href="#fn:473" rel="footnote">473</a></sup></p>
+<p>Something<sup id="fnref:474"><a href="#fn:474" rel="footnote">474</a></sup></p>
+<p>Something<sup id="fnref:475"><a href="#fn:475" rel="footnote">475</a></sup></p>
+<p>Something<sup id="fnref:476"><a href="#fn:476" rel="footnote">476</a></sup></p>
+<p>Something<sup id="fnref:477"><a href="#fn:477" rel="footnote">477</a></sup></p>
+<p>Something<sup id="fnref:478"><a href="#fn:478" rel="footnote">478</a></sup></p>
+<p>Something<sup id="fnref:479"><a href="#fn:479" rel="footnote">479</a></sup></p>
+<p>Something<sup id="fnref:480"><a href="#fn:480" rel="footnote">480</a></sup></p>
+<p>Something<sup id="fnref:481"><a href="#fn:481" rel="footnote">481</a></sup></p>
+<p>Something<sup id="fnref:482"><a href="#fn:482" rel="footnote">482</a></sup></p>
+<p>Something<sup id="fnref:483"><a href="#fn:483" rel="footnote">483</a></sup></p>
+<p>Something<sup id="fnref:484"><a href="#fn:484" rel="footnote">484</a></sup></p>
+<p>Something<sup id="fnref:485"><a href="#fn:485" rel="footnote">485</a></sup></p>
+<p>Something<sup id="fnref:486"><a href="#fn:486" rel="footnote">486</a></sup></p>
+<p>Something<sup id="fnref:487"><a href="#fn:487" rel="footnote">487</a></sup></p>
+<p>Something<sup id="fnref:488"><a href="#fn:488" rel="footnote">488</a></sup></p>
+<p>Something<sup id="fnref:489"><a href="#fn:489" rel="footnote">489</a></sup></p>
+<p>Something<sup id="fnref:490"><a href="#fn:490" rel="footnote">490</a></sup></p>
+<p>Something<sup id="fnref:491"><a href="#fn:491" rel="footnote">491</a></sup></p>
+<p>Something<sup id="fnref:492"><a href="#fn:492" rel="footnote">492</a></sup></p>
+<p>Something<sup id="fnref:493"><a href="#fn:493" rel="footnote">493</a></sup></p>
+<p>Something<sup id="fnref:494"><a href="#fn:494" rel="footnote">494</a></sup></p>
+<p>Something<sup id="fnref:495"><a href="#fn:495" rel="footnote">495</a></sup></p>
+<p>Something<sup id="fnref:496"><a href="#fn:496" rel="footnote">496</a></sup></p>
+<p>Something<sup id="fnref:497"><a href="#fn:497" rel="footnote">497</a></sup></p>
+<p>Something<sup id="fnref:498"><a href="#fn:498" rel="footnote">498</a></sup></p>
+<p>Something<sup id="fnref:499"><a href="#fn:499" rel="footnote">499</a></sup></p>
+<p>Something<sup id="fnref:500"><a href="#fn:500" rel="footnote">500</a></sup></p>
+<p>Something<sup id="fnref:501"><a href="#fn:501" rel="footnote">501</a></sup></p>
+<p>Something<sup id="fnref:502"><a href="#fn:502" rel="footnote">502</a></sup></p>
+<p>Something<sup id="fnref:503"><a href="#fn:503" rel="footnote">503</a></sup></p>
+<p>Something<sup id="fnref:504"><a href="#fn:504" rel="footnote">504</a></sup></p>
+<p>Something<sup id="fnref:505"><a href="#fn:505" rel="footnote">505</a></sup></p>
+<p>Something<sup id="fnref:506"><a href="#fn:506" rel="footnote">506</a></sup></p>
+<p>Something<sup id="fnref:507"><a href="#fn:507" rel="footnote">507</a></sup></p>
+<p>Something<sup id="fnref:508"><a href="#fn:508" rel="footnote">508</a></sup></p>
+<p>Something<sup id="fnref:509"><a href="#fn:509" rel="footnote">509</a></sup></p>
+<p>Something<sup id="fnref:510"><a href="#fn:510" rel="footnote">510</a></sup></p>
+<p>Something<sup id="fnref:511"><a href="#fn:511" rel="footnote">511</a></sup></p>
+<p>Something<sup id="fnref:512"><a href="#fn:512" rel="footnote">512</a></sup></p>
+<p>Something<sup id="fnref:513"><a href="#fn:513" rel="footnote">513</a></sup></p>
+<p>Something<sup id="fnref:514"><a href="#fn:514" rel="footnote">514</a></sup></p>
+<p>Something<sup id="fnref:515"><a href="#fn:515" rel="footnote">515</a></sup></p>
+<p>Something<sup id="fnref:516"><a href="#fn:516" rel="footnote">516</a></sup></p>
+<p>Something<sup id="fnref:517"><a href="#fn:517" rel="footnote">517</a></sup></p>
+<p>Something<sup id="fnref:518"><a href="#fn:518" rel="footnote">518</a></sup></p>
+<p>Something<sup id="fnref:519"><a href="#fn:519" rel="footnote">519</a></sup></p>
+<p>Something<sup id="fnref:520"><a href="#fn:520" rel="footnote">520</a></sup></p>
+<p>Something<sup id="fnref:521"><a href="#fn:521" rel="footnote">521</a></sup></p>
+<p>Something<sup id="fnref:522"><a href="#fn:522" rel="footnote">522</a></sup></p>
+<p>Something<sup id="fnref:523"><a href="#fn:523" rel="footnote">523</a></sup></p>
+<p>Something<sup id="fnref:524"><a href="#fn:524" rel="footnote">524</a></sup></p>
+<p>Something<sup id="fnref:525"><a href="#fn:525" rel="footnote">525</a></sup></p>
+<p>Something<sup id="fnref:526"><a href="#fn:526" rel="footnote">526</a></sup></p>
+<p>Something<sup id="fnref:527"><a href="#fn:527" rel="footnote">527</a></sup></p>
+<p>Something<sup id="fnref:528"><a href="#fn:528" rel="footnote">528</a></sup></p>
+<p>Something<sup id="fnref:529"><a href="#fn:529" rel="footnote">529</a></sup></p>
+<p>Something<sup id="fnref:530"><a href="#fn:530" rel="footnote">530</a></sup></p>
+<p>Something<sup id="fnref:531"><a href="#fn:531" rel="footnote">531</a></sup></p>
+<p>Something<sup id="fnref:532"><a href="#fn:532" rel="footnote">532</a></sup></p>
+<p>Something<sup id="fnref:533"><a href="#fn:533" rel="footnote">533</a></sup></p>
+<p>Something<sup id="fnref:534"><a href="#fn:534" rel="footnote">534</a></sup></p>
+<p>Something<sup id="fnref:535"><a href="#fn:535" rel="footnote">535</a></sup></p>
+<p>Something<sup id="fnref:536"><a href="#fn:536" rel="footnote">536</a></sup></p>
+<p>Something<sup id="fnref:537"><a href="#fn:537" rel="footnote">537</a></sup></p>
+<p>Something<sup id="fnref:538"><a href="#fn:538" rel="footnote">538</a></sup></p>
+<p>Something<sup id="fnref:539"><a href="#fn:539" rel="footnote">539</a></sup></p>
+<p>Something<sup id="fnref:540"><a href="#fn:540" rel="footnote">540</a></sup></p>
+<p>Something<sup id="fnref:541"><a href="#fn:541" rel="footnote">541</a></sup></p>
+<p>Something<sup id="fnref:542"><a href="#fn:542" rel="footnote">542</a></sup></p>
+<p>Something<sup id="fnref:543"><a href="#fn:543" rel="footnote">543</a></sup></p>
+<p>Something<sup id="fnref:544"><a href="#fn:544" rel="footnote">544</a></sup></p>
+<p>Something<sup id="fnref:545"><a href="#fn:545" rel="footnote">545</a></sup></p>
+<p>Something<sup id="fnref:546"><a href="#fn:546" rel="footnote">546</a></sup></p>
+<p>Something<sup id="fnref:547"><a href="#fn:547" rel="footnote">547</a></sup></p>
+<p>Something<sup id="fnref:548"><a href="#fn:548" rel="footnote">548</a></sup></p>
+<p>Something<sup id="fnref:549"><a href="#fn:549" rel="footnote">549</a></sup></p>
+<p>Something<sup id="fnref:550"><a href="#fn:550" rel="footnote">550</a></sup></p>
+<p>Something<sup id="fnref:551"><a href="#fn:551" rel="footnote">551</a></sup></p>
+<p>Something<sup id="fnref:552"><a href="#fn:552" rel="footnote">552</a></sup></p>
+<p>Something<sup id="fnref:553"><a href="#fn:553" rel="footnote">553</a></sup></p>
+<p>Something<sup id="fnref:554"><a href="#fn:554" rel="footnote">554</a></sup></p>
+<p>Something<sup id="fnref:555"><a href="#fn:555" rel="footnote">555</a></sup></p>
+<p>Something<sup id="fnref:556"><a href="#fn:556" rel="footnote">556</a></sup></p>
+<p>Something<sup id="fnref:557"><a href="#fn:557" rel="footnote">557</a></sup></p>
+<p>Something<sup id="fnref:558"><a href="#fn:558" rel="footnote">558</a></sup></p>
+<p>Something<sup id="fnref:559"><a href="#fn:559" rel="footnote">559</a></sup></p>
+<p>Something<sup id="fnref:560"><a href="#fn:560" rel="footnote">560</a></sup></p>
+<p>Something<sup id="fnref:561"><a href="#fn:561" rel="footnote">561</a></sup></p>
+<p>Something<sup id="fnref:562"><a href="#fn:562" rel="footnote">562</a></sup></p>
+<p>Something<sup id="fnref:563"><a href="#fn:563" rel="footnote">563</a></sup></p>
+<p>Something<sup id="fnref:564"><a href="#fn:564" rel="footnote">564</a></sup></p>
+<p>Something<sup id="fnref:565"><a href="#fn:565" rel="footnote">565</a></sup></p>
+<p>Something<sup id="fnref:566"><a href="#fn:566" rel="footnote">566</a></sup></p>
+<p>Something<sup id="fnref:567"><a href="#fn:567" rel="footnote">567</a></sup></p>
+<p>Something<sup id="fnref:568"><a href="#fn:568" rel="footnote">568</a></sup></p>
+<p>Something<sup id="fnref:569"><a href="#fn:569" rel="footnote">569</a></sup></p>
+<p>Something<sup id="fnref:570"><a href="#fn:570" rel="footnote">570</a></sup></p>
+<p>Something<sup id="fnref:571"><a href="#fn:571" rel="footnote">571</a></sup></p>
+<p>Something<sup id="fnref:572"><a href="#fn:572" rel="footnote">572</a></sup></p>
+<p>Something<sup id="fnref:573"><a href="#fn:573" rel="footnote">573</a></sup></p>
+<p>Something<sup id="fnref:574"><a href="#fn:574" rel="footnote">574</a></sup></p>
+<p>Something<sup id="fnref:575"><a href="#fn:575" rel="footnote">575</a></sup></p>
+<p>Something<sup id="fnref:576"><a href="#fn:576" rel="footnote">576</a></sup></p>
+<p>Something<sup id="fnref:577"><a href="#fn:577" rel="footnote">577</a></sup></p>
+<p>Something<sup id="fnref:578"><a href="#fn:578" rel="footnote">578</a></sup></p>
+<p>Something<sup id="fnref:579"><a href="#fn:579" rel="footnote">579</a></sup></p>
+<p>Something<sup id="fnref:580"><a href="#fn:580" rel="footnote">580</a></sup></p>
+<p>Something<sup id="fnref:581"><a href="#fn:581" rel="footnote">581</a></sup></p>
+<p>Something<sup id="fnref:582"><a href="#fn:582" rel="footnote">582</a></sup></p>
+<p>Something<sup id="fnref:583"><a href="#fn:583" rel="footnote">583</a></sup></p>
+<p>Something<sup id="fnref:584"><a href="#fn:584" rel="footnote">584</a></sup></p>
+<p>Something<sup id="fnref:585"><a href="#fn:585" rel="footnote">585</a></sup></p>
+<p>Something<sup id="fnref:586"><a href="#fn:586" rel="footnote">586</a></sup></p>
+<p>Something<sup id="fnref:587"><a href="#fn:587" rel="footnote">587</a></sup></p>
+<p>Something<sup id="fnref:588"><a href="#fn:588" rel="footnote">588</a></sup></p>
+<p>Something<sup id="fnref:589"><a href="#fn:589" rel="footnote">589</a></sup></p>
+<p>Something<sup id="fnref:590"><a href="#fn:590" rel="footnote">590</a></sup></p>
+<p>Something<sup id="fnref:591"><a href="#fn:591" rel="footnote">591</a></sup></p>
+<p>Something<sup id="fnref:592"><a href="#fn:592" rel="footnote">592</a></sup></p>
+<p>Something<sup id="fnref:593"><a href="#fn:593" rel="footnote">593</a></sup></p>
+<p>Something<sup id="fnref:594"><a href="#fn:594" rel="footnote">594</a></sup></p>
+<p>Something<sup id="fnref:595"><a href="#fn:595" rel="footnote">595</a></sup></p>
+<p>Something<sup id="fnref:596"><a href="#fn:596" rel="footnote">596</a></sup></p>
+<p>Something<sup id="fnref:597"><a href="#fn:597" rel="footnote">597</a></sup></p>
+<p>Something<sup id="fnref:598"><a href="#fn:598" rel="footnote">598</a></sup></p>
+<p>Something<sup id="fnref:599"><a href="#fn:599" rel="footnote">599</a></sup></p>
+<p>Something<sup id="fnref:600"><a href="#fn:600" rel="footnote">600</a></sup></p>
+<p>Something<sup id="fnref:601"><a href="#fn:601" rel="footnote">601</a></sup></p>
+<p>Something<sup id="fnref:602"><a href="#fn:602" rel="footnote">602</a></sup></p>
+<p>Something<sup id="fnref:603"><a href="#fn:603" rel="footnote">603</a></sup></p>
+<p>Something<sup id="fnref:604"><a href="#fn:604" rel="footnote">604</a></sup></p>
+<p>Something<sup id="fnref:605"><a href="#fn:605" rel="footnote">605</a></sup></p>
+<p>Something<sup id="fnref:606"><a href="#fn:606" rel="footnote">606</a></sup></p>
+<p>Something<sup id="fnref:607"><a href="#fn:607" rel="footnote">607</a></sup></p>
+<p>Something<sup id="fnref:608"><a href="#fn:608" rel="footnote">608</a></sup></p>
+<p>Something<sup id="fnref:609"><a href="#fn:609" rel="footnote">609</a></sup></p>
+<p>Something<sup id="fnref:610"><a href="#fn:610" rel="footnote">610</a></sup></p>
+<p>Something<sup id="fnref:611"><a href="#fn:611" rel="footnote">611</a></sup></p>
+<p>Something<sup id="fnref:612"><a href="#fn:612" rel="footnote">612</a></sup></p>
+<p>Something<sup id="fnref:613"><a href="#fn:613" rel="footnote">613</a></sup></p>
+<p>Something<sup id="fnref:614"><a href="#fn:614" rel="footnote">614</a></sup></p>
+<p>Something<sup id="fnref:615"><a href="#fn:615" rel="footnote">615</a></sup></p>
+<p>Something<sup id="fnref:616"><a href="#fn:616" rel="footnote">616</a></sup></p>
+<p>Something<sup id="fnref:617"><a href="#fn:617" rel="footnote">617</a></sup></p>
+<p>Something<sup id="fnref:618"><a href="#fn:618" rel="footnote">618</a></sup></p>
+<p>Something<sup id="fnref:619"><a href="#fn:619" rel="footnote">619</a></sup></p>
+<p>Something<sup id="fnref:620"><a href="#fn:620" rel="footnote">620</a></sup></p>
+<p>Something<sup id="fnref:621"><a href="#fn:621" rel="footnote">621</a></sup></p>
+<p>Something<sup id="fnref:622"><a href="#fn:622" rel="footnote">622</a></sup></p>
+<p>Something<sup id="fnref:623"><a href="#fn:623" rel="footnote">623</a></sup></p>
+<p>Something<sup id="fnref:624"><a href="#fn:624" rel="footnote">624</a></sup></p>
+<p>Something<sup id="fnref:625"><a href="#fn:625" rel="footnote">625</a></sup></p>
+<p>Something<sup id="fnref:626"><a href="#fn:626" rel="footnote">626</a></sup></p>
+<p>Something<sup id="fnref:627"><a href="#fn:627" rel="footnote">627</a></sup></p>
+<p>Something<sup id="fnref:628"><a href="#fn:628" rel="footnote">628</a></sup></p>
+<p>Something<sup id="fnref:629"><a href="#fn:629" rel="footnote">629</a></sup></p>
+<p>Something<sup id="fnref:630"><a href="#fn:630" rel="footnote">630</a></sup></p>
+<p>Something<sup id="fnref:631"><a href="#fn:631" rel="footnote">631</a></sup></p>
+<p>Something<sup id="fnref:632"><a href="#fn:632" rel="footnote">632</a></sup></p>
+<p>Something<sup id="fnref:633"><a href="#fn:633" rel="footnote">633</a></sup></p>
+<p>Something<sup id="fnref:634"><a href="#fn:634" rel="footnote">634</a></sup></p>
+<p>Something<sup id="fnref:635"><a href="#fn:635" rel="footnote">635</a></sup></p>
+<p>Something<sup id="fnref:636"><a href="#fn:636" rel="footnote">636</a></sup></p>
+<p>Something<sup id="fnref:637"><a href="#fn:637" rel="footnote">637</a></sup></p>
+<p>Something<sup id="fnref:638"><a href="#fn:638" rel="footnote">638</a></sup></p>
+<p>Something<sup id="fnref:639"><a href="#fn:639" rel="footnote">639</a></sup></p>
+<p>Something<sup id="fnref:640"><a href="#fn:640" rel="footnote">640</a></sup></p>
+<p>Something<sup id="fnref:641"><a href="#fn:641" rel="footnote">641</a></sup></p>
+<p>Something<sup id="fnref:642"><a href="#fn:642" rel="footnote">642</a></sup></p>
+<p>Something<sup id="fnref:643"><a href="#fn:643" rel="footnote">643</a></sup></p>
+<p>Something<sup id="fnref:644"><a href="#fn:644" rel="footnote">644</a></sup></p>
+<p>Something<sup id="fnref:645"><a href="#fn:645" rel="footnote">645</a></sup></p>
+<p>Something<sup id="fnref:646"><a href="#fn:646" rel="footnote">646</a></sup></p>
+<p>Something<sup id="fnref:647"><a href="#fn:647" rel="footnote">647</a></sup></p>
+<p>Something<sup id="fnref:648"><a href="#fn:648" rel="footnote">648</a></sup></p>
+<p>Something<sup id="fnref:649"><a href="#fn:649" rel="footnote">649</a></sup></p>
+<p>Something<sup id="fnref:650"><a href="#fn:650" rel="footnote">650</a></sup></p>
+<p>Something<sup id="fnref:651"><a href="#fn:651" rel="footnote">651</a></sup></p>
+<p>Something<sup id="fnref:652"><a href="#fn:652" rel="footnote">652</a></sup></p>
+<p>Something<sup id="fnref:653"><a href="#fn:653" rel="footnote">653</a></sup></p>
+<p>Something<sup id="fnref:654"><a href="#fn:654" rel="footnote">654</a></sup></p>
+<p>Something<sup id="fnref:655"><a href="#fn:655" rel="footnote">655</a></sup></p>
+<p>Something<sup id="fnref:656"><a href="#fn:656" rel="footnote">656</a></sup></p>
+<p>Something<sup id="fnref:657"><a href="#fn:657" rel="footnote">657</a></sup></p>
+<p>Something<sup id="fnref:658"><a href="#fn:658" rel="footnote">658</a></sup></p>
+<p>Something<sup id="fnref:659"><a href="#fn:659" rel="footnote">659</a></sup></p>
+<p>Something<sup id="fnref:660"><a href="#fn:660" rel="footnote">660</a></sup></p>
+<p>Something<sup id="fnref:661"><a href="#fn:661" rel="footnote">661</a></sup></p>
+<p>Something<sup id="fnref:662"><a href="#fn:662" rel="footnote">662</a></sup></p>
+<p>Something<sup id="fnref:663"><a href="#fn:663" rel="footnote">663</a></sup></p>
+<p>Something<sup id="fnref:664"><a href="#fn:664" rel="footnote">664</a></sup></p>
+<p>Something<sup id="fnref:665"><a href="#fn:665" rel="footnote">665</a></sup></p>
+<p>Something<sup id="fnref:666"><a href="#fn:666" rel="footnote">666</a></sup></p>
+<p>Something<sup id="fnref:667"><a href="#fn:667" rel="footnote">667</a></sup></p>
+<p>Something<sup id="fnref:668"><a href="#fn:668" rel="footnote">668</a></sup></p>
+<p>Something<sup id="fnref:669"><a href="#fn:669" rel="footnote">669</a></sup></p>
+<p>Something<sup id="fnref:670"><a href="#fn:670" rel="footnote">670</a></sup></p>
+<p>Something<sup id="fnref:671"><a href="#fn:671" rel="footnote">671</a></sup></p>
+<p>Something<sup id="fnref:672"><a href="#fn:672" rel="footnote">672</a></sup></p>
+<p>Something<sup id="fnref:673"><a href="#fn:673" rel="footnote">673</a></sup></p>
+<p>Something<sup id="fnref:674"><a href="#fn:674" rel="footnote">674</a></sup></p>
+<p>Something<sup id="fnref:675"><a href="#fn:675" rel="footnote">675</a></sup></p>
+<p>Something<sup id="fnref:676"><a href="#fn:676" rel="footnote">676</a></sup></p>
+<p>Something<sup id="fnref:677"><a href="#fn:677" rel="footnote">677</a></sup></p>
+<p>Something<sup id="fnref:678"><a href="#fn:678" rel="footnote">678</a></sup></p>
+<p>Something<sup id="fnref:679"><a href="#fn:679" rel="footnote">679</a></sup></p>
+<p>Something<sup id="fnref:680"><a href="#fn:680" rel="footnote">680</a></sup></p>
+<p>Something<sup id="fnref:681"><a href="#fn:681" rel="footnote">681</a></sup></p>
+<p>Something<sup id="fnref:682"><a href="#fn:682" rel="footnote">682</a></sup></p>
+<p>Something<sup id="fnref:683"><a href="#fn:683" rel="footnote">683</a></sup></p>
+<p>Something<sup id="fnref:684"><a href="#fn:684" rel="footnote">684</a></sup></p>
+<p>Something<sup id="fnref:685"><a href="#fn:685" rel="footnote">685</a></sup></p>
+<p>Something<sup id="fnref:686"><a href="#fn:686" rel="footnote">686</a></sup></p>
+<p>Something<sup id="fnref:687"><a href="#fn:687" rel="footnote">687</a></sup></p>
+<p>Something<sup id="fnref:688"><a href="#fn:688" rel="footnote">688</a></sup></p>
+<p>Something<sup id="fnref:689"><a href="#fn:689" rel="footnote">689</a></sup></p>
+<p>Something<sup id="fnref:690"><a href="#fn:690" rel="footnote">690</a></sup></p>
+<p>Something<sup id="fnref:691"><a href="#fn:691" rel="footnote">691</a></sup></p>
+<p>Something<sup id="fnref:692"><a href="#fn:692" rel="footnote">692</a></sup></p>
+<p>Something<sup id="fnref:693"><a href="#fn:693" rel="footnote">693</a></sup></p>
+<p>Something<sup id="fnref:694"><a href="#fn:694" rel="footnote">694</a></sup></p>
+<p>Something<sup id="fnref:695"><a href="#fn:695" rel="footnote">695</a></sup></p>
+<p>Something<sup id="fnref:696"><a href="#fn:696" rel="footnote">696</a></sup></p>
+<p>Something<sup id="fnref:697"><a href="#fn:697" rel="footnote">697</a></sup></p>
+<p>Something<sup id="fnref:698"><a href="#fn:698" rel="footnote">698</a></sup></p>
+<p>Something<sup id="fnref:699"><a href="#fn:699" rel="footnote">699</a></sup></p>
+<p>Something<sup id="fnref:700"><a href="#fn:700" rel="footnote">700</a></sup></p>
+<p>Something<sup id="fnref:701"><a href="#fn:701" rel="footnote">701</a></sup></p>
+<p>Something<sup id="fnref:702"><a href="#fn:702" rel="footnote">702</a></sup></p>
+<p>Something<sup id="fnref:703"><a href="#fn:703" rel="footnote">703</a></sup></p>
+<p>Something<sup id="fnref:704"><a href="#fn:704" rel="footnote">704</a></sup></p>
+<p>Something<sup id="fnref:705"><a href="#fn:705" rel="footnote">705</a></sup></p>
+<p>Something<sup id="fnref:706"><a href="#fn:706" rel="footnote">706</a></sup></p>
+<p>Something<sup id="fnref:707"><a href="#fn:707" rel="footnote">707</a></sup></p>
+<p>Something<sup id="fnref:708"><a href="#fn:708" rel="footnote">708</a></sup></p>
+<p>Something<sup id="fnref:709"><a href="#fn:709" rel="footnote">709</a></sup></p>
+<p>Something<sup id="fnref:710"><a href="#fn:710" rel="footnote">710</a></sup></p>
+<p>Something<sup id="fnref:711"><a href="#fn:711" rel="footnote">711</a></sup></p>
+<p>Something<sup id="fnref:712"><a href="#fn:712" rel="footnote">712</a></sup></p>
+<p>Something<sup id="fnref:713"><a href="#fn:713" rel="footnote">713</a></sup></p>
+<p>Something<sup id="fnref:714"><a href="#fn:714" rel="footnote">714</a></sup></p>
+<p>Something<sup id="fnref:715"><a href="#fn:715" rel="footnote">715</a></sup></p>
+<p>Something<sup id="fnref:716"><a href="#fn:716" rel="footnote">716</a></sup></p>
+<p>Something<sup id="fnref:717"><a href="#fn:717" rel="footnote">717</a></sup></p>
+<p>Something<sup id="fnref:718"><a href="#fn:718" rel="footnote">718</a></sup></p>
+<p>Something<sup id="fnref:719"><a href="#fn:719" rel="footnote">719</a></sup></p>
+<p>Something<sup id="fnref:720"><a href="#fn:720" rel="footnote">720</a></sup></p>
+<p>Something<sup id="fnref:721"><a href="#fn:721" rel="footnote">721</a></sup></p>
+<p>Something<sup id="fnref:722"><a href="#fn:722" rel="footnote">722</a></sup></p>
+<p>Something<sup id="fnref:723"><a href="#fn:723" rel="footnote">723</a></sup></p>
+<p>Something<sup id="fnref:724"><a href="#fn:724" rel="footnote">724</a></sup></p>
+<p>Something<sup id="fnref:725"><a href="#fn:725" rel="footnote">725</a></sup></p>
+<p>Something<sup id="fnref:726"><a href="#fn:726" rel="footnote">726</a></sup></p>
+<p>Something<sup id="fnref:727"><a href="#fn:727" rel="footnote">727</a></sup></p>
+<p>Something<sup id="fnref:728"><a href="#fn:728" rel="footnote">728</a></sup></p>
+<p>Something<sup id="fnref:729"><a href="#fn:729" rel="footnote">729</a></sup></p>
+<p>Something<sup id="fnref:730"><a href="#fn:730" rel="footnote">730</a></sup></p>
+<p>Something<sup id="fnref:731"><a href="#fn:731" rel="footnote">731</a></sup></p>
+<p>Something<sup id="fnref:732"><a href="#fn:732" rel="footnote">732</a></sup></p>
+<p>Something<sup id="fnref:733"><a href="#fn:733" rel="footnote">733</a></sup></p>
+<p>Something<sup id="fnref:734"><a href="#fn:734" rel="footnote">734</a></sup></p>
+<p>Something<sup id="fnref:735"><a href="#fn:735" rel="footnote">735</a></sup></p>
+<p>Something<sup id="fnref:736"><a href="#fn:736" rel="footnote">736</a></sup></p>
+<p>Something<sup id="fnref:737"><a href="#fn:737" rel="footnote">737</a></sup></p>
+<p>Something<sup id="fnref:738"><a href="#fn:738" rel="footnote">738</a></sup></p>
+<p>Something<sup id="fnref:739"><a href="#fn:739" rel="footnote">739</a></sup></p>
+<p>Something<sup id="fnref:740"><a href="#fn:740" rel="footnote">740</a></sup></p>
+<p>Something<sup id="fnref:741"><a href="#fn:741" rel="footnote">741</a></sup></p>
+<p>Something<sup id="fnref:742"><a href="#fn:742" rel="footnote">742</a></sup></p>
+<p>Something<sup id="fnref:743"><a href="#fn:743" rel="footnote">743</a></sup></p>
+<p>Something<sup id="fnref:744"><a href="#fn:744" rel="footnote">744</a></sup></p>
+<p>Something<sup id="fnref:745"><a href="#fn:745" rel="footnote">745</a></sup></p>
+<p>Something<sup id="fnref:746"><a href="#fn:746" rel="footnote">746</a></sup></p>
+<p>Something<sup id="fnref:747"><a href="#fn:747" rel="footnote">747</a></sup></p>
+<p>Something<sup id="fnref:748"><a href="#fn:748" rel="footnote">748</a></sup></p>
+<p>Something<sup id="fnref:749"><a href="#fn:749" rel="footnote">749</a></sup></p>
+<p>Something<sup id="fnref:750"><a href="#fn:750" rel="footnote">750</a></sup></p>
+<p>Something<sup id="fnref:751"><a href="#fn:751" rel="footnote">751</a></sup></p>
+<p>Something<sup id="fnref:752"><a href="#fn:752" rel="footnote">752</a></sup></p>
+<p>Something<sup id="fnref:753"><a href="#fn:753" rel="footnote">753</a></sup></p>
+<p>Something<sup id="fnref:754"><a href="#fn:754" rel="footnote">754</a></sup></p>
+<p>Something<sup id="fnref:755"><a href="#fn:755" rel="footnote">755</a></sup></p>
+<p>Something<sup id="fnref:756"><a href="#fn:756" rel="footnote">756</a></sup></p>
+<p>Something<sup id="fnref:757"><a href="#fn:757" rel="footnote">757</a></sup></p>
+<p>Something<sup id="fnref:758"><a href="#fn:758" rel="footnote">758</a></sup></p>
+<p>Something<sup id="fnref:759"><a href="#fn:759" rel="footnote">759</a></sup></p>
+<p>Something<sup id="fnref:760"><a href="#fn:760" rel="footnote">760</a></sup></p>
+<p>Something<sup id="fnref:761"><a href="#fn:761" rel="footnote">761</a></sup></p>
+<p>Something<sup id="fnref:762"><a href="#fn:762" rel="footnote">762</a></sup></p>
+<p>Something<sup id="fnref:763"><a href="#fn:763" rel="footnote">763</a></sup></p>
+<p>Something<sup id="fnref:764"><a href="#fn:764" rel="footnote">764</a></sup></p>
+<p>Something<sup id="fnref:765"><a href="#fn:765" rel="footnote">765</a></sup></p>
+<p>Something<sup id="fnref:766"><a href="#fn:766" rel="footnote">766</a></sup></p>
+<p>Something<sup id="fnref:767"><a href="#fn:767" rel="footnote">767</a></sup></p>
+<p>Something<sup id="fnref:768"><a href="#fn:768" rel="footnote">768</a></sup></p>
+<p>Something<sup id="fnref:769"><a href="#fn:769" rel="footnote">769</a></sup></p>
+<p>Something<sup id="fnref:770"><a href="#fn:770" rel="footnote">770</a></sup></p>
+<p>Something<sup id="fnref:771"><a href="#fn:771" rel="footnote">771</a></sup></p>
+<p>Something<sup id="fnref:772"><a href="#fn:772" rel="footnote">772</a></sup></p>
+<p>Something<sup id="fnref:773"><a href="#fn:773" rel="footnote">773</a></sup></p>
+<p>Something<sup id="fnref:774"><a href="#fn:774" rel="footnote">774</a></sup></p>
+<p>Something<sup id="fnref:775"><a href="#fn:775" rel="footnote">775</a></sup></p>
+<p>Something<sup id="fnref:776"><a href="#fn:776" rel="footnote">776</a></sup></p>
+<p>Something<sup id="fnref:777"><a href="#fn:777" rel="footnote">777</a></sup></p>
+<p>Something<sup id="fnref:778"><a href="#fn:778" rel="footnote">778</a></sup></p>
+<p>Something<sup id="fnref:779"><a href="#fn:779" rel="footnote">779</a></sup></p>
+<p>Something<sup id="fnref:780"><a href="#fn:780" rel="footnote">780</a></sup></p>
+<p>Something<sup id="fnref:781"><a href="#fn:781" rel="footnote">781</a></sup></p>
+<p>Something<sup id="fnref:782"><a href="#fn:782" rel="footnote">782</a></sup></p>
+<p>Something<sup id="fnref:783"><a href="#fn:783" rel="footnote">783</a></sup></p>
+<p>Something<sup id="fnref:784"><a href="#fn:784" rel="footnote">784</a></sup></p>
+<p>Something<sup id="fnref:785"><a href="#fn:785" rel="footnote">785</a></sup></p>
+<p>Something<sup id="fnref:786"><a href="#fn:786" rel="footnote">786</a></sup></p>
+<p>Something<sup id="fnref:787"><a href="#fn:787" rel="footnote">787</a></sup></p>
+<p>Something<sup id="fnref:788"><a href="#fn:788" rel="footnote">788</a></sup></p>
+<p>Something<sup id="fnref:789"><a href="#fn:789" rel="footnote">789</a></sup></p>
+<p>Something<sup id="fnref:790"><a href="#fn:790" rel="footnote">790</a></sup></p>
+<p>Something<sup id="fnref:791"><a href="#fn:791" rel="footnote">791</a></sup></p>
+<p>Something<sup id="fnref:792"><a href="#fn:792" rel="footnote">792</a></sup></p>
+<p>Something<sup id="fnref:793"><a href="#fn:793" rel="footnote">793</a></sup></p>
+<p>Something<sup id="fnref:794"><a href="#fn:794" rel="footnote">794</a></sup></p>
+<p>Something<sup id="fnref:795"><a href="#fn:795" rel="footnote">795</a></sup></p>
+<p>Something<sup id="fnref:796"><a href="#fn:796" rel="footnote">796</a></sup></p>
+<p>Something<sup id="fnref:797"><a href="#fn:797" rel="footnote">797</a></sup></p>
+<p>Something<sup id="fnref:798"><a href="#fn:798" rel="footnote">798</a></sup></p>
+<p>Something<sup id="fnref:799"><a href="#fn:799" rel="footnote">799</a></sup></p>
+<p>Something<sup id="fnref:800"><a href="#fn:800" rel="footnote">800</a></sup></p>
+<p>Something<sup id="fnref:801"><a href="#fn:801" rel="footnote">801</a></sup></p>
+<p>Something<sup id="fnref:802"><a href="#fn:802" rel="footnote">802</a></sup></p>
+<p>Something<sup id="fnref:803"><a href="#fn:803" rel="footnote">803</a></sup></p>
+<p>Something<sup id="fnref:804"><a href="#fn:804" rel="footnote">804</a></sup></p>
+<p>Something<sup id="fnref:805"><a href="#fn:805" rel="footnote">805</a></sup></p>
+<p>Something<sup id="fnref:806"><a href="#fn:806" rel="footnote">806</a></sup></p>
+<p>Something<sup id="fnref:807"><a href="#fn:807" rel="footnote">807</a></sup></p>
+<p>Something<sup id="fnref:808"><a href="#fn:808" rel="footnote">808</a></sup></p>
+<p>Something<sup id="fnref:809"><a href="#fn:809" rel="footnote">809</a></sup></p>
+<p>Something<sup id="fnref:810"><a href="#fn:810" rel="footnote">810</a></sup></p>
+<p>Something<sup id="fnref:811"><a href="#fn:811" rel="footnote">811</a></sup></p>
+<p>Something<sup id="fnref:812"><a href="#fn:812" rel="footnote">812</a></sup></p>
+<p>Something<sup id="fnref:813"><a href="#fn:813" rel="footnote">813</a></sup></p>
+<p>Something<sup id="fnref:814"><a href="#fn:814" rel="footnote">814</a></sup></p>
+<p>Something<sup id="fnref:815"><a href="#fn:815" rel="footnote">815</a></sup></p>
+<p>Something<sup id="fnref:816"><a href="#fn:816" rel="footnote">816</a></sup></p>
+<p>Something<sup id="fnref:817"><a href="#fn:817" rel="footnote">817</a></sup></p>
+<p>Something<sup id="fnref:818"><a href="#fn:818" rel="footnote">818</a></sup></p>
+<p>Something<sup id="fnref:819"><a href="#fn:819" rel="footnote">819</a></sup></p>
+<p>Something<sup id="fnref:820"><a href="#fn:820" rel="footnote">820</a></sup></p>
+<p>Something<sup id="fnref:821"><a href="#fn:821" rel="footnote">821</a></sup></p>
+<p>Something<sup id="fnref:822"><a href="#fn:822" rel="footnote">822</a></sup></p>
+<p>Something<sup id="fnref:823"><a href="#fn:823" rel="footnote">823</a></sup></p>
+<p>Something<sup id="fnref:824"><a href="#fn:824" rel="footnote">824</a></sup></p>
+<p>Something<sup id="fnref:825"><a href="#fn:825" rel="footnote">825</a></sup></p>
+<p>Something<sup id="fnref:826"><a href="#fn:826" rel="footnote">826</a></sup></p>
+<p>Something<sup id="fnref:827"><a href="#fn:827" rel="footnote">827</a></sup></p>
+<p>Something<sup id="fnref:828"><a href="#fn:828" rel="footnote">828</a></sup></p>
+<p>Something<sup id="fnref:829"><a href="#fn:829" rel="footnote">829</a></sup></p>
+<p>Something<sup id="fnref:830"><a href="#fn:830" rel="footnote">830</a></sup></p>
+<p>Something<sup id="fnref:831"><a href="#fn:831" rel="footnote">831</a></sup></p>
+<p>Something<sup id="fnref:832"><a href="#fn:832" rel="footnote">832</a></sup></p>
+<p>Something<sup id="fnref:833"><a href="#fn:833" rel="footnote">833</a></sup></p>
+<p>Something<sup id="fnref:834"><a href="#fn:834" rel="footnote">834</a></sup></p>
+<p>Something<sup id="fnref:835"><a href="#fn:835" rel="footnote">835</a></sup></p>
+<p>Something<sup id="fnref:836"><a href="#fn:836" rel="footnote">836</a></sup></p>
+<p>Something<sup id="fnref:837"><a href="#fn:837" rel="footnote">837</a></sup></p>
+<p>Something<sup id="fnref:838"><a href="#fn:838" rel="footnote">838</a></sup></p>
+<p>Something<sup id="fnref:839"><a href="#fn:839" rel="footnote">839</a></sup></p>
+<p>Something<sup id="fnref:840"><a href="#fn:840" rel="footnote">840</a></sup></p>
+<p>Something<sup id="fnref:841"><a href="#fn:841" rel="footnote">841</a></sup></p>
+<p>Something<sup id="fnref:842"><a href="#fn:842" rel="footnote">842</a></sup></p>
+<p>Something<sup id="fnref:843"><a href="#fn:843" rel="footnote">843</a></sup></p>
+<p>Something<sup id="fnref:844"><a href="#fn:844" rel="footnote">844</a></sup></p>
+<p>Something<sup id="fnref:845"><a href="#fn:845" rel="footnote">845</a></sup></p>
+<p>Something<sup id="fnref:846"><a href="#fn:846" rel="footnote">846</a></sup></p>
+<p>Something<sup id="fnref:847"><a href="#fn:847" rel="footnote">847</a></sup></p>
+<p>Something<sup id="fnref:848"><a href="#fn:848" rel="footnote">848</a></sup></p>
+<p>Something<sup id="fnref:849"><a href="#fn:849" rel="footnote">849</a></sup></p>
+<p>Something<sup id="fnref:850"><a href="#fn:850" rel="footnote">850</a></sup></p>
+<p>Something<sup id="fnref:851"><a href="#fn:851" rel="footnote">851</a></sup></p>
+<p>Something<sup id="fnref:852"><a href="#fn:852" rel="footnote">852</a></sup></p>
+<p>Something<sup id="fnref:853"><a href="#fn:853" rel="footnote">853</a></sup></p>
+<p>Something<sup id="fnref:854"><a href="#fn:854" rel="footnote">854</a></sup></p>
+<p>Something<sup id="fnref:855"><a href="#fn:855" rel="footnote">855</a></sup></p>
+<p>Something<sup id="fnref:856"><a href="#fn:856" rel="footnote">856</a></sup></p>
+<p>Something<sup id="fnref:857"><a href="#fn:857" rel="footnote">857</a></sup></p>
+<p>Something<sup id="fnref:858"><a href="#fn:858" rel="footnote">858</a></sup></p>
+<p>Something<sup id="fnref:859"><a href="#fn:859" rel="footnote">859</a></sup></p>
+<p>Something<sup id="fnref:860"><a href="#fn:860" rel="footnote">860</a></sup></p>
+<p>Something<sup id="fnref:861"><a href="#fn:861" rel="footnote">861</a></sup></p>
+<p>Something<sup id="fnref:862"><a href="#fn:862" rel="footnote">862</a></sup></p>
+<p>Something<sup id="fnref:863"><a href="#fn:863" rel="footnote">863</a></sup></p>
+<p>Something<sup id="fnref:864"><a href="#fn:864" rel="footnote">864</a></sup></p>
+<p>Something<sup id="fnref:865"><a href="#fn:865" rel="footnote">865</a></sup></p>
+<p>Something<sup id="fnref:866"><a href="#fn:866" rel="footnote">866</a></sup></p>
+<p>Something<sup id="fnref:867"><a href="#fn:867" rel="footnote">867</a></sup></p>
+<p>Something<sup id="fnref:868"><a href="#fn:868" rel="footnote">868</a></sup></p>
+<p>Something<sup id="fnref:869"><a href="#fn:869" rel="footnote">869</a></sup></p>
+<p>Something<sup id="fnref:870"><a href="#fn:870" rel="footnote">870</a></sup></p>
+<p>Something<sup id="fnref:871"><a href="#fn:871" rel="footnote">871</a></sup></p>
+<p>Something<sup id="fnref:872"><a href="#fn:872" rel="footnote">872</a></sup></p>
+<p>Something<sup id="fnref:873"><a href="#fn:873" rel="footnote">873</a></sup></p>
+<p>Something<sup id="fnref:874"><a href="#fn:874" rel="footnote">874</a></sup></p>
+<p>Something<sup id="fnref:875"><a href="#fn:875" rel="footnote">875</a></sup></p>
+<p>Something<sup id="fnref:876"><a href="#fn:876" rel="footnote">876</a></sup></p>
+<p>Something<sup id="fnref:877"><a href="#fn:877" rel="footnote">877</a></sup></p>
+<p>Something<sup id="fnref:878"><a href="#fn:878" rel="footnote">878</a></sup></p>
+<p>Something<sup id="fnref:879"><a href="#fn:879" rel="footnote">879</a></sup></p>
+<p>Something<sup id="fnref:880"><a href="#fn:880" rel="footnote">880</a></sup></p>
+<p>Something<sup id="fnref:881"><a href="#fn:881" rel="footnote">881</a></sup></p>
+<p>Something<sup id="fnref:882"><a href="#fn:882" rel="footnote">882</a></sup></p>
+<p>Something<sup id="fnref:883"><a href="#fn:883" rel="footnote">883</a></sup></p>
+<p>Something<sup id="fnref:884"><a href="#fn:884" rel="footnote">884</a></sup></p>
+<p>Something<sup id="fnref:885"><a href="#fn:885" rel="footnote">885</a></sup></p>
+<p>Something<sup id="fnref:886"><a href="#fn:886" rel="footnote">886</a></sup></p>
+<p>Something<sup id="fnref:887"><a href="#fn:887" rel="footnote">887</a></sup></p>
+<p>Something<sup id="fnref:888"><a href="#fn:888" rel="footnote">888</a></sup></p>
+<p>Something<sup id="fnref:889"><a href="#fn:889" rel="footnote">889</a></sup></p>
+<p>Something<sup id="fnref:890"><a href="#fn:890" rel="footnote">890</a></sup></p>
+<p>Something<sup id="fnref:891"><a href="#fn:891" rel="footnote">891</a></sup></p>
+<p>Something<sup id="fnref:892"><a href="#fn:892" rel="footnote">892</a></sup></p>
+<p>Something<sup id="fnref:893"><a href="#fn:893" rel="footnote">893</a></sup></p>
+<p>Something<sup id="fnref:894"><a href="#fn:894" rel="footnote">894</a></sup></p>
+<p>Something<sup id="fnref:895"><a href="#fn:895" rel="footnote">895</a></sup></p>
+<p>Something<sup id="fnref:896"><a href="#fn:896" rel="footnote">896</a></sup></p>
+<p>Something<sup id="fnref:897"><a href="#fn:897" rel="footnote">897</a></sup></p>
+<p>Something<sup id="fnref:898"><a href="#fn:898" rel="footnote">898</a></sup></p>
+<p>Something<sup id="fnref:899"><a href="#fn:899" rel="footnote">899</a></sup></p>
+<p>Something<sup id="fnref:900"><a href="#fn:900" rel="footnote">900</a></sup></p>
+<p>Something<sup id="fnref:901"><a href="#fn:901" rel="footnote">901</a></sup></p>
+<p>Something<sup id="fnref:902"><a href="#fn:902" rel="footnote">902</a></sup></p>
+<p>Something<sup id="fnref:903"><a href="#fn:903" rel="footnote">903</a></sup></p>
+<p>Something<sup id="fnref:904"><a href="#fn:904" rel="footnote">904</a></sup></p>
+<p>Something<sup id="fnref:905"><a href="#fn:905" rel="footnote">905</a></sup></p>
+<p>Something<sup id="fnref:906"><a href="#fn:906" rel="footnote">906</a></sup></p>
+<p>Something<sup id="fnref:907"><a href="#fn:907" rel="footnote">907</a></sup></p>
+<p>Something<sup id="fnref:908"><a href="#fn:908" rel="footnote">908</a></sup></p>
+<p>Something<sup id="fnref:909"><a href="#fn:909" rel="footnote">909</a></sup></p>
+<p>Something<sup id="fnref:910"><a href="#fn:910" rel="footnote">910</a></sup></p>
+<p>Something<sup id="fnref:911"><a href="#fn:911" rel="footnote">911</a></sup></p>
+<p>Something<sup id="fnref:912"><a href="#fn:912" rel="footnote">912</a></sup></p>
+<p>Something<sup id="fnref:913"><a href="#fn:913" rel="footnote">913</a></sup></p>
+<p>Something<sup id="fnref:914"><a href="#fn:914" rel="footnote">914</a></sup></p>
+<p>Something<sup id="fnref:915"><a href="#fn:915" rel="footnote">915</a></sup></p>
+<p>Something<sup id="fnref:916"><a href="#fn:916" rel="footnote">916</a></sup></p>
+<p>Something<sup id="fnref:917"><a href="#fn:917" rel="footnote">917</a></sup></p>
+<p>Something<sup id="fnref:918"><a href="#fn:918" rel="footnote">918</a></sup></p>
+<p>Something<sup id="fnref:919"><a href="#fn:919" rel="footnote">919</a></sup></p>
+<p>Something<sup id="fnref:920"><a href="#fn:920" rel="footnote">920</a></sup></p>
+<p>Something<sup id="fnref:921"><a href="#fn:921" rel="footnote">921</a></sup></p>
+<p>Something<sup id="fnref:922"><a href="#fn:922" rel="footnote">922</a></sup></p>
+<p>Something<sup id="fnref:923"><a href="#fn:923" rel="footnote">923</a></sup></p>
+<p>Something<sup id="fnref:924"><a href="#fn:924" rel="footnote">924</a></sup></p>
+<p>Something<sup id="fnref:925"><a href="#fn:925" rel="footnote">925</a></sup></p>
+<p>Something<sup id="fnref:926"><a href="#fn:926" rel="footnote">926</a></sup></p>
+<p>Something<sup id="fnref:927"><a href="#fn:927" rel="footnote">927</a></sup></p>
+<p>Something<sup id="fnref:928"><a href="#fn:928" rel="footnote">928</a></sup></p>
+<p>Something<sup id="fnref:929"><a href="#fn:929" rel="footnote">929</a></sup></p>
+<p>Something<sup id="fnref:930"><a href="#fn:930" rel="footnote">930</a></sup></p>
+<p>Something<sup id="fnref:931"><a href="#fn:931" rel="footnote">931</a></sup></p>
+<p>Something<sup id="fnref:932"><a href="#fn:932" rel="footnote">932</a></sup></p>
+<p>Something<sup id="fnref:933"><a href="#fn:933" rel="footnote">933</a></sup></p>
+<p>Something<sup id="fnref:934"><a href="#fn:934" rel="footnote">934</a></sup></p>
+<p>Something<sup id="fnref:935"><a href="#fn:935" rel="footnote">935</a></sup></p>
+<p>Something<sup id="fnref:936"><a href="#fn:936" rel="footnote">936</a></sup></p>
+<p>Something<sup id="fnref:937"><a href="#fn:937" rel="footnote">937</a></sup></p>
+<p>Something<sup id="fnref:938"><a href="#fn:938" rel="footnote">938</a></sup></p>
+<p>Something<sup id="fnref:939"><a href="#fn:939" rel="footnote">939</a></sup></p>
+<p>Something<sup id="fnref:940"><a href="#fn:940" rel="footnote">940</a></sup></p>
+<p>Something<sup id="fnref:941"><a href="#fn:941" rel="footnote">941</a></sup></p>
+<p>Something<sup id="fnref:942"><a href="#fn:942" rel="footnote">942</a></sup></p>
+<p>Something<sup id="fnref:943"><a href="#fn:943" rel="footnote">943</a></sup></p>
+<p>Something<sup id="fnref:944"><a href="#fn:944" rel="footnote">944</a></sup></p>
+<p>Something<sup id="fnref:945"><a href="#fn:945" rel="footnote">945</a></sup></p>
+<p>Something<sup id="fnref:946"><a href="#fn:946" rel="footnote">946</a></sup></p>
+<p>Something<sup id="fnref:947"><a href="#fn:947" rel="footnote">947</a></sup></p>
+<p>Something<sup id="fnref:948"><a href="#fn:948" rel="footnote">948</a></sup></p>
+<p>Something<sup id="fnref:949"><a href="#fn:949" rel="footnote">949</a></sup></p>
+<p>Something<sup id="fnref:950"><a href="#fn:950" rel="footnote">950</a></sup></p>
+<p>Something<sup id="fnref:951"><a href="#fn:951" rel="footnote">951</a></sup></p>
+<p>Something<sup id="fnref:952"><a href="#fn:952" rel="footnote">952</a></sup></p>
+<p>Something<sup id="fnref:953"><a href="#fn:953" rel="footnote">953</a></sup></p>
+<p>Something<sup id="fnref:954"><a href="#fn:954" rel="footnote">954</a></sup></p>
+<p>Something<sup id="fnref:955"><a href="#fn:955" rel="footnote">955</a></sup></p>
+<p>Something<sup id="fnref:956"><a href="#fn:956" rel="footnote">956</a></sup></p>
+<p>Something<sup id="fnref:957"><a href="#fn:957" rel="footnote">957</a></sup></p>
+<p>Something<sup id="fnref:958"><a href="#fn:958" rel="footnote">958</a></sup></p>
+<p>Something<sup id="fnref:959"><a href="#fn:959" rel="footnote">959</a></sup></p>
+<p>Something<sup id="fnref:960"><a href="#fn:960" rel="footnote">960</a></sup></p>
+<p>Something<sup id="fnref:961"><a href="#fn:961" rel="footnote">961</a></sup></p>
+<p>Something<sup id="fnref:962"><a href="#fn:962" rel="footnote">962</a></sup></p>
+<p>Something<sup id="fnref:963"><a href="#fn:963" rel="footnote">963</a></sup></p>
+<p>Something<sup id="fnref:964"><a href="#fn:964" rel="footnote">964</a></sup></p>
+<p>Something<sup id="fnref:965"><a href="#fn:965" rel="footnote">965</a></sup></p>
+<p>Something<sup id="fnref:966"><a href="#fn:966" rel="footnote">966</a></sup></p>
+<p>Something<sup id="fnref:967"><a href="#fn:967" rel="footnote">967</a></sup></p>
+<p>Something<sup id="fnref:968"><a href="#fn:968" rel="footnote">968</a></sup></p>
+<p>Something<sup id="fnref:969"><a href="#fn:969" rel="footnote">969</a></sup></p>
+<p>Something<sup id="fnref:970"><a href="#fn:970" rel="footnote">970</a></sup></p>
+<p>Something<sup id="fnref:971"><a href="#fn:971" rel="footnote">971</a></sup></p>
+<p>Something<sup id="fnref:972"><a href="#fn:972" rel="footnote">972</a></sup></p>
+<p>Something<sup id="fnref:973"><a href="#fn:973" rel="footnote">973</a></sup></p>
+<p>Something<sup id="fnref:974"><a href="#fn:974" rel="footnote">974</a></sup></p>
+<p>Something<sup id="fnref:975"><a href="#fn:975" rel="footnote">975</a></sup></p>
+<p>Something<sup id="fnref:976"><a href="#fn:976" rel="footnote">976</a></sup></p>
+<p>Something<sup id="fnref:977"><a href="#fn:977" rel="footnote">977</a></sup></p>
+<p>Something<sup id="fnref:978"><a href="#fn:978" rel="footnote">978</a></sup></p>
+<p>Something<sup id="fnref:979"><a href="#fn:979" rel="footnote">979</a></sup></p>
+<p>Something<sup id="fnref:980"><a href="#fn:980" rel="footnote">980</a></sup></p>
+<p>Something<sup id="fnref:981"><a href="#fn:981" rel="footnote">981</a></sup></p>
+<p>Something<sup id="fnref:982"><a href="#fn:982" rel="footnote">982</a></sup></p>
+<p>Something<sup id="fnref:983"><a href="#fn:983" rel="footnote">983</a></sup></p>
+<p>Something<sup id="fnref:984"><a href="#fn:984" rel="footnote">984</a></sup></p>
+<p>Something<sup id="fnref:985"><a href="#fn:985" rel="footnote">985</a></sup></p>
+<p>Something<sup id="fnref:986"><a href="#fn:986" rel="footnote">986</a></sup></p>
+<p>Something<sup id="fnref:987"><a href="#fn:987" rel="footnote">987</a></sup></p>
+<p>Something<sup id="fnref:988"><a href="#fn:988" rel="footnote">988</a></sup></p>
+<p>Something<sup id="fnref:989"><a href="#fn:989" rel="footnote">989</a></sup></p>
+<p>Something<sup id="fnref:990"><a href="#fn:990" rel="footnote">990</a></sup></p>
+<p>Something<sup id="fnref:991"><a href="#fn:991" rel="footnote">991</a></sup></p>
+<p>Something<sup id="fnref:992"><a href="#fn:992" rel="footnote">992</a></sup></p>
+<p>Something<sup id="fnref:993"><a href="#fn:993" rel="footnote">993</a></sup></p>
+<p>Something<sup id="fnref:994"><a href="#fn:994" rel="footnote">994</a></sup></p>
+<p>Something<sup id="fnref:995"><a href="#fn:995" rel="footnote">995</a></sup></p>
+<p>Something<sup id="fnref:996"><a href="#fn:996" rel="footnote">996</a></sup></p>
+<p>Something<sup id="fnref:997"><a href="#fn:997" rel="footnote">997</a></sup></p>
+<p>Something<sup id="fnref:998"><a href="#fn:998" rel="footnote">998</a></sup></p>
+<p>Something<sup id="fnref:999"><a href="#fn:999" rel="footnote">999</a></sup></p>
+<p>Something<sup id="fnref:1000"><a href="#fn:1000" rel="footnote">1000</a></sup></p>
+<p>Something<sup id="fnref:1001"><a href="#fn:1001" rel="footnote">1001</a></sup></p>
+<p>Something<sup id="fnref:1002"><a href="#fn:1002" rel="footnote">1002</a></sup></p>
+<p>Something<sup id="fnref:1003"><a href="#fn:1003" rel="footnote">1003</a></sup></p>
+<p>Something<sup id="fnref:1004"><a href="#fn:1004" rel="footnote">1004</a></sup></p>
+<p>Something<sup id="fnref:1005"><a href="#fn:1005" rel="footnote">1005</a></sup></p>
+<p>Something<sup id="fnref:1006"><a href="#fn:1006" rel="footnote">1006</a></sup></p>
+<p>Something<sup id="fnref:1007"><a href="#fn:1007" rel="footnote">1007</a></sup></p>
+<p>Something<sup id="fnref:1008"><a href="#fn:1008" rel="footnote">1008</a></sup></p>
+<p>Something<sup id="fnref:1009"><a href="#fn:1009" rel="footnote">1009</a></sup></p>
+<p>Something<sup id="fnref:1010"><a href="#fn:1010" rel="footnote">1010</a></sup></p>
+<p>Something<sup id="fnref:1011"><a href="#fn:1011" rel="footnote">1011</a></sup></p>
+<p>Something<sup id="fnref:1012"><a href="#fn:1012" rel="footnote">1012</a></sup></p>
+<p>Something<sup id="fnref:1013"><a href="#fn:1013" rel="footnote">1013</a></sup></p>
+<p>Something<sup id="fnref:1014"><a href="#fn:1014" rel="footnote">1014</a></sup></p>
+<p>Something<sup id="fnref:1015"><a href="#fn:1015" rel="footnote">1015</a></sup></p>
+<p>Something<sup id="fnref:1016"><a href="#fn:1016" rel="footnote">1016</a></sup></p>
+<p>Something<sup id="fnref:1017"><a href="#fn:1017" rel="footnote">1017</a></sup></p>
+<p>Something<sup id="fnref:1018"><a href="#fn:1018" rel="footnote">1018</a></sup></p>
+<p>Something<sup id="fnref:1019"><a href="#fn:1019" rel="footnote">1019</a></sup></p>
+<p>Something<sup id="fnref:1020"><a href="#fn:1020" rel="footnote">1020</a></sup></p>
+<p>Something<sup id="fnref:1021"><a href="#fn:1021" rel="footnote">1021</a></sup></p>
+<p>Something<sup id="fnref:1022"><a href="#fn:1022" rel="footnote">1022</a></sup></p>
+<p>Something<sup id="fnref:1023"><a href="#fn:1023" rel="footnote">1023</a></sup></p>
+<p>Something<sup id="fnref:1024"><a href="#fn:1024" rel="footnote">1024</a></sup></p>
+<p>Something<sup id="fnref:1025"><a href="#fn:1025" rel="footnote">1025</a></sup></p>
+<p>Something<sup id="fnref:1026"><a href="#fn:1026" rel="footnote">1026</a></sup></p>
+<p>Something<sup id="fnref:1027"><a href="#fn:1027" rel="footnote">1027</a></sup></p>
+<p>Something<sup id="fnref:1028"><a href="#fn:1028" rel="footnote">1028</a></sup></p>
+<p>Something<sup id="fnref:1029"><a href="#fn:1029" rel="footnote">1029</a></sup></p>
+<p>Something<sup id="fnref:1030"><a href="#fn:1030" rel="footnote">1030</a></sup></p>
+<p>Something<sup id="fnref:1031"><a href="#fn:1031" rel="footnote">1031</a></sup></p>
+<p>Something<sup id="fnref:1032"><a href="#fn:1032" rel="footnote">1032</a></sup></p>
+<p>Something<sup id="fnref:1033"><a href="#fn:1033" rel="footnote">1033</a></sup></p>
+<p>Something<sup id="fnref:1034"><a href="#fn:1034" rel="footnote">1034</a></sup></p>
+<p>Something<sup id="fnref:1035"><a href="#fn:1035" rel="footnote">1035</a></sup></p>
+<p>Something<sup id="fnref:1036"><a href="#fn:1036" rel="footnote">1036</a></sup></p>
+<p>Something<sup id="fnref:1037"><a href="#fn:1037" rel="footnote">1037</a></sup></p>
+<p>Something<sup id="fnref:1038"><a href="#fn:1038" rel="footnote">1038</a></sup></p>
+<p>Something<sup id="fnref:1039"><a href="#fn:1039" rel="footnote">1039</a></sup></p>
+<p>Something<sup id="fnref:1040"><a href="#fn:1040" rel="footnote">1040</a></sup></p>
+<p>Something<sup id="fnref:1041"><a href="#fn:1041" rel="footnote">1041</a></sup></p>
+<p>Something<sup id="fnref:1042"><a href="#fn:1042" rel="footnote">1042</a></sup></p>
+<p>Something<sup id="fnref:1043"><a href="#fn:1043" rel="footnote">1043</a></sup></p>
+<p>Something<sup id="fnref:1044"><a href="#fn:1044" rel="footnote">1044</a></sup></p>
+<p>Something<sup id="fnref:1045"><a href="#fn:1045" rel="footnote">1045</a></sup></p>
+<p>Something<sup id="fnref:1046"><a href="#fn:1046" rel="footnote">1046</a></sup></p>
+<p>Something<sup id="fnref:1047"><a href="#fn:1047" rel="footnote">1047</a></sup></p>
+<p>Something<sup id="fnref:1048"><a href="#fn:1048" rel="footnote">1048</a></sup></p>
+<p>Something<sup id="fnref:1049"><a href="#fn:1049" rel="footnote">1049</a></sup></p>
+<p>Something<sup id="fnref:1050"><a href="#fn:1050" rel="footnote">1050</a></sup></p>
+<p>Something<sup id="fnref:1051"><a href="#fn:1051" rel="footnote">1051</a></sup></p>
+<p>Something<sup id="fnref:1052"><a href="#fn:1052" rel="footnote">1052</a></sup></p>
+<p>Something<sup id="fnref:1053"><a href="#fn:1053" rel="footnote">1053</a></sup></p>
+<p>Something<sup id="fnref:1054"><a href="#fn:1054" rel="footnote">1054</a></sup></p>
+<p>Something<sup id="fnref:1055"><a href="#fn:1055" rel="footnote">1055</a></sup></p>
+<p>Something<sup id="fnref:1056"><a href="#fn:1056" rel="footnote">1056</a></sup></p>
+<p>Something<sup id="fnref:1057"><a href="#fn:1057" rel="footnote">1057</a></sup></p>
+<p>Something<sup id="fnref:1058"><a href="#fn:1058" rel="footnote">1058</a></sup></p>
+<p>Something<sup id="fnref:1059"><a href="#fn:1059" rel="footnote">1059</a></sup></p>
+<p>Something<sup id="fnref:1060"><a href="#fn:1060" rel="footnote">1060</a></sup></p>
+<p>Something<sup id="fnref:1061"><a href="#fn:1061" rel="footnote">1061</a></sup></p>
+<p>Something<sup id="fnref:1062"><a href="#fn:1062" rel="footnote">1062</a></sup></p>
+<p>Something<sup id="fnref:1063"><a href="#fn:1063" rel="footnote">1063</a></sup></p>
+<p>Something<sup id="fnref:1064"><a href="#fn:1064" rel="footnote">1064</a></sup></p>
+<p>Something<sup id="fnref:1065"><a href="#fn:1065" rel="footnote">1065</a></sup></p>
+<p>Something<sup id="fnref:1066"><a href="#fn:1066" rel="footnote">1066</a></sup></p>
+<p>Something<sup id="fnref:1067"><a href="#fn:1067" rel="footnote">1067</a></sup></p>
+<p>Something<sup id="fnref:1068"><a href="#fn:1068" rel="footnote">1068</a></sup></p>
+<p>Something<sup id="fnref:1069"><a href="#fn:1069" rel="footnote">1069</a></sup></p>
+<p>Something<sup id="fnref:1070"><a href="#fn:1070" rel="footnote">1070</a></sup></p>
+<p>Something<sup id="fnref:1071"><a href="#fn:1071" rel="footnote">1071</a></sup></p>
+<p>Something<sup id="fnref:1072"><a href="#fn:1072" rel="footnote">1072</a></sup></p>
+<p>Something<sup id="fnref:1073"><a href="#fn:1073" rel="footnote">1073</a></sup></p>
+<p>Something<sup id="fnref:1074"><a href="#fn:1074" rel="footnote">1074</a></sup></p>
+<p>Something<sup id="fnref:1075"><a href="#fn:1075" rel="footnote">1075</a></sup></p>
+<p>Something<sup id="fnref:1076"><a href="#fn:1076" rel="footnote">1076</a></sup></p>
+<p>Something<sup id="fnref:1077"><a href="#fn:1077" rel="footnote">1077</a></sup></p>
+<p>Something<sup id="fnref:1078"><a href="#fn:1078" rel="footnote">1078</a></sup></p>
+<p>Something<sup id="fnref:1079"><a href="#fn:1079" rel="footnote">1079</a></sup></p>
+<p>Something<sup id="fnref:1080"><a href="#fn:1080" rel="footnote">1080</a></sup></p>
+<p>Something<sup id="fnref:1081"><a href="#fn:1081" rel="footnote">1081</a></sup></p>
+<p>Something<sup id="fnref:1082"><a href="#fn:1082" rel="footnote">1082</a></sup></p>
+<p>Something<sup id="fnref:1083"><a href="#fn:1083" rel="footnote">1083</a></sup></p>
+<p>Something<sup id="fnref:1084"><a href="#fn:1084" rel="footnote">1084</a></sup></p>
+<p>Something<sup id="fnref:1085"><a href="#fn:1085" rel="footnote">1085</a></sup></p>
+<p>Something<sup id="fnref:1086"><a href="#fn:1086" rel="footnote">1086</a></sup></p>
+<p>Something<sup id="fnref:1087"><a href="#fn:1087" rel="footnote">1087</a></sup></p>
+<p>Something<sup id="fnref:1088"><a href="#fn:1088" rel="footnote">1088</a></sup></p>
+<p>Something<sup id="fnref:1089"><a href="#fn:1089" rel="footnote">1089</a></sup></p>
+<p>Something<sup id="fnref:1090"><a href="#fn:1090" rel="footnote">1090</a></sup></p>
+<p>Something<sup id="fnref:1091"><a href="#fn:1091" rel="footnote">1091</a></sup></p>
+<p>Something<sup id="fnref:1092"><a href="#fn:1092" rel="footnote">1092</a></sup></p>
+<p>Something<sup id="fnref:1093"><a href="#fn:1093" rel="footnote">1093</a></sup></p>
+<p>Something<sup id="fnref:1094"><a href="#fn:1094" rel="footnote">1094</a></sup></p>
+<p>Something<sup id="fnref:1095"><a href="#fn:1095" rel="footnote">1095</a></sup></p>
+<p>Something<sup id="fnref:1096"><a href="#fn:1096" rel="footnote">1096</a></sup></p>
+<p>Something<sup id="fnref:1097"><a href="#fn:1097" rel="footnote">1097</a></sup></p>
+<p>Something<sup id="fnref:1098"><a href="#fn:1098" rel="footnote">1098</a></sup></p>
+<p>Something<sup id="fnref:1099"><a href="#fn:1099" rel="footnote">1099</a></sup></p>
+<p>Something<sup id="fnref:1100"><a href="#fn:1100" rel="footnote">1100</a></sup></p>
+<p>Something<sup id="fnref:1101"><a href="#fn:1101" rel="footnote">1101</a></sup></p>
+<p>Something<sup id="fnref:1102"><a href="#fn:1102" rel="footnote">1102</a></sup></p>
+<p>Something<sup id="fnref:1103"><a href="#fn:1103" rel="footnote">1103</a></sup></p>
+<p>Something<sup id="fnref:1104"><a href="#fn:1104" rel="footnote">1104</a></sup></p>
+<p>Something<sup id="fnref:1105"><a href="#fn:1105" rel="footnote">1105</a></sup></p>
+<p>Something<sup id="fnref:1106"><a href="#fn:1106" rel="footnote">1106</a></sup></p>
+<p>Something<sup id="fnref:1107"><a href="#fn:1107" rel="footnote">1107</a></sup></p>
+<p>Something<sup id="fnref:1108"><a href="#fn:1108" rel="footnote">1108</a></sup></p>
+<p>Something<sup id="fnref:1109"><a href="#fn:1109" rel="footnote">1109</a></sup></p>
+<p>Something<sup id="fnref:1110"><a href="#fn:1110" rel="footnote">1110</a></sup></p>
+<p>Something<sup id="fnref:1111"><a href="#fn:1111" rel="footnote">1111</a></sup></p>
+<p>Something<sup id="fnref:1112"><a href="#fn:1112" rel="footnote">1112</a></sup></p>
+<p>Something<sup id="fnref:1113"><a href="#fn:1113" rel="footnote">1113</a></sup></p>
+<p>Something<sup id="fnref:1114"><a href="#fn:1114" rel="footnote">1114</a></sup></p>
+<p>Something<sup id="fnref:1115"><a href="#fn:1115" rel="footnote">1115</a></sup></p>
+<p>Something<sup id="fnref:1116"><a href="#fn:1116" rel="footnote">1116</a></sup></p>
+<p>Something<sup id="fnref:1117"><a href="#fn:1117" rel="footnote">1117</a></sup></p>
+<p>Something<sup id="fnref:1118"><a href="#fn:1118" rel="footnote">1118</a></sup></p>
+<p>Something<sup id="fnref:1119"><a href="#fn:1119" rel="footnote">1119</a></sup></p>
+<p>Something<sup id="fnref:1120"><a href="#fn:1120" rel="footnote">1120</a></sup></p>
+<p>Something<sup id="fnref:1121"><a href="#fn:1121" rel="footnote">1121</a></sup></p>
+<p>Something<sup id="fnref:1122"><a href="#fn:1122" rel="footnote">1122</a></sup></p>
+<p>Something<sup id="fnref:1123"><a href="#fn:1123" rel="footnote">1123</a></sup></p>
+<p>Something<sup id="fnref:1124"><a href="#fn:1124" rel="footnote">1124</a></sup></p>
+<p>Something<sup id="fnref:1125"><a href="#fn:1125" rel="footnote">1125</a></sup></p>
+<p>Something<sup id="fnref:1126"><a href="#fn:1126" rel="footnote">1126</a></sup></p>
+<p>Something<sup id="fnref:1127"><a href="#fn:1127" rel="footnote">1127</a></sup></p>
+<p>Something<sup id="fnref:1128"><a href="#fn:1128" rel="footnote">1128</a></sup></p>
+<p>Something<sup id="fnref:1129"><a href="#fn:1129" rel="footnote">1129</a></sup></p>
+<p>Something<sup id="fnref:1130"><a href="#fn:1130" rel="footnote">1130</a></sup></p>
+<p>Something<sup id="fnref:1131"><a href="#fn:1131" rel="footnote">1131</a></sup></p>
+<p>Something<sup id="fnref:1132"><a href="#fn:1132" rel="footnote">1132</a></sup></p>
+<p>Something<sup id="fnref:1133"><a href="#fn:1133" rel="footnote">1133</a></sup></p>
+<p>Something<sup id="fnref:1134"><a href="#fn:1134" rel="footnote">1134</a></sup></p>
+<p>Something<sup id="fnref:1135"><a href="#fn:1135" rel="footnote">1135</a></sup></p>
+<p>Something<sup id="fnref:1136"><a href="#fn:1136" rel="footnote">1136</a></sup></p>
+<p>Something<sup id="fnref:1137"><a href="#fn:1137" rel="footnote">1137</a></sup></p>
+<p>Something<sup id="fnref:1138"><a href="#fn:1138" rel="footnote">1138</a></sup></p>
+<p>Something<sup id="fnref:1139"><a href="#fn:1139" rel="footnote">1139</a></sup></p>
+<p>Something<sup id="fnref:1140"><a href="#fn:1140" rel="footnote">1140</a></sup></p>
+<p>Something<sup id="fnref:1141"><a href="#fn:1141" rel="footnote">1141</a></sup></p>
+<p>Something<sup id="fnref:1142"><a href="#fn:1142" rel="footnote">1142</a></sup></p>
+<p>Something<sup id="fnref:1143"><a href="#fn:1143" rel="footnote">1143</a></sup></p>
+<p>Something<sup id="fnref:1144"><a href="#fn:1144" rel="footnote">1144</a></sup></p>
+<p>Something<sup id="fnref:1145"><a href="#fn:1145" rel="footnote">1145</a></sup></p>
+<p>Something<sup id="fnref:1146"><a href="#fn:1146" rel="footnote">1146</a></sup></p>
+<p>Something<sup id="fnref:1147"><a href="#fn:1147" rel="footnote">1147</a></sup></p>
+<p>Something<sup id="fnref:1148"><a href="#fn:1148" rel="footnote">1148</a></sup></p>
+<p>Something<sup id="fnref:1149"><a href="#fn:1149" rel="footnote">1149</a></sup></p>
+<p>Something<sup id="fnref:1150"><a href="#fn:1150" rel="footnote">1150</a></sup></p>
+<p>Something<sup id="fnref:1151"><a href="#fn:1151" rel="footnote">1151</a></sup></p>
+<p>Something<sup id="fnref:1152"><a href="#fn:1152" rel="footnote">1152</a></sup></p>
+<p>Something<sup id="fnref:1153"><a href="#fn:1153" rel="footnote">1153</a></sup></p>
+<p>Something<sup id="fnref:1154"><a href="#fn:1154" rel="footnote">1154</a></sup></p>
+<p>Something<sup id="fnref:1155"><a href="#fn:1155" rel="footnote">1155</a></sup></p>
+<p>Something<sup id="fnref:1156"><a href="#fn:1156" rel="footnote">1156</a></sup></p>
+<p>Something<sup id="fnref:1157"><a href="#fn:1157" rel="footnote">1157</a></sup></p>
+<p>Something<sup id="fnref:1158"><a href="#fn:1158" rel="footnote">1158</a></sup></p>
+<p>Something<sup id="fnref:1159"><a href="#fn:1159" rel="footnote">1159</a></sup></p>
+<p>Something<sup id="fnref:1160"><a href="#fn:1160" rel="footnote">1160</a></sup></p>
+<p>Something<sup id="fnref:1161"><a href="#fn:1161" rel="footnote">1161</a></sup></p>
+<p>Something<sup id="fnref:1162"><a href="#fn:1162" rel="footnote">1162</a></sup></p>
+<p>Something<sup id="fnref:1163"><a href="#fn:1163" rel="footnote">1163</a></sup></p>
+<p>Something<sup id="fnref:1164"><a href="#fn:1164" rel="footnote">1164</a></sup></p>
+<p>Something<sup id="fnref:1165"><a href="#fn:1165" rel="footnote">1165</a></sup></p>
+<p>Something<sup id="fnref:1166"><a href="#fn:1166" rel="footnote">1166</a></sup></p>
+<p>Something<sup id="fnref:1167"><a href="#fn:1167" rel="footnote">1167</a></sup></p>
+<p>Something<sup id="fnref:1168"><a href="#fn:1168" rel="footnote">1168</a></sup></p>
+<p>Something<sup id="fnref:1169"><a href="#fn:1169" rel="footnote">1169</a></sup></p>
+<p>Something<sup id="fnref:1170"><a href="#fn:1170" rel="footnote">1170</a></sup></p>
+<p>Something<sup id="fnref:1171"><a href="#fn:1171" rel="footnote">1171</a></sup></p>
+<p>Something<sup id="fnref:1172"><a href="#fn:1172" rel="footnote">1172</a></sup></p>
+<p>Something<sup id="fnref:1173"><a href="#fn:1173" rel="footnote">1173</a></sup></p>
+<p>Something<sup id="fnref:1174"><a href="#fn:1174" rel="footnote">1174</a></sup></p>
+<p>Something<sup id="fnref:1175"><a href="#fn:1175" rel="footnote">1175</a></sup></p>
+<p>Something<sup id="fnref:1176"><a href="#fn:1176" rel="footnote">1176</a></sup></p>
+<p>Something<sup id="fnref:1177"><a href="#fn:1177" rel="footnote">1177</a></sup></p>
+<p>Something<sup id="fnref:1178"><a href="#fn:1178" rel="footnote">1178</a></sup></p>
+<p>Something<sup id="fnref:1179"><a href="#fn:1179" rel="footnote">1179</a></sup></p>
+<p>Something<sup id="fnref:1180"><a href="#fn:1180" rel="footnote">1180</a></sup></p>
+<p>Something<sup id="fnref:1181"><a href="#fn:1181" rel="footnote">1181</a></sup></p>
+<p>Something<sup id="fnref:1182"><a href="#fn:1182" rel="footnote">1182</a></sup></p>
+<p>Something<sup id="fnref:1183"><a href="#fn:1183" rel="footnote">1183</a></sup></p>
+<p>Something<sup id="fnref:1184"><a href="#fn:1184" rel="footnote">1184</a></sup></p>
+<p>Something<sup id="fnref:1185"><a href="#fn:1185" rel="footnote">1185</a></sup></p>
+<p>Something<sup id="fnref:1186"><a href="#fn:1186" rel="footnote">1186</a></sup></p>
+<p>Something<sup id="fnref:1187"><a href="#fn:1187" rel="footnote">1187</a></sup></p>
+<p>Something<sup id="fnref:1188"><a href="#fn:1188" rel="footnote">1188</a></sup></p>
+<p>Something<sup id="fnref:1189"><a href="#fn:1189" rel="footnote">1189</a></sup></p>
+<p>Something<sup id="fnref:1190"><a href="#fn:1190" rel="footnote">1190</a></sup></p>
+<p>Something<sup id="fnref:1191"><a href="#fn:1191" rel="footnote">1191</a></sup></p>
+<p>Something<sup id="fnref:1192"><a href="#fn:1192" rel="footnote">1192</a></sup></p>
+<p>Something<sup id="fnref:1193"><a href="#fn:1193" rel="footnote">1193</a></sup></p>
+<p>Something<sup id="fnref:1194"><a href="#fn:1194" rel="footnote">1194</a></sup></p>
+<p>Something<sup id="fnref:1195"><a href="#fn:1195" rel="footnote">1195</a></sup></p>
+<p>Something<sup id="fnref:1196"><a href="#fn:1196" rel="footnote">1196</a></sup></p>
+<p>Something<sup id="fnref:1197"><a href="#fn:1197" rel="footnote">1197</a></sup></p>
+<p>Something<sup id="fnref:1198"><a href="#fn:1198" rel="footnote">1198</a></sup></p>
+<p>Something<sup id="fnref:1199"><a href="#fn:1199" rel="footnote">1199</a></sup></p>
+<div class="footnote">
+<hr />
+<ol>
+<li id="fn:1">
+<p>Another thing <a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
+</li>
+<li id="fn:2">
+<p>Another thing <a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">↩</a></p>
+</li>
+<li id="fn:3">
+<p>Another thing <a href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">↩</a></p>
+</li>
+<li id="fn:4">
+<p>Another thing <a href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">↩</a></p>
+</li>
+<li id="fn:5">
+<p>Another thing <a href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">↩</a></p>
+</li>
+<li id="fn:6">
+<p>Another thing <a href="#fnref:6" rev="footnote" title="Jump back to footnote 6 in the text">↩</a></p>
+</li>
+<li id="fn:7">
+<p>Another thing <a href="#fnref:7" rev="footnote" title="Jump back to footnote 7 in the text">↩</a></p>
+</li>
+<li id="fn:8">
+<p>Another thing <a href="#fnref:8" rev="footnote" title="Jump back to footnote 8 in the text">↩</a></p>
+</li>
+<li id="fn:9">
+<p>Another thing <a href="#fnref:9" rev="footnote" title="Jump back to footnote 9 in the text">↩</a></p>
+</li>
+<li id="fn:10">
+<p>Another thing <a href="#fnref:10" rev="footnote" title="Jump back to footnote 10 in the text">↩</a></p>
+</li>
+<li id="fn:11">
+<p>Another thing <a href="#fnref:11" rev="footnote" title="Jump back to footnote 11 in the text">↩</a></p>
+</li>
+<li id="fn:12">
+<p>Another thing <a href="#fnref:12" rev="footnote" title="Jump back to footnote 12 in the text">↩</a></p>
+</li>
+<li id="fn:13">
+<p>Another thing <a href="#fnref:13" rev="footnote" title="Jump back to footnote 13 in the text">↩</a></p>
+</li>
+<li id="fn:14">
+<p>Another thing <a href="#fnref:14" rev="footnote" title="Jump back to footnote 14 in the text">↩</a></p>
+</li>
+<li id="fn:15">
+<p>Another thing <a href="#fnref:15" rev="footnote" title="Jump back to footnote 15 in the text">↩</a></p>
+</li>
+<li id="fn:16">
+<p>Another thing <a href="#fnref:16" rev="footnote" title="Jump back to footnote 16 in the text">↩</a></p>
+</li>
+<li id="fn:17">
+<p>Another thing <a href="#fnref:17" rev="footnote" title="Jump back to footnote 17 in the text">↩</a></p>
+</li>
+<li id="fn:18">
+<p>Another thing <a href="#fnref:18" rev="footnote" title="Jump back to footnote 18 in the text">↩</a></p>
+</li>
+<li id="fn:19">
+<p>Another thing <a href="#fnref:19" rev="footnote" title="Jump back to footnote 19 in the text">↩</a></p>
+</li>
+<li id="fn:20">
+<p>Another thing <a href="#fnref:20" rev="footnote" title="Jump back to footnote 20 in the text">↩</a></p>
+</li>
+<li id="fn:21">
+<p>Another thing <a href="#fnref:21" rev="footnote" title="Jump back to footnote 21 in the text">↩</a></p>
+</li>
+<li id="fn:22">
+<p>Another thing <a href="#fnref:22" rev="footnote" title="Jump back to footnote 22 in the text">↩</a></p>
+</li>
+<li id="fn:23">
+<p>Another thing <a href="#fnref:23" rev="footnote" title="Jump back to footnote 23 in the text">↩</a></p>
+</li>
+<li id="fn:24">
+<p>Another thing <a href="#fnref:24" rev="footnote" title="Jump back to footnote 24 in the text">↩</a></p>
+</li>
+<li id="fn:25">
+<p>Another thing <a href="#fnref:25" rev="footnote" title="Jump back to footnote 25 in the text">↩</a></p>
+</li>
+<li id="fn:26">
+<p>Another thing <a href="#fnref:26" rev="footnote" title="Jump back to footnote 26 in the text">↩</a></p>
+</li>
+<li id="fn:27">
+<p>Another thing <a href="#fnref:27" rev="footnote" title="Jump back to footnote 27 in the text">↩</a></p>
+</li>
+<li id="fn:28">
+<p>Another thing <a href="#fnref:28" rev="footnote" title="Jump back to footnote 28 in the text">↩</a></p>
+</li>
+<li id="fn:29">
+<p>Another thing <a href="#fnref:29" rev="footnote" title="Jump back to footnote 29 in the text">↩</a></p>
+</li>
+<li id="fn:30">
+<p>Another thing <a href="#fnref:30" rev="footnote" title="Jump back to footnote 30 in the text">↩</a></p>
+</li>
+<li id="fn:31">
+<p>Another thing <a href="#fnref:31" rev="footnote" title="Jump back to footnote 31 in the text">↩</a></p>
+</li>
+<li id="fn:32">
+<p>Another thing <a href="#fnref:32" rev="footnote" title="Jump back to footnote 32 in the text">↩</a></p>
+</li>
+<li id="fn:33">
+<p>Another thing <a href="#fnref:33" rev="footnote" title="Jump back to footnote 33 in the text">↩</a></p>
+</li>
+<li id="fn:34">
+<p>Another thing <a href="#fnref:34" rev="footnote" title="Jump back to footnote 34 in the text">↩</a></p>
+</li>
+<li id="fn:35">
+<p>Another thing <a href="#fnref:35" rev="footnote" title="Jump back to footnote 35 in the text">↩</a></p>
+</li>
+<li id="fn:36">
+<p>Another thing <a href="#fnref:36" rev="footnote" title="Jump back to footnote 36 in the text">↩</a></p>
+</li>
+<li id="fn:37">
+<p>Another thing <a href="#fnref:37" rev="footnote" title="Jump back to footnote 37 in the text">↩</a></p>
+</li>
+<li id="fn:38">
+<p>Another thing <a href="#fnref:38" rev="footnote" title="Jump back to footnote 38 in the text">↩</a></p>
+</li>
+<li id="fn:39">
+<p>Another thing <a href="#fnref:39" rev="footnote" title="Jump back to footnote 39 in the text">↩</a></p>
+</li>
+<li id="fn:40">
+<p>Another thing <a href="#fnref:40" rev="footnote" title="Jump back to footnote 40 in the text">↩</a></p>
+</li>
+<li id="fn:41">
+<p>Another thing <a href="#fnref:41" rev="footnote" title="Jump back to footnote 41 in the text">↩</a></p>
+</li>
+<li id="fn:42">
+<p>Another thing <a href="#fnref:42" rev="footnote" title="Jump back to footnote 42 in the text">↩</a></p>
+</li>
+<li id="fn:43">
+<p>Another thing <a href="#fnref:43" rev="footnote" title="Jump back to footnote 43 in the text">↩</a></p>
+</li>
+<li id="fn:44">
+<p>Another thing <a href="#fnref:44" rev="footnote" title="Jump back to footnote 44 in the text">↩</a></p>
+</li>
+<li id="fn:45">
+<p>Another thing <a href="#fnref:45" rev="footnote" title="Jump back to footnote 45 in the text">↩</a></p>
+</li>
+<li id="fn:46">
+<p>Another thing <a href="#fnref:46" rev="footnote" title="Jump back to footnote 46 in the text">↩</a></p>
+</li>
+<li id="fn:47">
+<p>Another thing <a href="#fnref:47" rev="footnote" title="Jump back to footnote 47 in the text">↩</a></p>
+</li>
+<li id="fn:48">
+<p>Another thing <a href="#fnref:48" rev="footnote" title="Jump back to footnote 48 in the text">↩</a></p>
+</li>
+<li id="fn:49">
+<p>Another thing <a href="#fnref:49" rev="footnote" title="Jump back to footnote 49 in the text">↩</a></p>
+</li>
+<li id="fn:50">
+<p>Another thing <a href="#fnref:50" rev="footnote" title="Jump back to footnote 50 in the text">↩</a></p>
+</li>
+<li id="fn:51">
+<p>Another thing <a href="#fnref:51" rev="footnote" title="Jump back to footnote 51 in the text">↩</a></p>
+</li>
+<li id="fn:52">
+<p>Another thing <a href="#fnref:52" rev="footnote" title="Jump back to footnote 52 in the text">↩</a></p>
+</li>
+<li id="fn:53">
+<p>Another thing <a href="#fnref:53" rev="footnote" title="Jump back to footnote 53 in the text">↩</a></p>
+</li>
+<li id="fn:54">
+<p>Another thing <a href="#fnref:54" rev="footnote" title="Jump back to footnote 54 in the text">↩</a></p>
+</li>
+<li id="fn:55">
+<p>Another thing <a href="#fnref:55" rev="footnote" title="Jump back to footnote 55 in the text">↩</a></p>
+</li>
+<li id="fn:56">
+<p>Another thing <a href="#fnref:56" rev="footnote" title="Jump back to footnote 56 in the text">↩</a></p>
+</li>
+<li id="fn:57">
+<p>Another thing <a href="#fnref:57" rev="footnote" title="Jump back to footnote 57 in the text">↩</a></p>
+</li>
+<li id="fn:58">
+<p>Another thing <a href="#fnref:58" rev="footnote" title="Jump back to footnote 58 in the text">↩</a></p>
+</li>
+<li id="fn:59">
+<p>Another thing <a href="#fnref:59" rev="footnote" title="Jump back to footnote 59 in the text">↩</a></p>
+</li>
+<li id="fn:60">
+<p>Another thing <a href="#fnref:60" rev="footnote" title="Jump back to footnote 60 in the text">↩</a></p>
+</li>
+<li id="fn:61">
+<p>Another thing <a href="#fnref:61" rev="footnote" title="Jump back to footnote 61 in the text">↩</a></p>
+</li>
+<li id="fn:62">
+<p>Another thing <a href="#fnref:62" rev="footnote" title="Jump back to footnote 62 in the text">↩</a></p>
+</li>
+<li id="fn:63">
+<p>Another thing <a href="#fnref:63" rev="footnote" title="Jump back to footnote 63 in the text">↩</a></p>
+</li>
+<li id="fn:64">
+<p>Another thing <a href="#fnref:64" rev="footnote" title="Jump back to footnote 64 in the text">↩</a></p>
+</li>
+<li id="fn:65">
+<p>Another thing <a href="#fnref:65" rev="footnote" title="Jump back to footnote 65 in the text">↩</a></p>
+</li>
+<li id="fn:66">
+<p>Another thing <a href="#fnref:66" rev="footnote" title="Jump back to footnote 66 in the text">↩</a></p>
+</li>
+<li id="fn:67">
+<p>Another thing <a href="#fnref:67" rev="footnote" title="Jump back to footnote 67 in the text">↩</a></p>
+</li>
+<li id="fn:68">
+<p>Another thing <a href="#fnref:68" rev="footnote" title="Jump back to footnote 68 in the text">↩</a></p>
+</li>
+<li id="fn:69">
+<p>Another thing <a href="#fnref:69" rev="footnote" title="Jump back to footnote 69 in the text">↩</a></p>
+</li>
+<li id="fn:70">
+<p>Another thing <a href="#fnref:70" rev="footnote" title="Jump back to footnote 70 in the text">↩</a></p>
+</li>
+<li id="fn:71">
+<p>Another thing <a href="#fnref:71" rev="footnote" title="Jump back to footnote 71 in the text">↩</a></p>
+</li>
+<li id="fn:72">
+<p>Another thing <a href="#fnref:72" rev="footnote" title="Jump back to footnote 72 in the text">↩</a></p>
+</li>
+<li id="fn:73">
+<p>Another thing <a href="#fnref:73" rev="footnote" title="Jump back to footnote 73 in the text">↩</a></p>
+</li>
+<li id="fn:74">
+<p>Another thing <a href="#fnref:74" rev="footnote" title="Jump back to footnote 74 in the text">↩</a></p>
+</li>
+<li id="fn:75">
+<p>Another thing <a href="#fnref:75" rev="footnote" title="Jump back to footnote 75 in the text">↩</a></p>
+</li>
+<li id="fn:76">
+<p>Another thing <a href="#fnref:76" rev="footnote" title="Jump back to footnote 76 in the text">↩</a></p>
+</li>
+<li id="fn:77">
+<p>Another thing <a href="#fnref:77" rev="footnote" title="Jump back to footnote 77 in the text">↩</a></p>
+</li>
+<li id="fn:78">
+<p>Another thing <a href="#fnref:78" rev="footnote" title="Jump back to footnote 78 in the text">↩</a></p>
+</li>
+<li id="fn:79">
+<p>Another thing <a href="#fnref:79" rev="footnote" title="Jump back to footnote 79 in the text">↩</a></p>
+</li>
+<li id="fn:80">
+<p>Another thing <a href="#fnref:80" rev="footnote" title="Jump back to footnote 80 in the text">↩</a></p>
+</li>
+<li id="fn:81">
+<p>Another thing <a href="#fnref:81" rev="footnote" title="Jump back to footnote 81 in the text">↩</a></p>
+</li>
+<li id="fn:82">
+<p>Another thing <a href="#fnref:82" rev="footnote" title="Jump back to footnote 82 in the text">↩</a></p>
+</li>
+<li id="fn:83">
+<p>Another thing <a href="#fnref:83" rev="footnote" title="Jump back to footnote 83 in the text">↩</a></p>
+</li>
+<li id="fn:84">
+<p>Another thing <a href="#fnref:84" rev="footnote" title="Jump back to footnote 84 in the text">↩</a></p>
+</li>
+<li id="fn:85">
+<p>Another thing <a href="#fnref:85" rev="footnote" title="Jump back to footnote 85 in the text">↩</a></p>
+</li>
+<li id="fn:86">
+<p>Another thing <a href="#fnref:86" rev="footnote" title="Jump back to footnote 86 in the text">↩</a></p>
+</li>
+<li id="fn:87">
+<p>Another thing <a href="#fnref:87" rev="footnote" title="Jump back to footnote 87 in the text">↩</a></p>
+</li>
+<li id="fn:88">
+<p>Another thing <a href="#fnref:88" rev="footnote" title="Jump back to footnote 88 in the text">↩</a></p>
+</li>
+<li id="fn:89">
+<p>Another thing <a href="#fnref:89" rev="footnote" title="Jump back to footnote 89 in the text">↩</a></p>
+</li>
+<li id="fn:90">
+<p>Another thing <a href="#fnref:90" rev="footnote" title="Jump back to footnote 90 in the text">↩</a></p>
+</li>
+<li id="fn:91">
+<p>Another thing <a href="#fnref:91" rev="footnote" title="Jump back to footnote 91 in the text">↩</a></p>
+</li>
+<li id="fn:92">
+<p>Another thing <a href="#fnref:92" rev="footnote" title="Jump back to footnote 92 in the text">↩</a></p>
+</li>
+<li id="fn:93">
+<p>Another thing <a href="#fnref:93" rev="footnote" title="Jump back to footnote 93 in the text">↩</a></p>
+</li>
+<li id="fn:94">
+<p>Another thing <a href="#fnref:94" rev="footnote" title="Jump back to footnote 94 in the text">↩</a></p>
+</li>
+<li id="fn:95">
+<p>Another thing <a href="#fnref:95" rev="footnote" title="Jump back to footnote 95 in the text">↩</a></p>
+</li>
+<li id="fn:96">
+<p>Another thing <a href="#fnref:96" rev="footnote" title="Jump back to footnote 96 in the text">↩</a></p>
+</li>
+<li id="fn:97">
+<p>Another thing <a href="#fnref:97" rev="footnote" title="Jump back to footnote 97 in the text">↩</a></p>
+</li>
+<li id="fn:98">
+<p>Another thing <a href="#fnref:98" rev="footnote" title="Jump back to footnote 98 in the text">↩</a></p>
+</li>
+<li id="fn:99">
+<p>Another thing <a href="#fnref:99" rev="footnote" title="Jump back to footnote 99 in the text">↩</a></p>
+</li>
+<li id="fn:100">
+<p>Another thing <a href="#fnref:100" rev="footnote" title="Jump back to footnote 100 in the text">↩</a></p>
+</li>
+<li id="fn:101">
+<p>Another thing <a href="#fnref:101" rev="footnote" title="Jump back to footnote 101 in the text">↩</a></p>
+</li>
+<li id="fn:102">
+<p>Another thing <a href="#fnref:102" rev="footnote" title="Jump back to footnote 102 in the text">↩</a></p>
+</li>
+<li id="fn:103">
+<p>Another thing <a href="#fnref:103" rev="footnote" title="Jump back to footnote 103 in the text">↩</a></p>
+</li>
+<li id="fn:104">
+<p>Another thing <a href="#fnref:104" rev="footnote" title="Jump back to footnote 104 in the text">↩</a></p>
+</li>
+<li id="fn:105">
+<p>Another thing <a href="#fnref:105" rev="footnote" title="Jump back to footnote 105 in the text">↩</a></p>
+</li>
+<li id="fn:106">
+<p>Another thing <a href="#fnref:106" rev="footnote" title="Jump back to footnote 106 in the text">↩</a></p>
+</li>
+<li id="fn:107">
+<p>Another thing <a href="#fnref:107" rev="footnote" title="Jump back to footnote 107 in the text">↩</a></p>
+</li>
+<li id="fn:108">
+<p>Another thing <a href="#fnref:108" rev="footnote" title="Jump back to footnote 108 in the text">↩</a></p>
+</li>
+<li id="fn:109">
+<p>Another thing <a href="#fnref:109" rev="footnote" title="Jump back to footnote 109 in the text">↩</a></p>
+</li>
+<li id="fn:110">
+<p>Another thing <a href="#fnref:110" rev="footnote" title="Jump back to footnote 110 in the text">↩</a></p>
+</li>
+<li id="fn:111">
+<p>Another thing <a href="#fnref:111" rev="footnote" title="Jump back to footnote 111 in the text">↩</a></p>
+</li>
+<li id="fn:112">
+<p>Another thing <a href="#fnref:112" rev="footnote" title="Jump back to footnote 112 in the text">↩</a></p>
+</li>
+<li id="fn:113">
+<p>Another thing <a href="#fnref:113" rev="footnote" title="Jump back to footnote 113 in the text">↩</a></p>
+</li>
+<li id="fn:114">
+<p>Another thing <a href="#fnref:114" rev="footnote" title="Jump back to footnote 114 in the text">↩</a></p>
+</li>
+<li id="fn:115">
+<p>Another thing <a href="#fnref:115" rev="footnote" title="Jump back to footnote 115 in the text">↩</a></p>
+</li>
+<li id="fn:116">
+<p>Another thing <a href="#fnref:116" rev="footnote" title="Jump back to footnote 116 in the text">↩</a></p>
+</li>
+<li id="fn:117">
+<p>Another thing <a href="#fnref:117" rev="footnote" title="Jump back to footnote 117 in the text">↩</a></p>
+</li>
+<li id="fn:118">
+<p>Another thing <a href="#fnref:118" rev="footnote" title="Jump back to footnote 118 in the text">↩</a></p>
+</li>
+<li id="fn:119">
+<p>Another thing <a href="#fnref:119" rev="footnote" title="Jump back to footnote 119 in the text">↩</a></p>
+</li>
+<li id="fn:120">
+<p>Another thing <a href="#fnref:120" rev="footnote" title="Jump back to footnote 120 in the text">↩</a></p>
+</li>
+<li id="fn:121">
+<p>Another thing <a href="#fnref:121" rev="footnote" title="Jump back to footnote 121 in the text">↩</a></p>
+</li>
+<li id="fn:122">
+<p>Another thing <a href="#fnref:122" rev="footnote" title="Jump back to footnote 122 in the text">↩</a></p>
+</li>
+<li id="fn:123">
+<p>Another thing <a href="#fnref:123" rev="footnote" title="Jump back to footnote 123 in the text">↩</a></p>
+</li>
+<li id="fn:124">
+<p>Another thing <a href="#fnref:124" rev="footnote" title="Jump back to footnote 124 in the text">↩</a></p>
+</li>
+<li id="fn:125">
+<p>Another thing <a href="#fnref:125" rev="footnote" title="Jump back to footnote 125 in the text">↩</a></p>
+</li>
+<li id="fn:126">
+<p>Another thing <a href="#fnref:126" rev="footnote" title="Jump back to footnote 126 in the text">↩</a></p>
+</li>
+<li id="fn:127">
+<p>Another thing <a href="#fnref:127" rev="footnote" title="Jump back to footnote 127 in the text">↩</a></p>
+</li>
+<li id="fn:128">
+<p>Another thing <a href="#fnref:128" rev="footnote" title="Jump back to footnote 128 in the text">↩</a></p>
+</li>
+<li id="fn:129">
+<p>Another thing <a href="#fnref:129" rev="footnote" title="Jump back to footnote 129 in the text">↩</a></p>
+</li>
+<li id="fn:130">
+<p>Another thing <a href="#fnref:130" rev="footnote" title="Jump back to footnote 130 in the text">↩</a></p>
+</li>
+<li id="fn:131">
+<p>Another thing <a href="#fnref:131" rev="footnote" title="Jump back to footnote 131 in the text">↩</a></p>
+</li>
+<li id="fn:132">
+<p>Another thing <a href="#fnref:132" rev="footnote" title="Jump back to footnote 132 in the text">↩</a></p>
+</li>
+<li id="fn:133">
+<p>Another thing <a href="#fnref:133" rev="footnote" title="Jump back to footnote 133 in the text">↩</a></p>
+</li>
+<li id="fn:134">
+<p>Another thing <a href="#fnref:134" rev="footnote" title="Jump back to footnote 134 in the text">↩</a></p>
+</li>
+<li id="fn:135">
+<p>Another thing <a href="#fnref:135" rev="footnote" title="Jump back to footnote 135 in the text">↩</a></p>
+</li>
+<li id="fn:136">
+<p>Another thing <a href="#fnref:136" rev="footnote" title="Jump back to footnote 136 in the text">↩</a></p>
+</li>
+<li id="fn:137">
+<p>Another thing <a href="#fnref:137" rev="footnote" title="Jump back to footnote 137 in the text">↩</a></p>
+</li>
+<li id="fn:138">
+<p>Another thing <a href="#fnref:138" rev="footnote" title="Jump back to footnote 138 in the text">↩</a></p>
+</li>
+<li id="fn:139">
+<p>Another thing <a href="#fnref:139" rev="footnote" title="Jump back to footnote 139 in the text">↩</a></p>
+</li>
+<li id="fn:140">
+<p>Another thing <a href="#fnref:140" rev="footnote" title="Jump back to footnote 140 in the text">↩</a></p>
+</li>
+<li id="fn:141">
+<p>Another thing <a href="#fnref:141" rev="footnote" title="Jump back to footnote 141 in the text">↩</a></p>
+</li>
+<li id="fn:142">
+<p>Another thing <a href="#fnref:142" rev="footnote" title="Jump back to footnote 142 in the text">↩</a></p>
+</li>
+<li id="fn:143">
+<p>Another thing <a href="#fnref:143" rev="footnote" title="Jump back to footnote 143 in the text">↩</a></p>
+</li>
+<li id="fn:144">
+<p>Another thing <a href="#fnref:144" rev="footnote" title="Jump back to footnote 144 in the text">↩</a></p>
+</li>
+<li id="fn:145">
+<p>Another thing <a href="#fnref:145" rev="footnote" title="Jump back to footnote 145 in the text">↩</a></p>
+</li>
+<li id="fn:146">
+<p>Another thing <a href="#fnref:146" rev="footnote" title="Jump back to footnote 146 in the text">↩</a></p>
+</li>
+<li id="fn:147">
+<p>Another thing <a href="#fnref:147" rev="footnote" title="Jump back to footnote 147 in the text">↩</a></p>
+</li>
+<li id="fn:148">
+<p>Another thing <a href="#fnref:148" rev="footnote" title="Jump back to footnote 148 in the text">↩</a></p>
+</li>
+<li id="fn:149">
+<p>Another thing <a href="#fnref:149" rev="footnote" title="Jump back to footnote 149 in the text">↩</a></p>
+</li>
+<li id="fn:150">
+<p>Another thing <a href="#fnref:150" rev="footnote" title="Jump back to footnote 150 in the text">↩</a></p>
+</li>
+<li id="fn:151">
+<p>Another thing <a href="#fnref:151" rev="footnote" title="Jump back to footnote 151 in the text">↩</a></p>
+</li>
+<li id="fn:152">
+<p>Another thing <a href="#fnref:152" rev="footnote" title="Jump back to footnote 152 in the text">↩</a></p>
+</li>
+<li id="fn:153">
+<p>Another thing <a href="#fnref:153" rev="footnote" title="Jump back to footnote 153 in the text">↩</a></p>
+</li>
+<li id="fn:154">
+<p>Another thing <a href="#fnref:154" rev="footnote" title="Jump back to footnote 154 in the text">↩</a></p>
+</li>
+<li id="fn:155">
+<p>Another thing <a href="#fnref:155" rev="footnote" title="Jump back to footnote 155 in the text">↩</a></p>
+</li>
+<li id="fn:156">
+<p>Another thing <a href="#fnref:156" rev="footnote" title="Jump back to footnote 156 in the text">↩</a></p>
+</li>
+<li id="fn:157">
+<p>Another thing <a href="#fnref:157" rev="footnote" title="Jump back to footnote 157 in the text">↩</a></p>
+</li>
+<li id="fn:158">
+<p>Another thing <a href="#fnref:158" rev="footnote" title="Jump back to footnote 158 in the text">↩</a></p>
+</li>
+<li id="fn:159">
+<p>Another thing <a href="#fnref:159" rev="footnote" title="Jump back to footnote 159 in the text">↩</a></p>
+</li>
+<li id="fn:160">
+<p>Another thing <a href="#fnref:160" rev="footnote" title="Jump back to footnote 160 in the text">↩</a></p>
+</li>
+<li id="fn:161">
+<p>Another thing <a href="#fnref:161" rev="footnote" title="Jump back to footnote 161 in the text">↩</a></p>
+</li>
+<li id="fn:162">
+<p>Another thing <a href="#fnref:162" rev="footnote" title="Jump back to footnote 162 in the text">↩</a></p>
+</li>
+<li id="fn:163">
+<p>Another thing <a href="#fnref:163" rev="footnote" title="Jump back to footnote 163 in the text">↩</a></p>
+</li>
+<li id="fn:164">
+<p>Another thing <a href="#fnref:164" rev="footnote" title="Jump back to footnote 164 in the text">↩</a></p>
+</li>
+<li id="fn:165">
+<p>Another thing <a href="#fnref:165" rev="footnote" title="Jump back to footnote 165 in the text">↩</a></p>
+</li>
+<li id="fn:166">
+<p>Another thing <a href="#fnref:166" rev="footnote" title="Jump back to footnote 166 in the text">↩</a></p>
+</li>
+<li id="fn:167">
+<p>Another thing <a href="#fnref:167" rev="footnote" title="Jump back to footnote 167 in the text">↩</a></p>
+</li>
+<li id="fn:168">
+<p>Another thing <a href="#fnref:168" rev="footnote" title="Jump back to footnote 168 in the text">↩</a></p>
+</li>
+<li id="fn:169">
+<p>Another thing <a href="#fnref:169" rev="footnote" title="Jump back to footnote 169 in the text">↩</a></p>
+</li>
+<li id="fn:170">
+<p>Another thing <a href="#fnref:170" rev="footnote" title="Jump back to footnote 170 in the text">↩</a></p>
+</li>
+<li id="fn:171">
+<p>Another thing <a href="#fnref:171" rev="footnote" title="Jump back to footnote 171 in the text">↩</a></p>
+</li>
+<li id="fn:172">
+<p>Another thing <a href="#fnref:172" rev="footnote" title="Jump back to footnote 172 in the text">↩</a></p>
+</li>
+<li id="fn:173">
+<p>Another thing <a href="#fnref:173" rev="footnote" title="Jump back to footnote 173 in the text">↩</a></p>
+</li>
+<li id="fn:174">
+<p>Another thing <a href="#fnref:174" rev="footnote" title="Jump back to footnote 174 in the text">↩</a></p>
+</li>
+<li id="fn:175">
+<p>Another thing <a href="#fnref:175" rev="footnote" title="Jump back to footnote 175 in the text">↩</a></p>
+</li>
+<li id="fn:176">
+<p>Another thing <a href="#fnref:176" rev="footnote" title="Jump back to footnote 176 in the text">↩</a></p>
+</li>
+<li id="fn:177">
+<p>Another thing <a href="#fnref:177" rev="footnote" title="Jump back to footnote 177 in the text">↩</a></p>
+</li>
+<li id="fn:178">
+<p>Another thing <a href="#fnref:178" rev="footnote" title="Jump back to footnote 178 in the text">↩</a></p>
+</li>
+<li id="fn:179">
+<p>Another thing <a href="#fnref:179" rev="footnote" title="Jump back to footnote 179 in the text">↩</a></p>
+</li>
+<li id="fn:180">
+<p>Another thing <a href="#fnref:180" rev="footnote" title="Jump back to footnote 180 in the text">↩</a></p>
+</li>
+<li id="fn:181">
+<p>Another thing <a href="#fnref:181" rev="footnote" title="Jump back to footnote 181 in the text">↩</a></p>
+</li>
+<li id="fn:182">
+<p>Another thing <a href="#fnref:182" rev="footnote" title="Jump back to footnote 182 in the text">↩</a></p>
+</li>
+<li id="fn:183">
+<p>Another thing <a href="#fnref:183" rev="footnote" title="Jump back to footnote 183 in the text">↩</a></p>
+</li>
+<li id="fn:184">
+<p>Another thing <a href="#fnref:184" rev="footnote" title="Jump back to footnote 184 in the text">↩</a></p>
+</li>
+<li id="fn:185">
+<p>Another thing <a href="#fnref:185" rev="footnote" title="Jump back to footnote 185 in the text">↩</a></p>
+</li>
+<li id="fn:186">
+<p>Another thing <a href="#fnref:186" rev="footnote" title="Jump back to footnote 186 in the text">↩</a></p>
+</li>
+<li id="fn:187">
+<p>Another thing <a href="#fnref:187" rev="footnote" title="Jump back to footnote 187 in the text">↩</a></p>
+</li>
+<li id="fn:188">
+<p>Another thing <a href="#fnref:188" rev="footnote" title="Jump back to footnote 188 in the text">↩</a></p>
+</li>
+<li id="fn:189">
+<p>Another thing <a href="#fnref:189" rev="footnote" title="Jump back to footnote 189 in the text">↩</a></p>
+</li>
+<li id="fn:190">
+<p>Another thing <a href="#fnref:190" rev="footnote" title="Jump back to footnote 190 in the text">↩</a></p>
+</li>
+<li id="fn:191">
+<p>Another thing <a href="#fnref:191" rev="footnote" title="Jump back to footnote 191 in the text">↩</a></p>
+</li>
+<li id="fn:192">
+<p>Another thing <a href="#fnref:192" rev="footnote" title="Jump back to footnote 192 in the text">↩</a></p>
+</li>
+<li id="fn:193">
+<p>Another thing <a href="#fnref:193" rev="footnote" title="Jump back to footnote 193 in the text">↩</a></p>
+</li>
+<li id="fn:194">
+<p>Another thing <a href="#fnref:194" rev="footnote" title="Jump back to footnote 194 in the text">↩</a></p>
+</li>
+<li id="fn:195">
+<p>Another thing <a href="#fnref:195" rev="footnote" title="Jump back to footnote 195 in the text">↩</a></p>
+</li>
+<li id="fn:196">
+<p>Another thing <a href="#fnref:196" rev="footnote" title="Jump back to footnote 196 in the text">↩</a></p>
+</li>
+<li id="fn:197">
+<p>Another thing <a href="#fnref:197" rev="footnote" title="Jump back to footnote 197 in the text">↩</a></p>
+</li>
+<li id="fn:198">
+<p>Another thing <a href="#fnref:198" rev="footnote" title="Jump back to footnote 198 in the text">↩</a></p>
+</li>
+<li id="fn:199">
+<p>Another thing <a href="#fnref:199" rev="footnote" title="Jump back to footnote 199 in the text">↩</a></p>
+</li>
+<li id="fn:200">
+<p>Another thing <a href="#fnref:200" rev="footnote" title="Jump back to footnote 200 in the text">↩</a></p>
+</li>
+<li id="fn:201">
+<p>Another thing <a href="#fnref:201" rev="footnote" title="Jump back to footnote 201 in the text">↩</a></p>
+</li>
+<li id="fn:202">
+<p>Another thing <a href="#fnref:202" rev="footnote" title="Jump back to footnote 202 in the text">↩</a></p>
+</li>
+<li id="fn:203">
+<p>Another thing <a href="#fnref:203" rev="footnote" title="Jump back to footnote 203 in the text">↩</a></p>
+</li>
+<li id="fn:204">
+<p>Another thing <a href="#fnref:204" rev="footnote" title="Jump back to footnote 204 in the text">↩</a></p>
+</li>
+<li id="fn:205">
+<p>Another thing <a href="#fnref:205" rev="footnote" title="Jump back to footnote 205 in the text">↩</a></p>
+</li>
+<li id="fn:206">
+<p>Another thing <a href="#fnref:206" rev="footnote" title="Jump back to footnote 206 in the text">↩</a></p>
+</li>
+<li id="fn:207">
+<p>Another thing <a href="#fnref:207" rev="footnote" title="Jump back to footnote 207 in the text">↩</a></p>
+</li>
+<li id="fn:208">
+<p>Another thing <a href="#fnref:208" rev="footnote" title="Jump back to footnote 208 in the text">↩</a></p>
+</li>
+<li id="fn:209">
+<p>Another thing <a href="#fnref:209" rev="footnote" title="Jump back to footnote 209 in the text">↩</a></p>
+</li>
+<li id="fn:210">
+<p>Another thing <a href="#fnref:210" rev="footnote" title="Jump back to footnote 210 in the text">↩</a></p>
+</li>
+<li id="fn:211">
+<p>Another thing <a href="#fnref:211" rev="footnote" title="Jump back to footnote 211 in the text">↩</a></p>
+</li>
+<li id="fn:212">
+<p>Another thing <a href="#fnref:212" rev="footnote" title="Jump back to footnote 212 in the text">↩</a></p>
+</li>
+<li id="fn:213">
+<p>Another thing <a href="#fnref:213" rev="footnote" title="Jump back to footnote 213 in the text">↩</a></p>
+</li>
+<li id="fn:214">
+<p>Another thing <a href="#fnref:214" rev="footnote" title="Jump back to footnote 214 in the text">↩</a></p>
+</li>
+<li id="fn:215">
+<p>Another thing <a href="#fnref:215" rev="footnote" title="Jump back to footnote 215 in the text">↩</a></p>
+</li>
+<li id="fn:216">
+<p>Another thing <a href="#fnref:216" rev="footnote" title="Jump back to footnote 216 in the text">↩</a></p>
+</li>
+<li id="fn:217">
+<p>Another thing <a href="#fnref:217" rev="footnote" title="Jump back to footnote 217 in the text">↩</a></p>
+</li>
+<li id="fn:218">
+<p>Another thing <a href="#fnref:218" rev="footnote" title="Jump back to footnote 218 in the text">↩</a></p>
+</li>
+<li id="fn:219">
+<p>Another thing <a href="#fnref:219" rev="footnote" title="Jump back to footnote 219 in the text">↩</a></p>
+</li>
+<li id="fn:220">
+<p>Another thing <a href="#fnref:220" rev="footnote" title="Jump back to footnote 220 in the text">↩</a></p>
+</li>
+<li id="fn:221">
+<p>Another thing <a href="#fnref:221" rev="footnote" title="Jump back to footnote 221 in the text">↩</a></p>
+</li>
+<li id="fn:222">
+<p>Another thing <a href="#fnref:222" rev="footnote" title="Jump back to footnote 222 in the text">↩</a></p>
+</li>
+<li id="fn:223">
+<p>Another thing <a href="#fnref:223" rev="footnote" title="Jump back to footnote 223 in the text">↩</a></p>
+</li>
+<li id="fn:224">
+<p>Another thing <a href="#fnref:224" rev="footnote" title="Jump back to footnote 224 in the text">↩</a></p>
+</li>
+<li id="fn:225">
+<p>Another thing <a href="#fnref:225" rev="footnote" title="Jump back to footnote 225 in the text">↩</a></p>
+</li>
+<li id="fn:226">
+<p>Another thing <a href="#fnref:226" rev="footnote" title="Jump back to footnote 226 in the text">↩</a></p>
+</li>
+<li id="fn:227">
+<p>Another thing <a href="#fnref:227" rev="footnote" title="Jump back to footnote 227 in the text">↩</a></p>
+</li>
+<li id="fn:228">
+<p>Another thing <a href="#fnref:228" rev="footnote" title="Jump back to footnote 228 in the text">↩</a></p>
+</li>
+<li id="fn:229">
+<p>Another thing <a href="#fnref:229" rev="footnote" title="Jump back to footnote 229 in the text">↩</a></p>
+</li>
+<li id="fn:230">
+<p>Another thing <a href="#fnref:230" rev="footnote" title="Jump back to footnote 230 in the text">↩</a></p>
+</li>
+<li id="fn:231">
+<p>Another thing <a href="#fnref:231" rev="footnote" title="Jump back to footnote 231 in the text">↩</a></p>
+</li>
+<li id="fn:232">
+<p>Another thing <a href="#fnref:232" rev="footnote" title="Jump back to footnote 232 in the text">↩</a></p>
+</li>
+<li id="fn:233">
+<p>Another thing <a href="#fnref:233" rev="footnote" title="Jump back to footnote 233 in the text">↩</a></p>
+</li>
+<li id="fn:234">
+<p>Another thing <a href="#fnref:234" rev="footnote" title="Jump back to footnote 234 in the text">↩</a></p>
+</li>
+<li id="fn:235">
+<p>Another thing <a href="#fnref:235" rev="footnote" title="Jump back to footnote 235 in the text">↩</a></p>
+</li>
+<li id="fn:236">
+<p>Another thing <a href="#fnref:236" rev="footnote" title="Jump back to footnote 236 in the text">↩</a></p>
+</li>
+<li id="fn:237">
+<p>Another thing <a href="#fnref:237" rev="footnote" title="Jump back to footnote 237 in the text">↩</a></p>
+</li>
+<li id="fn:238">
+<p>Another thing <a href="#fnref:238" rev="footnote" title="Jump back to footnote 238 in the text">↩</a></p>
+</li>
+<li id="fn:239">
+<p>Another thing <a href="#fnref:239" rev="footnote" title="Jump back to footnote 239 in the text">↩</a></p>
+</li>
+<li id="fn:240">
+<p>Another thing <a href="#fnref:240" rev="footnote" title="Jump back to footnote 240 in the text">↩</a></p>
+</li>
+<li id="fn:241">
+<p>Another thing <a href="#fnref:241" rev="footnote" title="Jump back to footnote 241 in the text">↩</a></p>
+</li>
+<li id="fn:242">
+<p>Another thing <a href="#fnref:242" rev="footnote" title="Jump back to footnote 242 in the text">↩</a></p>
+</li>
+<li id="fn:243">
+<p>Another thing <a href="#fnref:243" rev="footnote" title="Jump back to footnote 243 in the text">↩</a></p>
+</li>
+<li id="fn:244">
+<p>Another thing <a href="#fnref:244" rev="footnote" title="Jump back to footnote 244 in the text">↩</a></p>
+</li>
+<li id="fn:245">
+<p>Another thing <a href="#fnref:245" rev="footnote" title="Jump back to footnote 245 in the text">↩</a></p>
+</li>
+<li id="fn:246">
+<p>Another thing <a href="#fnref:246" rev="footnote" title="Jump back to footnote 246 in the text">↩</a></p>
+</li>
+<li id="fn:247">
+<p>Another thing <a href="#fnref:247" rev="footnote" title="Jump back to footnote 247 in the text">↩</a></p>
+</li>
+<li id="fn:248">
+<p>Another thing <a href="#fnref:248" rev="footnote" title="Jump back to footnote 248 in the text">↩</a></p>
+</li>
+<li id="fn:249">
+<p>Another thing <a href="#fnref:249" rev="footnote" title="Jump back to footnote 249 in the text">↩</a></p>
+</li>
+<li id="fn:250">
+<p>Another thing <a href="#fnref:250" rev="footnote" title="Jump back to footnote 250 in the text">↩</a></p>
+</li>
+<li id="fn:251">
+<p>Another thing <a href="#fnref:251" rev="footnote" title="Jump back to footnote 251 in the text">↩</a></p>
+</li>
+<li id="fn:252">
+<p>Another thing <a href="#fnref:252" rev="footnote" title="Jump back to footnote 252 in the text">↩</a></p>
+</li>
+<li id="fn:253">
+<p>Another thing <a href="#fnref:253" rev="footnote" title="Jump back to footnote 253 in the text">↩</a></p>
+</li>
+<li id="fn:254">
+<p>Another thing <a href="#fnref:254" rev="footnote" title="Jump back to footnote 254 in the text">↩</a></p>
+</li>
+<li id="fn:255">
+<p>Another thing <a href="#fnref:255" rev="footnote" title="Jump back to footnote 255 in the text">↩</a></p>
+</li>
+<li id="fn:256">
+<p>Another thing <a href="#fnref:256" rev="footnote" title="Jump back to footnote 256 in the text">↩</a></p>
+</li>
+<li id="fn:257">
+<p>Another thing <a href="#fnref:257" rev="footnote" title="Jump back to footnote 257 in the text">↩</a></p>
+</li>
+<li id="fn:258">
+<p>Another thing <a href="#fnref:258" rev="footnote" title="Jump back to footnote 258 in the text">↩</a></p>
+</li>
+<li id="fn:259">
+<p>Another thing <a href="#fnref:259" rev="footnote" title="Jump back to footnote 259 in the text">↩</a></p>
+</li>
+<li id="fn:260">
+<p>Another thing <a href="#fnref:260" rev="footnote" title="Jump back to footnote 260 in the text">↩</a></p>
+</li>
+<li id="fn:261">
+<p>Another thing <a href="#fnref:261" rev="footnote" title="Jump back to footnote 261 in the text">↩</a></p>
+</li>
+<li id="fn:262">
+<p>Another thing <a href="#fnref:262" rev="footnote" title="Jump back to footnote 262 in the text">↩</a></p>
+</li>
+<li id="fn:263">
+<p>Another thing <a href="#fnref:263" rev="footnote" title="Jump back to footnote 263 in the text">↩</a></p>
+</li>
+<li id="fn:264">
+<p>Another thing <a href="#fnref:264" rev="footnote" title="Jump back to footnote 264 in the text">↩</a></p>
+</li>
+<li id="fn:265">
+<p>Another thing <a href="#fnref:265" rev="footnote" title="Jump back to footnote 265 in the text">↩</a></p>
+</li>
+<li id="fn:266">
+<p>Another thing <a href="#fnref:266" rev="footnote" title="Jump back to footnote 266 in the text">↩</a></p>
+</li>
+<li id="fn:267">
+<p>Another thing <a href="#fnref:267" rev="footnote" title="Jump back to footnote 267 in the text">↩</a></p>
+</li>
+<li id="fn:268">
+<p>Another thing <a href="#fnref:268" rev="footnote" title="Jump back to footnote 268 in the text">↩</a></p>
+</li>
+<li id="fn:269">
+<p>Another thing <a href="#fnref:269" rev="footnote" title="Jump back to footnote 269 in the text">↩</a></p>
+</li>
+<li id="fn:270">
+<p>Another thing <a href="#fnref:270" rev="footnote" title="Jump back to footnote 270 in the text">↩</a></p>
+</li>
+<li id="fn:271">
+<p>Another thing <a href="#fnref:271" rev="footnote" title="Jump back to footnote 271 in the text">↩</a></p>
+</li>
+<li id="fn:272">
+<p>Another thing <a href="#fnref:272" rev="footnote" title="Jump back to footnote 272 in the text">↩</a></p>
+</li>
+<li id="fn:273">
+<p>Another thing <a href="#fnref:273" rev="footnote" title="Jump back to footnote 273 in the text">↩</a></p>
+</li>
+<li id="fn:274">
+<p>Another thing <a href="#fnref:274" rev="footnote" title="Jump back to footnote 274 in the text">↩</a></p>
+</li>
+<li id="fn:275">
+<p>Another thing <a href="#fnref:275" rev="footnote" title="Jump back to footnote 275 in the text">↩</a></p>
+</li>
+<li id="fn:276">
+<p>Another thing <a href="#fnref:276" rev="footnote" title="Jump back to footnote 276 in the text">↩</a></p>
+</li>
+<li id="fn:277">
+<p>Another thing <a href="#fnref:277" rev="footnote" title="Jump back to footnote 277 in the text">↩</a></p>
+</li>
+<li id="fn:278">
+<p>Another thing <a href="#fnref:278" rev="footnote" title="Jump back to footnote 278 in the text">↩</a></p>
+</li>
+<li id="fn:279">
+<p>Another thing <a href="#fnref:279" rev="footnote" title="Jump back to footnote 279 in the text">↩</a></p>
+</li>
+<li id="fn:280">
+<p>Another thing <a href="#fnref:280" rev="footnote" title="Jump back to footnote 280 in the text">↩</a></p>
+</li>
+<li id="fn:281">
+<p>Another thing <a href="#fnref:281" rev="footnote" title="Jump back to footnote 281 in the text">↩</a></p>
+</li>
+<li id="fn:282">
+<p>Another thing <a href="#fnref:282" rev="footnote" title="Jump back to footnote 282 in the text">↩</a></p>
+</li>
+<li id="fn:283">
+<p>Another thing <a href="#fnref:283" rev="footnote" title="Jump back to footnote 283 in the text">↩</a></p>
+</li>
+<li id="fn:284">
+<p>Another thing <a href="#fnref:284" rev="footnote" title="Jump back to footnote 284 in the text">↩</a></p>
+</li>
+<li id="fn:285">
+<p>Another thing <a href="#fnref:285" rev="footnote" title="Jump back to footnote 285 in the text">↩</a></p>
+</li>
+<li id="fn:286">
+<p>Another thing <a href="#fnref:286" rev="footnote" title="Jump back to footnote 286 in the text">↩</a></p>
+</li>
+<li id="fn:287">
+<p>Another thing <a href="#fnref:287" rev="footnote" title="Jump back to footnote 287 in the text">↩</a></p>
+</li>
+<li id="fn:288">
+<p>Another thing <a href="#fnref:288" rev="footnote" title="Jump back to footnote 288 in the text">↩</a></p>
+</li>
+<li id="fn:289">
+<p>Another thing <a href="#fnref:289" rev="footnote" title="Jump back to footnote 289 in the text">↩</a></p>
+</li>
+<li id="fn:290">
+<p>Another thing <a href="#fnref:290" rev="footnote" title="Jump back to footnote 290 in the text">↩</a></p>
+</li>
+<li id="fn:291">
+<p>Another thing <a href="#fnref:291" rev="footnote" title="Jump back to footnote 291 in the text">↩</a></p>
+</li>
+<li id="fn:292">
+<p>Another thing <a href="#fnref:292" rev="footnote" title="Jump back to footnote 292 in the text">↩</a></p>
+</li>
+<li id="fn:293">
+<p>Another thing <a href="#fnref:293" rev="footnote" title="Jump back to footnote 293 in the text">↩</a></p>
+</li>
+<li id="fn:294">
+<p>Another thing <a href="#fnref:294" rev="footnote" title="Jump back to footnote 294 in the text">↩</a></p>
+</li>
+<li id="fn:295">
+<p>Another thing <a href="#fnref:295" rev="footnote" title="Jump back to footnote 295 in the text">↩</a></p>
+</li>
+<li id="fn:296">
+<p>Another thing <a href="#fnref:296" rev="footnote" title="Jump back to footnote 296 in the text">↩</a></p>
+</li>
+<li id="fn:297">
+<p>Another thing <a href="#fnref:297" rev="footnote" title="Jump back to footnote 297 in the text">↩</a></p>
+</li>
+<li id="fn:298">
+<p>Another thing <a href="#fnref:298" rev="footnote" title="Jump back to footnote 298 in the text">↩</a></p>
+</li>
+<li id="fn:299">
+<p>Another thing <a href="#fnref:299" rev="footnote" title="Jump back to footnote 299 in the text">↩</a></p>
+</li>
+<li id="fn:300">
+<p>Another thing <a href="#fnref:300" rev="footnote" title="Jump back to footnote 300 in the text">↩</a></p>
+</li>
+<li id="fn:301">
+<p>Another thing <a href="#fnref:301" rev="footnote" title="Jump back to footnote 301 in the text">↩</a></p>
+</li>
+<li id="fn:302">
+<p>Another thing <a href="#fnref:302" rev="footnote" title="Jump back to footnote 302 in the text">↩</a></p>
+</li>
+<li id="fn:303">
+<p>Another thing <a href="#fnref:303" rev="footnote" title="Jump back to footnote 303 in the text">↩</a></p>
+</li>
+<li id="fn:304">
+<p>Another thing <a href="#fnref:304" rev="footnote" title="Jump back to footnote 304 in the text">↩</a></p>
+</li>
+<li id="fn:305">
+<p>Another thing <a href="#fnref:305" rev="footnote" title="Jump back to footnote 305 in the text">↩</a></p>
+</li>
+<li id="fn:306">
+<p>Another thing <a href="#fnref:306" rev="footnote" title="Jump back to footnote 306 in the text">↩</a></p>
+</li>
+<li id="fn:307">
+<p>Another thing <a href="#fnref:307" rev="footnote" title="Jump back to footnote 307 in the text">↩</a></p>
+</li>
+<li id="fn:308">
+<p>Another thing <a href="#fnref:308" rev="footnote" title="Jump back to footnote 308 in the text">↩</a></p>
+</li>
+<li id="fn:309">
+<p>Another thing <a href="#fnref:309" rev="footnote" title="Jump back to footnote 309 in the text">↩</a></p>
+</li>
+<li id="fn:310">
+<p>Another thing <a href="#fnref:310" rev="footnote" title="Jump back to footnote 310 in the text">↩</a></p>
+</li>
+<li id="fn:311">
+<p>Another thing <a href="#fnref:311" rev="footnote" title="Jump back to footnote 311 in the text">↩</a></p>
+</li>
+<li id="fn:312">
+<p>Another thing <a href="#fnref:312" rev="footnote" title="Jump back to footnote 312 in the text">↩</a></p>
+</li>
+<li id="fn:313">
+<p>Another thing <a href="#fnref:313" rev="footnote" title="Jump back to footnote 313 in the text">↩</a></p>
+</li>
+<li id="fn:314">
+<p>Another thing <a href="#fnref:314" rev="footnote" title="Jump back to footnote 314 in the text">↩</a></p>
+</li>
+<li id="fn:315">
+<p>Another thing <a href="#fnref:315" rev="footnote" title="Jump back to footnote 315 in the text">↩</a></p>
+</li>
+<li id="fn:316">
+<p>Another thing <a href="#fnref:316" rev="footnote" title="Jump back to footnote 316 in the text">↩</a></p>
+</li>
+<li id="fn:317">
+<p>Another thing <a href="#fnref:317" rev="footnote" title="Jump back to footnote 317 in the text">↩</a></p>
+</li>
+<li id="fn:318">
+<p>Another thing <a href="#fnref:318" rev="footnote" title="Jump back to footnote 318 in the text">↩</a></p>
+</li>
+<li id="fn:319">
+<p>Another thing <a href="#fnref:319" rev="footnote" title="Jump back to footnote 319 in the text">↩</a></p>
+</li>
+<li id="fn:320">
+<p>Another thing <a href="#fnref:320" rev="footnote" title="Jump back to footnote 320 in the text">↩</a></p>
+</li>
+<li id="fn:321">
+<p>Another thing <a href="#fnref:321" rev="footnote" title="Jump back to footnote 321 in the text">↩</a></p>
+</li>
+<li id="fn:322">
+<p>Another thing <a href="#fnref:322" rev="footnote" title="Jump back to footnote 322 in the text">↩</a></p>
+</li>
+<li id="fn:323">
+<p>Another thing <a href="#fnref:323" rev="footnote" title="Jump back to footnote 323 in the text">↩</a></p>
+</li>
+<li id="fn:324">
+<p>Another thing <a href="#fnref:324" rev="footnote" title="Jump back to footnote 324 in the text">↩</a></p>
+</li>
+<li id="fn:325">
+<p>Another thing <a href="#fnref:325" rev="footnote" title="Jump back to footnote 325 in the text">↩</a></p>
+</li>
+<li id="fn:326">
+<p>Another thing <a href="#fnref:326" rev="footnote" title="Jump back to footnote 326 in the text">↩</a></p>
+</li>
+<li id="fn:327">
+<p>Another thing <a href="#fnref:327" rev="footnote" title="Jump back to footnote 327 in the text">↩</a></p>
+</li>
+<li id="fn:328">
+<p>Another thing <a href="#fnref:328" rev="footnote" title="Jump back to footnote 328 in the text">↩</a></p>
+</li>
+<li id="fn:329">
+<p>Another thing <a href="#fnref:329" rev="footnote" title="Jump back to footnote 329 in the text">↩</a></p>
+</li>
+<li id="fn:330">
+<p>Another thing <a href="#fnref:330" rev="footnote" title="Jump back to footnote 330 in the text">↩</a></p>
+</li>
+<li id="fn:331">
+<p>Another thing <a href="#fnref:331" rev="footnote" title="Jump back to footnote 331 in the text">↩</a></p>
+</li>
+<li id="fn:332">
+<p>Another thing <a href="#fnref:332" rev="footnote" title="Jump back to footnote 332 in the text">↩</a></p>
+</li>
+<li id="fn:333">
+<p>Another thing <a href="#fnref:333" rev="footnote" title="Jump back to footnote 333 in the text">↩</a></p>
+</li>
+<li id="fn:334">
+<p>Another thing <a href="#fnref:334" rev="footnote" title="Jump back to footnote 334 in the text">↩</a></p>
+</li>
+<li id="fn:335">
+<p>Another thing <a href="#fnref:335" rev="footnote" title="Jump back to footnote 335 in the text">↩</a></p>
+</li>
+<li id="fn:336">
+<p>Another thing <a href="#fnref:336" rev="footnote" title="Jump back to footnote 336 in the text">↩</a></p>
+</li>
+<li id="fn:337">
+<p>Another thing <a href="#fnref:337" rev="footnote" title="Jump back to footnote 337 in the text">↩</a></p>
+</li>
+<li id="fn:338">
+<p>Another thing <a href="#fnref:338" rev="footnote" title="Jump back to footnote 338 in the text">↩</a></p>
+</li>
+<li id="fn:339">
+<p>Another thing <a href="#fnref:339" rev="footnote" title="Jump back to footnote 339 in the text">↩</a></p>
+</li>
+<li id="fn:340">
+<p>Another thing <a href="#fnref:340" rev="footnote" title="Jump back to footnote 340 in the text">↩</a></p>
+</li>
+<li id="fn:341">
+<p>Another thing <a href="#fnref:341" rev="footnote" title="Jump back to footnote 341 in the text">↩</a></p>
+</li>
+<li id="fn:342">
+<p>Another thing <a href="#fnref:342" rev="footnote" title="Jump back to footnote 342 in the text">↩</a></p>
+</li>
+<li id="fn:343">
+<p>Another thing <a href="#fnref:343" rev="footnote" title="Jump back to footnote 343 in the text">↩</a></p>
+</li>
+<li id="fn:344">
+<p>Another thing <a href="#fnref:344" rev="footnote" title="Jump back to footnote 344 in the text">↩</a></p>
+</li>
+<li id="fn:345">
+<p>Another thing <a href="#fnref:345" rev="footnote" title="Jump back to footnote 345 in the text">↩</a></p>
+</li>
+<li id="fn:346">
+<p>Another thing <a href="#fnref:346" rev="footnote" title="Jump back to footnote 346 in the text">↩</a></p>
+</li>
+<li id="fn:347">
+<p>Another thing <a href="#fnref:347" rev="footnote" title="Jump back to footnote 347 in the text">↩</a></p>
+</li>
+<li id="fn:348">
+<p>Another thing <a href="#fnref:348" rev="footnote" title="Jump back to footnote 348 in the text">↩</a></p>
+</li>
+<li id="fn:349">
+<p>Another thing <a href="#fnref:349" rev="footnote" title="Jump back to footnote 349 in the text">↩</a></p>
+</li>
+<li id="fn:350">
+<p>Another thing <a href="#fnref:350" rev="footnote" title="Jump back to footnote 350 in the text">↩</a></p>
+</li>
+<li id="fn:351">
+<p>Another thing <a href="#fnref:351" rev="footnote" title="Jump back to footnote 351 in the text">↩</a></p>
+</li>
+<li id="fn:352">
+<p>Another thing <a href="#fnref:352" rev="footnote" title="Jump back to footnote 352 in the text">↩</a></p>
+</li>
+<li id="fn:353">
+<p>Another thing <a href="#fnref:353" rev="footnote" title="Jump back to footnote 353 in the text">↩</a></p>
+</li>
+<li id="fn:354">
+<p>Another thing <a href="#fnref:354" rev="footnote" title="Jump back to footnote 354 in the text">↩</a></p>
+</li>
+<li id="fn:355">
+<p>Another thing <a href="#fnref:355" rev="footnote" title="Jump back to footnote 355 in the text">↩</a></p>
+</li>
+<li id="fn:356">
+<p>Another thing <a href="#fnref:356" rev="footnote" title="Jump back to footnote 356 in the text">↩</a></p>
+</li>
+<li id="fn:357">
+<p>Another thing <a href="#fnref:357" rev="footnote" title="Jump back to footnote 357 in the text">↩</a></p>
+</li>
+<li id="fn:358">
+<p>Another thing <a href="#fnref:358" rev="footnote" title="Jump back to footnote 358 in the text">↩</a></p>
+</li>
+<li id="fn:359">
+<p>Another thing <a href="#fnref:359" rev="footnote" title="Jump back to footnote 359 in the text">↩</a></p>
+</li>
+<li id="fn:360">
+<p>Another thing <a href="#fnref:360" rev="footnote" title="Jump back to footnote 360 in the text">↩</a></p>
+</li>
+<li id="fn:361">
+<p>Another thing <a href="#fnref:361" rev="footnote" title="Jump back to footnote 361 in the text">↩</a></p>
+</li>
+<li id="fn:362">
+<p>Another thing <a href="#fnref:362" rev="footnote" title="Jump back to footnote 362 in the text">↩</a></p>
+</li>
+<li id="fn:363">
+<p>Another thing <a href="#fnref:363" rev="footnote" title="Jump back to footnote 363 in the text">↩</a></p>
+</li>
+<li id="fn:364">
+<p>Another thing <a href="#fnref:364" rev="footnote" title="Jump back to footnote 364 in the text">↩</a></p>
+</li>
+<li id="fn:365">
+<p>Another thing <a href="#fnref:365" rev="footnote" title="Jump back to footnote 365 in the text">↩</a></p>
+</li>
+<li id="fn:366">
+<p>Another thing <a href="#fnref:366" rev="footnote" title="Jump back to footnote 366 in the text">↩</a></p>
+</li>
+<li id="fn:367">
+<p>Another thing <a href="#fnref:367" rev="footnote" title="Jump back to footnote 367 in the text">↩</a></p>
+</li>
+<li id="fn:368">
+<p>Another thing <a href="#fnref:368" rev="footnote" title="Jump back to footnote 368 in the text">↩</a></p>
+</li>
+<li id="fn:369">
+<p>Another thing <a href="#fnref:369" rev="footnote" title="Jump back to footnote 369 in the text">↩</a></p>
+</li>
+<li id="fn:370">
+<p>Another thing <a href="#fnref:370" rev="footnote" title="Jump back to footnote 370 in the text">↩</a></p>
+</li>
+<li id="fn:371">
+<p>Another thing <a href="#fnref:371" rev="footnote" title="Jump back to footnote 371 in the text">↩</a></p>
+</li>
+<li id="fn:372">
+<p>Another thing <a href="#fnref:372" rev="footnote" title="Jump back to footnote 372 in the text">↩</a></p>
+</li>
+<li id="fn:373">
+<p>Another thing <a href="#fnref:373" rev="footnote" title="Jump back to footnote 373 in the text">↩</a></p>
+</li>
+<li id="fn:374">
+<p>Another thing <a href="#fnref:374" rev="footnote" title="Jump back to footnote 374 in the text">↩</a></p>
+</li>
+<li id="fn:375">
+<p>Another thing <a href="#fnref:375" rev="footnote" title="Jump back to footnote 375 in the text">↩</a></p>
+</li>
+<li id="fn:376">
+<p>Another thing <a href="#fnref:376" rev="footnote" title="Jump back to footnote 376 in the text">↩</a></p>
+</li>
+<li id="fn:377">
+<p>Another thing <a href="#fnref:377" rev="footnote" title="Jump back to footnote 377 in the text">↩</a></p>
+</li>
+<li id="fn:378">
+<p>Another thing <a href="#fnref:378" rev="footnote" title="Jump back to footnote 378 in the text">↩</a></p>
+</li>
+<li id="fn:379">
+<p>Another thing <a href="#fnref:379" rev="footnote" title="Jump back to footnote 379 in the text">↩</a></p>
+</li>
+<li id="fn:380">
+<p>Another thing <a href="#fnref:380" rev="footnote" title="Jump back to footnote 380 in the text">↩</a></p>
+</li>
+<li id="fn:381">
+<p>Another thing <a href="#fnref:381" rev="footnote" title="Jump back to footnote 381 in the text">↩</a></p>
+</li>
+<li id="fn:382">
+<p>Another thing <a href="#fnref:382" rev="footnote" title="Jump back to footnote 382 in the text">↩</a></p>
+</li>
+<li id="fn:383">
+<p>Another thing <a href="#fnref:383" rev="footnote" title="Jump back to footnote 383 in the text">↩</a></p>
+</li>
+<li id="fn:384">
+<p>Another thing <a href="#fnref:384" rev="footnote" title="Jump back to footnote 384 in the text">↩</a></p>
+</li>
+<li id="fn:385">
+<p>Another thing <a href="#fnref:385" rev="footnote" title="Jump back to footnote 385 in the text">↩</a></p>
+</li>
+<li id="fn:386">
+<p>Another thing <a href="#fnref:386" rev="footnote" title="Jump back to footnote 386 in the text">↩</a></p>
+</li>
+<li id="fn:387">
+<p>Another thing <a href="#fnref:387" rev="footnote" title="Jump back to footnote 387 in the text">↩</a></p>
+</li>
+<li id="fn:388">
+<p>Another thing <a href="#fnref:388" rev="footnote" title="Jump back to footnote 388 in the text">↩</a></p>
+</li>
+<li id="fn:389">
+<p>Another thing <a href="#fnref:389" rev="footnote" title="Jump back to footnote 389 in the text">↩</a></p>
+</li>
+<li id="fn:390">
+<p>Another thing <a href="#fnref:390" rev="footnote" title="Jump back to footnote 390 in the text">↩</a></p>
+</li>
+<li id="fn:391">
+<p>Another thing <a href="#fnref:391" rev="footnote" title="Jump back to footnote 391 in the text">↩</a></p>
+</li>
+<li id="fn:392">
+<p>Another thing <a href="#fnref:392" rev="footnote" title="Jump back to footnote 392 in the text">↩</a></p>
+</li>
+<li id="fn:393">
+<p>Another thing <a href="#fnref:393" rev="footnote" title="Jump back to footnote 393 in the text">↩</a></p>
+</li>
+<li id="fn:394">
+<p>Another thing <a href="#fnref:394" rev="footnote" title="Jump back to footnote 394 in the text">↩</a></p>
+</li>
+<li id="fn:395">
+<p>Another thing <a href="#fnref:395" rev="footnote" title="Jump back to footnote 395 in the text">↩</a></p>
+</li>
+<li id="fn:396">
+<p>Another thing <a href="#fnref:396" rev="footnote" title="Jump back to footnote 396 in the text">↩</a></p>
+</li>
+<li id="fn:397">
+<p>Another thing <a href="#fnref:397" rev="footnote" title="Jump back to footnote 397 in the text">↩</a></p>
+</li>
+<li id="fn:398">
+<p>Another thing <a href="#fnref:398" rev="footnote" title="Jump back to footnote 398 in the text">↩</a></p>
+</li>
+<li id="fn:399">
+<p>Another thing <a href="#fnref:399" rev="footnote" title="Jump back to footnote 399 in the text">↩</a></p>
+</li>
+<li id="fn:400">
+<p>Another thing <a href="#fnref:400" rev="footnote" title="Jump back to footnote 400 in the text">↩</a></p>
+</li>
+<li id="fn:401">
+<p>Another thing <a href="#fnref:401" rev="footnote" title="Jump back to footnote 401 in the text">↩</a></p>
+</li>
+<li id="fn:402">
+<p>Another thing <a href="#fnref:402" rev="footnote" title="Jump back to footnote 402 in the text">↩</a></p>
+</li>
+<li id="fn:403">
+<p>Another thing <a href="#fnref:403" rev="footnote" title="Jump back to footnote 403 in the text">↩</a></p>
+</li>
+<li id="fn:404">
+<p>Another thing <a href="#fnref:404" rev="footnote" title="Jump back to footnote 404 in the text">↩</a></p>
+</li>
+<li id="fn:405">
+<p>Another thing <a href="#fnref:405" rev="footnote" title="Jump back to footnote 405 in the text">↩</a></p>
+</li>
+<li id="fn:406">
+<p>Another thing <a href="#fnref:406" rev="footnote" title="Jump back to footnote 406 in the text">↩</a></p>
+</li>
+<li id="fn:407">
+<p>Another thing <a href="#fnref:407" rev="footnote" title="Jump back to footnote 407 in the text">↩</a></p>
+</li>
+<li id="fn:408">
+<p>Another thing <a href="#fnref:408" rev="footnote" title="Jump back to footnote 408 in the text">↩</a></p>
+</li>
+<li id="fn:409">
+<p>Another thing <a href="#fnref:409" rev="footnote" title="Jump back to footnote 409 in the text">↩</a></p>
+</li>
+<li id="fn:410">
+<p>Another thing <a href="#fnref:410" rev="footnote" title="Jump back to footnote 410 in the text">↩</a></p>
+</li>
+<li id="fn:411">
+<p>Another thing <a href="#fnref:411" rev="footnote" title="Jump back to footnote 411 in the text">↩</a></p>
+</li>
+<li id="fn:412">
+<p>Another thing <a href="#fnref:412" rev="footnote" title="Jump back to footnote 412 in the text">↩</a></p>
+</li>
+<li id="fn:413">
+<p>Another thing <a href="#fnref:413" rev="footnote" title="Jump back to footnote 413 in the text">↩</a></p>
+</li>
+<li id="fn:414">
+<p>Another thing <a href="#fnref:414" rev="footnote" title="Jump back to footnote 414 in the text">↩</a></p>
+</li>
+<li id="fn:415">
+<p>Another thing <a href="#fnref:415" rev="footnote" title="Jump back to footnote 415 in the text">↩</a></p>
+</li>
+<li id="fn:416">
+<p>Another thing <a href="#fnref:416" rev="footnote" title="Jump back to footnote 416 in the text">↩</a></p>
+</li>
+<li id="fn:417">
+<p>Another thing <a href="#fnref:417" rev="footnote" title="Jump back to footnote 417 in the text">↩</a></p>
+</li>
+<li id="fn:418">
+<p>Another thing <a href="#fnref:418" rev="footnote" title="Jump back to footnote 418 in the text">↩</a></p>
+</li>
+<li id="fn:419">
+<p>Another thing <a href="#fnref:419" rev="footnote" title="Jump back to footnote 419 in the text">↩</a></p>
+</li>
+<li id="fn:420">
+<p>Another thing <a href="#fnref:420" rev="footnote" title="Jump back to footnote 420 in the text">↩</a></p>
+</li>
+<li id="fn:421">
+<p>Another thing <a href="#fnref:421" rev="footnote" title="Jump back to footnote 421 in the text">↩</a></p>
+</li>
+<li id="fn:422">
+<p>Another thing <a href="#fnref:422" rev="footnote" title="Jump back to footnote 422 in the text">↩</a></p>
+</li>
+<li id="fn:423">
+<p>Another thing <a href="#fnref:423" rev="footnote" title="Jump back to footnote 423 in the text">↩</a></p>
+</li>
+<li id="fn:424">
+<p>Another thing <a href="#fnref:424" rev="footnote" title="Jump back to footnote 424 in the text">↩</a></p>
+</li>
+<li id="fn:425">
+<p>Another thing <a href="#fnref:425" rev="footnote" title="Jump back to footnote 425 in the text">↩</a></p>
+</li>
+<li id="fn:426">
+<p>Another thing <a href="#fnref:426" rev="footnote" title="Jump back to footnote 426 in the text">↩</a></p>
+</li>
+<li id="fn:427">
+<p>Another thing <a href="#fnref:427" rev="footnote" title="Jump back to footnote 427 in the text">↩</a></p>
+</li>
+<li id="fn:428">
+<p>Another thing <a href="#fnref:428" rev="footnote" title="Jump back to footnote 428 in the text">↩</a></p>
+</li>
+<li id="fn:429">
+<p>Another thing <a href="#fnref:429" rev="footnote" title="Jump back to footnote 429 in the text">↩</a></p>
+</li>
+<li id="fn:430">
+<p>Another thing <a href="#fnref:430" rev="footnote" title="Jump back to footnote 430 in the text">↩</a></p>
+</li>
+<li id="fn:431">
+<p>Another thing <a href="#fnref:431" rev="footnote" title="Jump back to footnote 431 in the text">↩</a></p>
+</li>
+<li id="fn:432">
+<p>Another thing <a href="#fnref:432" rev="footnote" title="Jump back to footnote 432 in the text">↩</a></p>
+</li>
+<li id="fn:433">
+<p>Another thing <a href="#fnref:433" rev="footnote" title="Jump back to footnote 433 in the text">↩</a></p>
+</li>
+<li id="fn:434">
+<p>Another thing <a href="#fnref:434" rev="footnote" title="Jump back to footnote 434 in the text">↩</a></p>
+</li>
+<li id="fn:435">
+<p>Another thing <a href="#fnref:435" rev="footnote" title="Jump back to footnote 435 in the text">↩</a></p>
+</li>
+<li id="fn:436">
+<p>Another thing <a href="#fnref:436" rev="footnote" title="Jump back to footnote 436 in the text">↩</a></p>
+</li>
+<li id="fn:437">
+<p>Another thing <a href="#fnref:437" rev="footnote" title="Jump back to footnote 437 in the text">↩</a></p>
+</li>
+<li id="fn:438">
+<p>Another thing <a href="#fnref:438" rev="footnote" title="Jump back to footnote 438 in the text">↩</a></p>
+</li>
+<li id="fn:439">
+<p>Another thing <a href="#fnref:439" rev="footnote" title="Jump back to footnote 439 in the text">↩</a></p>
+</li>
+<li id="fn:440">
+<p>Another thing <a href="#fnref:440" rev="footnote" title="Jump back to footnote 440 in the text">↩</a></p>
+</li>
+<li id="fn:441">
+<p>Another thing <a href="#fnref:441" rev="footnote" title="Jump back to footnote 441 in the text">↩</a></p>
+</li>
+<li id="fn:442">
+<p>Another thing <a href="#fnref:442" rev="footnote" title="Jump back to footnote 442 in the text">↩</a></p>
+</li>
+<li id="fn:443">
+<p>Another thing <a href="#fnref:443" rev="footnote" title="Jump back to footnote 443 in the text">↩</a></p>
+</li>
+<li id="fn:444">
+<p>Another thing <a href="#fnref:444" rev="footnote" title="Jump back to footnote 444 in the text">↩</a></p>
+</li>
+<li id="fn:445">
+<p>Another thing <a href="#fnref:445" rev="footnote" title="Jump back to footnote 445 in the text">↩</a></p>
+</li>
+<li id="fn:446">
+<p>Another thing <a href="#fnref:446" rev="footnote" title="Jump back to footnote 446 in the text">↩</a></p>
+</li>
+<li id="fn:447">
+<p>Another thing <a href="#fnref:447" rev="footnote" title="Jump back to footnote 447 in the text">↩</a></p>
+</li>
+<li id="fn:448">
+<p>Another thing <a href="#fnref:448" rev="footnote" title="Jump back to footnote 448 in the text">↩</a></p>
+</li>
+<li id="fn:449">
+<p>Another thing <a href="#fnref:449" rev="footnote" title="Jump back to footnote 449 in the text">↩</a></p>
+</li>
+<li id="fn:450">
+<p>Another thing <a href="#fnref:450" rev="footnote" title="Jump back to footnote 450 in the text">↩</a></p>
+</li>
+<li id="fn:451">
+<p>Another thing <a href="#fnref:451" rev="footnote" title="Jump back to footnote 451 in the text">↩</a></p>
+</li>
+<li id="fn:452">
+<p>Another thing <a href="#fnref:452" rev="footnote" title="Jump back to footnote 452 in the text">↩</a></p>
+</li>
+<li id="fn:453">
+<p>Another thing <a href="#fnref:453" rev="footnote" title="Jump back to footnote 453 in the text">↩</a></p>
+</li>
+<li id="fn:454">
+<p>Another thing <a href="#fnref:454" rev="footnote" title="Jump back to footnote 454 in the text">↩</a></p>
+</li>
+<li id="fn:455">
+<p>Another thing <a href="#fnref:455" rev="footnote" title="Jump back to footnote 455 in the text">↩</a></p>
+</li>
+<li id="fn:456">
+<p>Another thing <a href="#fnref:456" rev="footnote" title="Jump back to footnote 456 in the text">↩</a></p>
+</li>
+<li id="fn:457">
+<p>Another thing <a href="#fnref:457" rev="footnote" title="Jump back to footnote 457 in the text">↩</a></p>
+</li>
+<li id="fn:458">
+<p>Another thing <a href="#fnref:458" rev="footnote" title="Jump back to footnote 458 in the text">↩</a></p>
+</li>
+<li id="fn:459">
+<p>Another thing <a href="#fnref:459" rev="footnote" title="Jump back to footnote 459 in the text">↩</a></p>
+</li>
+<li id="fn:460">
+<p>Another thing <a href="#fnref:460" rev="footnote" title="Jump back to footnote 460 in the text">↩</a></p>
+</li>
+<li id="fn:461">
+<p>Another thing <a href="#fnref:461" rev="footnote" title="Jump back to footnote 461 in the text">↩</a></p>
+</li>
+<li id="fn:462">
+<p>Another thing <a href="#fnref:462" rev="footnote" title="Jump back to footnote 462 in the text">↩</a></p>
+</li>
+<li id="fn:463">
+<p>Another thing <a href="#fnref:463" rev="footnote" title="Jump back to footnote 463 in the text">↩</a></p>
+</li>
+<li id="fn:464">
+<p>Another thing <a href="#fnref:464" rev="footnote" title="Jump back to footnote 464 in the text">↩</a></p>
+</li>
+<li id="fn:465">
+<p>Another thing <a href="#fnref:465" rev="footnote" title="Jump back to footnote 465 in the text">↩</a></p>
+</li>
+<li id="fn:466">
+<p>Another thing <a href="#fnref:466" rev="footnote" title="Jump back to footnote 466 in the text">↩</a></p>
+</li>
+<li id="fn:467">
+<p>Another thing <a href="#fnref:467" rev="footnote" title="Jump back to footnote 467 in the text">↩</a></p>
+</li>
+<li id="fn:468">
+<p>Another thing <a href="#fnref:468" rev="footnote" title="Jump back to footnote 468 in the text">↩</a></p>
+</li>
+<li id="fn:469">
+<p>Another thing <a href="#fnref:469" rev="footnote" title="Jump back to footnote 469 in the text">↩</a></p>
+</li>
+<li id="fn:470">
+<p>Another thing <a href="#fnref:470" rev="footnote" title="Jump back to footnote 470 in the text">↩</a></p>
+</li>
+<li id="fn:471">
+<p>Another thing <a href="#fnref:471" rev="footnote" title="Jump back to footnote 471 in the text">↩</a></p>
+</li>
+<li id="fn:472">
+<p>Another thing <a href="#fnref:472" rev="footnote" title="Jump back to footnote 472 in the text">↩</a></p>
+</li>
+<li id="fn:473">
+<p>Another thing <a href="#fnref:473" rev="footnote" title="Jump back to footnote 473 in the text">↩</a></p>
+</li>
+<li id="fn:474">
+<p>Another thing <a href="#fnref:474" rev="footnote" title="Jump back to footnote 474 in the text">↩</a></p>
+</li>
+<li id="fn:475">
+<p>Another thing <a href="#fnref:475" rev="footnote" title="Jump back to footnote 475 in the text">↩</a></p>
+</li>
+<li id="fn:476">
+<p>Another thing <a href="#fnref:476" rev="footnote" title="Jump back to footnote 476 in the text">↩</a></p>
+</li>
+<li id="fn:477">
+<p>Another thing <a href="#fnref:477" rev="footnote" title="Jump back to footnote 477 in the text">↩</a></p>
+</li>
+<li id="fn:478">
+<p>Another thing <a href="#fnref:478" rev="footnote" title="Jump back to footnote 478 in the text">↩</a></p>
+</li>
+<li id="fn:479">
+<p>Another thing <a href="#fnref:479" rev="footnote" title="Jump back to footnote 479 in the text">↩</a></p>
+</li>
+<li id="fn:480">
+<p>Another thing <a href="#fnref:480" rev="footnote" title="Jump back to footnote 480 in the text">↩</a></p>
+</li>
+<li id="fn:481">
+<p>Another thing <a href="#fnref:481" rev="footnote" title="Jump back to footnote 481 in the text">↩</a></p>
+</li>
+<li id="fn:482">
+<p>Another thing <a href="#fnref:482" rev="footnote" title="Jump back to footnote 482 in the text">↩</a></p>
+</li>
+<li id="fn:483">
+<p>Another thing <a href="#fnref:483" rev="footnote" title="Jump back to footnote 483 in the text">↩</a></p>
+</li>
+<li id="fn:484">
+<p>Another thing <a href="#fnref:484" rev="footnote" title="Jump back to footnote 484 in the text">↩</a></p>
+</li>
+<li id="fn:485">
+<p>Another thing <a href="#fnref:485" rev="footnote" title="Jump back to footnote 485 in the text">↩</a></p>
+</li>
+<li id="fn:486">
+<p>Another thing <a href="#fnref:486" rev="footnote" title="Jump back to footnote 486 in the text">↩</a></p>
+</li>
+<li id="fn:487">
+<p>Another thing <a href="#fnref:487" rev="footnote" title="Jump back to footnote 487 in the text">↩</a></p>
+</li>
+<li id="fn:488">
+<p>Another thing <a href="#fnref:488" rev="footnote" title="Jump back to footnote 488 in the text">↩</a></p>
+</li>
+<li id="fn:489">
+<p>Another thing <a href="#fnref:489" rev="footnote" title="Jump back to footnote 489 in the text">↩</a></p>
+</li>
+<li id="fn:490">
+<p>Another thing <a href="#fnref:490" rev="footnote" title="Jump back to footnote 490 in the text">↩</a></p>
+</li>
+<li id="fn:491">
+<p>Another thing <a href="#fnref:491" rev="footnote" title="Jump back to footnote 491 in the text">↩</a></p>
+</li>
+<li id="fn:492">
+<p>Another thing <a href="#fnref:492" rev="footnote" title="Jump back to footnote 492 in the text">↩</a></p>
+</li>
+<li id="fn:493">
+<p>Another thing <a href="#fnref:493" rev="footnote" title="Jump back to footnote 493 in the text">↩</a></p>
+</li>
+<li id="fn:494">
+<p>Another thing <a href="#fnref:494" rev="footnote" title="Jump back to footnote 494 in the text">↩</a></p>
+</li>
+<li id="fn:495">
+<p>Another thing <a href="#fnref:495" rev="footnote" title="Jump back to footnote 495 in the text">↩</a></p>
+</li>
+<li id="fn:496">
+<p>Another thing <a href="#fnref:496" rev="footnote" title="Jump back to footnote 496 in the text">↩</a></p>
+</li>
+<li id="fn:497">
+<p>Another thing <a href="#fnref:497" rev="footnote" title="Jump back to footnote 497 in the text">↩</a></p>
+</li>
+<li id="fn:498">
+<p>Another thing <a href="#fnref:498" rev="footnote" title="Jump back to footnote 498 in the text">↩</a></p>
+</li>
+<li id="fn:499">
+<p>Another thing <a href="#fnref:499" rev="footnote" title="Jump back to footnote 499 in the text">↩</a></p>
+</li>
+<li id="fn:500">
+<p>Another thing <a href="#fnref:500" rev="footnote" title="Jump back to footnote 500 in the text">↩</a></p>
+</li>
+<li id="fn:501">
+<p>Another thing <a href="#fnref:501" rev="footnote" title="Jump back to footnote 501 in the text">↩</a></p>
+</li>
+<li id="fn:502">
+<p>Another thing <a href="#fnref:502" rev="footnote" title="Jump back to footnote 502 in the text">↩</a></p>
+</li>
+<li id="fn:503">
+<p>Another thing <a href="#fnref:503" rev="footnote" title="Jump back to footnote 503 in the text">↩</a></p>
+</li>
+<li id="fn:504">
+<p>Another thing <a href="#fnref:504" rev="footnote" title="Jump back to footnote 504 in the text">↩</a></p>
+</li>
+<li id="fn:505">
+<p>Another thing <a href="#fnref:505" rev="footnote" title="Jump back to footnote 505 in the text">↩</a></p>
+</li>
+<li id="fn:506">
+<p>Another thing <a href="#fnref:506" rev="footnote" title="Jump back to footnote 506 in the text">↩</a></p>
+</li>
+<li id="fn:507">
+<p>Another thing <a href="#fnref:507" rev="footnote" title="Jump back to footnote 507 in the text">↩</a></p>
+</li>
+<li id="fn:508">
+<p>Another thing <a href="#fnref:508" rev="footnote" title="Jump back to footnote 508 in the text">↩</a></p>
+</li>
+<li id="fn:509">
+<p>Another thing <a href="#fnref:509" rev="footnote" title="Jump back to footnote 509 in the text">↩</a></p>
+</li>
+<li id="fn:510">
+<p>Another thing <a href="#fnref:510" rev="footnote" title="Jump back to footnote 510 in the text">↩</a></p>
+</li>
+<li id="fn:511">
+<p>Another thing <a href="#fnref:511" rev="footnote" title="Jump back to footnote 511 in the text">↩</a></p>
+</li>
+<li id="fn:512">
+<p>Another thing <a href="#fnref:512" rev="footnote" title="Jump back to footnote 512 in the text">↩</a></p>
+</li>
+<li id="fn:513">
+<p>Another thing <a href="#fnref:513" rev="footnote" title="Jump back to footnote 513 in the text">↩</a></p>
+</li>
+<li id="fn:514">
+<p>Another thing <a href="#fnref:514" rev="footnote" title="Jump back to footnote 514 in the text">↩</a></p>
+</li>
+<li id="fn:515">
+<p>Another thing <a href="#fnref:515" rev="footnote" title="Jump back to footnote 515 in the text">↩</a></p>
+</li>
+<li id="fn:516">
+<p>Another thing <a href="#fnref:516" rev="footnote" title="Jump back to footnote 516 in the text">↩</a></p>
+</li>
+<li id="fn:517">
+<p>Another thing <a href="#fnref:517" rev="footnote" title="Jump back to footnote 517 in the text">↩</a></p>
+</li>
+<li id="fn:518">
+<p>Another thing <a href="#fnref:518" rev="footnote" title="Jump back to footnote 518 in the text">↩</a></p>
+</li>
+<li id="fn:519">
+<p>Another thing <a href="#fnref:519" rev="footnote" title="Jump back to footnote 519 in the text">↩</a></p>
+</li>
+<li id="fn:520">
+<p>Another thing <a href="#fnref:520" rev="footnote" title="Jump back to footnote 520 in the text">↩</a></p>
+</li>
+<li id="fn:521">
+<p>Another thing <a href="#fnref:521" rev="footnote" title="Jump back to footnote 521 in the text">↩</a></p>
+</li>
+<li id="fn:522">
+<p>Another thing <a href="#fnref:522" rev="footnote" title="Jump back to footnote 522 in the text">↩</a></p>
+</li>
+<li id="fn:523">
+<p>Another thing <a href="#fnref:523" rev="footnote" title="Jump back to footnote 523 in the text">↩</a></p>
+</li>
+<li id="fn:524">
+<p>Another thing <a href="#fnref:524" rev="footnote" title="Jump back to footnote 524 in the text">↩</a></p>
+</li>
+<li id="fn:525">
+<p>Another thing <a href="#fnref:525" rev="footnote" title="Jump back to footnote 525 in the text">↩</a></p>
+</li>
+<li id="fn:526">
+<p>Another thing <a href="#fnref:526" rev="footnote" title="Jump back to footnote 526 in the text">↩</a></p>
+</li>
+<li id="fn:527">
+<p>Another thing <a href="#fnref:527" rev="footnote" title="Jump back to footnote 527 in the text">↩</a></p>
+</li>
+<li id="fn:528">
+<p>Another thing <a href="#fnref:528" rev="footnote" title="Jump back to footnote 528 in the text">↩</a></p>
+</li>
+<li id="fn:529">
+<p>Another thing <a href="#fnref:529" rev="footnote" title="Jump back to footnote 529 in the text">↩</a></p>
+</li>
+<li id="fn:530">
+<p>Another thing <a href="#fnref:530" rev="footnote" title="Jump back to footnote 530 in the text">↩</a></p>
+</li>
+<li id="fn:531">
+<p>Another thing <a href="#fnref:531" rev="footnote" title="Jump back to footnote 531 in the text">↩</a></p>
+</li>
+<li id="fn:532">
+<p>Another thing <a href="#fnref:532" rev="footnote" title="Jump back to footnote 532 in the text">↩</a></p>
+</li>
+<li id="fn:533">
+<p>Another thing <a href="#fnref:533" rev="footnote" title="Jump back to footnote 533 in the text">↩</a></p>
+</li>
+<li id="fn:534">
+<p>Another thing <a href="#fnref:534" rev="footnote" title="Jump back to footnote 534 in the text">↩</a></p>
+</li>
+<li id="fn:535">
+<p>Another thing <a href="#fnref:535" rev="footnote" title="Jump back to footnote 535 in the text">↩</a></p>
+</li>
+<li id="fn:536">
+<p>Another thing <a href="#fnref:536" rev="footnote" title="Jump back to footnote 536 in the text">↩</a></p>
+</li>
+<li id="fn:537">
+<p>Another thing <a href="#fnref:537" rev="footnote" title="Jump back to footnote 537 in the text">↩</a></p>
+</li>
+<li id="fn:538">
+<p>Another thing <a href="#fnref:538" rev="footnote" title="Jump back to footnote 538 in the text">↩</a></p>
+</li>
+<li id="fn:539">
+<p>Another thing <a href="#fnref:539" rev="footnote" title="Jump back to footnote 539 in the text">↩</a></p>
+</li>
+<li id="fn:540">
+<p>Another thing <a href="#fnref:540" rev="footnote" title="Jump back to footnote 540 in the text">↩</a></p>
+</li>
+<li id="fn:541">
+<p>Another thing <a href="#fnref:541" rev="footnote" title="Jump back to footnote 541 in the text">↩</a></p>
+</li>
+<li id="fn:542">
+<p>Another thing <a href="#fnref:542" rev="footnote" title="Jump back to footnote 542 in the text">↩</a></p>
+</li>
+<li id="fn:543">
+<p>Another thing <a href="#fnref:543" rev="footnote" title="Jump back to footnote 543 in the text">↩</a></p>
+</li>
+<li id="fn:544">
+<p>Another thing <a href="#fnref:544" rev="footnote" title="Jump back to footnote 544 in the text">↩</a></p>
+</li>
+<li id="fn:545">
+<p>Another thing <a href="#fnref:545" rev="footnote" title="Jump back to footnote 545 in the text">↩</a></p>
+</li>
+<li id="fn:546">
+<p>Another thing <a href="#fnref:546" rev="footnote" title="Jump back to footnote 546 in the text">↩</a></p>
+</li>
+<li id="fn:547">
+<p>Another thing <a href="#fnref:547" rev="footnote" title="Jump back to footnote 547 in the text">↩</a></p>
+</li>
+<li id="fn:548">
+<p>Another thing <a href="#fnref:548" rev="footnote" title="Jump back to footnote 548 in the text">↩</a></p>
+</li>
+<li id="fn:549">
+<p>Another thing <a href="#fnref:549" rev="footnote" title="Jump back to footnote 549 in the text">↩</a></p>
+</li>
+<li id="fn:550">
+<p>Another thing <a href="#fnref:550" rev="footnote" title="Jump back to footnote 550 in the text">↩</a></p>
+</li>
+<li id="fn:551">
+<p>Another thing <a href="#fnref:551" rev="footnote" title="Jump back to footnote 551 in the text">↩</a></p>
+</li>
+<li id="fn:552">
+<p>Another thing <a href="#fnref:552" rev="footnote" title="Jump back to footnote 552 in the text">↩</a></p>
+</li>
+<li id="fn:553">
+<p>Another thing <a href="#fnref:553" rev="footnote" title="Jump back to footnote 553 in the text">↩</a></p>
+</li>
+<li id="fn:554">
+<p>Another thing <a href="#fnref:554" rev="footnote" title="Jump back to footnote 554 in the text">↩</a></p>
+</li>
+<li id="fn:555">
+<p>Another thing <a href="#fnref:555" rev="footnote" title="Jump back to footnote 555 in the text">↩</a></p>
+</li>
+<li id="fn:556">
+<p>Another thing <a href="#fnref:556" rev="footnote" title="Jump back to footnote 556 in the text">↩</a></p>
+</li>
+<li id="fn:557">
+<p>Another thing <a href="#fnref:557" rev="footnote" title="Jump back to footnote 557 in the text">↩</a></p>
+</li>
+<li id="fn:558">
+<p>Another thing <a href="#fnref:558" rev="footnote" title="Jump back to footnote 558 in the text">↩</a></p>
+</li>
+<li id="fn:559">
+<p>Another thing <a href="#fnref:559" rev="footnote" title="Jump back to footnote 559 in the text">↩</a></p>
+</li>
+<li id="fn:560">
+<p>Another thing <a href="#fnref:560" rev="footnote" title="Jump back to footnote 560 in the text">↩</a></p>
+</li>
+<li id="fn:561">
+<p>Another thing <a href="#fnref:561" rev="footnote" title="Jump back to footnote 561 in the text">↩</a></p>
+</li>
+<li id="fn:562">
+<p>Another thing <a href="#fnref:562" rev="footnote" title="Jump back to footnote 562 in the text">↩</a></p>
+</li>
+<li id="fn:563">
+<p>Another thing <a href="#fnref:563" rev="footnote" title="Jump back to footnote 563 in the text">↩</a></p>
+</li>
+<li id="fn:564">
+<p>Another thing <a href="#fnref:564" rev="footnote" title="Jump back to footnote 564 in the text">↩</a></p>
+</li>
+<li id="fn:565">
+<p>Another thing <a href="#fnref:565" rev="footnote" title="Jump back to footnote 565 in the text">↩</a></p>
+</li>
+<li id="fn:566">
+<p>Another thing <a href="#fnref:566" rev="footnote" title="Jump back to footnote 566 in the text">↩</a></p>
+</li>
+<li id="fn:567">
+<p>Another thing <a href="#fnref:567" rev="footnote" title="Jump back to footnote 567 in the text">↩</a></p>
+</li>
+<li id="fn:568">
+<p>Another thing <a href="#fnref:568" rev="footnote" title="Jump back to footnote 568 in the text">↩</a></p>
+</li>
+<li id="fn:569">
+<p>Another thing <a href="#fnref:569" rev="footnote" title="Jump back to footnote 569 in the text">↩</a></p>
+</li>
+<li id="fn:570">
+<p>Another thing <a href="#fnref:570" rev="footnote" title="Jump back to footnote 570 in the text">↩</a></p>
+</li>
+<li id="fn:571">
+<p>Another thing <a href="#fnref:571" rev="footnote" title="Jump back to footnote 571 in the text">↩</a></p>
+</li>
+<li id="fn:572">
+<p>Another thing <a href="#fnref:572" rev="footnote" title="Jump back to footnote 572 in the text">↩</a></p>
+</li>
+<li id="fn:573">
+<p>Another thing <a href="#fnref:573" rev="footnote" title="Jump back to footnote 573 in the text">↩</a></p>
+</li>
+<li id="fn:574">
+<p>Another thing <a href="#fnref:574" rev="footnote" title="Jump back to footnote 574 in the text">↩</a></p>
+</li>
+<li id="fn:575">
+<p>Another thing <a href="#fnref:575" rev="footnote" title="Jump back to footnote 575 in the text">↩</a></p>
+</li>
+<li id="fn:576">
+<p>Another thing <a href="#fnref:576" rev="footnote" title="Jump back to footnote 576 in the text">↩</a></p>
+</li>
+<li id="fn:577">
+<p>Another thing <a href="#fnref:577" rev="footnote" title="Jump back to footnote 577 in the text">↩</a></p>
+</li>
+<li id="fn:578">
+<p>Another thing <a href="#fnref:578" rev="footnote" title="Jump back to footnote 578 in the text">↩</a></p>
+</li>
+<li id="fn:579">
+<p>Another thing <a href="#fnref:579" rev="footnote" title="Jump back to footnote 579 in the text">↩</a></p>
+</li>
+<li id="fn:580">
+<p>Another thing <a href="#fnref:580" rev="footnote" title="Jump back to footnote 580 in the text">↩</a></p>
+</li>
+<li id="fn:581">
+<p>Another thing <a href="#fnref:581" rev="footnote" title="Jump back to footnote 581 in the text">↩</a></p>
+</li>
+<li id="fn:582">
+<p>Another thing <a href="#fnref:582" rev="footnote" title="Jump back to footnote 582 in the text">↩</a></p>
+</li>
+<li id="fn:583">
+<p>Another thing <a href="#fnref:583" rev="footnote" title="Jump back to footnote 583 in the text">↩</a></p>
+</li>
+<li id="fn:584">
+<p>Another thing <a href="#fnref:584" rev="footnote" title="Jump back to footnote 584 in the text">↩</a></p>
+</li>
+<li id="fn:585">
+<p>Another thing <a href="#fnref:585" rev="footnote" title="Jump back to footnote 585 in the text">↩</a></p>
+</li>
+<li id="fn:586">
+<p>Another thing <a href="#fnref:586" rev="footnote" title="Jump back to footnote 586 in the text">↩</a></p>
+</li>
+<li id="fn:587">
+<p>Another thing <a href="#fnref:587" rev="footnote" title="Jump back to footnote 587 in the text">↩</a></p>
+</li>
+<li id="fn:588">
+<p>Another thing <a href="#fnref:588" rev="footnote" title="Jump back to footnote 588 in the text">↩</a></p>
+</li>
+<li id="fn:589">
+<p>Another thing <a href="#fnref:589" rev="footnote" title="Jump back to footnote 589 in the text">↩</a></p>
+</li>
+<li id="fn:590">
+<p>Another thing <a href="#fnref:590" rev="footnote" title="Jump back to footnote 590 in the text">↩</a></p>
+</li>
+<li id="fn:591">
+<p>Another thing <a href="#fnref:591" rev="footnote" title="Jump back to footnote 591 in the text">↩</a></p>
+</li>
+<li id="fn:592">
+<p>Another thing <a href="#fnref:592" rev="footnote" title="Jump back to footnote 592 in the text">↩</a></p>
+</li>
+<li id="fn:593">
+<p>Another thing <a href="#fnref:593" rev="footnote" title="Jump back to footnote 593 in the text">↩</a></p>
+</li>
+<li id="fn:594">
+<p>Another thing <a href="#fnref:594" rev="footnote" title="Jump back to footnote 594 in the text">↩</a></p>
+</li>
+<li id="fn:595">
+<p>Another thing <a href="#fnref:595" rev="footnote" title="Jump back to footnote 595 in the text">↩</a></p>
+</li>
+<li id="fn:596">
+<p>Another thing <a href="#fnref:596" rev="footnote" title="Jump back to footnote 596 in the text">↩</a></p>
+</li>
+<li id="fn:597">
+<p>Another thing <a href="#fnref:597" rev="footnote" title="Jump back to footnote 597 in the text">↩</a></p>
+</li>
+<li id="fn:598">
+<p>Another thing <a href="#fnref:598" rev="footnote" title="Jump back to footnote 598 in the text">↩</a></p>
+</li>
+<li id="fn:599">
+<p>Another thing <a href="#fnref:599" rev="footnote" title="Jump back to footnote 599 in the text">↩</a></p>
+</li>
+<li id="fn:600">
+<p>Another thing <a href="#fnref:600" rev="footnote" title="Jump back to footnote 600 in the text">↩</a></p>
+</li>
+<li id="fn:601">
+<p>Another thing <a href="#fnref:601" rev="footnote" title="Jump back to footnote 601 in the text">↩</a></p>
+</li>
+<li id="fn:602">
+<p>Another thing <a href="#fnref:602" rev="footnote" title="Jump back to footnote 602 in the text">↩</a></p>
+</li>
+<li id="fn:603">
+<p>Another thing <a href="#fnref:603" rev="footnote" title="Jump back to footnote 603 in the text">↩</a></p>
+</li>
+<li id="fn:604">
+<p>Another thing <a href="#fnref:604" rev="footnote" title="Jump back to footnote 604 in the text">↩</a></p>
+</li>
+<li id="fn:605">
+<p>Another thing <a href="#fnref:605" rev="footnote" title="Jump back to footnote 605 in the text">↩</a></p>
+</li>
+<li id="fn:606">
+<p>Another thing <a href="#fnref:606" rev="footnote" title="Jump back to footnote 606 in the text">↩</a></p>
+</li>
+<li id="fn:607">
+<p>Another thing <a href="#fnref:607" rev="footnote" title="Jump back to footnote 607 in the text">↩</a></p>
+</li>
+<li id="fn:608">
+<p>Another thing <a href="#fnref:608" rev="footnote" title="Jump back to footnote 608 in the text">↩</a></p>
+</li>
+<li id="fn:609">
+<p>Another thing <a href="#fnref:609" rev="footnote" title="Jump back to footnote 609 in the text">↩</a></p>
+</li>
+<li id="fn:610">
+<p>Another thing <a href="#fnref:610" rev="footnote" title="Jump back to footnote 610 in the text">↩</a></p>
+</li>
+<li id="fn:611">
+<p>Another thing <a href="#fnref:611" rev="footnote" title="Jump back to footnote 611 in the text">↩</a></p>
+</li>
+<li id="fn:612">
+<p>Another thing <a href="#fnref:612" rev="footnote" title="Jump back to footnote 612 in the text">↩</a></p>
+</li>
+<li id="fn:613">
+<p>Another thing <a href="#fnref:613" rev="footnote" title="Jump back to footnote 613 in the text">↩</a></p>
+</li>
+<li id="fn:614">
+<p>Another thing <a href="#fnref:614" rev="footnote" title="Jump back to footnote 614 in the text">↩</a></p>
+</li>
+<li id="fn:615">
+<p>Another thing <a href="#fnref:615" rev="footnote" title="Jump back to footnote 615 in the text">↩</a></p>
+</li>
+<li id="fn:616">
+<p>Another thing <a href="#fnref:616" rev="footnote" title="Jump back to footnote 616 in the text">↩</a></p>
+</li>
+<li id="fn:617">
+<p>Another thing <a href="#fnref:617" rev="footnote" title="Jump back to footnote 617 in the text">↩</a></p>
+</li>
+<li id="fn:618">
+<p>Another thing <a href="#fnref:618" rev="footnote" title="Jump back to footnote 618 in the text">↩</a></p>
+</li>
+<li id="fn:619">
+<p>Another thing <a href="#fnref:619" rev="footnote" title="Jump back to footnote 619 in the text">↩</a></p>
+</li>
+<li id="fn:620">
+<p>Another thing <a href="#fnref:620" rev="footnote" title="Jump back to footnote 620 in the text">↩</a></p>
+</li>
+<li id="fn:621">
+<p>Another thing <a href="#fnref:621" rev="footnote" title="Jump back to footnote 621 in the text">↩</a></p>
+</li>
+<li id="fn:622">
+<p>Another thing <a href="#fnref:622" rev="footnote" title="Jump back to footnote 622 in the text">↩</a></p>
+</li>
+<li id="fn:623">
+<p>Another thing <a href="#fnref:623" rev="footnote" title="Jump back to footnote 623 in the text">↩</a></p>
+</li>
+<li id="fn:624">
+<p>Another thing <a href="#fnref:624" rev="footnote" title="Jump back to footnote 624 in the text">↩</a></p>
+</li>
+<li id="fn:625">
+<p>Another thing <a href="#fnref:625" rev="footnote" title="Jump back to footnote 625 in the text">↩</a></p>
+</li>
+<li id="fn:626">
+<p>Another thing <a href="#fnref:626" rev="footnote" title="Jump back to footnote 626 in the text">↩</a></p>
+</li>
+<li id="fn:627">
+<p>Another thing <a href="#fnref:627" rev="footnote" title="Jump back to footnote 627 in the text">↩</a></p>
+</li>
+<li id="fn:628">
+<p>Another thing <a href="#fnref:628" rev="footnote" title="Jump back to footnote 628 in the text">↩</a></p>
+</li>
+<li id="fn:629">
+<p>Another thing <a href="#fnref:629" rev="footnote" title="Jump back to footnote 629 in the text">↩</a></p>
+</li>
+<li id="fn:630">
+<p>Another thing <a href="#fnref:630" rev="footnote" title="Jump back to footnote 630 in the text">↩</a></p>
+</li>
+<li id="fn:631">
+<p>Another thing <a href="#fnref:631" rev="footnote" title="Jump back to footnote 631 in the text">↩</a></p>
+</li>
+<li id="fn:632">
+<p>Another thing <a href="#fnref:632" rev="footnote" title="Jump back to footnote 632 in the text">↩</a></p>
+</li>
+<li id="fn:633">
+<p>Another thing <a href="#fnref:633" rev="footnote" title="Jump back to footnote 633 in the text">↩</a></p>
+</li>
+<li id="fn:634">
+<p>Another thing <a href="#fnref:634" rev="footnote" title="Jump back to footnote 634 in the text">↩</a></p>
+</li>
+<li id="fn:635">
+<p>Another thing <a href="#fnref:635" rev="footnote" title="Jump back to footnote 635 in the text">↩</a></p>
+</li>
+<li id="fn:636">
+<p>Another thing <a href="#fnref:636" rev="footnote" title="Jump back to footnote 636 in the text">↩</a></p>
+</li>
+<li id="fn:637">
+<p>Another thing <a href="#fnref:637" rev="footnote" title="Jump back to footnote 637 in the text">↩</a></p>
+</li>
+<li id="fn:638">
+<p>Another thing <a href="#fnref:638" rev="footnote" title="Jump back to footnote 638 in the text">↩</a></p>
+</li>
+<li id="fn:639">
+<p>Another thing <a href="#fnref:639" rev="footnote" title="Jump back to footnote 639 in the text">↩</a></p>
+</li>
+<li id="fn:640">
+<p>Another thing <a href="#fnref:640" rev="footnote" title="Jump back to footnote 640 in the text">↩</a></p>
+</li>
+<li id="fn:641">
+<p>Another thing <a href="#fnref:641" rev="footnote" title="Jump back to footnote 641 in the text">↩</a></p>
+</li>
+<li id="fn:642">
+<p>Another thing <a href="#fnref:642" rev="footnote" title="Jump back to footnote 642 in the text">↩</a></p>
+</li>
+<li id="fn:643">
+<p>Another thing <a href="#fnref:643" rev="footnote" title="Jump back to footnote 643 in the text">↩</a></p>
+</li>
+<li id="fn:644">
+<p>Another thing <a href="#fnref:644" rev="footnote" title="Jump back to footnote 644 in the text">↩</a></p>
+</li>
+<li id="fn:645">
+<p>Another thing <a href="#fnref:645" rev="footnote" title="Jump back to footnote 645 in the text">↩</a></p>
+</li>
+<li id="fn:646">
+<p>Another thing <a href="#fnref:646" rev="footnote" title="Jump back to footnote 646 in the text">↩</a></p>
+</li>
+<li id="fn:647">
+<p>Another thing <a href="#fnref:647" rev="footnote" title="Jump back to footnote 647 in the text">↩</a></p>
+</li>
+<li id="fn:648">
+<p>Another thing <a href="#fnref:648" rev="footnote" title="Jump back to footnote 648 in the text">↩</a></p>
+</li>
+<li id="fn:649">
+<p>Another thing <a href="#fnref:649" rev="footnote" title="Jump back to footnote 649 in the text">↩</a></p>
+</li>
+<li id="fn:650">
+<p>Another thing <a href="#fnref:650" rev="footnote" title="Jump back to footnote 650 in the text">↩</a></p>
+</li>
+<li id="fn:651">
+<p>Another thing <a href="#fnref:651" rev="footnote" title="Jump back to footnote 651 in the text">↩</a></p>
+</li>
+<li id="fn:652">
+<p>Another thing <a href="#fnref:652" rev="footnote" title="Jump back to footnote 652 in the text">↩</a></p>
+</li>
+<li id="fn:653">
+<p>Another thing <a href="#fnref:653" rev="footnote" title="Jump back to footnote 653 in the text">↩</a></p>
+</li>
+<li id="fn:654">
+<p>Another thing <a href="#fnref:654" rev="footnote" title="Jump back to footnote 654 in the text">↩</a></p>
+</li>
+<li id="fn:655">
+<p>Another thing <a href="#fnref:655" rev="footnote" title="Jump back to footnote 655 in the text">↩</a></p>
+</li>
+<li id="fn:656">
+<p>Another thing <a href="#fnref:656" rev="footnote" title="Jump back to footnote 656 in the text">↩</a></p>
+</li>
+<li id="fn:657">
+<p>Another thing <a href="#fnref:657" rev="footnote" title="Jump back to footnote 657 in the text">↩</a></p>
+</li>
+<li id="fn:658">
+<p>Another thing <a href="#fnref:658" rev="footnote" title="Jump back to footnote 658 in the text">↩</a></p>
+</li>
+<li id="fn:659">
+<p>Another thing <a href="#fnref:659" rev="footnote" title="Jump back to footnote 659 in the text">↩</a></p>
+</li>
+<li id="fn:660">
+<p>Another thing <a href="#fnref:660" rev="footnote" title="Jump back to footnote 660 in the text">↩</a></p>
+</li>
+<li id="fn:661">
+<p>Another thing <a href="#fnref:661" rev="footnote" title="Jump back to footnote 661 in the text">↩</a></p>
+</li>
+<li id="fn:662">
+<p>Another thing <a href="#fnref:662" rev="footnote" title="Jump back to footnote 662 in the text">↩</a></p>
+</li>
+<li id="fn:663">
+<p>Another thing <a href="#fnref:663" rev="footnote" title="Jump back to footnote 663 in the text">↩</a></p>
+</li>
+<li id="fn:664">
+<p>Another thing <a href="#fnref:664" rev="footnote" title="Jump back to footnote 664 in the text">↩</a></p>
+</li>
+<li id="fn:665">
+<p>Another thing <a href="#fnref:665" rev="footnote" title="Jump back to footnote 665 in the text">↩</a></p>
+</li>
+<li id="fn:666">
+<p>Another thing <a href="#fnref:666" rev="footnote" title="Jump back to footnote 666 in the text">↩</a></p>
+</li>
+<li id="fn:667">
+<p>Another thing <a href="#fnref:667" rev="footnote" title="Jump back to footnote 667 in the text">↩</a></p>
+</li>
+<li id="fn:668">
+<p>Another thing <a href="#fnref:668" rev="footnote" title="Jump back to footnote 668 in the text">↩</a></p>
+</li>
+<li id="fn:669">
+<p>Another thing <a href="#fnref:669" rev="footnote" title="Jump back to footnote 669 in the text">↩</a></p>
+</li>
+<li id="fn:670">
+<p>Another thing <a href="#fnref:670" rev="footnote" title="Jump back to footnote 670 in the text">↩</a></p>
+</li>
+<li id="fn:671">
+<p>Another thing <a href="#fnref:671" rev="footnote" title="Jump back to footnote 671 in the text">↩</a></p>
+</li>
+<li id="fn:672">
+<p>Another thing <a href="#fnref:672" rev="footnote" title="Jump back to footnote 672 in the text">↩</a></p>
+</li>
+<li id="fn:673">
+<p>Another thing <a href="#fnref:673" rev="footnote" title="Jump back to footnote 673 in the text">↩</a></p>
+</li>
+<li id="fn:674">
+<p>Another thing <a href="#fnref:674" rev="footnote" title="Jump back to footnote 674 in the text">↩</a></p>
+</li>
+<li id="fn:675">
+<p>Another thing <a href="#fnref:675" rev="footnote" title="Jump back to footnote 675 in the text">↩</a></p>
+</li>
+<li id="fn:676">
+<p>Another thing <a href="#fnref:676" rev="footnote" title="Jump back to footnote 676 in the text">↩</a></p>
+</li>
+<li id="fn:677">
+<p>Another thing <a href="#fnref:677" rev="footnote" title="Jump back to footnote 677 in the text">↩</a></p>
+</li>
+<li id="fn:678">
+<p>Another thing <a href="#fnref:678" rev="footnote" title="Jump back to footnote 678 in the text">↩</a></p>
+</li>
+<li id="fn:679">
+<p>Another thing <a href="#fnref:679" rev="footnote" title="Jump back to footnote 679 in the text">↩</a></p>
+</li>
+<li id="fn:680">
+<p>Another thing <a href="#fnref:680" rev="footnote" title="Jump back to footnote 680 in the text">↩</a></p>
+</li>
+<li id="fn:681">
+<p>Another thing <a href="#fnref:681" rev="footnote" title="Jump back to footnote 681 in the text">↩</a></p>
+</li>
+<li id="fn:682">
+<p>Another thing <a href="#fnref:682" rev="footnote" title="Jump back to footnote 682 in the text">↩</a></p>
+</li>
+<li id="fn:683">
+<p>Another thing <a href="#fnref:683" rev="footnote" title="Jump back to footnote 683 in the text">↩</a></p>
+</li>
+<li id="fn:684">
+<p>Another thing <a href="#fnref:684" rev="footnote" title="Jump back to footnote 684 in the text">↩</a></p>
+</li>
+<li id="fn:685">
+<p>Another thing <a href="#fnref:685" rev="footnote" title="Jump back to footnote 685 in the text">↩</a></p>
+</li>
+<li id="fn:686">
+<p>Another thing <a href="#fnref:686" rev="footnote" title="Jump back to footnote 686 in the text">↩</a></p>
+</li>
+<li id="fn:687">
+<p>Another thing <a href="#fnref:687" rev="footnote" title="Jump back to footnote 687 in the text">↩</a></p>
+</li>
+<li id="fn:688">
+<p>Another thing <a href="#fnref:688" rev="footnote" title="Jump back to footnote 688 in the text">↩</a></p>
+</li>
+<li id="fn:689">
+<p>Another thing <a href="#fnref:689" rev="footnote" title="Jump back to footnote 689 in the text">↩</a></p>
+</li>
+<li id="fn:690">
+<p>Another thing <a href="#fnref:690" rev="footnote" title="Jump back to footnote 690 in the text">↩</a></p>
+</li>
+<li id="fn:691">
+<p>Another thing <a href="#fnref:691" rev="footnote" title="Jump back to footnote 691 in the text">↩</a></p>
+</li>
+<li id="fn:692">
+<p>Another thing <a href="#fnref:692" rev="footnote" title="Jump back to footnote 692 in the text">↩</a></p>
+</li>
+<li id="fn:693">
+<p>Another thing <a href="#fnref:693" rev="footnote" title="Jump back to footnote 693 in the text">↩</a></p>
+</li>
+<li id="fn:694">
+<p>Another thing <a href="#fnref:694" rev="footnote" title="Jump back to footnote 694 in the text">↩</a></p>
+</li>
+<li id="fn:695">
+<p>Another thing <a href="#fnref:695" rev="footnote" title="Jump back to footnote 695 in the text">↩</a></p>
+</li>
+<li id="fn:696">
+<p>Another thing <a href="#fnref:696" rev="footnote" title="Jump back to footnote 696 in the text">↩</a></p>
+</li>
+<li id="fn:697">
+<p>Another thing <a href="#fnref:697" rev="footnote" title="Jump back to footnote 697 in the text">↩</a></p>
+</li>
+<li id="fn:698">
+<p>Another thing <a href="#fnref:698" rev="footnote" title="Jump back to footnote 698 in the text">↩</a></p>
+</li>
+<li id="fn:699">
+<p>Another thing <a href="#fnref:699" rev="footnote" title="Jump back to footnote 699 in the text">↩</a></p>
+</li>
+<li id="fn:700">
+<p>Another thing <a href="#fnref:700" rev="footnote" title="Jump back to footnote 700 in the text">↩</a></p>
+</li>
+<li id="fn:701">
+<p>Another thing <a href="#fnref:701" rev="footnote" title="Jump back to footnote 701 in the text">↩</a></p>
+</li>
+<li id="fn:702">
+<p>Another thing <a href="#fnref:702" rev="footnote" title="Jump back to footnote 702 in the text">↩</a></p>
+</li>
+<li id="fn:703">
+<p>Another thing <a href="#fnref:703" rev="footnote" title="Jump back to footnote 703 in the text">↩</a></p>
+</li>
+<li id="fn:704">
+<p>Another thing <a href="#fnref:704" rev="footnote" title="Jump back to footnote 704 in the text">↩</a></p>
+</li>
+<li id="fn:705">
+<p>Another thing <a href="#fnref:705" rev="footnote" title="Jump back to footnote 705 in the text">↩</a></p>
+</li>
+<li id="fn:706">
+<p>Another thing <a href="#fnref:706" rev="footnote" title="Jump back to footnote 706 in the text">↩</a></p>
+</li>
+<li id="fn:707">
+<p>Another thing <a href="#fnref:707" rev="footnote" title="Jump back to footnote 707 in the text">↩</a></p>
+</li>
+<li id="fn:708">
+<p>Another thing <a href="#fnref:708" rev="footnote" title="Jump back to footnote 708 in the text">↩</a></p>
+</li>
+<li id="fn:709">
+<p>Another thing <a href="#fnref:709" rev="footnote" title="Jump back to footnote 709 in the text">↩</a></p>
+</li>
+<li id="fn:710">
+<p>Another thing <a href="#fnref:710" rev="footnote" title="Jump back to footnote 710 in the text">↩</a></p>
+</li>
+<li id="fn:711">
+<p>Another thing <a href="#fnref:711" rev="footnote" title="Jump back to footnote 711 in the text">↩</a></p>
+</li>
+<li id="fn:712">
+<p>Another thing <a href="#fnref:712" rev="footnote" title="Jump back to footnote 712 in the text">↩</a></p>
+</li>
+<li id="fn:713">
+<p>Another thing <a href="#fnref:713" rev="footnote" title="Jump back to footnote 713 in the text">↩</a></p>
+</li>
+<li id="fn:714">
+<p>Another thing <a href="#fnref:714" rev="footnote" title="Jump back to footnote 714 in the text">↩</a></p>
+</li>
+<li id="fn:715">
+<p>Another thing <a href="#fnref:715" rev="footnote" title="Jump back to footnote 715 in the text">↩</a></p>
+</li>
+<li id="fn:716">
+<p>Another thing <a href="#fnref:716" rev="footnote" title="Jump back to footnote 716 in the text">↩</a></p>
+</li>
+<li id="fn:717">
+<p>Another thing <a href="#fnref:717" rev="footnote" title="Jump back to footnote 717 in the text">↩</a></p>
+</li>
+<li id="fn:718">
+<p>Another thing <a href="#fnref:718" rev="footnote" title="Jump back to footnote 718 in the text">↩</a></p>
+</li>
+<li id="fn:719">
+<p>Another thing <a href="#fnref:719" rev="footnote" title="Jump back to footnote 719 in the text">↩</a></p>
+</li>
+<li id="fn:720">
+<p>Another thing <a href="#fnref:720" rev="footnote" title="Jump back to footnote 720 in the text">↩</a></p>
+</li>
+<li id="fn:721">
+<p>Another thing <a href="#fnref:721" rev="footnote" title="Jump back to footnote 721 in the text">↩</a></p>
+</li>
+<li id="fn:722">
+<p>Another thing <a href="#fnref:722" rev="footnote" title="Jump back to footnote 722 in the text">↩</a></p>
+</li>
+<li id="fn:723">
+<p>Another thing <a href="#fnref:723" rev="footnote" title="Jump back to footnote 723 in the text">↩</a></p>
+</li>
+<li id="fn:724">
+<p>Another thing <a href="#fnref:724" rev="footnote" title="Jump back to footnote 724 in the text">↩</a></p>
+</li>
+<li id="fn:725">
+<p>Another thing <a href="#fnref:725" rev="footnote" title="Jump back to footnote 725 in the text">↩</a></p>
+</li>
+<li id="fn:726">
+<p>Another thing <a href="#fnref:726" rev="footnote" title="Jump back to footnote 726 in the text">↩</a></p>
+</li>
+<li id="fn:727">
+<p>Another thing <a href="#fnref:727" rev="footnote" title="Jump back to footnote 727 in the text">↩</a></p>
+</li>
+<li id="fn:728">
+<p>Another thing <a href="#fnref:728" rev="footnote" title="Jump back to footnote 728 in the text">↩</a></p>
+</li>
+<li id="fn:729">
+<p>Another thing <a href="#fnref:729" rev="footnote" title="Jump back to footnote 729 in the text">↩</a></p>
+</li>
+<li id="fn:730">
+<p>Another thing <a href="#fnref:730" rev="footnote" title="Jump back to footnote 730 in the text">↩</a></p>
+</li>
+<li id="fn:731">
+<p>Another thing <a href="#fnref:731" rev="footnote" title="Jump back to footnote 731 in the text">↩</a></p>
+</li>
+<li id="fn:732">
+<p>Another thing <a href="#fnref:732" rev="footnote" title="Jump back to footnote 732 in the text">↩</a></p>
+</li>
+<li id="fn:733">
+<p>Another thing <a href="#fnref:733" rev="footnote" title="Jump back to footnote 733 in the text">↩</a></p>
+</li>
+<li id="fn:734">
+<p>Another thing <a href="#fnref:734" rev="footnote" title="Jump back to footnote 734 in the text">↩</a></p>
+</li>
+<li id="fn:735">
+<p>Another thing <a href="#fnref:735" rev="footnote" title="Jump back to footnote 735 in the text">↩</a></p>
+</li>
+<li id="fn:736">
+<p>Another thing <a href="#fnref:736" rev="footnote" title="Jump back to footnote 736 in the text">↩</a></p>
+</li>
+<li id="fn:737">
+<p>Another thing <a href="#fnref:737" rev="footnote" title="Jump back to footnote 737 in the text">↩</a></p>
+</li>
+<li id="fn:738">
+<p>Another thing <a href="#fnref:738" rev="footnote" title="Jump back to footnote 738 in the text">↩</a></p>
+</li>
+<li id="fn:739">
+<p>Another thing <a href="#fnref:739" rev="footnote" title="Jump back to footnote 739 in the text">↩</a></p>
+</li>
+<li id="fn:740">
+<p>Another thing <a href="#fnref:740" rev="footnote" title="Jump back to footnote 740 in the text">↩</a></p>
+</li>
+<li id="fn:741">
+<p>Another thing <a href="#fnref:741" rev="footnote" title="Jump back to footnote 741 in the text">↩</a></p>
+</li>
+<li id="fn:742">
+<p>Another thing <a href="#fnref:742" rev="footnote" title="Jump back to footnote 742 in the text">↩</a></p>
+</li>
+<li id="fn:743">
+<p>Another thing <a href="#fnref:743" rev="footnote" title="Jump back to footnote 743 in the text">↩</a></p>
+</li>
+<li id="fn:744">
+<p>Another thing <a href="#fnref:744" rev="footnote" title="Jump back to footnote 744 in the text">↩</a></p>
+</li>
+<li id="fn:745">
+<p>Another thing <a href="#fnref:745" rev="footnote" title="Jump back to footnote 745 in the text">↩</a></p>
+</li>
+<li id="fn:746">
+<p>Another thing <a href="#fnref:746" rev="footnote" title="Jump back to footnote 746 in the text">↩</a></p>
+</li>
+<li id="fn:747">
+<p>Another thing <a href="#fnref:747" rev="footnote" title="Jump back to footnote 747 in the text">↩</a></p>
+</li>
+<li id="fn:748">
+<p>Another thing <a href="#fnref:748" rev="footnote" title="Jump back to footnote 748 in the text">↩</a></p>
+</li>
+<li id="fn:749">
+<p>Another thing <a href="#fnref:749" rev="footnote" title="Jump back to footnote 749 in the text">↩</a></p>
+</li>
+<li id="fn:750">
+<p>Another thing <a href="#fnref:750" rev="footnote" title="Jump back to footnote 750 in the text">↩</a></p>
+</li>
+<li id="fn:751">
+<p>Another thing <a href="#fnref:751" rev="footnote" title="Jump back to footnote 751 in the text">↩</a></p>
+</li>
+<li id="fn:752">
+<p>Another thing <a href="#fnref:752" rev="footnote" title="Jump back to footnote 752 in the text">↩</a></p>
+</li>
+<li id="fn:753">
+<p>Another thing <a href="#fnref:753" rev="footnote" title="Jump back to footnote 753 in the text">↩</a></p>
+</li>
+<li id="fn:754">
+<p>Another thing <a href="#fnref:754" rev="footnote" title="Jump back to footnote 754 in the text">↩</a></p>
+</li>
+<li id="fn:755">
+<p>Another thing <a href="#fnref:755" rev="footnote" title="Jump back to footnote 755 in the text">↩</a></p>
+</li>
+<li id="fn:756">
+<p>Another thing <a href="#fnref:756" rev="footnote" title="Jump back to footnote 756 in the text">↩</a></p>
+</li>
+<li id="fn:757">
+<p>Another thing <a href="#fnref:757" rev="footnote" title="Jump back to footnote 757 in the text">↩</a></p>
+</li>
+<li id="fn:758">
+<p>Another thing <a href="#fnref:758" rev="footnote" title="Jump back to footnote 758 in the text">↩</a></p>
+</li>
+<li id="fn:759">
+<p>Another thing <a href="#fnref:759" rev="footnote" title="Jump back to footnote 759 in the text">↩</a></p>
+</li>
+<li id="fn:760">
+<p>Another thing <a href="#fnref:760" rev="footnote" title="Jump back to footnote 760 in the text">↩</a></p>
+</li>
+<li id="fn:761">
+<p>Another thing <a href="#fnref:761" rev="footnote" title="Jump back to footnote 761 in the text">↩</a></p>
+</li>
+<li id="fn:762">
+<p>Another thing <a href="#fnref:762" rev="footnote" title="Jump back to footnote 762 in the text">↩</a></p>
+</li>
+<li id="fn:763">
+<p>Another thing <a href="#fnref:763" rev="footnote" title="Jump back to footnote 763 in the text">↩</a></p>
+</li>
+<li id="fn:764">
+<p>Another thing <a href="#fnref:764" rev="footnote" title="Jump back to footnote 764 in the text">↩</a></p>
+</li>
+<li id="fn:765">
+<p>Another thing <a href="#fnref:765" rev="footnote" title="Jump back to footnote 765 in the text">↩</a></p>
+</li>
+<li id="fn:766">
+<p>Another thing <a href="#fnref:766" rev="footnote" title="Jump back to footnote 766 in the text">↩</a></p>
+</li>
+<li id="fn:767">
+<p>Another thing <a href="#fnref:767" rev="footnote" title="Jump back to footnote 767 in the text">↩</a></p>
+</li>
+<li id="fn:768">
+<p>Another thing <a href="#fnref:768" rev="footnote" title="Jump back to footnote 768 in the text">↩</a></p>
+</li>
+<li id="fn:769">
+<p>Another thing <a href="#fnref:769" rev="footnote" title="Jump back to footnote 769 in the text">↩</a></p>
+</li>
+<li id="fn:770">
+<p>Another thing <a href="#fnref:770" rev="footnote" title="Jump back to footnote 770 in the text">↩</a></p>
+</li>
+<li id="fn:771">
+<p>Another thing <a href="#fnref:771" rev="footnote" title="Jump back to footnote 771 in the text">↩</a></p>
+</li>
+<li id="fn:772">
+<p>Another thing <a href="#fnref:772" rev="footnote" title="Jump back to footnote 772 in the text">↩</a></p>
+</li>
+<li id="fn:773">
+<p>Another thing <a href="#fnref:773" rev="footnote" title="Jump back to footnote 773 in the text">↩</a></p>
+</li>
+<li id="fn:774">
+<p>Another thing <a href="#fnref:774" rev="footnote" title="Jump back to footnote 774 in the text">↩</a></p>
+</li>
+<li id="fn:775">
+<p>Another thing <a href="#fnref:775" rev="footnote" title="Jump back to footnote 775 in the text">↩</a></p>
+</li>
+<li id="fn:776">
+<p>Another thing <a href="#fnref:776" rev="footnote" title="Jump back to footnote 776 in the text">↩</a></p>
+</li>
+<li id="fn:777">
+<p>Another thing <a href="#fnref:777" rev="footnote" title="Jump back to footnote 777 in the text">↩</a></p>
+</li>
+<li id="fn:778">
+<p>Another thing <a href="#fnref:778" rev="footnote" title="Jump back to footnote 778 in the text">↩</a></p>
+</li>
+<li id="fn:779">
+<p>Another thing <a href="#fnref:779" rev="footnote" title="Jump back to footnote 779 in the text">↩</a></p>
+</li>
+<li id="fn:780">
+<p>Another thing <a href="#fnref:780" rev="footnote" title="Jump back to footnote 780 in the text">↩</a></p>
+</li>
+<li id="fn:781">
+<p>Another thing <a href="#fnref:781" rev="footnote" title="Jump back to footnote 781 in the text">↩</a></p>
+</li>
+<li id="fn:782">
+<p>Another thing <a href="#fnref:782" rev="footnote" title="Jump back to footnote 782 in the text">↩</a></p>
+</li>
+<li id="fn:783">
+<p>Another thing <a href="#fnref:783" rev="footnote" title="Jump back to footnote 783 in the text">↩</a></p>
+</li>
+<li id="fn:784">
+<p>Another thing <a href="#fnref:784" rev="footnote" title="Jump back to footnote 784 in the text">↩</a></p>
+</li>
+<li id="fn:785">
+<p>Another thing <a href="#fnref:785" rev="footnote" title="Jump back to footnote 785 in the text">↩</a></p>
+</li>
+<li id="fn:786">
+<p>Another thing <a href="#fnref:786" rev="footnote" title="Jump back to footnote 786 in the text">↩</a></p>
+</li>
+<li id="fn:787">
+<p>Another thing <a href="#fnref:787" rev="footnote" title="Jump back to footnote 787 in the text">↩</a></p>
+</li>
+<li id="fn:788">
+<p>Another thing <a href="#fnref:788" rev="footnote" title="Jump back to footnote 788 in the text">↩</a></p>
+</li>
+<li id="fn:789">
+<p>Another thing <a href="#fnref:789" rev="footnote" title="Jump back to footnote 789 in the text">↩</a></p>
+</li>
+<li id="fn:790">
+<p>Another thing <a href="#fnref:790" rev="footnote" title="Jump back to footnote 790 in the text">↩</a></p>
+</li>
+<li id="fn:791">
+<p>Another thing <a href="#fnref:791" rev="footnote" title="Jump back to footnote 791 in the text">↩</a></p>
+</li>
+<li id="fn:792">
+<p>Another thing <a href="#fnref:792" rev="footnote" title="Jump back to footnote 792 in the text">↩</a></p>
+</li>
+<li id="fn:793">
+<p>Another thing <a href="#fnref:793" rev="footnote" title="Jump back to footnote 793 in the text">↩</a></p>
+</li>
+<li id="fn:794">
+<p>Another thing <a href="#fnref:794" rev="footnote" title="Jump back to footnote 794 in the text">↩</a></p>
+</li>
+<li id="fn:795">
+<p>Another thing <a href="#fnref:795" rev="footnote" title="Jump back to footnote 795 in the text">↩</a></p>
+</li>
+<li id="fn:796">
+<p>Another thing <a href="#fnref:796" rev="footnote" title="Jump back to footnote 796 in the text">↩</a></p>
+</li>
+<li id="fn:797">
+<p>Another thing <a href="#fnref:797" rev="footnote" title="Jump back to footnote 797 in the text">↩</a></p>
+</li>
+<li id="fn:798">
+<p>Another thing <a href="#fnref:798" rev="footnote" title="Jump back to footnote 798 in the text">↩</a></p>
+</li>
+<li id="fn:799">
+<p>Another thing <a href="#fnref:799" rev="footnote" title="Jump back to footnote 799 in the text">↩</a></p>
+</li>
+<li id="fn:800">
+<p>Another thing <a href="#fnref:800" rev="footnote" title="Jump back to footnote 800 in the text">↩</a></p>
+</li>
+<li id="fn:801">
+<p>Another thing <a href="#fnref:801" rev="footnote" title="Jump back to footnote 801 in the text">↩</a></p>
+</li>
+<li id="fn:802">
+<p>Another thing <a href="#fnref:802" rev="footnote" title="Jump back to footnote 802 in the text">↩</a></p>
+</li>
+<li id="fn:803">
+<p>Another thing <a href="#fnref:803" rev="footnote" title="Jump back to footnote 803 in the text">↩</a></p>
+</li>
+<li id="fn:804">
+<p>Another thing <a href="#fnref:804" rev="footnote" title="Jump back to footnote 804 in the text">↩</a></p>
+</li>
+<li id="fn:805">
+<p>Another thing <a href="#fnref:805" rev="footnote" title="Jump back to footnote 805 in the text">↩</a></p>
+</li>
+<li id="fn:806">
+<p>Another thing <a href="#fnref:806" rev="footnote" title="Jump back to footnote 806 in the text">↩</a></p>
+</li>
+<li id="fn:807">
+<p>Another thing <a href="#fnref:807" rev="footnote" title="Jump back to footnote 807 in the text">↩</a></p>
+</li>
+<li id="fn:808">
+<p>Another thing <a href="#fnref:808" rev="footnote" title="Jump back to footnote 808 in the text">↩</a></p>
+</li>
+<li id="fn:809">
+<p>Another thing <a href="#fnref:809" rev="footnote" title="Jump back to footnote 809 in the text">↩</a></p>
+</li>
+<li id="fn:810">
+<p>Another thing <a href="#fnref:810" rev="footnote" title="Jump back to footnote 810 in the text">↩</a></p>
+</li>
+<li id="fn:811">
+<p>Another thing <a href="#fnref:811" rev="footnote" title="Jump back to footnote 811 in the text">↩</a></p>
+</li>
+<li id="fn:812">
+<p>Another thing <a href="#fnref:812" rev="footnote" title="Jump back to footnote 812 in the text">↩</a></p>
+</li>
+<li id="fn:813">
+<p>Another thing <a href="#fnref:813" rev="footnote" title="Jump back to footnote 813 in the text">↩</a></p>
+</li>
+<li id="fn:814">
+<p>Another thing <a href="#fnref:814" rev="footnote" title="Jump back to footnote 814 in the text">↩</a></p>
+</li>
+<li id="fn:815">
+<p>Another thing <a href="#fnref:815" rev="footnote" title="Jump back to footnote 815 in the text">↩</a></p>
+</li>
+<li id="fn:816">
+<p>Another thing <a href="#fnref:816" rev="footnote" title="Jump back to footnote 816 in the text">↩</a></p>
+</li>
+<li id="fn:817">
+<p>Another thing <a href="#fnref:817" rev="footnote" title="Jump back to footnote 817 in the text">↩</a></p>
+</li>
+<li id="fn:818">
+<p>Another thing <a href="#fnref:818" rev="footnote" title="Jump back to footnote 818 in the text">↩</a></p>
+</li>
+<li id="fn:819">
+<p>Another thing <a href="#fnref:819" rev="footnote" title="Jump back to footnote 819 in the text">↩</a></p>
+</li>
+<li id="fn:820">
+<p>Another thing <a href="#fnref:820" rev="footnote" title="Jump back to footnote 820 in the text">↩</a></p>
+</li>
+<li id="fn:821">
+<p>Another thing <a href="#fnref:821" rev="footnote" title="Jump back to footnote 821 in the text">↩</a></p>
+</li>
+<li id="fn:822">
+<p>Another thing <a href="#fnref:822" rev="footnote" title="Jump back to footnote 822 in the text">↩</a></p>
+</li>
+<li id="fn:823">
+<p>Another thing <a href="#fnref:823" rev="footnote" title="Jump back to footnote 823 in the text">↩</a></p>
+</li>
+<li id="fn:824">
+<p>Another thing <a href="#fnref:824" rev="footnote" title="Jump back to footnote 824 in the text">↩</a></p>
+</li>
+<li id="fn:825">
+<p>Another thing <a href="#fnref:825" rev="footnote" title="Jump back to footnote 825 in the text">↩</a></p>
+</li>
+<li id="fn:826">
+<p>Another thing <a href="#fnref:826" rev="footnote" title="Jump back to footnote 826 in the text">↩</a></p>
+</li>
+<li id="fn:827">
+<p>Another thing <a href="#fnref:827" rev="footnote" title="Jump back to footnote 827 in the text">↩</a></p>
+</li>
+<li id="fn:828">
+<p>Another thing <a href="#fnref:828" rev="footnote" title="Jump back to footnote 828 in the text">↩</a></p>
+</li>
+<li id="fn:829">
+<p>Another thing <a href="#fnref:829" rev="footnote" title="Jump back to footnote 829 in the text">↩</a></p>
+</li>
+<li id="fn:830">
+<p>Another thing <a href="#fnref:830" rev="footnote" title="Jump back to footnote 830 in the text">↩</a></p>
+</li>
+<li id="fn:831">
+<p>Another thing <a href="#fnref:831" rev="footnote" title="Jump back to footnote 831 in the text">↩</a></p>
+</li>
+<li id="fn:832">
+<p>Another thing <a href="#fnref:832" rev="footnote" title="Jump back to footnote 832 in the text">↩</a></p>
+</li>
+<li id="fn:833">
+<p>Another thing <a href="#fnref:833" rev="footnote" title="Jump back to footnote 833 in the text">↩</a></p>
+</li>
+<li id="fn:834">
+<p>Another thing <a href="#fnref:834" rev="footnote" title="Jump back to footnote 834 in the text">↩</a></p>
+</li>
+<li id="fn:835">
+<p>Another thing <a href="#fnref:835" rev="footnote" title="Jump back to footnote 835 in the text">↩</a></p>
+</li>
+<li id="fn:836">
+<p>Another thing <a href="#fnref:836" rev="footnote" title="Jump back to footnote 836 in the text">↩</a></p>
+</li>
+<li id="fn:837">
+<p>Another thing <a href="#fnref:837" rev="footnote" title="Jump back to footnote 837 in the text">↩</a></p>
+</li>
+<li id="fn:838">
+<p>Another thing <a href="#fnref:838" rev="footnote" title="Jump back to footnote 838 in the text">↩</a></p>
+</li>
+<li id="fn:839">
+<p>Another thing <a href="#fnref:839" rev="footnote" title="Jump back to footnote 839 in the text">↩</a></p>
+</li>
+<li id="fn:840">
+<p>Another thing <a href="#fnref:840" rev="footnote" title="Jump back to footnote 840 in the text">↩</a></p>
+</li>
+<li id="fn:841">
+<p>Another thing <a href="#fnref:841" rev="footnote" title="Jump back to footnote 841 in the text">↩</a></p>
+</li>
+<li id="fn:842">
+<p>Another thing <a href="#fnref:842" rev="footnote" title="Jump back to footnote 842 in the text">↩</a></p>
+</li>
+<li id="fn:843">
+<p>Another thing <a href="#fnref:843" rev="footnote" title="Jump back to footnote 843 in the text">↩</a></p>
+</li>
+<li id="fn:844">
+<p>Another thing <a href="#fnref:844" rev="footnote" title="Jump back to footnote 844 in the text">↩</a></p>
+</li>
+<li id="fn:845">
+<p>Another thing <a href="#fnref:845" rev="footnote" title="Jump back to footnote 845 in the text">↩</a></p>
+</li>
+<li id="fn:846">
+<p>Another thing <a href="#fnref:846" rev="footnote" title="Jump back to footnote 846 in the text">↩</a></p>
+</li>
+<li id="fn:847">
+<p>Another thing <a href="#fnref:847" rev="footnote" title="Jump back to footnote 847 in the text">↩</a></p>
+</li>
+<li id="fn:848">
+<p>Another thing <a href="#fnref:848" rev="footnote" title="Jump back to footnote 848 in the text">↩</a></p>
+</li>
+<li id="fn:849">
+<p>Another thing <a href="#fnref:849" rev="footnote" title="Jump back to footnote 849 in the text">↩</a></p>
+</li>
+<li id="fn:850">
+<p>Another thing <a href="#fnref:850" rev="footnote" title="Jump back to footnote 850 in the text">↩</a></p>
+</li>
+<li id="fn:851">
+<p>Another thing <a href="#fnref:851" rev="footnote" title="Jump back to footnote 851 in the text">↩</a></p>
+</li>
+<li id="fn:852">
+<p>Another thing <a href="#fnref:852" rev="footnote" title="Jump back to footnote 852 in the text">↩</a></p>
+</li>
+<li id="fn:853">
+<p>Another thing <a href="#fnref:853" rev="footnote" title="Jump back to footnote 853 in the text">↩</a></p>
+</li>
+<li id="fn:854">
+<p>Another thing <a href="#fnref:854" rev="footnote" title="Jump back to footnote 854 in the text">↩</a></p>
+</li>
+<li id="fn:855">
+<p>Another thing <a href="#fnref:855" rev="footnote" title="Jump back to footnote 855 in the text">↩</a></p>
+</li>
+<li id="fn:856">
+<p>Another thing <a href="#fnref:856" rev="footnote" title="Jump back to footnote 856 in the text">↩</a></p>
+</li>
+<li id="fn:857">
+<p>Another thing <a href="#fnref:857" rev="footnote" title="Jump back to footnote 857 in the text">↩</a></p>
+</li>
+<li id="fn:858">
+<p>Another thing <a href="#fnref:858" rev="footnote" title="Jump back to footnote 858 in the text">↩</a></p>
+</li>
+<li id="fn:859">
+<p>Another thing <a href="#fnref:859" rev="footnote" title="Jump back to footnote 859 in the text">↩</a></p>
+</li>
+<li id="fn:860">
+<p>Another thing <a href="#fnref:860" rev="footnote" title="Jump back to footnote 860 in the text">↩</a></p>
+</li>
+<li id="fn:861">
+<p>Another thing <a href="#fnref:861" rev="footnote" title="Jump back to footnote 861 in the text">↩</a></p>
+</li>
+<li id="fn:862">
+<p>Another thing <a href="#fnref:862" rev="footnote" title="Jump back to footnote 862 in the text">↩</a></p>
+</li>
+<li id="fn:863">
+<p>Another thing <a href="#fnref:863" rev="footnote" title="Jump back to footnote 863 in the text">↩</a></p>
+</li>
+<li id="fn:864">
+<p>Another thing <a href="#fnref:864" rev="footnote" title="Jump back to footnote 864 in the text">↩</a></p>
+</li>
+<li id="fn:865">
+<p>Another thing <a href="#fnref:865" rev="footnote" title="Jump back to footnote 865 in the text">↩</a></p>
+</li>
+<li id="fn:866">
+<p>Another thing <a href="#fnref:866" rev="footnote" title="Jump back to footnote 866 in the text">↩</a></p>
+</li>
+<li id="fn:867">
+<p>Another thing <a href="#fnref:867" rev="footnote" title="Jump back to footnote 867 in the text">↩</a></p>
+</li>
+<li id="fn:868">
+<p>Another thing <a href="#fnref:868" rev="footnote" title="Jump back to footnote 868 in the text">↩</a></p>
+</li>
+<li id="fn:869">
+<p>Another thing <a href="#fnref:869" rev="footnote" title="Jump back to footnote 869 in the text">↩</a></p>
+</li>
+<li id="fn:870">
+<p>Another thing <a href="#fnref:870" rev="footnote" title="Jump back to footnote 870 in the text">↩</a></p>
+</li>
+<li id="fn:871">
+<p>Another thing <a href="#fnref:871" rev="footnote" title="Jump back to footnote 871 in the text">↩</a></p>
+</li>
+<li id="fn:872">
+<p>Another thing <a href="#fnref:872" rev="footnote" title="Jump back to footnote 872 in the text">↩</a></p>
+</li>
+<li id="fn:873">
+<p>Another thing <a href="#fnref:873" rev="footnote" title="Jump back to footnote 873 in the text">↩</a></p>
+</li>
+<li id="fn:874">
+<p>Another thing <a href="#fnref:874" rev="footnote" title="Jump back to footnote 874 in the text">↩</a></p>
+</li>
+<li id="fn:875">
+<p>Another thing <a href="#fnref:875" rev="footnote" title="Jump back to footnote 875 in the text">↩</a></p>
+</li>
+<li id="fn:876">
+<p>Another thing <a href="#fnref:876" rev="footnote" title="Jump back to footnote 876 in the text">↩</a></p>
+</li>
+<li id="fn:877">
+<p>Another thing <a href="#fnref:877" rev="footnote" title="Jump back to footnote 877 in the text">↩</a></p>
+</li>
+<li id="fn:878">
+<p>Another thing <a href="#fnref:878" rev="footnote" title="Jump back to footnote 878 in the text">↩</a></p>
+</li>
+<li id="fn:879">
+<p>Another thing <a href="#fnref:879" rev="footnote" title="Jump back to footnote 879 in the text">↩</a></p>
+</li>
+<li id="fn:880">
+<p>Another thing <a href="#fnref:880" rev="footnote" title="Jump back to footnote 880 in the text">↩</a></p>
+</li>
+<li id="fn:881">
+<p>Another thing <a href="#fnref:881" rev="footnote" title="Jump back to footnote 881 in the text">↩</a></p>
+</li>
+<li id="fn:882">
+<p>Another thing <a href="#fnref:882" rev="footnote" title="Jump back to footnote 882 in the text">↩</a></p>
+</li>
+<li id="fn:883">
+<p>Another thing <a href="#fnref:883" rev="footnote" title="Jump back to footnote 883 in the text">↩</a></p>
+</li>
+<li id="fn:884">
+<p>Another thing <a href="#fnref:884" rev="footnote" title="Jump back to footnote 884 in the text">↩</a></p>
+</li>
+<li id="fn:885">
+<p>Another thing <a href="#fnref:885" rev="footnote" title="Jump back to footnote 885 in the text">↩</a></p>
+</li>
+<li id="fn:886">
+<p>Another thing <a href="#fnref:886" rev="footnote" title="Jump back to footnote 886 in the text">↩</a></p>
+</li>
+<li id="fn:887">
+<p>Another thing <a href="#fnref:887" rev="footnote" title="Jump back to footnote 887 in the text">↩</a></p>
+</li>
+<li id="fn:888">
+<p>Another thing <a href="#fnref:888" rev="footnote" title="Jump back to footnote 888 in the text">↩</a></p>
+</li>
+<li id="fn:889">
+<p>Another thing <a href="#fnref:889" rev="footnote" title="Jump back to footnote 889 in the text">↩</a></p>
+</li>
+<li id="fn:890">
+<p>Another thing <a href="#fnref:890" rev="footnote" title="Jump back to footnote 890 in the text">↩</a></p>
+</li>
+<li id="fn:891">
+<p>Another thing <a href="#fnref:891" rev="footnote" title="Jump back to footnote 891 in the text">↩</a></p>
+</li>
+<li id="fn:892">
+<p>Another thing <a href="#fnref:892" rev="footnote" title="Jump back to footnote 892 in the text">↩</a></p>
+</li>
+<li id="fn:893">
+<p>Another thing <a href="#fnref:893" rev="footnote" title="Jump back to footnote 893 in the text">↩</a></p>
+</li>
+<li id="fn:894">
+<p>Another thing <a href="#fnref:894" rev="footnote" title="Jump back to footnote 894 in the text">↩</a></p>
+</li>
+<li id="fn:895">
+<p>Another thing <a href="#fnref:895" rev="footnote" title="Jump back to footnote 895 in the text">↩</a></p>
+</li>
+<li id="fn:896">
+<p>Another thing <a href="#fnref:896" rev="footnote" title="Jump back to footnote 896 in the text">↩</a></p>
+</li>
+<li id="fn:897">
+<p>Another thing <a href="#fnref:897" rev="footnote" title="Jump back to footnote 897 in the text">↩</a></p>
+</li>
+<li id="fn:898">
+<p>Another thing <a href="#fnref:898" rev="footnote" title="Jump back to footnote 898 in the text">↩</a></p>
+</li>
+<li id="fn:899">
+<p>Another thing <a href="#fnref:899" rev="footnote" title="Jump back to footnote 899 in the text">↩</a></p>
+</li>
+<li id="fn:900">
+<p>Another thing <a href="#fnref:900" rev="footnote" title="Jump back to footnote 900 in the text">↩</a></p>
+</li>
+<li id="fn:901">
+<p>Another thing <a href="#fnref:901" rev="footnote" title="Jump back to footnote 901 in the text">↩</a></p>
+</li>
+<li id="fn:902">
+<p>Another thing <a href="#fnref:902" rev="footnote" title="Jump back to footnote 902 in the text">↩</a></p>
+</li>
+<li id="fn:903">
+<p>Another thing <a href="#fnref:903" rev="footnote" title="Jump back to footnote 903 in the text">↩</a></p>
+</li>
+<li id="fn:904">
+<p>Another thing <a href="#fnref:904" rev="footnote" title="Jump back to footnote 904 in the text">↩</a></p>
+</li>
+<li id="fn:905">
+<p>Another thing <a href="#fnref:905" rev="footnote" title="Jump back to footnote 905 in the text">↩</a></p>
+</li>
+<li id="fn:906">
+<p>Another thing <a href="#fnref:906" rev="footnote" title="Jump back to footnote 906 in the text">↩</a></p>
+</li>
+<li id="fn:907">
+<p>Another thing <a href="#fnref:907" rev="footnote" title="Jump back to footnote 907 in the text">↩</a></p>
+</li>
+<li id="fn:908">
+<p>Another thing <a href="#fnref:908" rev="footnote" title="Jump back to footnote 908 in the text">↩</a></p>
+</li>
+<li id="fn:909">
+<p>Another thing <a href="#fnref:909" rev="footnote" title="Jump back to footnote 909 in the text">↩</a></p>
+</li>
+<li id="fn:910">
+<p>Another thing <a href="#fnref:910" rev="footnote" title="Jump back to footnote 910 in the text">↩</a></p>
+</li>
+<li id="fn:911">
+<p>Another thing <a href="#fnref:911" rev="footnote" title="Jump back to footnote 911 in the text">↩</a></p>
+</li>
+<li id="fn:912">
+<p>Another thing <a href="#fnref:912" rev="footnote" title="Jump back to footnote 912 in the text">↩</a></p>
+</li>
+<li id="fn:913">
+<p>Another thing <a href="#fnref:913" rev="footnote" title="Jump back to footnote 913 in the text">↩</a></p>
+</li>
+<li id="fn:914">
+<p>Another thing <a href="#fnref:914" rev="footnote" title="Jump back to footnote 914 in the text">↩</a></p>
+</li>
+<li id="fn:915">
+<p>Another thing <a href="#fnref:915" rev="footnote" title="Jump back to footnote 915 in the text">↩</a></p>
+</li>
+<li id="fn:916">
+<p>Another thing <a href="#fnref:916" rev="footnote" title="Jump back to footnote 916 in the text">↩</a></p>
+</li>
+<li id="fn:917">
+<p>Another thing <a href="#fnref:917" rev="footnote" title="Jump back to footnote 917 in the text">↩</a></p>
+</li>
+<li id="fn:918">
+<p>Another thing <a href="#fnref:918" rev="footnote" title="Jump back to footnote 918 in the text">↩</a></p>
+</li>
+<li id="fn:919">
+<p>Another thing <a href="#fnref:919" rev="footnote" title="Jump back to footnote 919 in the text">↩</a></p>
+</li>
+<li id="fn:920">
+<p>Another thing <a href="#fnref:920" rev="footnote" title="Jump back to footnote 920 in the text">↩</a></p>
+</li>
+<li id="fn:921">
+<p>Another thing <a href="#fnref:921" rev="footnote" title="Jump back to footnote 921 in the text">↩</a></p>
+</li>
+<li id="fn:922">
+<p>Another thing <a href="#fnref:922" rev="footnote" title="Jump back to footnote 922 in the text">↩</a></p>
+</li>
+<li id="fn:923">
+<p>Another thing <a href="#fnref:923" rev="footnote" title="Jump back to footnote 923 in the text">↩</a></p>
+</li>
+<li id="fn:924">
+<p>Another thing <a href="#fnref:924" rev="footnote" title="Jump back to footnote 924 in the text">↩</a></p>
+</li>
+<li id="fn:925">
+<p>Another thing <a href="#fnref:925" rev="footnote" title="Jump back to footnote 925 in the text">↩</a></p>
+</li>
+<li id="fn:926">
+<p>Another thing <a href="#fnref:926" rev="footnote" title="Jump back to footnote 926 in the text">↩</a></p>
+</li>
+<li id="fn:927">
+<p>Another thing <a href="#fnref:927" rev="footnote" title="Jump back to footnote 927 in the text">↩</a></p>
+</li>
+<li id="fn:928">
+<p>Another thing <a href="#fnref:928" rev="footnote" title="Jump back to footnote 928 in the text">↩</a></p>
+</li>
+<li id="fn:929">
+<p>Another thing <a href="#fnref:929" rev="footnote" title="Jump back to footnote 929 in the text">↩</a></p>
+</li>
+<li id="fn:930">
+<p>Another thing <a href="#fnref:930" rev="footnote" title="Jump back to footnote 930 in the text">↩</a></p>
+</li>
+<li id="fn:931">
+<p>Another thing <a href="#fnref:931" rev="footnote" title="Jump back to footnote 931 in the text">↩</a></p>
+</li>
+<li id="fn:932">
+<p>Another thing <a href="#fnref:932" rev="footnote" title="Jump back to footnote 932 in the text">↩</a></p>
+</li>
+<li id="fn:933">
+<p>Another thing <a href="#fnref:933" rev="footnote" title="Jump back to footnote 933 in the text">↩</a></p>
+</li>
+<li id="fn:934">
+<p>Another thing <a href="#fnref:934" rev="footnote" title="Jump back to footnote 934 in the text">↩</a></p>
+</li>
+<li id="fn:935">
+<p>Another thing <a href="#fnref:935" rev="footnote" title="Jump back to footnote 935 in the text">↩</a></p>
+</li>
+<li id="fn:936">
+<p>Another thing <a href="#fnref:936" rev="footnote" title="Jump back to footnote 936 in the text">↩</a></p>
+</li>
+<li id="fn:937">
+<p>Another thing <a href="#fnref:937" rev="footnote" title="Jump back to footnote 937 in the text">↩</a></p>
+</li>
+<li id="fn:938">
+<p>Another thing <a href="#fnref:938" rev="footnote" title="Jump back to footnote 938 in the text">↩</a></p>
+</li>
+<li id="fn:939">
+<p>Another thing <a href="#fnref:939" rev="footnote" title="Jump back to footnote 939 in the text">↩</a></p>
+</li>
+<li id="fn:940">
+<p>Another thing <a href="#fnref:940" rev="footnote" title="Jump back to footnote 940 in the text">↩</a></p>
+</li>
+<li id="fn:941">
+<p>Another thing <a href="#fnref:941" rev="footnote" title="Jump back to footnote 941 in the text">↩</a></p>
+</li>
+<li id="fn:942">
+<p>Another thing <a href="#fnref:942" rev="footnote" title="Jump back to footnote 942 in the text">↩</a></p>
+</li>
+<li id="fn:943">
+<p>Another thing <a href="#fnref:943" rev="footnote" title="Jump back to footnote 943 in the text">↩</a></p>
+</li>
+<li id="fn:944">
+<p>Another thing <a href="#fnref:944" rev="footnote" title="Jump back to footnote 944 in the text">↩</a></p>
+</li>
+<li id="fn:945">
+<p>Another thing <a href="#fnref:945" rev="footnote" title="Jump back to footnote 945 in the text">↩</a></p>
+</li>
+<li id="fn:946">
+<p>Another thing <a href="#fnref:946" rev="footnote" title="Jump back to footnote 946 in the text">↩</a></p>
+</li>
+<li id="fn:947">
+<p>Another thing <a href="#fnref:947" rev="footnote" title="Jump back to footnote 947 in the text">↩</a></p>
+</li>
+<li id="fn:948">
+<p>Another thing <a href="#fnref:948" rev="footnote" title="Jump back to footnote 948 in the text">↩</a></p>
+</li>
+<li id="fn:949">
+<p>Another thing <a href="#fnref:949" rev="footnote" title="Jump back to footnote 949 in the text">↩</a></p>
+</li>
+<li id="fn:950">
+<p>Another thing <a href="#fnref:950" rev="footnote" title="Jump back to footnote 950 in the text">↩</a></p>
+</li>
+<li id="fn:951">
+<p>Another thing <a href="#fnref:951" rev="footnote" title="Jump back to footnote 951 in the text">↩</a></p>
+</li>
+<li id="fn:952">
+<p>Another thing <a href="#fnref:952" rev="footnote" title="Jump back to footnote 952 in the text">↩</a></p>
+</li>
+<li id="fn:953">
+<p>Another thing <a href="#fnref:953" rev="footnote" title="Jump back to footnote 953 in the text">↩</a></p>
+</li>
+<li id="fn:954">
+<p>Another thing <a href="#fnref:954" rev="footnote" title="Jump back to footnote 954 in the text">↩</a></p>
+</li>
+<li id="fn:955">
+<p>Another thing <a href="#fnref:955" rev="footnote" title="Jump back to footnote 955 in the text">↩</a></p>
+</li>
+<li id="fn:956">
+<p>Another thing <a href="#fnref:956" rev="footnote" title="Jump back to footnote 956 in the text">↩</a></p>
+</li>
+<li id="fn:957">
+<p>Another thing <a href="#fnref:957" rev="footnote" title="Jump back to footnote 957 in the text">↩</a></p>
+</li>
+<li id="fn:958">
+<p>Another thing <a href="#fnref:958" rev="footnote" title="Jump back to footnote 958 in the text">↩</a></p>
+</li>
+<li id="fn:959">
+<p>Another thing <a href="#fnref:959" rev="footnote" title="Jump back to footnote 959 in the text">↩</a></p>
+</li>
+<li id="fn:960">
+<p>Another thing <a href="#fnref:960" rev="footnote" title="Jump back to footnote 960 in the text">↩</a></p>
+</li>
+<li id="fn:961">
+<p>Another thing <a href="#fnref:961" rev="footnote" title="Jump back to footnote 961 in the text">↩</a></p>
+</li>
+<li id="fn:962">
+<p>Another thing <a href="#fnref:962" rev="footnote" title="Jump back to footnote 962 in the text">↩</a></p>
+</li>
+<li id="fn:963">
+<p>Another thing <a href="#fnref:963" rev="footnote" title="Jump back to footnote 963 in the text">↩</a></p>
+</li>
+<li id="fn:964">
+<p>Another thing <a href="#fnref:964" rev="footnote" title="Jump back to footnote 964 in the text">↩</a></p>
+</li>
+<li id="fn:965">
+<p>Another thing <a href="#fnref:965" rev="footnote" title="Jump back to footnote 965 in the text">↩</a></p>
+</li>
+<li id="fn:966">
+<p>Another thing <a href="#fnref:966" rev="footnote" title="Jump back to footnote 966 in the text">↩</a></p>
+</li>
+<li id="fn:967">
+<p>Another thing <a href="#fnref:967" rev="footnote" title="Jump back to footnote 967 in the text">↩</a></p>
+</li>
+<li id="fn:968">
+<p>Another thing <a href="#fnref:968" rev="footnote" title="Jump back to footnote 968 in the text">↩</a></p>
+</li>
+<li id="fn:969">
+<p>Another thing <a href="#fnref:969" rev="footnote" title="Jump back to footnote 969 in the text">↩</a></p>
+</li>
+<li id="fn:970">
+<p>Another thing <a href="#fnref:970" rev="footnote" title="Jump back to footnote 970 in the text">↩</a></p>
+</li>
+<li id="fn:971">
+<p>Another thing <a href="#fnref:971" rev="footnote" title="Jump back to footnote 971 in the text">↩</a></p>
+</li>
+<li id="fn:972">
+<p>Another thing <a href="#fnref:972" rev="footnote" title="Jump back to footnote 972 in the text">↩</a></p>
+</li>
+<li id="fn:973">
+<p>Another thing <a href="#fnref:973" rev="footnote" title="Jump back to footnote 973 in the text">↩</a></p>
+</li>
+<li id="fn:974">
+<p>Another thing <a href="#fnref:974" rev="footnote" title="Jump back to footnote 974 in the text">↩</a></p>
+</li>
+<li id="fn:975">
+<p>Another thing <a href="#fnref:975" rev="footnote" title="Jump back to footnote 975 in the text">↩</a></p>
+</li>
+<li id="fn:976">
+<p>Another thing <a href="#fnref:976" rev="footnote" title="Jump back to footnote 976 in the text">↩</a></p>
+</li>
+<li id="fn:977">
+<p>Another thing <a href="#fnref:977" rev="footnote" title="Jump back to footnote 977 in the text">↩</a></p>
+</li>
+<li id="fn:978">
+<p>Another thing <a href="#fnref:978" rev="footnote" title="Jump back to footnote 978 in the text">↩</a></p>
+</li>
+<li id="fn:979">
+<p>Another thing <a href="#fnref:979" rev="footnote" title="Jump back to footnote 979 in the text">↩</a></p>
+</li>
+<li id="fn:980">
+<p>Another thing <a href="#fnref:980" rev="footnote" title="Jump back to footnote 980 in the text">↩</a></p>
+</li>
+<li id="fn:981">
+<p>Another thing <a href="#fnref:981" rev="footnote" title="Jump back to footnote 981 in the text">↩</a></p>
+</li>
+<li id="fn:982">
+<p>Another thing <a href="#fnref:982" rev="footnote" title="Jump back to footnote 982 in the text">↩</a></p>
+</li>
+<li id="fn:983">
+<p>Another thing <a href="#fnref:983" rev="footnote" title="Jump back to footnote 983 in the text">↩</a></p>
+</li>
+<li id="fn:984">
+<p>Another thing <a href="#fnref:984" rev="footnote" title="Jump back to footnote 984 in the text">↩</a></p>
+</li>
+<li id="fn:985">
+<p>Another thing <a href="#fnref:985" rev="footnote" title="Jump back to footnote 985 in the text">↩</a></p>
+</li>
+<li id="fn:986">
+<p>Another thing <a href="#fnref:986" rev="footnote" title="Jump back to footnote 986 in the text">↩</a></p>
+</li>
+<li id="fn:987">
+<p>Another thing <a href="#fnref:987" rev="footnote" title="Jump back to footnote 987 in the text">↩</a></p>
+</li>
+<li id="fn:988">
+<p>Another thing <a href="#fnref:988" rev="footnote" title="Jump back to footnote 988 in the text">↩</a></p>
+</li>
+<li id="fn:989">
+<p>Another thing <a href="#fnref:989" rev="footnote" title="Jump back to footnote 989 in the text">↩</a></p>
+</li>
+<li id="fn:990">
+<p>Another thing <a href="#fnref:990" rev="footnote" title="Jump back to footnote 990 in the text">↩</a></p>
+</li>
+<li id="fn:991">
+<p>Another thing <a href="#fnref:991" rev="footnote" title="Jump back to footnote 991 in the text">↩</a></p>
+</li>
+<li id="fn:992">
+<p>Another thing <a href="#fnref:992" rev="footnote" title="Jump back to footnote 992 in the text">↩</a></p>
+</li>
+<li id="fn:993">
+<p>Another thing <a href="#fnref:993" rev="footnote" title="Jump back to footnote 993 in the text">↩</a></p>
+</li>
+<li id="fn:994">
+<p>Another thing <a href="#fnref:994" rev="footnote" title="Jump back to footnote 994 in the text">↩</a></p>
+</li>
+<li id="fn:995">
+<p>Another thing <a href="#fnref:995" rev="footnote" title="Jump back to footnote 995 in the text">↩</a></p>
+</li>
+<li id="fn:996">
+<p>Another thing <a href="#fnref:996" rev="footnote" title="Jump back to footnote 996 in the text">↩</a></p>
+</li>
+<li id="fn:997">
+<p>Another thing <a href="#fnref:997" rev="footnote" title="Jump back to footnote 997 in the text">↩</a></p>
+</li>
+<li id="fn:998">
+<p>Another thing <a href="#fnref:998" rev="footnote" title="Jump back to footnote 998 in the text">↩</a></p>
+</li>
+<li id="fn:999">
+<p>Another thing <a href="#fnref:999" rev="footnote" title="Jump back to footnote 999 in the text">↩</a></p>
+</li>
+<li id="fn:1000">
+<p>Another thing <a href="#fnref:1000" rev="footnote" title="Jump back to footnote 1000 in the text">↩</a></p>
+</li>
+<li id="fn:1001">
+<p>Another thing <a href="#fnref:1001" rev="footnote" title="Jump back to footnote 1001 in the text">↩</a></p>
+</li>
+<li id="fn:1002">
+<p>Another thing <a href="#fnref:1002" rev="footnote" title="Jump back to footnote 1002 in the text">↩</a></p>
+</li>
+<li id="fn:1003">
+<p>Another thing <a href="#fnref:1003" rev="footnote" title="Jump back to footnote 1003 in the text">↩</a></p>
+</li>
+<li id="fn:1004">
+<p>Another thing <a href="#fnref:1004" rev="footnote" title="Jump back to footnote 1004 in the text">↩</a></p>
+</li>
+<li id="fn:1005">
+<p>Another thing <a href="#fnref:1005" rev="footnote" title="Jump back to footnote 1005 in the text">↩</a></p>
+</li>
+<li id="fn:1006">
+<p>Another thing <a href="#fnref:1006" rev="footnote" title="Jump back to footnote 1006 in the text">↩</a></p>
+</li>
+<li id="fn:1007">
+<p>Another thing <a href="#fnref:1007" rev="footnote" title="Jump back to footnote 1007 in the text">↩</a></p>
+</li>
+<li id="fn:1008">
+<p>Another thing <a href="#fnref:1008" rev="footnote" title="Jump back to footnote 1008 in the text">↩</a></p>
+</li>
+<li id="fn:1009">
+<p>Another thing <a href="#fnref:1009" rev="footnote" title="Jump back to footnote 1009 in the text">↩</a></p>
+</li>
+<li id="fn:1010">
+<p>Another thing <a href="#fnref:1010" rev="footnote" title="Jump back to footnote 1010 in the text">↩</a></p>
+</li>
+<li id="fn:1011">
+<p>Another thing <a href="#fnref:1011" rev="footnote" title="Jump back to footnote 1011 in the text">↩</a></p>
+</li>
+<li id="fn:1012">
+<p>Another thing <a href="#fnref:1012" rev="footnote" title="Jump back to footnote 1012 in the text">↩</a></p>
+</li>
+<li id="fn:1013">
+<p>Another thing <a href="#fnref:1013" rev="footnote" title="Jump back to footnote 1013 in the text">↩</a></p>
+</li>
+<li id="fn:1014">
+<p>Another thing <a href="#fnref:1014" rev="footnote" title="Jump back to footnote 1014 in the text">↩</a></p>
+</li>
+<li id="fn:1015">
+<p>Another thing <a href="#fnref:1015" rev="footnote" title="Jump back to footnote 1015 in the text">↩</a></p>
+</li>
+<li id="fn:1016">
+<p>Another thing <a href="#fnref:1016" rev="footnote" title="Jump back to footnote 1016 in the text">↩</a></p>
+</li>
+<li id="fn:1017">
+<p>Another thing <a href="#fnref:1017" rev="footnote" title="Jump back to footnote 1017 in the text">↩</a></p>
+</li>
+<li id="fn:1018">
+<p>Another thing <a href="#fnref:1018" rev="footnote" title="Jump back to footnote 1018 in the text">↩</a></p>
+</li>
+<li id="fn:1019">
+<p>Another thing <a href="#fnref:1019" rev="footnote" title="Jump back to footnote 1019 in the text">↩</a></p>
+</li>
+<li id="fn:1020">
+<p>Another thing <a href="#fnref:1020" rev="footnote" title="Jump back to footnote 1020 in the text">↩</a></p>
+</li>
+<li id="fn:1021">
+<p>Another thing <a href="#fnref:1021" rev="footnote" title="Jump back to footnote 1021 in the text">↩</a></p>
+</li>
+<li id="fn:1022">
+<p>Another thing <a href="#fnref:1022" rev="footnote" title="Jump back to footnote 1022 in the text">↩</a></p>
+</li>
+<li id="fn:1023">
+<p>Another thing <a href="#fnref:1023" rev="footnote" title="Jump back to footnote 1023 in the text">↩</a></p>
+</li>
+<li id="fn:1024">
+<p>Another thing <a href="#fnref:1024" rev="footnote" title="Jump back to footnote 1024 in the text">↩</a></p>
+</li>
+<li id="fn:1025">
+<p>Another thing <a href="#fnref:1025" rev="footnote" title="Jump back to footnote 1025 in the text">↩</a></p>
+</li>
+<li id="fn:1026">
+<p>Another thing <a href="#fnref:1026" rev="footnote" title="Jump back to footnote 1026 in the text">↩</a></p>
+</li>
+<li id="fn:1027">
+<p>Another thing <a href="#fnref:1027" rev="footnote" title="Jump back to footnote 1027 in the text">↩</a></p>
+</li>
+<li id="fn:1028">
+<p>Another thing <a href="#fnref:1028" rev="footnote" title="Jump back to footnote 1028 in the text">↩</a></p>
+</li>
+<li id="fn:1029">
+<p>Another thing <a href="#fnref:1029" rev="footnote" title="Jump back to footnote 1029 in the text">↩</a></p>
+</li>
+<li id="fn:1030">
+<p>Another thing <a href="#fnref:1030" rev="footnote" title="Jump back to footnote 1030 in the text">↩</a></p>
+</li>
+<li id="fn:1031">
+<p>Another thing <a href="#fnref:1031" rev="footnote" title="Jump back to footnote 1031 in the text">↩</a></p>
+</li>
+<li id="fn:1032">
+<p>Another thing <a href="#fnref:1032" rev="footnote" title="Jump back to footnote 1032 in the text">↩</a></p>
+</li>
+<li id="fn:1033">
+<p>Another thing <a href="#fnref:1033" rev="footnote" title="Jump back to footnote 1033 in the text">↩</a></p>
+</li>
+<li id="fn:1034">
+<p>Another thing <a href="#fnref:1034" rev="footnote" title="Jump back to footnote 1034 in the text">↩</a></p>
+</li>
+<li id="fn:1035">
+<p>Another thing <a href="#fnref:1035" rev="footnote" title="Jump back to footnote 1035 in the text">↩</a></p>
+</li>
+<li id="fn:1036">
+<p>Another thing <a href="#fnref:1036" rev="footnote" title="Jump back to footnote 1036 in the text">↩</a></p>
+</li>
+<li id="fn:1037">
+<p>Another thing <a href="#fnref:1037" rev="footnote" title="Jump back to footnote 1037 in the text">↩</a></p>
+</li>
+<li id="fn:1038">
+<p>Another thing <a href="#fnref:1038" rev="footnote" title="Jump back to footnote 1038 in the text">↩</a></p>
+</li>
+<li id="fn:1039">
+<p>Another thing <a href="#fnref:1039" rev="footnote" title="Jump back to footnote 1039 in the text">↩</a></p>
+</li>
+<li id="fn:1040">
+<p>Another thing <a href="#fnref:1040" rev="footnote" title="Jump back to footnote 1040 in the text">↩</a></p>
+</li>
+<li id="fn:1041">
+<p>Another thing <a href="#fnref:1041" rev="footnote" title="Jump back to footnote 1041 in the text">↩</a></p>
+</li>
+<li id="fn:1042">
+<p>Another thing <a href="#fnref:1042" rev="footnote" title="Jump back to footnote 1042 in the text">↩</a></p>
+</li>
+<li id="fn:1043">
+<p>Another thing <a href="#fnref:1043" rev="footnote" title="Jump back to footnote 1043 in the text">↩</a></p>
+</li>
+<li id="fn:1044">
+<p>Another thing <a href="#fnref:1044" rev="footnote" title="Jump back to footnote 1044 in the text">↩</a></p>
+</li>
+<li id="fn:1045">
+<p>Another thing <a href="#fnref:1045" rev="footnote" title="Jump back to footnote 1045 in the text">↩</a></p>
+</li>
+<li id="fn:1046">
+<p>Another thing <a href="#fnref:1046" rev="footnote" title="Jump back to footnote 1046 in the text">↩</a></p>
+</li>
+<li id="fn:1047">
+<p>Another thing <a href="#fnref:1047" rev="footnote" title="Jump back to footnote 1047 in the text">↩</a></p>
+</li>
+<li id="fn:1048">
+<p>Another thing <a href="#fnref:1048" rev="footnote" title="Jump back to footnote 1048 in the text">↩</a></p>
+</li>
+<li id="fn:1049">
+<p>Another thing <a href="#fnref:1049" rev="footnote" title="Jump back to footnote 1049 in the text">↩</a></p>
+</li>
+<li id="fn:1050">
+<p>Another thing <a href="#fnref:1050" rev="footnote" title="Jump back to footnote 1050 in the text">↩</a></p>
+</li>
+<li id="fn:1051">
+<p>Another thing <a href="#fnref:1051" rev="footnote" title="Jump back to footnote 1051 in the text">↩</a></p>
+</li>
+<li id="fn:1052">
+<p>Another thing <a href="#fnref:1052" rev="footnote" title="Jump back to footnote 1052 in the text">↩</a></p>
+</li>
+<li id="fn:1053">
+<p>Another thing <a href="#fnref:1053" rev="footnote" title="Jump back to footnote 1053 in the text">↩</a></p>
+</li>
+<li id="fn:1054">
+<p>Another thing <a href="#fnref:1054" rev="footnote" title="Jump back to footnote 1054 in the text">↩</a></p>
+</li>
+<li id="fn:1055">
+<p>Another thing <a href="#fnref:1055" rev="footnote" title="Jump back to footnote 1055 in the text">↩</a></p>
+</li>
+<li id="fn:1056">
+<p>Another thing <a href="#fnref:1056" rev="footnote" title="Jump back to footnote 1056 in the text">↩</a></p>
+</li>
+<li id="fn:1057">
+<p>Another thing <a href="#fnref:1057" rev="footnote" title="Jump back to footnote 1057 in the text">↩</a></p>
+</li>
+<li id="fn:1058">
+<p>Another thing <a href="#fnref:1058" rev="footnote" title="Jump back to footnote 1058 in the text">↩</a></p>
+</li>
+<li id="fn:1059">
+<p>Another thing <a href="#fnref:1059" rev="footnote" title="Jump back to footnote 1059 in the text">↩</a></p>
+</li>
+<li id="fn:1060">
+<p>Another thing <a href="#fnref:1060" rev="footnote" title="Jump back to footnote 1060 in the text">↩</a></p>
+</li>
+<li id="fn:1061">
+<p>Another thing <a href="#fnref:1061" rev="footnote" title="Jump back to footnote 1061 in the text">↩</a></p>
+</li>
+<li id="fn:1062">
+<p>Another thing <a href="#fnref:1062" rev="footnote" title="Jump back to footnote 1062 in the text">↩</a></p>
+</li>
+<li id="fn:1063">
+<p>Another thing <a href="#fnref:1063" rev="footnote" title="Jump back to footnote 1063 in the text">↩</a></p>
+</li>
+<li id="fn:1064">
+<p>Another thing <a href="#fnref:1064" rev="footnote" title="Jump back to footnote 1064 in the text">↩</a></p>
+</li>
+<li id="fn:1065">
+<p>Another thing <a href="#fnref:1065" rev="footnote" title="Jump back to footnote 1065 in the text">↩</a></p>
+</li>
+<li id="fn:1066">
+<p>Another thing <a href="#fnref:1066" rev="footnote" title="Jump back to footnote 1066 in the text">↩</a></p>
+</li>
+<li id="fn:1067">
+<p>Another thing <a href="#fnref:1067" rev="footnote" title="Jump back to footnote 1067 in the text">↩</a></p>
+</li>
+<li id="fn:1068">
+<p>Another thing <a href="#fnref:1068" rev="footnote" title="Jump back to footnote 1068 in the text">↩</a></p>
+</li>
+<li id="fn:1069">
+<p>Another thing <a href="#fnref:1069" rev="footnote" title="Jump back to footnote 1069 in the text">↩</a></p>
+</li>
+<li id="fn:1070">
+<p>Another thing <a href="#fnref:1070" rev="footnote" title="Jump back to footnote 1070 in the text">↩</a></p>
+</li>
+<li id="fn:1071">
+<p>Another thing <a href="#fnref:1071" rev="footnote" title="Jump back to footnote 1071 in the text">↩</a></p>
+</li>
+<li id="fn:1072">
+<p>Another thing <a href="#fnref:1072" rev="footnote" title="Jump back to footnote 1072 in the text">↩</a></p>
+</li>
+<li id="fn:1073">
+<p>Another thing <a href="#fnref:1073" rev="footnote" title="Jump back to footnote 1073 in the text">↩</a></p>
+</li>
+<li id="fn:1074">
+<p>Another thing <a href="#fnref:1074" rev="footnote" title="Jump back to footnote 1074 in the text">↩</a></p>
+</li>
+<li id="fn:1075">
+<p>Another thing <a href="#fnref:1075" rev="footnote" title="Jump back to footnote 1075 in the text">↩</a></p>
+</li>
+<li id="fn:1076">
+<p>Another thing <a href="#fnref:1076" rev="footnote" title="Jump back to footnote 1076 in the text">↩</a></p>
+</li>
+<li id="fn:1077">
+<p>Another thing <a href="#fnref:1077" rev="footnote" title="Jump back to footnote 1077 in the text">↩</a></p>
+</li>
+<li id="fn:1078">
+<p>Another thing <a href="#fnref:1078" rev="footnote" title="Jump back to footnote 1078 in the text">↩</a></p>
+</li>
+<li id="fn:1079">
+<p>Another thing <a href="#fnref:1079" rev="footnote" title="Jump back to footnote 1079 in the text">↩</a></p>
+</li>
+<li id="fn:1080">
+<p>Another thing <a href="#fnref:1080" rev="footnote" title="Jump back to footnote 1080 in the text">↩</a></p>
+</li>
+<li id="fn:1081">
+<p>Another thing <a href="#fnref:1081" rev="footnote" title="Jump back to footnote 1081 in the text">↩</a></p>
+</li>
+<li id="fn:1082">
+<p>Another thing <a href="#fnref:1082" rev="footnote" title="Jump back to footnote 1082 in the text">↩</a></p>
+</li>
+<li id="fn:1083">
+<p>Another thing <a href="#fnref:1083" rev="footnote" title="Jump back to footnote 1083 in the text">↩</a></p>
+</li>
+<li id="fn:1084">
+<p>Another thing <a href="#fnref:1084" rev="footnote" title="Jump back to footnote 1084 in the text">↩</a></p>
+</li>
+<li id="fn:1085">
+<p>Another thing <a href="#fnref:1085" rev="footnote" title="Jump back to footnote 1085 in the text">↩</a></p>
+</li>
+<li id="fn:1086">
+<p>Another thing <a href="#fnref:1086" rev="footnote" title="Jump back to footnote 1086 in the text">↩</a></p>
+</li>
+<li id="fn:1087">
+<p>Another thing <a href="#fnref:1087" rev="footnote" title="Jump back to footnote 1087 in the text">↩</a></p>
+</li>
+<li id="fn:1088">
+<p>Another thing <a href="#fnref:1088" rev="footnote" title="Jump back to footnote 1088 in the text">↩</a></p>
+</li>
+<li id="fn:1089">
+<p>Another thing <a href="#fnref:1089" rev="footnote" title="Jump back to footnote 1089 in the text">↩</a></p>
+</li>
+<li id="fn:1090">
+<p>Another thing <a href="#fnref:1090" rev="footnote" title="Jump back to footnote 1090 in the text">↩</a></p>
+</li>
+<li id="fn:1091">
+<p>Another thing <a href="#fnref:1091" rev="footnote" title="Jump back to footnote 1091 in the text">↩</a></p>
+</li>
+<li id="fn:1092">
+<p>Another thing <a href="#fnref:1092" rev="footnote" title="Jump back to footnote 1092 in the text">↩</a></p>
+</li>
+<li id="fn:1093">
+<p>Another thing <a href="#fnref:1093" rev="footnote" title="Jump back to footnote 1093 in the text">↩</a></p>
+</li>
+<li id="fn:1094">
+<p>Another thing <a href="#fnref:1094" rev="footnote" title="Jump back to footnote 1094 in the text">↩</a></p>
+</li>
+<li id="fn:1095">
+<p>Another thing <a href="#fnref:1095" rev="footnote" title="Jump back to footnote 1095 in the text">↩</a></p>
+</li>
+<li id="fn:1096">
+<p>Another thing <a href="#fnref:1096" rev="footnote" title="Jump back to footnote 1096 in the text">↩</a></p>
+</li>
+<li id="fn:1097">
+<p>Another thing <a href="#fnref:1097" rev="footnote" title="Jump back to footnote 1097 in the text">↩</a></p>
+</li>
+<li id="fn:1098">
+<p>Another thing <a href="#fnref:1098" rev="footnote" title="Jump back to footnote 1098 in the text">↩</a></p>
+</li>
+<li id="fn:1099">
+<p>Another thing <a href="#fnref:1099" rev="footnote" title="Jump back to footnote 1099 in the text">↩</a></p>
+</li>
+<li id="fn:1100">
+<p>Another thing <a href="#fnref:1100" rev="footnote" title="Jump back to footnote 1100 in the text">↩</a></p>
+</li>
+<li id="fn:1101">
+<p>Another thing <a href="#fnref:1101" rev="footnote" title="Jump back to footnote 1101 in the text">↩</a></p>
+</li>
+<li id="fn:1102">
+<p>Another thing <a href="#fnref:1102" rev="footnote" title="Jump back to footnote 1102 in the text">↩</a></p>
+</li>
+<li id="fn:1103">
+<p>Another thing <a href="#fnref:1103" rev="footnote" title="Jump back to footnote 1103 in the text">↩</a></p>
+</li>
+<li id="fn:1104">
+<p>Another thing <a href="#fnref:1104" rev="footnote" title="Jump back to footnote 1104 in the text">↩</a></p>
+</li>
+<li id="fn:1105">
+<p>Another thing <a href="#fnref:1105" rev="footnote" title="Jump back to footnote 1105 in the text">↩</a></p>
+</li>
+<li id="fn:1106">
+<p>Another thing <a href="#fnref:1106" rev="footnote" title="Jump back to footnote 1106 in the text">↩</a></p>
+</li>
+<li id="fn:1107">
+<p>Another thing <a href="#fnref:1107" rev="footnote" title="Jump back to footnote 1107 in the text">↩</a></p>
+</li>
+<li id="fn:1108">
+<p>Another thing <a href="#fnref:1108" rev="footnote" title="Jump back to footnote 1108 in the text">↩</a></p>
+</li>
+<li id="fn:1109">
+<p>Another thing <a href="#fnref:1109" rev="footnote" title="Jump back to footnote 1109 in the text">↩</a></p>
+</li>
+<li id="fn:1110">
+<p>Another thing <a href="#fnref:1110" rev="footnote" title="Jump back to footnote 1110 in the text">↩</a></p>
+</li>
+<li id="fn:1111">
+<p>Another thing <a href="#fnref:1111" rev="footnote" title="Jump back to footnote 1111 in the text">↩</a></p>
+</li>
+<li id="fn:1112">
+<p>Another thing <a href="#fnref:1112" rev="footnote" title="Jump back to footnote 1112 in the text">↩</a></p>
+</li>
+<li id="fn:1113">
+<p>Another thing <a href="#fnref:1113" rev="footnote" title="Jump back to footnote 1113 in the text">↩</a></p>
+</li>
+<li id="fn:1114">
+<p>Another thing <a href="#fnref:1114" rev="footnote" title="Jump back to footnote 1114 in the text">↩</a></p>
+</li>
+<li id="fn:1115">
+<p>Another thing <a href="#fnref:1115" rev="footnote" title="Jump back to footnote 1115 in the text">↩</a></p>
+</li>
+<li id="fn:1116">
+<p>Another thing <a href="#fnref:1116" rev="footnote" title="Jump back to footnote 1116 in the text">↩</a></p>
+</li>
+<li id="fn:1117">
+<p>Another thing <a href="#fnref:1117" rev="footnote" title="Jump back to footnote 1117 in the text">↩</a></p>
+</li>
+<li id="fn:1118">
+<p>Another thing <a href="#fnref:1118" rev="footnote" title="Jump back to footnote 1118 in the text">↩</a></p>
+</li>
+<li id="fn:1119">
+<p>Another thing <a href="#fnref:1119" rev="footnote" title="Jump back to footnote 1119 in the text">↩</a></p>
+</li>
+<li id="fn:1120">
+<p>Another thing <a href="#fnref:1120" rev="footnote" title="Jump back to footnote 1120 in the text">↩</a></p>
+</li>
+<li id="fn:1121">
+<p>Another thing <a href="#fnref:1121" rev="footnote" title="Jump back to footnote 1121 in the text">↩</a></p>
+</li>
+<li id="fn:1122">
+<p>Another thing <a href="#fnref:1122" rev="footnote" title="Jump back to footnote 1122 in the text">↩</a></p>
+</li>
+<li id="fn:1123">
+<p>Another thing <a href="#fnref:1123" rev="footnote" title="Jump back to footnote 1123 in the text">↩</a></p>
+</li>
+<li id="fn:1124">
+<p>Another thing <a href="#fnref:1124" rev="footnote" title="Jump back to footnote 1124 in the text">↩</a></p>
+</li>
+<li id="fn:1125">
+<p>Another thing <a href="#fnref:1125" rev="footnote" title="Jump back to footnote 1125 in the text">↩</a></p>
+</li>
+<li id="fn:1126">
+<p>Another thing <a href="#fnref:1126" rev="footnote" title="Jump back to footnote 1126 in the text">↩</a></p>
+</li>
+<li id="fn:1127">
+<p>Another thing <a href="#fnref:1127" rev="footnote" title="Jump back to footnote 1127 in the text">↩</a></p>
+</li>
+<li id="fn:1128">
+<p>Another thing <a href="#fnref:1128" rev="footnote" title="Jump back to footnote 1128 in the text">↩</a></p>
+</li>
+<li id="fn:1129">
+<p>Another thing <a href="#fnref:1129" rev="footnote" title="Jump back to footnote 1129 in the text">↩</a></p>
+</li>
+<li id="fn:1130">
+<p>Another thing <a href="#fnref:1130" rev="footnote" title="Jump back to footnote 1130 in the text">↩</a></p>
+</li>
+<li id="fn:1131">
+<p>Another thing <a href="#fnref:1131" rev="footnote" title="Jump back to footnote 1131 in the text">↩</a></p>
+</li>
+<li id="fn:1132">
+<p>Another thing <a href="#fnref:1132" rev="footnote" title="Jump back to footnote 1132 in the text">↩</a></p>
+</li>
+<li id="fn:1133">
+<p>Another thing <a href="#fnref:1133" rev="footnote" title="Jump back to footnote 1133 in the text">↩</a></p>
+</li>
+<li id="fn:1134">
+<p>Another thing <a href="#fnref:1134" rev="footnote" title="Jump back to footnote 1134 in the text">↩</a></p>
+</li>
+<li id="fn:1135">
+<p>Another thing <a href="#fnref:1135" rev="footnote" title="Jump back to footnote 1135 in the text">↩</a></p>
+</li>
+<li id="fn:1136">
+<p>Another thing <a href="#fnref:1136" rev="footnote" title="Jump back to footnote 1136 in the text">↩</a></p>
+</li>
+<li id="fn:1137">
+<p>Another thing <a href="#fnref:1137" rev="footnote" title="Jump back to footnote 1137 in the text">↩</a></p>
+</li>
+<li id="fn:1138">
+<p>Another thing <a href="#fnref:1138" rev="footnote" title="Jump back to footnote 1138 in the text">↩</a></p>
+</li>
+<li id="fn:1139">
+<p>Another thing <a href="#fnref:1139" rev="footnote" title="Jump back to footnote 1139 in the text">↩</a></p>
+</li>
+<li id="fn:1140">
+<p>Another thing <a href="#fnref:1140" rev="footnote" title="Jump back to footnote 1140 in the text">↩</a></p>
+</li>
+<li id="fn:1141">
+<p>Another thing <a href="#fnref:1141" rev="footnote" title="Jump back to footnote 1141 in the text">↩</a></p>
+</li>
+<li id="fn:1142">
+<p>Another thing <a href="#fnref:1142" rev="footnote" title="Jump back to footnote 1142 in the text">↩</a></p>
+</li>
+<li id="fn:1143">
+<p>Another thing <a href="#fnref:1143" rev="footnote" title="Jump back to footnote 1143 in the text">↩</a></p>
+</li>
+<li id="fn:1144">
+<p>Another thing <a href="#fnref:1144" rev="footnote" title="Jump back to footnote 1144 in the text">↩</a></p>
+</li>
+<li id="fn:1145">
+<p>Another thing <a href="#fnref:1145" rev="footnote" title="Jump back to footnote 1145 in the text">↩</a></p>
+</li>
+<li id="fn:1146">
+<p>Another thing <a href="#fnref:1146" rev="footnote" title="Jump back to footnote 1146 in the text">↩</a></p>
+</li>
+<li id="fn:1147">
+<p>Another thing <a href="#fnref:1147" rev="footnote" title="Jump back to footnote 1147 in the text">↩</a></p>
+</li>
+<li id="fn:1148">
+<p>Another thing <a href="#fnref:1148" rev="footnote" title="Jump back to footnote 1148 in the text">↩</a></p>
+</li>
+<li id="fn:1149">
+<p>Another thing <a href="#fnref:1149" rev="footnote" title="Jump back to footnote 1149 in the text">↩</a></p>
+</li>
+<li id="fn:1150">
+<p>Another thing <a href="#fnref:1150" rev="footnote" title="Jump back to footnote 1150 in the text">↩</a></p>
+</li>
+<li id="fn:1151">
+<p>Another thing <a href="#fnref:1151" rev="footnote" title="Jump back to footnote 1151 in the text">↩</a></p>
+</li>
+<li id="fn:1152">
+<p>Another thing <a href="#fnref:1152" rev="footnote" title="Jump back to footnote 1152 in the text">↩</a></p>
+</li>
+<li id="fn:1153">
+<p>Another thing <a href="#fnref:1153" rev="footnote" title="Jump back to footnote 1153 in the text">↩</a></p>
+</li>
+<li id="fn:1154">
+<p>Another thing <a href="#fnref:1154" rev="footnote" title="Jump back to footnote 1154 in the text">↩</a></p>
+</li>
+<li id="fn:1155">
+<p>Another thing <a href="#fnref:1155" rev="footnote" title="Jump back to footnote 1155 in the text">↩</a></p>
+</li>
+<li id="fn:1156">
+<p>Another thing <a href="#fnref:1156" rev="footnote" title="Jump back to footnote 1156 in the text">↩</a></p>
+</li>
+<li id="fn:1157">
+<p>Another thing <a href="#fnref:1157" rev="footnote" title="Jump back to footnote 1157 in the text">↩</a></p>
+</li>
+<li id="fn:1158">
+<p>Another thing <a href="#fnref:1158" rev="footnote" title="Jump back to footnote 1158 in the text">↩</a></p>
+</li>
+<li id="fn:1159">
+<p>Another thing <a href="#fnref:1159" rev="footnote" title="Jump back to footnote 1159 in the text">↩</a></p>
+</li>
+<li id="fn:1160">
+<p>Another thing <a href="#fnref:1160" rev="footnote" title="Jump back to footnote 1160 in the text">↩</a></p>
+</li>
+<li id="fn:1161">
+<p>Another thing <a href="#fnref:1161" rev="footnote" title="Jump back to footnote 1161 in the text">↩</a></p>
+</li>
+<li id="fn:1162">
+<p>Another thing <a href="#fnref:1162" rev="footnote" title="Jump back to footnote 1162 in the text">↩</a></p>
+</li>
+<li id="fn:1163">
+<p>Another thing <a href="#fnref:1163" rev="footnote" title="Jump back to footnote 1163 in the text">↩</a></p>
+</li>
+<li id="fn:1164">
+<p>Another thing <a href="#fnref:1164" rev="footnote" title="Jump back to footnote 1164 in the text">↩</a></p>
+</li>
+<li id="fn:1165">
+<p>Another thing <a href="#fnref:1165" rev="footnote" title="Jump back to footnote 1165 in the text">↩</a></p>
+</li>
+<li id="fn:1166">
+<p>Another thing <a href="#fnref:1166" rev="footnote" title="Jump back to footnote 1166 in the text">↩</a></p>
+</li>
+<li id="fn:1167">
+<p>Another thing <a href="#fnref:1167" rev="footnote" title="Jump back to footnote 1167 in the text">↩</a></p>
+</li>
+<li id="fn:1168">
+<p>Another thing <a href="#fnref:1168" rev="footnote" title="Jump back to footnote 1168 in the text">↩</a></p>
+</li>
+<li id="fn:1169">
+<p>Another thing <a href="#fnref:1169" rev="footnote" title="Jump back to footnote 1169 in the text">↩</a></p>
+</li>
+<li id="fn:1170">
+<p>Another thing <a href="#fnref:1170" rev="footnote" title="Jump back to footnote 1170 in the text">↩</a></p>
+</li>
+<li id="fn:1171">
+<p>Another thing <a href="#fnref:1171" rev="footnote" title="Jump back to footnote 1171 in the text">↩</a></p>
+</li>
+<li id="fn:1172">
+<p>Another thing <a href="#fnref:1172" rev="footnote" title="Jump back to footnote 1172 in the text">↩</a></p>
+</li>
+<li id="fn:1173">
+<p>Another thing <a href="#fnref:1173" rev="footnote" title="Jump back to footnote 1173 in the text">↩</a></p>
+</li>
+<li id="fn:1174">
+<p>Another thing <a href="#fnref:1174" rev="footnote" title="Jump back to footnote 1174 in the text">↩</a></p>
+</li>
+<li id="fn:1175">
+<p>Another thing <a href="#fnref:1175" rev="footnote" title="Jump back to footnote 1175 in the text">↩</a></p>
+</li>
+<li id="fn:1176">
+<p>Another thing <a href="#fnref:1176" rev="footnote" title="Jump back to footnote 1176 in the text">↩</a></p>
+</li>
+<li id="fn:1177">
+<p>Another thing <a href="#fnref:1177" rev="footnote" title="Jump back to footnote 1177 in the text">↩</a></p>
+</li>
+<li id="fn:1178">
+<p>Another thing <a href="#fnref:1178" rev="footnote" title="Jump back to footnote 1178 in the text">↩</a></p>
+</li>
+<li id="fn:1179">
+<p>Another thing <a href="#fnref:1179" rev="footnote" title="Jump back to footnote 1179 in the text">↩</a></p>
+</li>
+<li id="fn:1180">
+<p>Another thing <a href="#fnref:1180" rev="footnote" title="Jump back to footnote 1180 in the text">↩</a></p>
+</li>
+<li id="fn:1181">
+<p>Another thing <a href="#fnref:1181" rev="footnote" title="Jump back to footnote 1181 in the text">↩</a></p>
+</li>
+<li id="fn:1182">
+<p>Another thing <a href="#fnref:1182" rev="footnote" title="Jump back to footnote 1182 in the text">↩</a></p>
+</li>
+<li id="fn:1183">
+<p>Another thing <a href="#fnref:1183" rev="footnote" title="Jump back to footnote 1183 in the text">↩</a></p>
+</li>
+<li id="fn:1184">
+<p>Another thing <a href="#fnref:1184" rev="footnote" title="Jump back to footnote 1184 in the text">↩</a></p>
+</li>
+<li id="fn:1185">
+<p>Another thing <a href="#fnref:1185" rev="footnote" title="Jump back to footnote 1185 in the text">↩</a></p>
+</li>
+<li id="fn:1186">
+<p>Another thing <a href="#fnref:1186" rev="footnote" title="Jump back to footnote 1186 in the text">↩</a></p>
+</li>
+<li id="fn:1187">
+<p>Another thing <a href="#fnref:1187" rev="footnote" title="Jump back to footnote 1187 in the text">↩</a></p>
+</li>
+<li id="fn:1188">
+<p>Another thing <a href="#fnref:1188" rev="footnote" title="Jump back to footnote 1188 in the text">↩</a></p>
+</li>
+<li id="fn:1189">
+<p>Another thing <a href="#fnref:1189" rev="footnote" title="Jump back to footnote 1189 in the text">↩</a></p>
+</li>
+<li id="fn:1190">
+<p>Another thing <a href="#fnref:1190" rev="footnote" title="Jump back to footnote 1190 in the text">↩</a></p>
+</li>
+<li id="fn:1191">
+<p>Another thing <a href="#fnref:1191" rev="footnote" title="Jump back to footnote 1191 in the text">↩</a></p>
+</li>
+<li id="fn:1192">
+<p>Another thing <a href="#fnref:1192" rev="footnote" title="Jump back to footnote 1192 in the text">↩</a></p>
+</li>
+<li id="fn:1193">
+<p>Another thing <a href="#fnref:1193" rev="footnote" title="Jump back to footnote 1193 in the text">↩</a></p>
+</li>
+<li id="fn:1194">
+<p>Another thing <a href="#fnref:1194" rev="footnote" title="Jump back to footnote 1194 in the text">↩</a></p>
+</li>
+<li id="fn:1195">
+<p>Another thing <a href="#fnref:1195" rev="footnote" title="Jump back to footnote 1195 in the text">↩</a></p>
+</li>
+<li id="fn:1196">
+<p>Another thing <a href="#fnref:1196" rev="footnote" title="Jump back to footnote 1196 in the text">↩</a></p>
+</li>
+<li id="fn:1197">
+<p>Another thing <a href="#fnref:1197" rev="footnote" title="Jump back to footnote 1197 in the text">↩</a></p>
+</li>
+<li id="fn:1198">
+<p>Another thing <a href="#fnref:1198" rev="footnote" title="Jump back to footnote 1198 in the text">↩</a></p>
+</li>
+<li id="fn:1199">
+<p>Another thing <a href="#fnref:1199" rev="footnote" title="Jump back to footnote 1199 in the text">↩</a></p>
+</li>
+</ol>
+</div>
\ No newline at end of file
--- /dev/null
+Something[^1]
+
+Something[^2]
+
+Something[^3]
+
+Something[^4]
+
+Something[^5]
+
+Something[^6]
+
+Something[^7]
+
+Something[^8]
+
+Something[^9]
+
+Something[^10]
+
+Something[^11]
+
+Something[^12]
+
+Something[^13]
+
+Something[^14]
+
+Something[^15]
+
+Something[^16]
+
+Something[^17]
+
+Something[^18]
+
+Something[^19]
+
+Something[^20]
+
+Something[^21]
+
+Something[^22]
+
+Something[^23]
+
+Something[^24]
+
+Something[^25]
+
+Something[^26]
+
+Something[^27]
+
+Something[^28]
+
+Something[^29]
+
+Something[^30]
+
+Something[^31]
+
+Something[^32]
+
+Something[^33]
+
+Something[^34]
+
+Something[^35]
+
+Something[^36]
+
+Something[^37]
+
+Something[^38]
+
+Something[^39]
+
+Something[^40]
+
+Something[^41]
+
+Something[^42]
+
+Something[^43]
+
+Something[^44]
+
+Something[^45]
+
+Something[^46]
+
+Something[^47]
+
+Something[^48]
+
+Something[^49]
+
+Something[^50]
+
+Something[^51]
+
+Something[^52]
+
+Something[^53]
+
+Something[^54]
+
+Something[^55]
+
+Something[^56]
+
+Something[^57]
+
+Something[^58]
+
+Something[^59]
+
+Something[^60]
+
+Something[^61]
+
+Something[^62]
+
+Something[^63]
+
+Something[^64]
+
+Something[^65]
+
+Something[^66]
+
+Something[^67]
+
+Something[^68]
+
+Something[^69]
+
+Something[^70]
+
+Something[^71]
+
+Something[^72]
+
+Something[^73]
+
+Something[^74]
+
+Something[^75]
+
+Something[^76]
+
+Something[^77]
+
+Something[^78]
+
+Something[^79]
+
+Something[^80]
+
+Something[^81]
+
+Something[^82]
+
+Something[^83]
+
+Something[^84]
+
+Something[^85]
+
+Something[^86]
+
+Something[^87]
+
+Something[^88]
+
+Something[^89]
+
+Something[^90]
+
+Something[^91]
+
+Something[^92]
+
+Something[^93]
+
+Something[^94]
+
+Something[^95]
+
+Something[^96]
+
+Something[^97]
+
+Something[^98]
+
+Something[^99]
+
+Something[^100]
+
+Something[^101]
+
+Something[^102]
+
+Something[^103]
+
+Something[^104]
+
+Something[^105]
+
+Something[^106]
+
+Something[^107]
+
+Something[^108]
+
+Something[^109]
+
+Something[^110]
+
+Something[^111]
+
+Something[^112]
+
+Something[^113]
+
+Something[^114]
+
+Something[^115]
+
+Something[^116]
+
+Something[^117]
+
+Something[^118]
+
+Something[^119]
+
+Something[^120]
+
+Something[^121]
+
+Something[^122]
+
+Something[^123]
+
+Something[^124]
+
+Something[^125]
+
+Something[^126]
+
+Something[^127]
+
+Something[^128]
+
+Something[^129]
+
+Something[^130]
+
+Something[^131]
+
+Something[^132]
+
+Something[^133]
+
+Something[^134]
+
+Something[^135]
+
+Something[^136]
+
+Something[^137]
+
+Something[^138]
+
+Something[^139]
+
+Something[^140]
+
+Something[^141]
+
+Something[^142]
+
+Something[^143]
+
+Something[^144]
+
+Something[^145]
+
+Something[^146]
+
+Something[^147]
+
+Something[^148]
+
+Something[^149]
+
+Something[^150]
+
+Something[^151]
+
+Something[^152]
+
+Something[^153]
+
+Something[^154]
+
+Something[^155]
+
+Something[^156]
+
+Something[^157]
+
+Something[^158]
+
+Something[^159]
+
+Something[^160]
+
+Something[^161]
+
+Something[^162]
+
+Something[^163]
+
+Something[^164]
+
+Something[^165]
+
+Something[^166]
+
+Something[^167]
+
+Something[^168]
+
+Something[^169]
+
+Something[^170]
+
+Something[^171]
+
+Something[^172]
+
+Something[^173]
+
+Something[^174]
+
+Something[^175]
+
+Something[^176]
+
+Something[^177]
+
+Something[^178]
+
+Something[^179]
+
+Something[^180]
+
+Something[^181]
+
+Something[^182]
+
+Something[^183]
+
+Something[^184]
+
+Something[^185]
+
+Something[^186]
+
+Something[^187]
+
+Something[^188]
+
+Something[^189]
+
+Something[^190]
+
+Something[^191]
+
+Something[^192]
+
+Something[^193]
+
+Something[^194]
+
+Something[^195]
+
+Something[^196]
+
+Something[^197]
+
+Something[^198]
+
+Something[^199]
+
+Something[^200]
+
+Something[^201]
+
+Something[^202]
+
+Something[^203]
+
+Something[^204]
+
+Something[^205]
+
+Something[^206]
+
+Something[^207]
+
+Something[^208]
+
+Something[^209]
+
+Something[^210]
+
+Something[^211]
+
+Something[^212]
+
+Something[^213]
+
+Something[^214]
+
+Something[^215]
+
+Something[^216]
+
+Something[^217]
+
+Something[^218]
+
+Something[^219]
+
+Something[^220]
+
+Something[^221]
+
+Something[^222]
+
+Something[^223]
+
+Something[^224]
+
+Something[^225]
+
+Something[^226]
+
+Something[^227]
+
+Something[^228]
+
+Something[^229]
+
+Something[^230]
+
+Something[^231]
+
+Something[^232]
+
+Something[^233]
+
+Something[^234]
+
+Something[^235]
+
+Something[^236]
+
+Something[^237]
+
+Something[^238]
+
+Something[^239]
+
+Something[^240]
+
+Something[^241]
+
+Something[^242]
+
+Something[^243]
+
+Something[^244]
+
+Something[^245]
+
+Something[^246]
+
+Something[^247]
+
+Something[^248]
+
+Something[^249]
+
+Something[^250]
+
+Something[^251]
+
+Something[^252]
+
+Something[^253]
+
+Something[^254]
+
+Something[^255]
+
+Something[^256]
+
+Something[^257]
+
+Something[^258]
+
+Something[^259]
+
+Something[^260]
+
+Something[^261]
+
+Something[^262]
+
+Something[^263]
+
+Something[^264]
+
+Something[^265]
+
+Something[^266]
+
+Something[^267]
+
+Something[^268]
+
+Something[^269]
+
+Something[^270]
+
+Something[^271]
+
+Something[^272]
+
+Something[^273]
+
+Something[^274]
+
+Something[^275]
+
+Something[^276]
+
+Something[^277]
+
+Something[^278]
+
+Something[^279]
+
+Something[^280]
+
+Something[^281]
+
+Something[^282]
+
+Something[^283]
+
+Something[^284]
+
+Something[^285]
+
+Something[^286]
+
+Something[^287]
+
+Something[^288]
+
+Something[^289]
+
+Something[^290]
+
+Something[^291]
+
+Something[^292]
+
+Something[^293]
+
+Something[^294]
+
+Something[^295]
+
+Something[^296]
+
+Something[^297]
+
+Something[^298]
+
+Something[^299]
+
+Something[^300]
+
+Something[^301]
+
+Something[^302]
+
+Something[^303]
+
+Something[^304]
+
+Something[^305]
+
+Something[^306]
+
+Something[^307]
+
+Something[^308]
+
+Something[^309]
+
+Something[^310]
+
+Something[^311]
+
+Something[^312]
+
+Something[^313]
+
+Something[^314]
+
+Something[^315]
+
+Something[^316]
+
+Something[^317]
+
+Something[^318]
+
+Something[^319]
+
+Something[^320]
+
+Something[^321]
+
+Something[^322]
+
+Something[^323]
+
+Something[^324]
+
+Something[^325]
+
+Something[^326]
+
+Something[^327]
+
+Something[^328]
+
+Something[^329]
+
+Something[^330]
+
+Something[^331]
+
+Something[^332]
+
+Something[^333]
+
+Something[^334]
+
+Something[^335]
+
+Something[^336]
+
+Something[^337]
+
+Something[^338]
+
+Something[^339]
+
+Something[^340]
+
+Something[^341]
+
+Something[^342]
+
+Something[^343]
+
+Something[^344]
+
+Something[^345]
+
+Something[^346]
+
+Something[^347]
+
+Something[^348]
+
+Something[^349]
+
+Something[^350]
+
+Something[^351]
+
+Something[^352]
+
+Something[^353]
+
+Something[^354]
+
+Something[^355]
+
+Something[^356]
+
+Something[^357]
+
+Something[^358]
+
+Something[^359]
+
+Something[^360]
+
+Something[^361]
+
+Something[^362]
+
+Something[^363]
+
+Something[^364]
+
+Something[^365]
+
+Something[^366]
+
+Something[^367]
+
+Something[^368]
+
+Something[^369]
+
+Something[^370]
+
+Something[^371]
+
+Something[^372]
+
+Something[^373]
+
+Something[^374]
+
+Something[^375]
+
+Something[^376]
+
+Something[^377]
+
+Something[^378]
+
+Something[^379]
+
+Something[^380]
+
+Something[^381]
+
+Something[^382]
+
+Something[^383]
+
+Something[^384]
+
+Something[^385]
+
+Something[^386]
+
+Something[^387]
+
+Something[^388]
+
+Something[^389]
+
+Something[^390]
+
+Something[^391]
+
+Something[^392]
+
+Something[^393]
+
+Something[^394]
+
+Something[^395]
+
+Something[^396]
+
+Something[^397]
+
+Something[^398]
+
+Something[^399]
+
+Something[^400]
+
+Something[^401]
+
+Something[^402]
+
+Something[^403]
+
+Something[^404]
+
+Something[^405]
+
+Something[^406]
+
+Something[^407]
+
+Something[^408]
+
+Something[^409]
+
+Something[^410]
+
+Something[^411]
+
+Something[^412]
+
+Something[^413]
+
+Something[^414]
+
+Something[^415]
+
+Something[^416]
+
+Something[^417]
+
+Something[^418]
+
+Something[^419]
+
+Something[^420]
+
+Something[^421]
+
+Something[^422]
+
+Something[^423]
+
+Something[^424]
+
+Something[^425]
+
+Something[^426]
+
+Something[^427]
+
+Something[^428]
+
+Something[^429]
+
+Something[^430]
+
+Something[^431]
+
+Something[^432]
+
+Something[^433]
+
+Something[^434]
+
+Something[^435]
+
+Something[^436]
+
+Something[^437]
+
+Something[^438]
+
+Something[^439]
+
+Something[^440]
+
+Something[^441]
+
+Something[^442]
+
+Something[^443]
+
+Something[^444]
+
+Something[^445]
+
+Something[^446]
+
+Something[^447]
+
+Something[^448]
+
+Something[^449]
+
+Something[^450]
+
+Something[^451]
+
+Something[^452]
+
+Something[^453]
+
+Something[^454]
+
+Something[^455]
+
+Something[^456]
+
+Something[^457]
+
+Something[^458]
+
+Something[^459]
+
+Something[^460]
+
+Something[^461]
+
+Something[^462]
+
+Something[^463]
+
+Something[^464]
+
+Something[^465]
+
+Something[^466]
+
+Something[^467]
+
+Something[^468]
+
+Something[^469]
+
+Something[^470]
+
+Something[^471]
+
+Something[^472]
+
+Something[^473]
+
+Something[^474]
+
+Something[^475]
+
+Something[^476]
+
+Something[^477]
+
+Something[^478]
+
+Something[^479]
+
+Something[^480]
+
+Something[^481]
+
+Something[^482]
+
+Something[^483]
+
+Something[^484]
+
+Something[^485]
+
+Something[^486]
+
+Something[^487]
+
+Something[^488]
+
+Something[^489]
+
+Something[^490]
+
+Something[^491]
+
+Something[^492]
+
+Something[^493]
+
+Something[^494]
+
+Something[^495]
+
+Something[^496]
+
+Something[^497]
+
+Something[^498]
+
+Something[^499]
+
+Something[^500]
+
+Something[^501]
+
+Something[^502]
+
+Something[^503]
+
+Something[^504]
+
+Something[^505]
+
+Something[^506]
+
+Something[^507]
+
+Something[^508]
+
+Something[^509]
+
+Something[^510]
+
+Something[^511]
+
+Something[^512]
+
+Something[^513]
+
+Something[^514]
+
+Something[^515]
+
+Something[^516]
+
+Something[^517]
+
+Something[^518]
+
+Something[^519]
+
+Something[^520]
+
+Something[^521]
+
+Something[^522]
+
+Something[^523]
+
+Something[^524]
+
+Something[^525]
+
+Something[^526]
+
+Something[^527]
+
+Something[^528]
+
+Something[^529]
+
+Something[^530]
+
+Something[^531]
+
+Something[^532]
+
+Something[^533]
+
+Something[^534]
+
+Something[^535]
+
+Something[^536]
+
+Something[^537]
+
+Something[^538]
+
+Something[^539]
+
+Something[^540]
+
+Something[^541]
+
+Something[^542]
+
+Something[^543]
+
+Something[^544]
+
+Something[^545]
+
+Something[^546]
+
+Something[^547]
+
+Something[^548]
+
+Something[^549]
+
+Something[^550]
+
+Something[^551]
+
+Something[^552]
+
+Something[^553]
+
+Something[^554]
+
+Something[^555]
+
+Something[^556]
+
+Something[^557]
+
+Something[^558]
+
+Something[^559]
+
+Something[^560]
+
+Something[^561]
+
+Something[^562]
+
+Something[^563]
+
+Something[^564]
+
+Something[^565]
+
+Something[^566]
+
+Something[^567]
+
+Something[^568]
+
+Something[^569]
+
+Something[^570]
+
+Something[^571]
+
+Something[^572]
+
+Something[^573]
+
+Something[^574]
+
+Something[^575]
+
+Something[^576]
+
+Something[^577]
+
+Something[^578]
+
+Something[^579]
+
+Something[^580]
+
+Something[^581]
+
+Something[^582]
+
+Something[^583]
+
+Something[^584]
+
+Something[^585]
+
+Something[^586]
+
+Something[^587]
+
+Something[^588]
+
+Something[^589]
+
+Something[^590]
+
+Something[^591]
+
+Something[^592]
+
+Something[^593]
+
+Something[^594]
+
+Something[^595]
+
+Something[^596]
+
+Something[^597]
+
+Something[^598]
+
+Something[^599]
+
+Something[^600]
+
+Something[^601]
+
+Something[^602]
+
+Something[^603]
+
+Something[^604]
+
+Something[^605]
+
+Something[^606]
+
+Something[^607]
+
+Something[^608]
+
+Something[^609]
+
+Something[^610]
+
+Something[^611]
+
+Something[^612]
+
+Something[^613]
+
+Something[^614]
+
+Something[^615]
+
+Something[^616]
+
+Something[^617]
+
+Something[^618]
+
+Something[^619]
+
+Something[^620]
+
+Something[^621]
+
+Something[^622]
+
+Something[^623]
+
+Something[^624]
+
+Something[^625]
+
+Something[^626]
+
+Something[^627]
+
+Something[^628]
+
+Something[^629]
+
+Something[^630]
+
+Something[^631]
+
+Something[^632]
+
+Something[^633]
+
+Something[^634]
+
+Something[^635]
+
+Something[^636]
+
+Something[^637]
+
+Something[^638]
+
+Something[^639]
+
+Something[^640]
+
+Something[^641]
+
+Something[^642]
+
+Something[^643]
+
+Something[^644]
+
+Something[^645]
+
+Something[^646]
+
+Something[^647]
+
+Something[^648]
+
+Something[^649]
+
+Something[^650]
+
+Something[^651]
+
+Something[^652]
+
+Something[^653]
+
+Something[^654]
+
+Something[^655]
+
+Something[^656]
+
+Something[^657]
+
+Something[^658]
+
+Something[^659]
+
+Something[^660]
+
+Something[^661]
+
+Something[^662]
+
+Something[^663]
+
+Something[^664]
+
+Something[^665]
+
+Something[^666]
+
+Something[^667]
+
+Something[^668]
+
+Something[^669]
+
+Something[^670]
+
+Something[^671]
+
+Something[^672]
+
+Something[^673]
+
+Something[^674]
+
+Something[^675]
+
+Something[^676]
+
+Something[^677]
+
+Something[^678]
+
+Something[^679]
+
+Something[^680]
+
+Something[^681]
+
+Something[^682]
+
+Something[^683]
+
+Something[^684]
+
+Something[^685]
+
+Something[^686]
+
+Something[^687]
+
+Something[^688]
+
+Something[^689]
+
+Something[^690]
+
+Something[^691]
+
+Something[^692]
+
+Something[^693]
+
+Something[^694]
+
+Something[^695]
+
+Something[^696]
+
+Something[^697]
+
+Something[^698]
+
+Something[^699]
+
+Something[^700]
+
+Something[^701]
+
+Something[^702]
+
+Something[^703]
+
+Something[^704]
+
+Something[^705]
+
+Something[^706]
+
+Something[^707]
+
+Something[^708]
+
+Something[^709]
+
+Something[^710]
+
+Something[^711]
+
+Something[^712]
+
+Something[^713]
+
+Something[^714]
+
+Something[^715]
+
+Something[^716]
+
+Something[^717]
+
+Something[^718]
+
+Something[^719]
+
+Something[^720]
+
+Something[^721]
+
+Something[^722]
+
+Something[^723]
+
+Something[^724]
+
+Something[^725]
+
+Something[^726]
+
+Something[^727]
+
+Something[^728]
+
+Something[^729]
+
+Something[^730]
+
+Something[^731]
+
+Something[^732]
+
+Something[^733]
+
+Something[^734]
+
+Something[^735]
+
+Something[^736]
+
+Something[^737]
+
+Something[^738]
+
+Something[^739]
+
+Something[^740]
+
+Something[^741]
+
+Something[^742]
+
+Something[^743]
+
+Something[^744]
+
+Something[^745]
+
+Something[^746]
+
+Something[^747]
+
+Something[^748]
+
+Something[^749]
+
+Something[^750]
+
+Something[^751]
+
+Something[^752]
+
+Something[^753]
+
+Something[^754]
+
+Something[^755]
+
+Something[^756]
+
+Something[^757]
+
+Something[^758]
+
+Something[^759]
+
+Something[^760]
+
+Something[^761]
+
+Something[^762]
+
+Something[^763]
+
+Something[^764]
+
+Something[^765]
+
+Something[^766]
+
+Something[^767]
+
+Something[^768]
+
+Something[^769]
+
+Something[^770]
+
+Something[^771]
+
+Something[^772]
+
+Something[^773]
+
+Something[^774]
+
+Something[^775]
+
+Something[^776]
+
+Something[^777]
+
+Something[^778]
+
+Something[^779]
+
+Something[^780]
+
+Something[^781]
+
+Something[^782]
+
+Something[^783]
+
+Something[^784]
+
+Something[^785]
+
+Something[^786]
+
+Something[^787]
+
+Something[^788]
+
+Something[^789]
+
+Something[^790]
+
+Something[^791]
+
+Something[^792]
+
+Something[^793]
+
+Something[^794]
+
+Something[^795]
+
+Something[^796]
+
+Something[^797]
+
+Something[^798]
+
+Something[^799]
+
+Something[^800]
+
+Something[^801]
+
+Something[^802]
+
+Something[^803]
+
+Something[^804]
+
+Something[^805]
+
+Something[^806]
+
+Something[^807]
+
+Something[^808]
+
+Something[^809]
+
+Something[^810]
+
+Something[^811]
+
+Something[^812]
+
+Something[^813]
+
+Something[^814]
+
+Something[^815]
+
+Something[^816]
+
+Something[^817]
+
+Something[^818]
+
+Something[^819]
+
+Something[^820]
+
+Something[^821]
+
+Something[^822]
+
+Something[^823]
+
+Something[^824]
+
+Something[^825]
+
+Something[^826]
+
+Something[^827]
+
+Something[^828]
+
+Something[^829]
+
+Something[^830]
+
+Something[^831]
+
+Something[^832]
+
+Something[^833]
+
+Something[^834]
+
+Something[^835]
+
+Something[^836]
+
+Something[^837]
+
+Something[^838]
+
+Something[^839]
+
+Something[^840]
+
+Something[^841]
+
+Something[^842]
+
+Something[^843]
+
+Something[^844]
+
+Something[^845]
+
+Something[^846]
+
+Something[^847]
+
+Something[^848]
+
+Something[^849]
+
+Something[^850]
+
+Something[^851]
+
+Something[^852]
+
+Something[^853]
+
+Something[^854]
+
+Something[^855]
+
+Something[^856]
+
+Something[^857]
+
+Something[^858]
+
+Something[^859]
+
+Something[^860]
+
+Something[^861]
+
+Something[^862]
+
+Something[^863]
+
+Something[^864]
+
+Something[^865]
+
+Something[^866]
+
+Something[^867]
+
+Something[^868]
+
+Something[^869]
+
+Something[^870]
+
+Something[^871]
+
+Something[^872]
+
+Something[^873]
+
+Something[^874]
+
+Something[^875]
+
+Something[^876]
+
+Something[^877]
+
+Something[^878]
+
+Something[^879]
+
+Something[^880]
+
+Something[^881]
+
+Something[^882]
+
+Something[^883]
+
+Something[^884]
+
+Something[^885]
+
+Something[^886]
+
+Something[^887]
+
+Something[^888]
+
+Something[^889]
+
+Something[^890]
+
+Something[^891]
+
+Something[^892]
+
+Something[^893]
+
+Something[^894]
+
+Something[^895]
+
+Something[^896]
+
+Something[^897]
+
+Something[^898]
+
+Something[^899]
+
+Something[^900]
+
+Something[^901]
+
+Something[^902]
+
+Something[^903]
+
+Something[^904]
+
+Something[^905]
+
+Something[^906]
+
+Something[^907]
+
+Something[^908]
+
+Something[^909]
+
+Something[^910]
+
+Something[^911]
+
+Something[^912]
+
+Something[^913]
+
+Something[^914]
+
+Something[^915]
+
+Something[^916]
+
+Something[^917]
+
+Something[^918]
+
+Something[^919]
+
+Something[^920]
+
+Something[^921]
+
+Something[^922]
+
+Something[^923]
+
+Something[^924]
+
+Something[^925]
+
+Something[^926]
+
+Something[^927]
+
+Something[^928]
+
+Something[^929]
+
+Something[^930]
+
+Something[^931]
+
+Something[^932]
+
+Something[^933]
+
+Something[^934]
+
+Something[^935]
+
+Something[^936]
+
+Something[^937]
+
+Something[^938]
+
+Something[^939]
+
+Something[^940]
+
+Something[^941]
+
+Something[^942]
+
+Something[^943]
+
+Something[^944]
+
+Something[^945]
+
+Something[^946]
+
+Something[^947]
+
+Something[^948]
+
+Something[^949]
+
+Something[^950]
+
+Something[^951]
+
+Something[^952]
+
+Something[^953]
+
+Something[^954]
+
+Something[^955]
+
+Something[^956]
+
+Something[^957]
+
+Something[^958]
+
+Something[^959]
+
+Something[^960]
+
+Something[^961]
+
+Something[^962]
+
+Something[^963]
+
+Something[^964]
+
+Something[^965]
+
+Something[^966]
+
+Something[^967]
+
+Something[^968]
+
+Something[^969]
+
+Something[^970]
+
+Something[^971]
+
+Something[^972]
+
+Something[^973]
+
+Something[^974]
+
+Something[^975]
+
+Something[^976]
+
+Something[^977]
+
+Something[^978]
+
+Something[^979]
+
+Something[^980]
+
+Something[^981]
+
+Something[^982]
+
+Something[^983]
+
+Something[^984]
+
+Something[^985]
+
+Something[^986]
+
+Something[^987]
+
+Something[^988]
+
+Something[^989]
+
+Something[^990]
+
+Something[^991]
+
+Something[^992]
+
+Something[^993]
+
+Something[^994]
+
+Something[^995]
+
+Something[^996]
+
+Something[^997]
+
+Something[^998]
+
+Something[^999]
+
+Something[^1000]
+
+Something[^1001]
+
+Something[^1002]
+
+Something[^1003]
+
+Something[^1004]
+
+Something[^1005]
+
+Something[^1006]
+
+Something[^1007]
+
+Something[^1008]
+
+Something[^1009]
+
+Something[^1010]
+
+Something[^1011]
+
+Something[^1012]
+
+Something[^1013]
+
+Something[^1014]
+
+Something[^1015]
+
+Something[^1016]
+
+Something[^1017]
+
+Something[^1018]
+
+Something[^1019]
+
+Something[^1020]
+
+Something[^1021]
+
+Something[^1022]
+
+Something[^1023]
+
+Something[^1024]
+
+Something[^1025]
+
+Something[^1026]
+
+Something[^1027]
+
+Something[^1028]
+
+Something[^1029]
+
+Something[^1030]
+
+Something[^1031]
+
+Something[^1032]
+
+Something[^1033]
+
+Something[^1034]
+
+Something[^1035]
+
+Something[^1036]
+
+Something[^1037]
+
+Something[^1038]
+
+Something[^1039]
+
+Something[^1040]
+
+Something[^1041]
+
+Something[^1042]
+
+Something[^1043]
+
+Something[^1044]
+
+Something[^1045]
+
+Something[^1046]
+
+Something[^1047]
+
+Something[^1048]
+
+Something[^1049]
+
+Something[^1050]
+
+Something[^1051]
+
+Something[^1052]
+
+Something[^1053]
+
+Something[^1054]
+
+Something[^1055]
+
+Something[^1056]
+
+Something[^1057]
+
+Something[^1058]
+
+Something[^1059]
+
+Something[^1060]
+
+Something[^1061]
+
+Something[^1062]
+
+Something[^1063]
+
+Something[^1064]
+
+Something[^1065]
+
+Something[^1066]
+
+Something[^1067]
+
+Something[^1068]
+
+Something[^1069]
+
+Something[^1070]
+
+Something[^1071]
+
+Something[^1072]
+
+Something[^1073]
+
+Something[^1074]
+
+Something[^1075]
+
+Something[^1076]
+
+Something[^1077]
+
+Something[^1078]
+
+Something[^1079]
+
+Something[^1080]
+
+Something[^1081]
+
+Something[^1082]
+
+Something[^1083]
+
+Something[^1084]
+
+Something[^1085]
+
+Something[^1086]
+
+Something[^1087]
+
+Something[^1088]
+
+Something[^1089]
+
+Something[^1090]
+
+Something[^1091]
+
+Something[^1092]
+
+Something[^1093]
+
+Something[^1094]
+
+Something[^1095]
+
+Something[^1096]
+
+Something[^1097]
+
+Something[^1098]
+
+Something[^1099]
+
+Something[^1100]
+
+Something[^1101]
+
+Something[^1102]
+
+Something[^1103]
+
+Something[^1104]
+
+Something[^1105]
+
+Something[^1106]
+
+Something[^1107]
+
+Something[^1108]
+
+Something[^1109]
+
+Something[^1110]
+
+Something[^1111]
+
+Something[^1112]
+
+Something[^1113]
+
+Something[^1114]
+
+Something[^1115]
+
+Something[^1116]
+
+Something[^1117]
+
+Something[^1118]
+
+Something[^1119]
+
+Something[^1120]
+
+Something[^1121]
+
+Something[^1122]
+
+Something[^1123]
+
+Something[^1124]
+
+Something[^1125]
+
+Something[^1126]
+
+Something[^1127]
+
+Something[^1128]
+
+Something[^1129]
+
+Something[^1130]
+
+Something[^1131]
+
+Something[^1132]
+
+Something[^1133]
+
+Something[^1134]
+
+Something[^1135]
+
+Something[^1136]
+
+Something[^1137]
+
+Something[^1138]
+
+Something[^1139]
+
+Something[^1140]
+
+Something[^1141]
+
+Something[^1142]
+
+Something[^1143]
+
+Something[^1144]
+
+Something[^1145]
+
+Something[^1146]
+
+Something[^1147]
+
+Something[^1148]
+
+Something[^1149]
+
+Something[^1150]
+
+Something[^1151]
+
+Something[^1152]
+
+Something[^1153]
+
+Something[^1154]
+
+Something[^1155]
+
+Something[^1156]
+
+Something[^1157]
+
+Something[^1158]
+
+Something[^1159]
+
+Something[^1160]
+
+Something[^1161]
+
+Something[^1162]
+
+Something[^1163]
+
+Something[^1164]
+
+Something[^1165]
+
+Something[^1166]
+
+Something[^1167]
+
+Something[^1168]
+
+Something[^1169]
+
+Something[^1170]
+
+Something[^1171]
+
+Something[^1172]
+
+Something[^1173]
+
+Something[^1174]
+
+Something[^1175]
+
+Something[^1176]
+
+Something[^1177]
+
+Something[^1178]
+
+Something[^1179]
+
+Something[^1180]
+
+Something[^1181]
+
+Something[^1182]
+
+Something[^1183]
+
+Something[^1184]
+
+Something[^1185]
+
+Something[^1186]
+
+Something[^1187]
+
+Something[^1188]
+
+Something[^1189]
+
+Something[^1190]
+
+Something[^1191]
+
+Something[^1192]
+
+Something[^1193]
+
+Something[^1194]
+
+Something[^1195]
+
+Something[^1196]
+
+Something[^1197]
+
+Something[^1198]
+
+Something[^1199]
+
+[^1]: Another thing
+
+[^2]: Another thing
+
+[^3]: Another thing
+
+[^4]: Another thing
+
+[^5]: Another thing
+
+[^6]: Another thing
+
+[^7]: Another thing
+
+[^8]: Another thing
+
+[^9]: Another thing
+
+[^10]: Another thing
+
+[^11]: Another thing
+
+[^12]: Another thing
+
+[^13]: Another thing
+
+[^14]: Another thing
+
+[^15]: Another thing
+
+[^16]: Another thing
+
+[^17]: Another thing
+
+[^18]: Another thing
+
+[^19]: Another thing
+
+[^20]: Another thing
+
+[^21]: Another thing
+
+[^22]: Another thing
+
+[^23]: Another thing
+
+[^24]: Another thing
+
+[^25]: Another thing
+
+[^26]: Another thing
+
+[^27]: Another thing
+
+[^28]: Another thing
+
+[^29]: Another thing
+
+[^30]: Another thing
+
+[^31]: Another thing
+
+[^32]: Another thing
+
+[^33]: Another thing
+
+[^34]: Another thing
+
+[^35]: Another thing
+
+[^36]: Another thing
+
+[^37]: Another thing
+
+[^38]: Another thing
+
+[^39]: Another thing
+
+[^40]: Another thing
+
+[^41]: Another thing
+
+[^42]: Another thing
+
+[^43]: Another thing
+
+[^44]: Another thing
+
+[^45]: Another thing
+
+[^46]: Another thing
+
+[^47]: Another thing
+
+[^48]: Another thing
+
+[^49]: Another thing
+
+[^50]: Another thing
+
+[^51]: Another thing
+
+[^52]: Another thing
+
+[^53]: Another thing
+
+[^54]: Another thing
+
+[^55]: Another thing
+
+[^56]: Another thing
+
+[^57]: Another thing
+
+[^58]: Another thing
+
+[^59]: Another thing
+
+[^60]: Another thing
+
+[^61]: Another thing
+
+[^62]: Another thing
+
+[^63]: Another thing
+
+[^64]: Another thing
+
+[^65]: Another thing
+
+[^66]: Another thing
+
+[^67]: Another thing
+
+[^68]: Another thing
+
+[^69]: Another thing
+
+[^70]: Another thing
+
+[^71]: Another thing
+
+[^72]: Another thing
+
+[^73]: Another thing
+
+[^74]: Another thing
+
+[^75]: Another thing
+
+[^76]: Another thing
+
+[^77]: Another thing
+
+[^78]: Another thing
+
+[^79]: Another thing
+
+[^80]: Another thing
+
+[^81]: Another thing
+
+[^82]: Another thing
+
+[^83]: Another thing
+
+[^84]: Another thing
+
+[^85]: Another thing
+
+[^86]: Another thing
+
+[^87]: Another thing
+
+[^88]: Another thing
+
+[^89]: Another thing
+
+[^90]: Another thing
+
+[^91]: Another thing
+
+[^92]: Another thing
+
+[^93]: Another thing
+
+[^94]: Another thing
+
+[^95]: Another thing
+
+[^96]: Another thing
+
+[^97]: Another thing
+
+[^98]: Another thing
+
+[^99]: Another thing
+
+[^100]: Another thing
+
+[^101]: Another thing
+
+[^102]: Another thing
+
+[^103]: Another thing
+
+[^104]: Another thing
+
+[^105]: Another thing
+
+[^106]: Another thing
+
+[^107]: Another thing
+
+[^108]: Another thing
+
+[^109]: Another thing
+
+[^110]: Another thing
+
+[^111]: Another thing
+
+[^112]: Another thing
+
+[^113]: Another thing
+
+[^114]: Another thing
+
+[^115]: Another thing
+
+[^116]: Another thing
+
+[^117]: Another thing
+
+[^118]: Another thing
+
+[^119]: Another thing
+
+[^120]: Another thing
+
+[^121]: Another thing
+
+[^122]: Another thing
+
+[^123]: Another thing
+
+[^124]: Another thing
+
+[^125]: Another thing
+
+[^126]: Another thing
+
+[^127]: Another thing
+
+[^128]: Another thing
+
+[^129]: Another thing
+
+[^130]: Another thing
+
+[^131]: Another thing
+
+[^132]: Another thing
+
+[^133]: Another thing
+
+[^134]: Another thing
+
+[^135]: Another thing
+
+[^136]: Another thing
+
+[^137]: Another thing
+
+[^138]: Another thing
+
+[^139]: Another thing
+
+[^140]: Another thing
+
+[^141]: Another thing
+
+[^142]: Another thing
+
+[^143]: Another thing
+
+[^144]: Another thing
+
+[^145]: Another thing
+
+[^146]: Another thing
+
+[^147]: Another thing
+
+[^148]: Another thing
+
+[^149]: Another thing
+
+[^150]: Another thing
+
+[^151]: Another thing
+
+[^152]: Another thing
+
+[^153]: Another thing
+
+[^154]: Another thing
+
+[^155]: Another thing
+
+[^156]: Another thing
+
+[^157]: Another thing
+
+[^158]: Another thing
+
+[^159]: Another thing
+
+[^160]: Another thing
+
+[^161]: Another thing
+
+[^162]: Another thing
+
+[^163]: Another thing
+
+[^164]: Another thing
+
+[^165]: Another thing
+
+[^166]: Another thing
+
+[^167]: Another thing
+
+[^168]: Another thing
+
+[^169]: Another thing
+
+[^170]: Another thing
+
+[^171]: Another thing
+
+[^172]: Another thing
+
+[^173]: Another thing
+
+[^174]: Another thing
+
+[^175]: Another thing
+
+[^176]: Another thing
+
+[^177]: Another thing
+
+[^178]: Another thing
+
+[^179]: Another thing
+
+[^180]: Another thing
+
+[^181]: Another thing
+
+[^182]: Another thing
+
+[^183]: Another thing
+
+[^184]: Another thing
+
+[^185]: Another thing
+
+[^186]: Another thing
+
+[^187]: Another thing
+
+[^188]: Another thing
+
+[^189]: Another thing
+
+[^190]: Another thing
+
+[^191]: Another thing
+
+[^192]: Another thing
+
+[^193]: Another thing
+
+[^194]: Another thing
+
+[^195]: Another thing
+
+[^196]: Another thing
+
+[^197]: Another thing
+
+[^198]: Another thing
+
+[^199]: Another thing
+
+[^200]: Another thing
+
+[^201]: Another thing
+
+[^202]: Another thing
+
+[^203]: Another thing
+
+[^204]: Another thing
+
+[^205]: Another thing
+
+[^206]: Another thing
+
+[^207]: Another thing
+
+[^208]: Another thing
+
+[^209]: Another thing
+
+[^210]: Another thing
+
+[^211]: Another thing
+
+[^212]: Another thing
+
+[^213]: Another thing
+
+[^214]: Another thing
+
+[^215]: Another thing
+
+[^216]: Another thing
+
+[^217]: Another thing
+
+[^218]: Another thing
+
+[^219]: Another thing
+
+[^220]: Another thing
+
+[^221]: Another thing
+
+[^222]: Another thing
+
+[^223]: Another thing
+
+[^224]: Another thing
+
+[^225]: Another thing
+
+[^226]: Another thing
+
+[^227]: Another thing
+
+[^228]: Another thing
+
+[^229]: Another thing
+
+[^230]: Another thing
+
+[^231]: Another thing
+
+[^232]: Another thing
+
+[^233]: Another thing
+
+[^234]: Another thing
+
+[^235]: Another thing
+
+[^236]: Another thing
+
+[^237]: Another thing
+
+[^238]: Another thing
+
+[^239]: Another thing
+
+[^240]: Another thing
+
+[^241]: Another thing
+
+[^242]: Another thing
+
+[^243]: Another thing
+
+[^244]: Another thing
+
+[^245]: Another thing
+
+[^246]: Another thing
+
+[^247]: Another thing
+
+[^248]: Another thing
+
+[^249]: Another thing
+
+[^250]: Another thing
+
+[^251]: Another thing
+
+[^252]: Another thing
+
+[^253]: Another thing
+
+[^254]: Another thing
+
+[^255]: Another thing
+
+[^256]: Another thing
+
+[^257]: Another thing
+
+[^258]: Another thing
+
+[^259]: Another thing
+
+[^260]: Another thing
+
+[^261]: Another thing
+
+[^262]: Another thing
+
+[^263]: Another thing
+
+[^264]: Another thing
+
+[^265]: Another thing
+
+[^266]: Another thing
+
+[^267]: Another thing
+
+[^268]: Another thing
+
+[^269]: Another thing
+
+[^270]: Another thing
+
+[^271]: Another thing
+
+[^272]: Another thing
+
+[^273]: Another thing
+
+[^274]: Another thing
+
+[^275]: Another thing
+
+[^276]: Another thing
+
+[^277]: Another thing
+
+[^278]: Another thing
+
+[^279]: Another thing
+
+[^280]: Another thing
+
+[^281]: Another thing
+
+[^282]: Another thing
+
+[^283]: Another thing
+
+[^284]: Another thing
+
+[^285]: Another thing
+
+[^286]: Another thing
+
+[^287]: Another thing
+
+[^288]: Another thing
+
+[^289]: Another thing
+
+[^290]: Another thing
+
+[^291]: Another thing
+
+[^292]: Another thing
+
+[^293]: Another thing
+
+[^294]: Another thing
+
+[^295]: Another thing
+
+[^296]: Another thing
+
+[^297]: Another thing
+
+[^298]: Another thing
+
+[^299]: Another thing
+
+[^300]: Another thing
+
+[^301]: Another thing
+
+[^302]: Another thing
+
+[^303]: Another thing
+
+[^304]: Another thing
+
+[^305]: Another thing
+
+[^306]: Another thing
+
+[^307]: Another thing
+
+[^308]: Another thing
+
+[^309]: Another thing
+
+[^310]: Another thing
+
+[^311]: Another thing
+
+[^312]: Another thing
+
+[^313]: Another thing
+
+[^314]: Another thing
+
+[^315]: Another thing
+
+[^316]: Another thing
+
+[^317]: Another thing
+
+[^318]: Another thing
+
+[^319]: Another thing
+
+[^320]: Another thing
+
+[^321]: Another thing
+
+[^322]: Another thing
+
+[^323]: Another thing
+
+[^324]: Another thing
+
+[^325]: Another thing
+
+[^326]: Another thing
+
+[^327]: Another thing
+
+[^328]: Another thing
+
+[^329]: Another thing
+
+[^330]: Another thing
+
+[^331]: Another thing
+
+[^332]: Another thing
+
+[^333]: Another thing
+
+[^334]: Another thing
+
+[^335]: Another thing
+
+[^336]: Another thing
+
+[^337]: Another thing
+
+[^338]: Another thing
+
+[^339]: Another thing
+
+[^340]: Another thing
+
+[^341]: Another thing
+
+[^342]: Another thing
+
+[^343]: Another thing
+
+[^344]: Another thing
+
+[^345]: Another thing
+
+[^346]: Another thing
+
+[^347]: Another thing
+
+[^348]: Another thing
+
+[^349]: Another thing
+
+[^350]: Another thing
+
+[^351]: Another thing
+
+[^352]: Another thing
+
+[^353]: Another thing
+
+[^354]: Another thing
+
+[^355]: Another thing
+
+[^356]: Another thing
+
+[^357]: Another thing
+
+[^358]: Another thing
+
+[^359]: Another thing
+
+[^360]: Another thing
+
+[^361]: Another thing
+
+[^362]: Another thing
+
+[^363]: Another thing
+
+[^364]: Another thing
+
+[^365]: Another thing
+
+[^366]: Another thing
+
+[^367]: Another thing
+
+[^368]: Another thing
+
+[^369]: Another thing
+
+[^370]: Another thing
+
+[^371]: Another thing
+
+[^372]: Another thing
+
+[^373]: Another thing
+
+[^374]: Another thing
+
+[^375]: Another thing
+
+[^376]: Another thing
+
+[^377]: Another thing
+
+[^378]: Another thing
+
+[^379]: Another thing
+
+[^380]: Another thing
+
+[^381]: Another thing
+
+[^382]: Another thing
+
+[^383]: Another thing
+
+[^384]: Another thing
+
+[^385]: Another thing
+
+[^386]: Another thing
+
+[^387]: Another thing
+
+[^388]: Another thing
+
+[^389]: Another thing
+
+[^390]: Another thing
+
+[^391]: Another thing
+
+[^392]: Another thing
+
+[^393]: Another thing
+
+[^394]: Another thing
+
+[^395]: Another thing
+
+[^396]: Another thing
+
+[^397]: Another thing
+
+[^398]: Another thing
+
+[^399]: Another thing
+
+[^400]: Another thing
+
+[^401]: Another thing
+
+[^402]: Another thing
+
+[^403]: Another thing
+
+[^404]: Another thing
+
+[^405]: Another thing
+
+[^406]: Another thing
+
+[^407]: Another thing
+
+[^408]: Another thing
+
+[^409]: Another thing
+
+[^410]: Another thing
+
+[^411]: Another thing
+
+[^412]: Another thing
+
+[^413]: Another thing
+
+[^414]: Another thing
+
+[^415]: Another thing
+
+[^416]: Another thing
+
+[^417]: Another thing
+
+[^418]: Another thing
+
+[^419]: Another thing
+
+[^420]: Another thing
+
+[^421]: Another thing
+
+[^422]: Another thing
+
+[^423]: Another thing
+
+[^424]: Another thing
+
+[^425]: Another thing
+
+[^426]: Another thing
+
+[^427]: Another thing
+
+[^428]: Another thing
+
+[^429]: Another thing
+
+[^430]: Another thing
+
+[^431]: Another thing
+
+[^432]: Another thing
+
+[^433]: Another thing
+
+[^434]: Another thing
+
+[^435]: Another thing
+
+[^436]: Another thing
+
+[^437]: Another thing
+
+[^438]: Another thing
+
+[^439]: Another thing
+
+[^440]: Another thing
+
+[^441]: Another thing
+
+[^442]: Another thing
+
+[^443]: Another thing
+
+[^444]: Another thing
+
+[^445]: Another thing
+
+[^446]: Another thing
+
+[^447]: Another thing
+
+[^448]: Another thing
+
+[^449]: Another thing
+
+[^450]: Another thing
+
+[^451]: Another thing
+
+[^452]: Another thing
+
+[^453]: Another thing
+
+[^454]: Another thing
+
+[^455]: Another thing
+
+[^456]: Another thing
+
+[^457]: Another thing
+
+[^458]: Another thing
+
+[^459]: Another thing
+
+[^460]: Another thing
+
+[^461]: Another thing
+
+[^462]: Another thing
+
+[^463]: Another thing
+
+[^464]: Another thing
+
+[^465]: Another thing
+
+[^466]: Another thing
+
+[^467]: Another thing
+
+[^468]: Another thing
+
+[^469]: Another thing
+
+[^470]: Another thing
+
+[^471]: Another thing
+
+[^472]: Another thing
+
+[^473]: Another thing
+
+[^474]: Another thing
+
+[^475]: Another thing
+
+[^476]: Another thing
+
+[^477]: Another thing
+
+[^478]: Another thing
+
+[^479]: Another thing
+
+[^480]: Another thing
+
+[^481]: Another thing
+
+[^482]: Another thing
+
+[^483]: Another thing
+
+[^484]: Another thing
+
+[^485]: Another thing
+
+[^486]: Another thing
+
+[^487]: Another thing
+
+[^488]: Another thing
+
+[^489]: Another thing
+
+[^490]: Another thing
+
+[^491]: Another thing
+
+[^492]: Another thing
+
+[^493]: Another thing
+
+[^494]: Another thing
+
+[^495]: Another thing
+
+[^496]: Another thing
+
+[^497]: Another thing
+
+[^498]: Another thing
+
+[^499]: Another thing
+
+[^500]: Another thing
+
+[^501]: Another thing
+
+[^502]: Another thing
+
+[^503]: Another thing
+
+[^504]: Another thing
+
+[^505]: Another thing
+
+[^506]: Another thing
+
+[^507]: Another thing
+
+[^508]: Another thing
+
+[^509]: Another thing
+
+[^510]: Another thing
+
+[^511]: Another thing
+
+[^512]: Another thing
+
+[^513]: Another thing
+
+[^514]: Another thing
+
+[^515]: Another thing
+
+[^516]: Another thing
+
+[^517]: Another thing
+
+[^518]: Another thing
+
+[^519]: Another thing
+
+[^520]: Another thing
+
+[^521]: Another thing
+
+[^522]: Another thing
+
+[^523]: Another thing
+
+[^524]: Another thing
+
+[^525]: Another thing
+
+[^526]: Another thing
+
+[^527]: Another thing
+
+[^528]: Another thing
+
+[^529]: Another thing
+
+[^530]: Another thing
+
+[^531]: Another thing
+
+[^532]: Another thing
+
+[^533]: Another thing
+
+[^534]: Another thing
+
+[^535]: Another thing
+
+[^536]: Another thing
+
+[^537]: Another thing
+
+[^538]: Another thing
+
+[^539]: Another thing
+
+[^540]: Another thing
+
+[^541]: Another thing
+
+[^542]: Another thing
+
+[^543]: Another thing
+
+[^544]: Another thing
+
+[^545]: Another thing
+
+[^546]: Another thing
+
+[^547]: Another thing
+
+[^548]: Another thing
+
+[^549]: Another thing
+
+[^550]: Another thing
+
+[^551]: Another thing
+
+[^552]: Another thing
+
+[^553]: Another thing
+
+[^554]: Another thing
+
+[^555]: Another thing
+
+[^556]: Another thing
+
+[^557]: Another thing
+
+[^558]: Another thing
+
+[^559]: Another thing
+
+[^560]: Another thing
+
+[^561]: Another thing
+
+[^562]: Another thing
+
+[^563]: Another thing
+
+[^564]: Another thing
+
+[^565]: Another thing
+
+[^566]: Another thing
+
+[^567]: Another thing
+
+[^568]: Another thing
+
+[^569]: Another thing
+
+[^570]: Another thing
+
+[^571]: Another thing
+
+[^572]: Another thing
+
+[^573]: Another thing
+
+[^574]: Another thing
+
+[^575]: Another thing
+
+[^576]: Another thing
+
+[^577]: Another thing
+
+[^578]: Another thing
+
+[^579]: Another thing
+
+[^580]: Another thing
+
+[^581]: Another thing
+
+[^582]: Another thing
+
+[^583]: Another thing
+
+[^584]: Another thing
+
+[^585]: Another thing
+
+[^586]: Another thing
+
+[^587]: Another thing
+
+[^588]: Another thing
+
+[^589]: Another thing
+
+[^590]: Another thing
+
+[^591]: Another thing
+
+[^592]: Another thing
+
+[^593]: Another thing
+
+[^594]: Another thing
+
+[^595]: Another thing
+
+[^596]: Another thing
+
+[^597]: Another thing
+
+[^598]: Another thing
+
+[^599]: Another thing
+
+[^600]: Another thing
+
+[^601]: Another thing
+
+[^602]: Another thing
+
+[^603]: Another thing
+
+[^604]: Another thing
+
+[^605]: Another thing
+
+[^606]: Another thing
+
+[^607]: Another thing
+
+[^608]: Another thing
+
+[^609]: Another thing
+
+[^610]: Another thing
+
+[^611]: Another thing
+
+[^612]: Another thing
+
+[^613]: Another thing
+
+[^614]: Another thing
+
+[^615]: Another thing
+
+[^616]: Another thing
+
+[^617]: Another thing
+
+[^618]: Another thing
+
+[^619]: Another thing
+
+[^620]: Another thing
+
+[^621]: Another thing
+
+[^622]: Another thing
+
+[^623]: Another thing
+
+[^624]: Another thing
+
+[^625]: Another thing
+
+[^626]: Another thing
+
+[^627]: Another thing
+
+[^628]: Another thing
+
+[^629]: Another thing
+
+[^630]: Another thing
+
+[^631]: Another thing
+
+[^632]: Another thing
+
+[^633]: Another thing
+
+[^634]: Another thing
+
+[^635]: Another thing
+
+[^636]: Another thing
+
+[^637]: Another thing
+
+[^638]: Another thing
+
+[^639]: Another thing
+
+[^640]: Another thing
+
+[^641]: Another thing
+
+[^642]: Another thing
+
+[^643]: Another thing
+
+[^644]: Another thing
+
+[^645]: Another thing
+
+[^646]: Another thing
+
+[^647]: Another thing
+
+[^648]: Another thing
+
+[^649]: Another thing
+
+[^650]: Another thing
+
+[^651]: Another thing
+
+[^652]: Another thing
+
+[^653]: Another thing
+
+[^654]: Another thing
+
+[^655]: Another thing
+
+[^656]: Another thing
+
+[^657]: Another thing
+
+[^658]: Another thing
+
+[^659]: Another thing
+
+[^660]: Another thing
+
+[^661]: Another thing
+
+[^662]: Another thing
+
+[^663]: Another thing
+
+[^664]: Another thing
+
+[^665]: Another thing
+
+[^666]: Another thing
+
+[^667]: Another thing
+
+[^668]: Another thing
+
+[^669]: Another thing
+
+[^670]: Another thing
+
+[^671]: Another thing
+
+[^672]: Another thing
+
+[^673]: Another thing
+
+[^674]: Another thing
+
+[^675]: Another thing
+
+[^676]: Another thing
+
+[^677]: Another thing
+
+[^678]: Another thing
+
+[^679]: Another thing
+
+[^680]: Another thing
+
+[^681]: Another thing
+
+[^682]: Another thing
+
+[^683]: Another thing
+
+[^684]: Another thing
+
+[^685]: Another thing
+
+[^686]: Another thing
+
+[^687]: Another thing
+
+[^688]: Another thing
+
+[^689]: Another thing
+
+[^690]: Another thing
+
+[^691]: Another thing
+
+[^692]: Another thing
+
+[^693]: Another thing
+
+[^694]: Another thing
+
+[^695]: Another thing
+
+[^696]: Another thing
+
+[^697]: Another thing
+
+[^698]: Another thing
+
+[^699]: Another thing
+
+[^700]: Another thing
+
+[^701]: Another thing
+
+[^702]: Another thing
+
+[^703]: Another thing
+
+[^704]: Another thing
+
+[^705]: Another thing
+
+[^706]: Another thing
+
+[^707]: Another thing
+
+[^708]: Another thing
+
+[^709]: Another thing
+
+[^710]: Another thing
+
+[^711]: Another thing
+
+[^712]: Another thing
+
+[^713]: Another thing
+
+[^714]: Another thing
+
+[^715]: Another thing
+
+[^716]: Another thing
+
+[^717]: Another thing
+
+[^718]: Another thing
+
+[^719]: Another thing
+
+[^720]: Another thing
+
+[^721]: Another thing
+
+[^722]: Another thing
+
+[^723]: Another thing
+
+[^724]: Another thing
+
+[^725]: Another thing
+
+[^726]: Another thing
+
+[^727]: Another thing
+
+[^728]: Another thing
+
+[^729]: Another thing
+
+[^730]: Another thing
+
+[^731]: Another thing
+
+[^732]: Another thing
+
+[^733]: Another thing
+
+[^734]: Another thing
+
+[^735]: Another thing
+
+[^736]: Another thing
+
+[^737]: Another thing
+
+[^738]: Another thing
+
+[^739]: Another thing
+
+[^740]: Another thing
+
+[^741]: Another thing
+
+[^742]: Another thing
+
+[^743]: Another thing
+
+[^744]: Another thing
+
+[^745]: Another thing
+
+[^746]: Another thing
+
+[^747]: Another thing
+
+[^748]: Another thing
+
+[^749]: Another thing
+
+[^750]: Another thing
+
+[^751]: Another thing
+
+[^752]: Another thing
+
+[^753]: Another thing
+
+[^754]: Another thing
+
+[^755]: Another thing
+
+[^756]: Another thing
+
+[^757]: Another thing
+
+[^758]: Another thing
+
+[^759]: Another thing
+
+[^760]: Another thing
+
+[^761]: Another thing
+
+[^762]: Another thing
+
+[^763]: Another thing
+
+[^764]: Another thing
+
+[^765]: Another thing
+
+[^766]: Another thing
+
+[^767]: Another thing
+
+[^768]: Another thing
+
+[^769]: Another thing
+
+[^770]: Another thing
+
+[^771]: Another thing
+
+[^772]: Another thing
+
+[^773]: Another thing
+
+[^774]: Another thing
+
+[^775]: Another thing
+
+[^776]: Another thing
+
+[^777]: Another thing
+
+[^778]: Another thing
+
+[^779]: Another thing
+
+[^780]: Another thing
+
+[^781]: Another thing
+
+[^782]: Another thing
+
+[^783]: Another thing
+
+[^784]: Another thing
+
+[^785]: Another thing
+
+[^786]: Another thing
+
+[^787]: Another thing
+
+[^788]: Another thing
+
+[^789]: Another thing
+
+[^790]: Another thing
+
+[^791]: Another thing
+
+[^792]: Another thing
+
+[^793]: Another thing
+
+[^794]: Another thing
+
+[^795]: Another thing
+
+[^796]: Another thing
+
+[^797]: Another thing
+
+[^798]: Another thing
+
+[^799]: Another thing
+
+[^800]: Another thing
+
+[^801]: Another thing
+
+[^802]: Another thing
+
+[^803]: Another thing
+
+[^804]: Another thing
+
+[^805]: Another thing
+
+[^806]: Another thing
+
+[^807]: Another thing
+
+[^808]: Another thing
+
+[^809]: Another thing
+
+[^810]: Another thing
+
+[^811]: Another thing
+
+[^812]: Another thing
+
+[^813]: Another thing
+
+[^814]: Another thing
+
+[^815]: Another thing
+
+[^816]: Another thing
+
+[^817]: Another thing
+
+[^818]: Another thing
+
+[^819]: Another thing
+
+[^820]: Another thing
+
+[^821]: Another thing
+
+[^822]: Another thing
+
+[^823]: Another thing
+
+[^824]: Another thing
+
+[^825]: Another thing
+
+[^826]: Another thing
+
+[^827]: Another thing
+
+[^828]: Another thing
+
+[^829]: Another thing
+
+[^830]: Another thing
+
+[^831]: Another thing
+
+[^832]: Another thing
+
+[^833]: Another thing
+
+[^834]: Another thing
+
+[^835]: Another thing
+
+[^836]: Another thing
+
+[^837]: Another thing
+
+[^838]: Another thing
+
+[^839]: Another thing
+
+[^840]: Another thing
+
+[^841]: Another thing
+
+[^842]: Another thing
+
+[^843]: Another thing
+
+[^844]: Another thing
+
+[^845]: Another thing
+
+[^846]: Another thing
+
+[^847]: Another thing
+
+[^848]: Another thing
+
+[^849]: Another thing
+
+[^850]: Another thing
+
+[^851]: Another thing
+
+[^852]: Another thing
+
+[^853]: Another thing
+
+[^854]: Another thing
+
+[^855]: Another thing
+
+[^856]: Another thing
+
+[^857]: Another thing
+
+[^858]: Another thing
+
+[^859]: Another thing
+
+[^860]: Another thing
+
+[^861]: Another thing
+
+[^862]: Another thing
+
+[^863]: Another thing
+
+[^864]: Another thing
+
+[^865]: Another thing
+
+[^866]: Another thing
+
+[^867]: Another thing
+
+[^868]: Another thing
+
+[^869]: Another thing
+
+[^870]: Another thing
+
+[^871]: Another thing
+
+[^872]: Another thing
+
+[^873]: Another thing
+
+[^874]: Another thing
+
+[^875]: Another thing
+
+[^876]: Another thing
+
+[^877]: Another thing
+
+[^878]: Another thing
+
+[^879]: Another thing
+
+[^880]: Another thing
+
+[^881]: Another thing
+
+[^882]: Another thing
+
+[^883]: Another thing
+
+[^884]: Another thing
+
+[^885]: Another thing
+
+[^886]: Another thing
+
+[^887]: Another thing
+
+[^888]: Another thing
+
+[^889]: Another thing
+
+[^890]: Another thing
+
+[^891]: Another thing
+
+[^892]: Another thing
+
+[^893]: Another thing
+
+[^894]: Another thing
+
+[^895]: Another thing
+
+[^896]: Another thing
+
+[^897]: Another thing
+
+[^898]: Another thing
+
+[^899]: Another thing
+
+[^900]: Another thing
+
+[^901]: Another thing
+
+[^902]: Another thing
+
+[^903]: Another thing
+
+[^904]: Another thing
+
+[^905]: Another thing
+
+[^906]: Another thing
+
+[^907]: Another thing
+
+[^908]: Another thing
+
+[^909]: Another thing
+
+[^910]: Another thing
+
+[^911]: Another thing
+
+[^912]: Another thing
+
+[^913]: Another thing
+
+[^914]: Another thing
+
+[^915]: Another thing
+
+[^916]: Another thing
+
+[^917]: Another thing
+
+[^918]: Another thing
+
+[^919]: Another thing
+
+[^920]: Another thing
+
+[^921]: Another thing
+
+[^922]: Another thing
+
+[^923]: Another thing
+
+[^924]: Another thing
+
+[^925]: Another thing
+
+[^926]: Another thing
+
+[^927]: Another thing
+
+[^928]: Another thing
+
+[^929]: Another thing
+
+[^930]: Another thing
+
+[^931]: Another thing
+
+[^932]: Another thing
+
+[^933]: Another thing
+
+[^934]: Another thing
+
+[^935]: Another thing
+
+[^936]: Another thing
+
+[^937]: Another thing
+
+[^938]: Another thing
+
+[^939]: Another thing
+
+[^940]: Another thing
+
+[^941]: Another thing
+
+[^942]: Another thing
+
+[^943]: Another thing
+
+[^944]: Another thing
+
+[^945]: Another thing
+
+[^946]: Another thing
+
+[^947]: Another thing
+
+[^948]: Another thing
+
+[^949]: Another thing
+
+[^950]: Another thing
+
+[^951]: Another thing
+
+[^952]: Another thing
+
+[^953]: Another thing
+
+[^954]: Another thing
+
+[^955]: Another thing
+
+[^956]: Another thing
+
+[^957]: Another thing
+
+[^958]: Another thing
+
+[^959]: Another thing
+
+[^960]: Another thing
+
+[^961]: Another thing
+
+[^962]: Another thing
+
+[^963]: Another thing
+
+[^964]: Another thing
+
+[^965]: Another thing
+
+[^966]: Another thing
+
+[^967]: Another thing
+
+[^968]: Another thing
+
+[^969]: Another thing
+
+[^970]: Another thing
+
+[^971]: Another thing
+
+[^972]: Another thing
+
+[^973]: Another thing
+
+[^974]: Another thing
+
+[^975]: Another thing
+
+[^976]: Another thing
+
+[^977]: Another thing
+
+[^978]: Another thing
+
+[^979]: Another thing
+
+[^980]: Another thing
+
+[^981]: Another thing
+
+[^982]: Another thing
+
+[^983]: Another thing
+
+[^984]: Another thing
+
+[^985]: Another thing
+
+[^986]: Another thing
+
+[^987]: Another thing
+
+[^988]: Another thing
+
+[^989]: Another thing
+
+[^990]: Another thing
+
+[^991]: Another thing
+
+[^992]: Another thing
+
+[^993]: Another thing
+
+[^994]: Another thing
+
+[^995]: Another thing
+
+[^996]: Another thing
+
+[^997]: Another thing
+
+[^998]: Another thing
+
+[^999]: Another thing
+
+[^1000]: Another thing
+
+[^1001]: Another thing
+
+[^1002]: Another thing
+
+[^1003]: Another thing
+
+[^1004]: Another thing
+
+[^1005]: Another thing
+
+[^1006]: Another thing
+
+[^1007]: Another thing
+
+[^1008]: Another thing
+
+[^1009]: Another thing
+
+[^1010]: Another thing
+
+[^1011]: Another thing
+
+[^1012]: Another thing
+
+[^1013]: Another thing
+
+[^1014]: Another thing
+
+[^1015]: Another thing
+
+[^1016]: Another thing
+
+[^1017]: Another thing
+
+[^1018]: Another thing
+
+[^1019]: Another thing
+
+[^1020]: Another thing
+
+[^1021]: Another thing
+
+[^1022]: Another thing
+
+[^1023]: Another thing
+
+[^1024]: Another thing
+
+[^1025]: Another thing
+
+[^1026]: Another thing
+
+[^1027]: Another thing
+
+[^1028]: Another thing
+
+[^1029]: Another thing
+
+[^1030]: Another thing
+
+[^1031]: Another thing
+
+[^1032]: Another thing
+
+[^1033]: Another thing
+
+[^1034]: Another thing
+
+[^1035]: Another thing
+
+[^1036]: Another thing
+
+[^1037]: Another thing
+
+[^1038]: Another thing
+
+[^1039]: Another thing
+
+[^1040]: Another thing
+
+[^1041]: Another thing
+
+[^1042]: Another thing
+
+[^1043]: Another thing
+
+[^1044]: Another thing
+
+[^1045]: Another thing
+
+[^1046]: Another thing
+
+[^1047]: Another thing
+
+[^1048]: Another thing
+
+[^1049]: Another thing
+
+[^1050]: Another thing
+
+[^1051]: Another thing
+
+[^1052]: Another thing
+
+[^1053]: Another thing
+
+[^1054]: Another thing
+
+[^1055]: Another thing
+
+[^1056]: Another thing
+
+[^1057]: Another thing
+
+[^1058]: Another thing
+
+[^1059]: Another thing
+
+[^1060]: Another thing
+
+[^1061]: Another thing
+
+[^1062]: Another thing
+
+[^1063]: Another thing
+
+[^1064]: Another thing
+
+[^1065]: Another thing
+
+[^1066]: Another thing
+
+[^1067]: Another thing
+
+[^1068]: Another thing
+
+[^1069]: Another thing
+
+[^1070]: Another thing
+
+[^1071]: Another thing
+
+[^1072]: Another thing
+
+[^1073]: Another thing
+
+[^1074]: Another thing
+
+[^1075]: Another thing
+
+[^1076]: Another thing
+
+[^1077]: Another thing
+
+[^1078]: Another thing
+
+[^1079]: Another thing
+
+[^1080]: Another thing
+
+[^1081]: Another thing
+
+[^1082]: Another thing
+
+[^1083]: Another thing
+
+[^1084]: Another thing
+
+[^1085]: Another thing
+
+[^1086]: Another thing
+
+[^1087]: Another thing
+
+[^1088]: Another thing
+
+[^1089]: Another thing
+
+[^1090]: Another thing
+
+[^1091]: Another thing
+
+[^1092]: Another thing
+
+[^1093]: Another thing
+
+[^1094]: Another thing
+
+[^1095]: Another thing
+
+[^1096]: Another thing
+
+[^1097]: Another thing
+
+[^1098]: Another thing
+
+[^1099]: Another thing
+
+[^1100]: Another thing
+
+[^1101]: Another thing
+
+[^1102]: Another thing
+
+[^1103]: Another thing
+
+[^1104]: Another thing
+
+[^1105]: Another thing
+
+[^1106]: Another thing
+
+[^1107]: Another thing
+
+[^1108]: Another thing
+
+[^1109]: Another thing
+
+[^1110]: Another thing
+
+[^1111]: Another thing
+
+[^1112]: Another thing
+
+[^1113]: Another thing
+
+[^1114]: Another thing
+
+[^1115]: Another thing
+
+[^1116]: Another thing
+
+[^1117]: Another thing
+
+[^1118]: Another thing
+
+[^1119]: Another thing
+
+[^1120]: Another thing
+
+[^1121]: Another thing
+
+[^1122]: Another thing
+
+[^1123]: Another thing
+
+[^1124]: Another thing
+
+[^1125]: Another thing
+
+[^1126]: Another thing
+
+[^1127]: Another thing
+
+[^1128]: Another thing
+
+[^1129]: Another thing
+
+[^1130]: Another thing
+
+[^1131]: Another thing
+
+[^1132]: Another thing
+
+[^1133]: Another thing
+
+[^1134]: Another thing
+
+[^1135]: Another thing
+
+[^1136]: Another thing
+
+[^1137]: Another thing
+
+[^1138]: Another thing
+
+[^1139]: Another thing
+
+[^1140]: Another thing
+
+[^1141]: Another thing
+
+[^1142]: Another thing
+
+[^1143]: Another thing
+
+[^1144]: Another thing
+
+[^1145]: Another thing
+
+[^1146]: Another thing
+
+[^1147]: Another thing
+
+[^1148]: Another thing
+
+[^1149]: Another thing
+
+[^1150]: Another thing
+
+[^1151]: Another thing
+
+[^1152]: Another thing
+
+[^1153]: Another thing
+
+[^1154]: Another thing
+
+[^1155]: Another thing
+
+[^1156]: Another thing
+
+[^1157]: Another thing
+
+[^1158]: Another thing
+
+[^1159]: Another thing
+
+[^1160]: Another thing
+
+[^1161]: Another thing
+
+[^1162]: Another thing
+
+[^1163]: Another thing
+
+[^1164]: Another thing
+
+[^1165]: Another thing
+
+[^1166]: Another thing
+
+[^1167]: Another thing
+
+[^1168]: Another thing
+
+[^1169]: Another thing
+
+[^1170]: Another thing
+
+[^1171]: Another thing
+
+[^1172]: Another thing
+
+[^1173]: Another thing
+
+[^1174]: Another thing
+
+[^1175]: Another thing
+
+[^1176]: Another thing
+
+[^1177]: Another thing
+
+[^1178]: Another thing
+
+[^1179]: Another thing
+
+[^1180]: Another thing
+
+[^1181]: Another thing
+
+[^1182]: Another thing
+
+[^1183]: Another thing
+
+[^1184]: Another thing
+
+[^1185]: Another thing
+
+[^1186]: Another thing
+
+[^1187]: Another thing
+
+[^1188]: Another thing
+
+[^1189]: Another thing
+
+[^1190]: Another thing
+
+[^1191]: Another thing
+
+[^1192]: Another thing
+
+[^1193]: Another thing
+
+[^1194]: Another thing
+
+[^1195]: Another thing
+
+[^1196]: Another thing
+
+[^1197]: Another thing
+
+[^1198]: Another thing
+
+[^1199]: Another thing
+
--- /dev/null
+<div class="footnote">
+<hr />
+<ol>
+<li id="fn:1">
+<p>A Footnote. <a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
+</li>
+</ol>
+</div>
+<p>Some text with a footnote<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.</p>
\ No newline at end of file
--- /dev/null
+///Footnotes Go Here///
+
+Some text with a footnote[^1].
+
+[^1]: A Footnote.
--- /dev/null
+<p>some text</p>
+<dl>
+<dt>term 1</dt>
+<dd>
+<p>def 1-1</p>
+</dd>
+<dd>
+<p>def 2-2</p>
+</dd>
+<dt>term 2</dt>
+<dt>term 3</dt>
+<dd>
+<p>def 2-1
+line 2 of def 2-1</p>
+</dd>
+<dd>
+<p>def 2-2</p>
+<p>par 2 of def2-2</p>
+</dd>
+</dl>
+<p>more text</p>
\ No newline at end of file
--- /dev/null
+some text
+
+term 1
+
+: def 1-1
+
+: def 2-2
+
+term 2
+term 3
+
+: def 2-1
+ line 2 of def 2-1
+
+: def 2-2
+
+ par 2 of def2-2
+
+more text
+
--- /dev/null
+<h1>Markdown: Syntax</h1>
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a><ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul>
+</li>
+<li><a href="#block">Block Elements</a><ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul>
+</li>
+<li><a href="#span">Span Elements</a><ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul>
+</li>
+<li><a href="#misc">Miscellaneous</a><ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul>
+</li>
+</ul>
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+<hr />
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,
+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>
+<p>For example, to add an HTML table to a Markdown article:</p>
+<pre><code>This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+</code></pre>
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code><</code>
+and <code>&</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&lt;</code>, and
+<code>&amp;</code>.</p>
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+<pre><code>http://images.google.com/images?num=30&q=larry+bird
+</code></pre>
+<p>you need to encode the URL as:</p>
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;</code>.</p>
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+<pre><code>&copy;
+</code></pre>
+<p>and Markdown will leave it alone. But if you write:</p>
+<pre><code>AT&T
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>AT&amp;T
+</code></pre>
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+<pre><code>4 < 5
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>4 &lt; 5
+</code></pre>
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code><</code>
+and <code>&</code> in your example code needs to be escaped.)</p>
+<hr />
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code><br /></code> tag.</p>
+<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic
+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>></code> before every line:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Markdown allows you to be lazy and only put the <code>></code> before the first
+line of a hard-wrapped paragraph:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>></code>:</p>
+<pre><code>> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+</code></pre>
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+<pre><code>> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+</code></pre>
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+<p>is equivalent to:</p>
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+<p>and:</p>
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+<p>Ordered lists use numbers followed by periods:</p>
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+<pre><code><ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</code></pre>
+<p>If you instead wrote the list in Markdown like this:</p>
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+<p>or even:</p>
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>But if you want to be lazy, you don't have to:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code><p></code> tags in the HTML output. For example, this input:</p>
+<pre><code>* Bird
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+</code></pre>
+<p>But this:</p>
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+</code></pre>
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+<p>To put a blockquote within a list item, the blockquote's <code>></code>
+delimiters need to be indented:</p>
+<pre><code>* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+</code></pre>
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+<pre><code>* A list item with a code block:
+
+ <code goes here>
+</code></pre>
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+<pre><code>1986. What a great season.
+</code></pre>
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+<pre><code>1986\. What a great season.
+</code></pre>
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code><pre></code> and <code><code></code> tags.</p>
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+<p>Markdown will generate:</p>
+<pre><code><p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+</code></pre>
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+<p>will turn into:</p>
+<pre><code><p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+ beep
+end tell
+</code></pre>
+</code></pre>
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+<pre><code> <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+</code></pre>
+<p>will turn into:</p>
+<pre><code><pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+</code></pre>
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+<hr />
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+<p>In both styles, the link text is delimited by [square brackets].</p>
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+<p>Will produce:</p>
+<pre><code><p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+</code></pre>
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+<p>You can optionally use a space to separate the sets of brackets:</p>
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>Square brackets containing the link identifier (optionally
+ indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+ in double or single quotes.</li>
+</ul>
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+<pre><code>[id]: <http://example.com/> "Optional Title Here"
+</code></pre>
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+<p>are equivalent.</p>
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+<pre><code>[Google][]
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Google]: http://google.com/
+</code></pre>
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+<p>Here's an example of reference links in action:</p>
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Using the implicit link name shortcut, you could instead write:</p>
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Both of the above examples will produce the following HTML output:</p>
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+</code></pre>
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code><strong></code> tag. E.g., this input:</p>
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+<p>will produce:</p>
+<pre><code><em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+</code></pre>
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+<p>Emphasis can be used in the middle of a word:</p>
+<pre><code>un*fucking*believable
+</code></pre>
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+<pre><code>Use the `printf()` function.
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>Use the <code>printf()</code> function.</p>
+</code></pre>
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+<p>which will produce this:</p>
+<pre><code><p><code>There is a literal backtick (`) here.</code></p>
+</code></pre>
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+</code></pre>
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+<pre><code>Please don't use any `<blink>` tags.
+</code></pre>
+<p>into:</p>
+<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+</code></pre>
+<p>You can write this:</p>
+<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+</code></pre>
+<p>to produce:</p>
+<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+</code></pre>
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+<p>Inline image syntax looks like this:</p>
+<pre><code>
+
+
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+ attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
+</ul>
+<p>Reference-style image syntax looks like this:</p>
+<pre><code>![Alt text][id]
+</code></pre>
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code><img></code> tags.</p>
+<hr />
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+<pre><code><http://example.com/>
+</code></pre>
+<p>Markdown will turn this into:</p>
+<pre><code><a href="http://example.com/">http://example.com/</a>
+</code></pre>
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+<pre><code><address@example.com>
+</code></pre>
+<p>into something like this:</p>
+<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+</code></pre>
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes
+before the asterisks, like this:</p>
+<pre><code>\*literal asterisks\*
+</code></pre>
+<p>Markdown provides backslash escapes for the following characters:</p>
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
\ No newline at end of file
--- /dev/null
+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. `<`, and
+`&`.
+
+Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '`AT&T`'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+you need to encode the URL as:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+in your anchor tag `href` attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.
+
+Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into `&`.
+
+So, if you want to include a copyright symbol in your article, you can write:
+
+ ©
+
+and Markdown will leave it alone. But if you write:
+
+ AT&T
+
+Markdown will translate it to:
+
+ AT&T
+
+Similarly, because Markdown supports [inline HTML](#html), if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:
+
+ 4 < 5
+
+Markdown will translate it to:
+
+ 4 < 5
+
+However, inside Markdown code spans and blocks, angle brackets and
+ampersands are *always* encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single `<`
+and `&` in your example code needs to be escaped.)
+
+
+* * *
+
+
+<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">
+ © 2004 Foo Corporation
+ </div>
+
+will turn into:
+
+ <pre><code><div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+ </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><blink></code> tags.</p>
+
+You can write this:
+
+ `—` is the decimal-encoded equivalent of `—`.
+
+to produce:
+
+ <p><code>&#8212;</code> is the decimal-encoded
+ equivalent of <code>&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:
+
+ 
+
+ 
+
+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="mailto:addre
+ ss@example.co
+ m">address@exa
+ mple.com</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
+
--- /dev/null
+<p>This is the body with footnotes<sup id="fnref:foo"><a href="#fn:foo" rel="footnote">1</a></sup>
+that have named<sup id="fnref:bar"><a href="#fn:bar" rel="footnote">2</a></sup> markers and
+oddly<sup id="fnref:56"><a href="#fn:56" rel="footnote">3</a></sup> numbered<sup id="fnref:99"><a href="#fn:99" rel="footnote">4</a></sup> markers.</p>
+<div class="footnote">
+<hr />
+<ol>
+<li id="fn:foo">
+<p>Footnote marked <code>foo</code>. <a href="#fnref:foo" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
+</li>
+<li id="fn:bar">
+<p>This one is marked <em>bar</em>. <a href="#fnref:bar" rev="footnote" title="Jump back to footnote 2 in the text">↩</a></p>
+</li>
+<li id="fn:56">
+<p>A <strong>numbered</strong> footnote. <a href="#fnref:56" rev="footnote" title="Jump back to footnote 3 in the text">↩</a></p>
+</li>
+<li id="fn:99">
+<p>The last one. <a href="#fnref:99" rev="footnote" title="Jump back to footnote 4 in the text">↩</a></p>
+</li>
+</ol>
+</div>
\ No newline at end of file
--- /dev/null
+This is the body with footnotes[^foo]
+that have named[^bar] markers and
+oddly[^56] numbered[^99] markers.
+
+[^foo]: Footnote marked ``foo``.
+[^bar]: This one is marked *bar*.
+[^56]: A __numbered__ footnote.
+[^99]: The last one.
+
--- /dev/null
+<div>
+
+<p><em>foo</em></p>
+</div>
+
+<div class="baz">
+
+<p><em>bar</em></p>
+</div>
+
+<div>
+
+<p><em>blah</em></p>
+</div>
\ No newline at end of file
--- /dev/null
+<div markdown="1">_foo_</div>
+
+<div markdown=1 class="baz">
+_bar_
+</div>
+
+<div markdown>
+
+_blah_
+
+</div>
+
--- /dev/null
+<p>Some text</p>
+<dl>
+<dt>term1</dt>
+<dd>Def1</dd>
+<dt>term2-1</dt>
+<dt>term2-2</dt>
+<dd>Def2-1</dd>
+<dd>Def2-2</dd>
+</dl>
+<p>more text</p>
+<dl>
+<dt>term <em>3</em></dt>
+<dd>
+<p>def 3
+line <strong>2</strong> of def 3</p>
+<p>paragraph 2 of def 3.</p>
+</dd>
+<dd>
+<p>def 3-2</p>
+<pre><code># A code block in a def
+</code></pre>
+<blockquote>
+<p>a blockquote</p>
+</blockquote>
+<ul>
+<li>
+<p>a list item</p>
+</li>
+<li>
+<blockquote>
+<p>blockquote in list</p>
+</blockquote>
+</li>
+</ul>
+</dd>
+</dl>
+<p>and more text.</p>
+<dl>
+<dt>term 4</dt>
+<dd>def4
+ line 2 of def 4</dd>
+</dl>
+<p>final text.</p>
\ No newline at end of file
--- /dev/null
+Some text
+
+term1
+: Def1
+
+term2-1
+term2-2
+: Def2-1
+: Def2-2
+
+more text
+
+term *3*
+: def 3
+ line __2__ of def 3
+
+ paragraph 2 of def 3.
+
+: def 3-2
+
+ # A code block in a def
+
+ > a blockquote
+
+ * a list item
+
+ * > blockquote in list
+
+and more text.
+
+term 4
+: def4
+ line 2 of def 4
+
+final text.
--- /dev/null
+<h2>Table Tests</h2>
+<table>
+<thead>
+<tr>
+<th>First Header</th>
+<th>Second Header</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>First Header</th>
+<th>Second Header</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>Item</th>
+<th align="right">Value</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Computer</td>
+<td align="right">$1600</td>
+</tr>
+<tr>
+<td>Phone</td>
+<td align="right">$12</td>
+</tr>
+<tr>
+<td>Pipe</td>
+<td align="right">$1</td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>Function name</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>help()</code></td>
+<td>Display the help window.</td>
+</tr>
+<tr>
+<td><code>destroy()</code></td>
+<td><strong>Destroy your computer!</strong></td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th align="left">foo</th>
+<th align="center">bar</th>
+<th align="right">baz</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="left"></td>
+<td align="center">Q</td>
+<td align="right"></td>
+</tr>
+<tr>
+<td align="left">W</td>
+<td align="center"></td>
+<td align="right">W</td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>foo</th>
+<th>bar</th>
+<th>baz</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td></td>
+<td>Q</td>
+<td></td>
+</tr>
+<tr>
+<td>W</td>
+<td></td>
+<td>W</td>
+</tr>
+</tbody>
+</table>
+<p>Three spaces in front of a table:</p>
+<table>
+<thead>
+<tr>
+<th>First Header</th>
+<th>Second Header</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>First Header</th>
+<th>Second Header</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+<tr>
+<td>Content Cell</td>
+<td>Content Cell</td>
+</tr>
+</tbody>
+</table>
+<p>Four spaces is a code block:</p>
+<pre><code>First Header | Second Header
+------------ | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+</code></pre>
\ No newline at end of file
--- /dev/null
+Table Tests
+-----------
+
+First Header | Second Header
+------------- | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+
+| First Header | Second Header |
+| ------------- | ------------- |
+| Content Cell | Content Cell |
+| Content Cell | Content Cell |
+
+| Item | Value |
+| :-------- | -----:|
+| Computer | $1600 |
+| Phone | $12 |
+| Pipe | $1 |
+
+| Function name | Description |
+| ------------- | ------------------------------ |
+| `help()` | Display the help window. |
+| `destroy()` | **Destroy your computer!** |
+
+|foo|bar|baz|
+|:--|:-:|--:|
+| | Q | |
+|W | | W|
+
+foo|bar|baz
+---|---|---
+ | Q |
+ W | | W
+
+Three spaces in front of a table:
+
+ First Header | Second Header
+ ------------ | -------------
+ Content Cell | Content Cell
+ Content Cell | Content Cell
+
+ | First Header | Second Header |
+ | ------------ | ------------- |
+ | Content Cell | Content Cell |
+ | Content Cell | Content Cell |
+
+Four spaces is a code block:
+
+ First Header | Second Header
+ ------------ | -------------
+ Content Cell | Content Cell
+ Content Cell | Content Cell
--- /dev/null
+[DEFAULT]
+extensions=extra
+
+[loose_def_list]
+extensions=def_list
+
+[simple_def-lists]
+extensions=def_list
+
+[abbr]
+extensions=abbr
+
+[footnotes]
+extensions=footnotes
+
+[tables]
+extensions=tables
--- /dev/null
+<p>index 0000000..6e956a9</p>
+<pre><code>--- /dev/null
++++ b/test/data/stripped_text/mike-30-lili
+@@ -0,0 +1,27 @@
++Summary:
++ drift_mod.py | 1 +
++ 1 files changed, 1 insertions(+), 0 deletions(-)
++
++commit da4bfb04debdd994683740878d09988b2641513d
++Author: Mike Dirolf <mike@dirolf.com>
++Date: Tue Jan 17 13:42:28 2012 -0500
++
++```
++minor: just wanted to push something.
++```
++
++diff --git a/drift_mod.py b/drift_mod.py
++index 34dfba6..8a88a69 100644
++
++```
++--- a/drift_mod.py
+++++ b/drift_mod.py
++@@ -281,6 +281,7 @@ CONTEXT_DIFF_LINE_PATTERN = re.compile(r'^('
++ '|\+ .*'
++ '|- .*'
++ ')$')
+++
++ def wrap_context_diffs(message_text):
++ return _wrap_diff(CONTEXT_DIFF_HEADER_PATTERN,
++ CONTEXT_DIFF_LINE_PATTERN,
++```
+</code></pre>
\ No newline at end of file
--- /dev/null
+index 0000000..6e956a9
+
+```
+--- /dev/null
++++ b/test/data/stripped_text/mike-30-lili
+@@ -0,0 +1,27 @@
++Summary:
++ drift_mod.py | 1 +
++ 1 files changed, 1 insertions(+), 0 deletions(-)
++
++commit da4bfb04debdd994683740878d09988b2641513d
++Author: Mike Dirolf <mike@dirolf.com>
++Date: Tue Jan 17 13:42:28 2012 -0500
++
++```
++minor: just wanted to push something.
++```
++
++diff --git a/drift_mod.py b/drift_mod.py
++index 34dfba6..8a88a69 100644
++
++```
++--- a/drift_mod.py
+++++ b/drift_mod.py
++@@ -281,6 +281,7 @@ CONTEXT_DIFF_LINE_PATTERN = re.compile(r'^('
++ '|\+ .*'
++ '|- .*'
++ ')$')
+++
++ def wrap_context_diffs(message_text):
++ return _wrap_diff(CONTEXT_DIFF_HEADER_PATTERN,
++ CONTEXT_DIFF_LINE_PATTERN,
++```
+```
--- /dev/null
+<p>index 0000000..6e956a9</p>
+<pre><code class="diff">--- /dev/null
++++ b/test/data/stripped_text/mike-30-lili
+@@ -0,0 +1,27 @@
++Summary:
++ drift_mod.py | 1 +
++ 1 files changed, 1 insertions(+), 0 deletions(-)
++
++commit da4bfb04debdd994683740878d09988b2641513d
++Author: Mike Dirolf <mike@dirolf.com>
++Date: Tue Jan 17 13:42:28 2012 -0500
++
++```
++minor: just wanted to push something.
++```
++
++diff --git a/drift_mod.py b/drift_mod.py
++index 34dfba6..8a88a69 100644
++
++```
++--- a/drift_mod.py
+++++ b/drift_mod.py
++@@ -281,6 +281,7 @@ CONTEXT_DIFF_LINE_PATTERN = re.compile(r'^('
++ '|\+ .*'
++ '|- .*'
++ ')$')
+++
++ def wrap_context_diffs(message_text):
++ return _wrap_diff(CONTEXT_DIFF_HEADER_PATTERN,
++ CONTEXT_DIFF_LINE_PATTERN,
++```
+</code></pre>
\ No newline at end of file
--- /dev/null
+index 0000000..6e956a9
+
+```diff
+--- /dev/null
++++ b/test/data/stripped_text/mike-30-lili
+@@ -0,0 +1,27 @@
++Summary:
++ drift_mod.py | 1 +
++ 1 files changed, 1 insertions(+), 0 deletions(-)
++
++commit da4bfb04debdd994683740878d09988b2641513d
++Author: Mike Dirolf <mike@dirolf.com>
++Date: Tue Jan 17 13:42:28 2012 -0500
++
++```
++minor: just wanted to push something.
++```
++
++diff --git a/drift_mod.py b/drift_mod.py
++index 34dfba6..8a88a69 100644
++
++```
++--- a/drift_mod.py
+++++ b/drift_mod.py
++@@ -281,6 +281,7 @@ CONTEXT_DIFF_LINE_PATTERN = re.compile(r'^('
++ '|\+ .*'
++ '|- .*'
++ ')$')
+++
++ def wrap_context_diffs(message_text):
++ return _wrap_diff(CONTEXT_DIFF_HEADER_PATTERN,
++ CONTEXT_DIFF_LINE_PATTERN,
++```
+```
--- /dev/null
+<ol>
+<li>Ordered</li>
+<li>List</li>
+</ol>
+<ul>
+<li>Unordered</li>
+<li>List</li>
+</ul>
+<ol>
+<li>Ordered again</li>
+</ol>
+<p>Paragraph
+* not a list item</p>
+<ol>
+<li>More ordered
+* not a list item</li>
+</ol>
+<ul>
+<li>Unordered again
+1. not a list item</li>
+</ul>
\ No newline at end of file
--- /dev/null
+1. Ordered
+2. List
+
+* Unordered
+* List
+
+1. Ordered again
+
+Paragraph
+* not a list item
+
+1. More ordered
+* not a list item
+
+* Unordered again
+1. not a list item
--- /dev/null
+[attr_list]
+extensions=attr_list
+
+[codehilite]
+extensions=codehilite
+# This passes or not based on version of pygments.
+skip=1
+
+[toc]
+extensions=toc
+
+[toc_invalid]
+extensions=toc
+
+[toc_nested]
+extensions=toc
+
+[toc_nested2]
+extensions=toc
+
+[wikilinks]
+extensions=wikilinks
+
+[fenced_code]
+extensions=fenced_code
+
+[github_flavored]
+extensions=fenced_code
+
+[sane_lists]
+extensions=sane_lists
--- /dev/null
+<div class="toc">
+<ul>
+<li><a href="#overview">Overview</a><ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#inline-html">Inline HTML</a></li>
+<li><a href="#automatic-escaping-for-special-characters">Automatic Escaping for Special Characters</a></li>
+</ul>
+</li>
+<li><a href="#block-elements">Block Elements</a><ul>
+<li><a href="#paragraphs-and-line-breaks">Paragraphs and Line Breaks</a></li>
+<li><a href="#headers">Headers</a></li>
+<li><a href="#blockquotes">Blockquotes</a></li>
+<li><a href="#lists">Lists</a></li>
+<li><a href="#code-blocks">Code Blocks</a></li>
+<li><a href="#horizontal-rules">Horizontal Rules</a></li>
+</ul>
+</li>
+<li><a href="#span-elements">Span Elements</a><ul>
+<li><a href="#links">Links</a></li>
+<li><a href="#emphasis">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#images">Images</a></li>
+</ul>
+</li>
+<li><a href="#miscellaneous">Miscellaneous</a><ul>
+<li><a href="#automatic-links">Automatic Links</a></li>
+<li><a href="#backslash-escapes">Backslash Escapes</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<h1 id="overview">Overview</h1>
+<h2 id="philosophy">Philosophy</h2>
+<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>
+<h2 id="inline-html">Inline HTML</h2>
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,
+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>
+<p>For example, to add an HTML table to a Markdown article:</p>
+<pre><code>This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+</code></pre>
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+<h2 id="automatic-escaping-for-special-characters">Automatic Escaping for Special Characters</h2>
+<p>In HTML, there are two characters that demand special treatment: <code><</code>
+and <code>&</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&lt;</code>, and
+<code>&amp;</code>.</p>
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+<pre><code>http://images.google.com/images?num=30&q=larry+bird
+</code></pre>
+<p>you need to encode the URL as:</p>
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;</code>.</p>
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+<pre><code>&copy;
+</code></pre>
+<p>and Markdown will leave it alone. But if you write:</p>
+<pre><code>AT&T
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>AT&amp;T
+</code></pre>
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+<pre><code>4 < 5
+</code></pre>
+<p>Markdown will translate it to:</p>
+<pre><code>4 &lt; 5
+</code></pre>
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code><</code>
+and <code>&</code> in your example code needs to be escaped.)</p>
+<hr />
+<h1 id="block-elements">Block Elements</h1>
+<h2 id="paragraphs-and-line-breaks">Paragraphs and Line Breaks</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 but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code><br /></code> tag.</p>
+<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic
+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+<h2 id="headers">Headers</h2>
+<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>
+<h2 id="blockquotes">Blockquotes</h2>
+<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>></code> before every line:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Markdown allows you to be lazy and only put the <code>></code> before the first
+line of a hard-wrapped paragraph:</p>
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>></code>:</p>
+<pre><code>> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+</code></pre>
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+<pre><code>> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+</code></pre>
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+<h2 id="lists">Lists</h2>
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+<p>is equivalent to:</p>
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+<p>and:</p>
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+<p>Ordered lists use numbers followed by periods:</p>
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+<pre><code><ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</code></pre>
+<p>If you instead wrote the list in Markdown like this:</p>
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+<p>or even:</p>
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>But if you want to be lazy, you don't have to:</p>
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code><p></code> tags in the HTML output. For example, this input:</p>
+<pre><code>* Bird
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+</code></pre>
+<p>But this:</p>
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+<p>will turn into:</p>
+<pre><code><ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+</code></pre>
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+<p>To put a blockquote within a list item, the blockquote's <code>></code>
+delimiters need to be indented:</p>
+<pre><code>* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+</code></pre>
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+<pre><code>* A list item with a code block:
+
+ <code goes here>
+</code></pre>
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+<pre><code>1986. What a great season.
+</code></pre>
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+<pre><code>1986\. What a great season.
+</code></pre>
+<h2 id="code-blocks">Code Blocks</h2>
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code><pre></code> and <code><code></code> tags.</p>
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+<p>Markdown will generate:</p>
+<pre><code><p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+</code></pre>
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+<p>will turn into:</p>
+<pre><code><p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+ beep
+end tell
+</code></pre>
+</code></pre>
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+<pre><code> <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+</code></pre>
+<p>will turn into:</p>
+<pre><code><pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+</code></pre>
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+<h2 id="horizontal-rules">Horizontal Rules</h2>
+<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+<hr />
+<h1 id="span-elements">Span Elements</h1>
+<h2 id="links">Links</h2>
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+<p>In both styles, the link text is delimited by [square brackets].</p>
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+<p>Will produce:</p>
+<pre><code><p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+</code></pre>
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+<p>You can optionally use a space to separate the sets of brackets:</p>
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>Square brackets containing the link identifier (optionally
+ indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+ in double or single quotes.</li>
+</ul>
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+<pre><code>[id]: <http://example.com/> "Optional Title Here"
+</code></pre>
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+<p>are equivalent.</p>
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+<pre><code>[Google][]
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Google]: http://google.com/
+</code></pre>
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+<p>And then define the link:</p>
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+<p>Here's an example of reference links in action:</p>
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Using the implicit link name shortcut, you could instead write:</p>
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+<p>Both of the above examples will produce the following HTML output:</p>
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+</code></pre>
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+<h2 id="emphasis">Emphasis</h2>
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code><strong></code> tag. E.g., this input:</p>
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+<p>will produce:</p>
+<pre><code><em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+</code></pre>
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+<p>Emphasis can be used in the middle of a word:</p>
+<pre><code>un*fucking*believable
+</code></pre>
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+<h2 id="code">Code</h2>
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+<pre><code>Use the `printf()` function.
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>Use the <code>printf()</code> function.</p>
+</code></pre>
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+<p>which will produce this:</p>
+<pre><code><p><code>There is a literal backtick (`) here.</code></p>
+</code></pre>
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+<p>will produce:</p>
+<pre><code><p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+</code></pre>
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+<pre><code>Please don't use any `<blink>` tags.
+</code></pre>
+<p>into:</p>
+<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+</code></pre>
+<p>You can write this:</p>
+<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+</code></pre>
+<p>to produce:</p>
+<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+</code></pre>
+<h2 id="images">Images</h2>
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+<p>Inline image syntax looks like this:</p>
+<pre><code>
+
+
+</code></pre>
+<p>That is:</p>
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+ attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+ the image, and an optional <code>title</code> attribute enclosed in double
+ or single quotes.</li>
+</ul>
+<p>Reference-style image syntax looks like this:</p>
+<pre><code>![Alt text][id]
+</code></pre>
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code><img></code> tags.</p>
+<hr />
+<h1 id="miscellaneous">Miscellaneous</h1>
+<h2 id="automatic-links">Automatic Links</h2>
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+<pre><code><http://example.com/>
+</code></pre>
+<p>Markdown will turn this into:</p>
+<pre><code><a href="http://example.com/">http://example.com/</a>
+</code></pre>
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+<pre><code><address@example.com>
+</code></pre>
+<p>into something like this:</p>
+<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+</code></pre>
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+<h2 id="backslash-escapes">Backslash Escapes</h2>
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes
+before the asterisks, like this:</p>
+<pre><code>\*literal asterisks\*
+</code></pre>
+<p>Markdown provides backslash escapes for the following characters:</p>
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
\ No newline at end of file
--- /dev/null
+
+[TOC]
+
+# Overview
+
+## Philosophy
+
+Markdown is intended to be as easy-to-read and easy-to-write as is feasible.
+
+Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4],
+[Grutatext] [5], and [EtText] [6] -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.
+
+ [1]: http://docutils.sourceforge.net/mirror/setext.html
+ [2]: http://www.aaronsw.com/2002/atx/
+ [3]: http://textism.com/tools/textile/
+ [4]: http://docutils.sourceforge.net/rst.html
+ [5]: http://www.triptico.com/software/grutatxt.html
+ [6]: http://ettext.taint.org/doc/
+
+To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like \*emphasis\*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.
+
+
+
+## Inline HTML
+
+Markdown's syntax is intended for one purpose: to be used as a
+format for *writing* for the web.
+
+Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is *not* to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a *publishing* format; Markdown is a *writing*
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.
+
+For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.
+
+The only restrictions are that block-level HTML elements -- e.g. `<div>`,
+`<table>`, `<pre>`, `<p>`, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) `<p>` tags around HTML block-level tags.
+
+For example, to add an HTML table to a Markdown article:
+
+ This is a regular paragraph.
+
+ <table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+ </table>
+
+ This is another regular paragraph.
+
+Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an
+HTML block.
+
+Span-level HTML tags -- e.g. `<span>`, `<cite>`, or `<del>` -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML `<a>` or `<img>` tags instead of Markdown's
+link or image syntax, go right ahead.
+
+Unlike block-level HTML tags, Markdown syntax *is* processed within
+span-level tags.
+
+
+## Automatic Escaping for Special Characters
+
+In HTML, there are two characters that demand special treatment: `<`
+and `&`. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. `<`, and
+`&`.
+
+Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '`AT&T`'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+you need to encode the URL as:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+in your anchor tag `href` attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.
+
+Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into `&`.
+
+So, if you want to include a copyright symbol in your article, you can write:
+
+ ©
+
+and Markdown will leave it alone. But if you write:
+
+ AT&T
+
+Markdown will translate it to:
+
+ AT&T
+
+Similarly, because Markdown supports [inline HTML](#html), if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:
+
+ 4 < 5
+
+Markdown will translate it to:
+
+ 4 < 5
+
+However, inside Markdown code spans and blocks, angle brackets and
+ampersands are *always* encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single `<`
+and `&` in your example code needs to be escaped.)
+
+
+* * *
+
+
+# Block Elements
+
+
+## Paragraphs and Line Breaks
+
+A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.
+
+The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a `<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
+
+
+
+## Headers
+
+Markdown supports two styles of headers, [Setext] [1] and [atx] [2].
+
+Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:
+
+ This is an H1
+ =============
+
+ This is an H2
+ -------------
+
+Any number of underlining `=`'s or `-`'s will work.
+
+Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:
+
+ # This is an H1
+
+ ## This is an H2
+
+ ###### This is an H6
+
+Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :
+
+ # This is an H1 #
+
+ ## This is an H2 ##
+
+ ### This is an H3 ######
+
+
+## Blockquotes
+
+Markdown uses email-style `>` characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a `>` before every line:
+
+ > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+ > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+ > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+ >
+ > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+ > id sem consectetuer libero luctus adipiscing.
+
+Markdown allows you to be lazy and only put the `>` before the first
+line of a hard-wrapped paragraph:
+
+ > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+ consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+ > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+ id sem consectetuer libero luctus adipiscing.
+
+Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of `>`:
+
+ > This is the first level of quoting.
+ >
+ > > This is nested blockquote.
+ >
+ > Back to the first level.
+
+Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:
+
+ > ## This is a header.
+ >
+ > 1. This is the first list item.
+ > 2. This is the second list item.
+ >
+ > Here's some example code:
+ >
+ > return shell_exec("echo $input | $markdown_script");
+
+Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.
+
+
+## Lists
+
+Markdown supports ordered (numbered) and unordered (bulleted) lists.
+
+Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:
+
+ * Red
+ * Green
+ * Blue
+
+is equivalent to:
+
+ + Red
+ + Green
+ + Blue
+
+and:
+
+ - Red
+ - Green
+ - Blue
+
+Ordered lists use numbers followed by periods:
+
+ 1. Bird
+ 2. McHale
+ 3. Parish
+
+It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:
+
+ <ol>
+ <li>Bird</li>
+ <li>McHale</li>
+ <li>Parish</li>
+ </ol>
+
+If you instead wrote the list in Markdown like this:
+
+ 1. Bird
+ 1. McHale
+ 1. Parish
+
+or even:
+
+ 3. Bird
+ 1. McHale
+ 8. Parish
+
+you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.
+
+If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.
+
+List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.
+
+To make lists look nice, you can wrap items with hanging indents:
+
+ * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+ * Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+
+But if you want to be lazy, you don't have to:
+
+ * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+ * Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+
+If list items are separated by blank lines, Markdown will wrap the
+items in `<p>` tags in the HTML output. For example, this input:
+
+ * Bird
+ * Magic
+
+will turn into:
+
+ <ul>
+ <li>Bird</li>
+ <li>Magic</li>
+ </ul>
+
+But this:
+
+ * Bird
+
+ * Magic
+
+will turn into:
+
+ <ul>
+ <li><p>Bird</p></li>
+ <li><p>Magic</p></li>
+ </ul>
+
+List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:
+
+ 1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+ 2. Suspendisse id sem consectetuer libero luctus adipiscing.
+
+It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:
+
+ * This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+ only required to indent the first line. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit.
+
+ * Another item in the same list.
+
+To put a blockquote within a list item, the blockquote's `>`
+delimiters need to be indented:
+
+ * A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+
+To put a code block within a list item, the code block needs
+to be indented *twice* -- 8 spaces or two tabs:
+
+ * A list item with a code block:
+
+ <code goes here>
+
+
+It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:
+
+ 1986. What a great season.
+
+In other words, a *number-period-space* sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:
+
+ 1986\. What a great season.
+
+
+
+## Code Blocks
+
+Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both `<pre>` and `<code>` tags.
+
+To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:
+
+ This is a normal paragraph:
+
+ This is a code block.
+
+Markdown will generate:
+
+ <p>This is a normal paragraph:</p>
+
+ <pre><code>This is a code block.
+ </code></pre>
+
+One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:
+
+ Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+
+will turn into:
+
+ <p>Here is an example of AppleScript:</p>
+
+ <pre><code>tell application "Foo"
+ beep
+ end tell
+ </code></pre>
+
+A code block continues until it reaches a line that is not indented
+(or the end of the article).
+
+Within a code block, ampersands (`&`) and angle brackets (`<` and `>`)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:
+
+ <div class="footer">
+ © 2004 Foo Corporation
+ </div>
+
+will turn into:
+
+ <pre><code><div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+ </code></pre>
+
+Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.
+
+
+
+## Horizontal Rules
+
+You can produce a horizontal rule tag (`<hr />`) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:
+
+ * * *
+
+ ***
+
+ *****
+
+ - - -
+
+ ---------------------------------------
+
+ _ _ _
+
+
+* * *
+
+# Span Elements
+
+## Links
+
+Markdown supports two style of links: *inline* and *reference*.
+
+In both styles, the link text is delimited by [square brackets].
+
+To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an *optional*
+title for the link, surrounded in quotes. For example:
+
+ This is [an example](http://example.com/ "Title") inline link.
+
+ [This link](http://example.net/) has no title attribute.
+
+Will produce:
+
+ <p>This is <a href="http://example.com/" title="Title">
+ an example</a> inline link.</p>
+
+ <p><a href="http://example.net/">This link</a> has no
+ title attribute.</p>
+
+If you're referring to a local resource on the same server, you can
+use relative paths:
+
+ See my [About](/about/) page for details.
+
+Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:
+
+ This is [an example][id] reference-style link.
+
+You can optionally use a space to separate the sets of brackets:
+
+ This is [an example] [id] reference-style link.
+
+Then, anywhere in the document, you define your link label like this,
+on a line by itself:
+
+ [id]: http://example.com/ "Optional Title Here"
+
+That is:
+
+* Square brackets containing the link identifier (optionally
+ indented from the left margin using up to three spaces);
+* followed by a colon;
+* followed by one or more spaces (or tabs);
+* followed by the URL for the link;
+* optionally followed by a title attribute for the link, enclosed
+ in double or single quotes.
+
+The link URL may, optionally, be surrounded by angle brackets:
+
+ [id]: <http://example.com/> "Optional Title Here"
+
+You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:
+
+ [id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+
+Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.
+
+Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links:
+
+ [link text][a]
+ [link text][A]
+
+are equivalent.
+
+The *implicit link name* shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:
+
+ [Google][]
+
+And then define the link:
+
+ [Google]: http://google.com/
+
+Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:
+
+ Visit [Daring Fireball][] for more information.
+
+And then define the link:
+
+ [Daring Fireball]: http://daringfireball.net/
+
+Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.
+
+Here's an example of reference links in action:
+
+ I get 10 times more traffic from [Google] [1] than from
+ [Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+
+Using the implicit link name shortcut, you could instead write:
+
+ I get 10 times more traffic from [Google][] than from
+ [Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+
+Both of the above examples will produce the following HTML output:
+
+ <p>I get 10 times more traffic from <a href="http://google.com/"
+ title="Google">Google</a> than from
+ <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+ or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+
+For comparison, here is the same paragraph written using
+Markdown's inline link style:
+
+ I get 10 times more traffic from [Google](http://google.com/ "Google")
+ than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+ [MSN](http://search.msn.com/ "MSN Search").
+
+The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.
+
+With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.
+
+
+## Emphasis
+
+Markdown treats asterisks (`*`) and underscores (`_`) as indicators of
+emphasis. Text wrapped with one `*` or `_` will be wrapped with an
+HTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML
+`<strong>` tag. E.g., this input:
+
+ *single asterisks*
+
+ _single underscores_
+
+ **double asterisks**
+
+ __double underscores__
+
+will produce:
+
+ <em>single asterisks</em>
+
+ <em>single underscores</em>
+
+ <strong>double asterisks</strong>
+
+ <strong>double underscores</strong>
+
+You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.
+
+Emphasis can be used in the middle of a word:
+
+ un*fucking*believable
+
+But if you surround an `*` or `_` with spaces, it'll be treated as a
+literal asterisk or underscore.
+
+To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:
+
+ \*this text is surrounded by literal asterisks\*
+
+
+
+## Code
+
+To indicate a span of code, wrap it with backtick quotes (`` ` ``).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:
+
+ Use the `printf()` function.
+
+will produce:
+
+ <p>Use the <code>printf()</code> function.</p>
+
+To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:
+
+ ``There is a literal backtick (`) here.``
+
+which will produce this:
+
+ <p><code>There is a literal backtick (`) here.</code></p>
+
+The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:
+
+ A single backtick in a code span: `` ` ``
+
+ A backtick-delimited string in a code span: `` `foo` ``
+
+will produce:
+
+ <p>A single backtick in a code span: <code>`</code></p>
+
+ <p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+
+With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:
+
+ Please don't use any `<blink>` tags.
+
+into:
+
+ <p>Please don't use any <code><blink></code> tags.</p>
+
+You can write this:
+
+ `—` is the decimal-encoded equivalent of `—`.
+
+to produce:
+
+ <p><code>&#8212;</code> is the decimal-encoded
+ equivalent of <code>&mdash;</code>.</p>
+
+
+
+## Images
+
+Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.
+
+Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: *inline* and *reference*.
+
+Inline image syntax looks like this:
+
+ 
+
+ 
+
+That is:
+
+* An exclamation mark: `!`;
+* followed by a set of square brackets, containing the `alt`
+ attribute text for the image;
+* followed by a set of parentheses, containing the URL or path to
+ the image, and an optional `title` attribute enclosed in double
+ or single quotes.
+
+Reference-style image syntax looks like this:
+
+ ![Alt text][id]
+
+Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:
+
+ [id]: url/to/image "Optional title attribute"
+
+As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML `<img>` tags.
+
+
+* * *
+
+
+# Miscellaneous
+
+## Automatic Links
+
+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="mailto:addre
+ ss@example.co
+ m">address@exa
+ mple.com</a>
+
+which will render in a browser as a clickable link to "address@example.com".
+
+(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)
+
+
+
+## Backslash Escapes
+
+Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML `<em>` tag), you can backslashes
+before the asterisks, like this:
+
+ \*literal asterisks\*
+
+Markdown provides backslash escapes for the following characters:
+
+ \ backslash
+ ` backtick
+ * asterisk
+ _ underscore
+ {} curly braces
+ [] square brackets
+ () parentheses
+ # hash mark
+ + plus sign
+ - minus sign (hyphen)
+ . dot
+ ! exclamation mark
+
--- /dev/null
+<h2 id="toc">[TOC]</h2>
+<h1 id="header-1">Header 1</h1>
+<p>The TOC marker cannot be inside a header. This test makes sure markdown doesn't
+crash when it encounters this errant syntax. The unexpected output should
+clue the author in that s/he needs to add a blank line between the TOC and
+the <code><hr></code>.</p>
\ No newline at end of file
--- /dev/null
+[TOC]
+-----
+
+# Header 1
+
+The TOC marker cannot be inside a header. This test makes sure markdown doesn't
+crash when it encounters this errant syntax. The unexpected output should
+clue the author in that s/he needs to add a blank line between the TOC and
+the `<hr>`.
--- /dev/null
+<h1 id="header-a">Header A</h1>
+<h2 id="header-1">Header 1</h2>
+<h3 id="header-i">Header i</h3>
+<h1 id="header-b">Header B</h1>
+<div class="toc">
+<ul>
+<li><a href="#header-a">Header A</a><ul>
+<li><a href="#header-1">Header 1</a><ul>
+<li><a href="#header-i">Header i</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#header-b">Header B</a></li>
+</ul>
+</div>
\ No newline at end of file
--- /dev/null
+# Header A
+
+## Header 1
+
+### Header i
+
+# Header B
+
+[TOC]
--- /dev/null
+<div class="toc">
+<ul>
+<li><a href="#start-with-header-other-than-one">Start with header other than one.</a></li>
+<li><a href="#header-3">Header 3</a><ul>
+<li><a href="#header-4">Header 4</a></li>
+</ul>
+</li>
+<li><a href="#header-3_1">Header 3</a></li>
+</ul>
+</div>
+<h3 id="start-with-header-other-than-one">Start with header other than one.</h3>
+<h3 id="header-3">Header 3</h3>
+<h4 id="header-4">Header 4</h4>
+<h3 id="header-3_1">Header 3</h3>
\ No newline at end of file
--- /dev/null
+[TOC]
+
+### Start with header other than one.
+
+### Header 3
+
+#### Header 4
+
+### Header 3
+
--- /dev/null
+<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
--- /dev/null
+Some text with a [[WikiLink]].
+
+A link with [[ white space and_underscores ]] and a empty [[ ]] one.
+
+Another with [[double spaces]] and [[double__underscores]] and
+one that [[has _emphasis_ inside]] and one [[with_multiple_underscores]]
+and one that is _[[emphasised]]_.
+
+And a <a href="http://example.com/RealLink">RealLink</a>.
+
+<http://example.com/And_A_AutoLink>
+
+And a [MarkdownLink](/MarkdownLink/ "A MarkdownLink") for
+completeness.
--- /dev/null
+<p>A test of the most<br>
+basic of html/xhtml differences.</p>
\ No newline at end of file
--- /dev/null
+A test of the most
+basic of html/xhtml differences.
\ No newline at end of file
--- /dev/null
+[DEFAULT]
+output_format=html4
--- /dev/null
+<p>foo</p>
+<div>
+bar
+</div>
\ No newline at end of file
--- /dev/null
+foo\r
+\r
+<div>\r
+bar\r
+</div>\r
--- /dev/null
+<h1>this is a huge header</h1>
+<h2>this is a smaller header</h2>
\ No newline at end of file
--- /dev/null
+# this is a huge header #
+## this is a smaller header ##
--- /dev/null
+<p><a href="http://www.freewisdom.org/this&that">link</a></p>
\ No newline at end of file
--- /dev/null
+[link](http://www.freewisdom.org/this&that)
--- /dev/null
+<p>&</p>
+<p>AT&T</p>
\ No newline at end of file
--- /dev/null
+&
+
+AT&T
+
+
--- /dev/null
+<h1>بايثون</h1>
+<p><strong>بايثون</strong> لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (OOP) وقابلة للتطوير بالإضافة إلى أنها مجانية و مفتوحة المصدر. صُنفت بالأساس كلغة تفسيرية ، بايثون مصممة أصلاً للأداء بعض المهام الخاصة أو المحدودة. إلا أنه يمكن استخدامها بايثون لإنجاز المشاريع الضخمه كأي لغة برمجية أخرى، غالباً ما يُنصح المبتدئين في ميدان البرمجة بتعلم هذه اللغة لأنها من بين أسهل اللغات البرمجية تعلماً.</p>
+<p>نشأت بايثون في مركز CWI (مركز العلوم والحاسب الآلي) بأمستردام على يد جويدو فان رُزوم. تم تطويرها بلغة C. أطلق فان رُزوم اسم "بايثون" على لغته تعبيرًا عن إعجابه بفِرقَة مسرحية هزلية شهيرة من بريطانيا، كانت تطلق على نفسها اسم مونتي بايثون Monty Python.</p>
+<p>تتميز بايثون بمجتمعها النشط ، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة والتي برمجها أشخاص من مجتمع هذه اللغة ، مثلاً مكتبة PyGame التي توفر مجموعه من الوظائف من اجل برمجة الالعاب. ويمكن لبايثون التعامل مع العديد من أنواع قواعد البيانات مثل MySQL وغيره.</p>
+<h2>أمثلة</h2>
+<p>مثال Hello World!</p>
+<pre><code>print "Hello World!"
+</code></pre>
+<p>مثال لاستخراج المضروب Factorial :</p>
+<pre><code>num = 1
+x = raw_input('Insert the number please ')
+x = int(x)
+
+if x > 69:
+ print 'Math Error !'
+else:
+ while x > 1:
+ num *= x
+ x = x-1
+
+ print num
+</code></pre>
+<h2>وصلات خارجية</h2>
+<ul>
+<li><a href="http://www.python.org">الموقع الرسمي للغة بايثون</a></li>
+</ul>
+<p>بذرة حاس </p>
\ No newline at end of file
--- /dev/null
+
+بايثون
+=====
+
+**بايثون** لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (OOP) وقابلة للتطوير بالإضافة إلى أنها مجانية و مفتوحة المصدر. صُنفت بالأساس كلغة تفسيرية ، بايثون مصممة أصلاً للأداء بعض المهام الخاصة أو المحدودة. إلا أنه يمكن استخدامها بايثون لإنجاز المشاريع الضخمه كأي لغة برمجية أخرى، غالباً ما يُنصح المبتدئين في ميدان البرمجة بتعلم هذه اللغة لأنها من بين أسهل اللغات البرمجية تعلماً.
+
+نشأت بايثون في مركز CWI (مركز العلوم والحاسب الآلي) بأمستردام على يد جويدو فان رُزوم. تم تطويرها بلغة C. أطلق فان رُزوم اسم "بايثون" على لغته تعبيرًا عن إعجابه بفِرقَة مسرحية هزلية شهيرة من بريطانيا، كانت تطلق على نفسها اسم مونتي بايثون Monty Python.
+
+تتميز بايثون بمجتمعها النشط ، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة والتي برمجها أشخاص من مجتمع هذه اللغة ، مثلاً مكتبة PyGame التي توفر مجموعه من الوظائف من اجل برمجة الالعاب. ويمكن لبايثون التعامل مع العديد من أنواع قواعد البيانات مثل MySQL وغيره.
+
+##أمثلة
+مثال Hello World!
+
+ print "Hello World!"
+
+
+مثال لاستخراج المضروب Factorial :
+
+ num = 1
+ x = raw_input('Insert the number please ')
+ x = int(x)
+
+ if x > 69:
+ print 'Math Error !'
+ else:
+ while x > 1:
+ num *= x
+ x = x-1
+
+ print num
+
+
+
+##وصلات خارجية
+* [الموقع الرسمي للغة بايثون](http://www.python.org)
+
+ بذرة حاس
--- /dev/null
+<p id="TABLE.OF.CONTENTS"></p>
+<ul>
+<li id="TABLEOFCONTENTS"></li>
+</ul>
+<p id="TABLEOFCONTENTS">Or in the middle of the text </p>
+<p id="tableofcontents"></p>
\ No newline at end of file
--- /dev/null
+{@id=TABLE.OF.CONTENTS}
+
+
+* {@id=TABLEOFCONTENTS}
+
+
+Or in the middle of the text {@id=TABLEOFCONTENTS}
+
+{@id=tableofcontents}
+
--- /dev/null
+<p><a href="http://some.site/weird*url*thing">http://some.site/weird*url*thing</a></p>
\ No newline at end of file
--- /dev/null
+<http://some.site/weird*url*thing>
+
--- /dev/null
+<p><a href="http://some.site/нечто*очень*странное">http://some.site/нечто*очень*странное</a></p>
\ No newline at end of file
--- /dev/null
+<http://some.site/нечто*очень*странное>
+
+
--- /dev/null
+<p>\`This should not be in code.\`
+`This also should not be in code.`
+`And finally this should not be in code.`</p>
\ No newline at end of file
--- /dev/null
+\\`This should not be in code.\\`
+\`This also should not be in code.\`
+\`And finally this should not be in code.`
--- /dev/null
+<p><strong>Python</strong>(パイソン)は、<a href="http://en.wikipedia.org/wiki/Guido_van_Rossum">Guido van Rossum</a> によって作られたオープンソースのオブジェクト指向スクリプト言語。<a href="http://ja.wikipedia.org/wiki/Perl">Perl</a>とともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。 (Pythonには、爬虫類のニシキヘビの意味があり、Python言語のマスコットやアイコンとして使われることがある。)</p>
+<p>|||||||||||||||||||||||||||||THIS SHOULD BE LTR|||||||||||||||||||||||||</p>
+<p dir="rtl">|||||||||||||||||||||||||||||THIS SHOULD BE RTL||||||||||||||||||||||||| </p>
+<p dir="ltr">(<strong>بايثون</strong> لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (THIS SHOULD BE LTR ) وقابلة للتطوير بالإضافة إلى أنها مجانية و مفتوح </p>
+<p>پایتون زبان برنامهنویسی تفسیری و سطح بالا ، شیگرا و یک زبان برنامهنویسی تفسیری سمت سرور قدرتمند است که توسط گیدو ون روسوم در سال ۱۹۹۰ ساخته شد. این زبان در ویژگیها شبیه پرل، روبی، اسکیم، اسمالتاک و تیسیال است و از مدیریت خودکار حافظه استفاده میکند</p>
+<p>Python,是一种面向对象的、直譯式的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。</p>
+<p>ބްލޫ ވޭލްގެ ދޫ މަތީގައި އެއްފަހަރާ 50 މީހުންނަށް ތިބެވިދާނެވެ. ބޮޑު މަހުގެ ދުލަކީ އެހާމެ ބޮޑު އެއްޗެކެވެ.</p>
+<p><strong>உருது</strong> 13ஆம் நூற்றாண்டில் உருவான ஒரு இந்தோ-ஐரோப்பிய மொழியாகும். உருது, ஹிந்தியுடன் சேர்த்து "ஹிந்துஸ்தானி" என அழைக்கப்படுகின்றது. மண்டரின், ஆங்கிலம் ஆகியவற்றுக்கு அடுத்தபடியாக மூன்றாவது கூடிய அளவு மக்களால் புரிந்து கொள்ளப்படக்கூடியது ஹிந்துஸ்தானியேயாகும். தாய் மொழியாகப் பேசுபவர்கள் எண்ணிக்கையின் அடிப்படையில் உருது உலகின் 20 ஆவது பெரிய மொழியாகும். 6 கோடி மக்கள் இதனைத் தாய் மொழியாகக் கொண்டுள்ளார்கள். இரண்டாவது மொழியாகக் கொண்டுள்ளவர்கள் உட்பட 11 கோடிப் பேர் இதனைப் பேசுகிறார்கள். உருது பாகிஸ்தானின் அரசகரும மொழியாகவும், இந்தியாவின் அரசகரும மொழிகளுள் ஒன்றாகவும் விளங்குகிறது.</p>
+<p>اردو ہندوآریائی زبانوں کی ہندويورپی شاخ کی ایک زبان ہے جو تيرھويں صدی ميں بر صغير ميں پيدا ہوئی ـ اردو پاکستان کی سرکاری زبان ہے اور بھارت کی سرکاری زبانوں ميں سے ايک ہے۔ اردو بھارت ميں 5 کروڑ اور پاکستان ميں 1 کروڑ لوگوں کی مادری زبان ہے مگر اسے بھارت اور پاکستان کے تقریباً 50 کروڑ لوگ بول اور سمجھ سکتے ھیں ۔ جن میں سے تقریباً 10.5 کروڑ لوگ اسے باقاعدہ بولتے ھیں۔</p>
+<h1>بايثون</h1>
+<p><strong>بايثون</strong> لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (OOP) وقابلة للتطوير بالإضافة إلى أنها مجانية و مفتوحة المصدر. صُنفت بالأساس كلغة تفسيرية ، بايثون مصممة أصلاً للأداء بعض المهام الخاصة أو المحدودة. إلا أنه يمكن استخدامها بايثون لإنجاز المشاريع الضخمه كأي لغة برمجية أخرى، غالباً ما يُنصح المبتدئين في ميدان البرمجة بتعلم هذه اللغة لأنها من بين أسهل اللغات البرمجية تعلماً.</p>
+<p>|||||||||||||||||||||||||||||THIS SHOULD BE RTL|||||||||||||||||||||||||</p>
+<p>(نشأت بايثون في مركز CWI (مركز العلوم والحاسب الآلي) بأمستردام على يد جويدو فان رُزوم. تم تطويرها بلغة C. أطلق فان رُزوم اسم "بايثون" على لغته تعبيرًا عن إعجابه بفِرقَة مسرحية هزلية شهيرة من بريطانيا، كانت تطلق على نفسها اسم مونتي بايثون Monty Python.</p>
+<p>تتميز بايثون بمجتمعها النشط ، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة والتي برمجها أشخاص من مجتمع هذه اللغة ، مثلاً مكتبة PyGame التي توفر مجموعه من الوظائف من اجل برمجة الالعاب. ويمكن لبايثون التعامل مع العديد من أنواع قواعد البيانات مثل MySQL وغيره.</p>
+<h2>أمثلة</h2>
+<p>مثال Hello World!</p>
+<pre><code>print "Hello World!"
+</code></pre>
+<p>مثال لاستخراج المضروب Factorial :</p>
+<pre><code>num = 1
+x = raw_input('Insert the number please ')
+x = int(x)
+
+if x > 69:
+ print 'Math Error !'
+else:
+ while x > 1:
+ num *= x
+ x = x-1
+
+ print num
+</code></pre>
+<h2>وصلات خارجية</h2>
+<ul>
+<li><a href="http://www.python.org">الموقع الرسمي للغة بايثون</a></li>
+</ul>
+<p>بذرة حاس </p>
+<p><strong>Недвард «Нед» Фландерс</strong> (Nedward «Ned» Flanders) — вымышленный персонаж мультсериала «[Симпсоны][]», озвученный Гарри Ширером. Он и его семья живут по соседству от семьи Симпсонов. Набожный христианин, Нед является одним из столпов морали Спрингфилда. В эпизоде «Alone Again, Natura-Diddily» он овдовел, его жена Мод погибла в результате несчастного случая. </p>
+<p>Нед был одним из первых персонажей в мультсериале, который не был членом семьи Симпсонов. Начиная с первых серий, он регулярно появляется в «Симпсонах». Считается, что Нед Фландерс был назван в честь улицы <em>Northeast Flanders St.</em> в <a href="http://www.portland.gov">Портленде</a>, Орегон, родном городе создателя мультсериала Мэтта Грейнинга]]. Надпись на указателе улицы <em>NE Flanders St.</em> хулиганы часто исправляли на <em>NED Flanders St.</em></p>
\ No newline at end of file
--- /dev/null
+**Python**(パイソン)は、[Guido van Rossum](http://en.wikipedia.org/wiki/Guido_van_Rossum) によって作られたオープンソースのオブジェクト指向スクリプト言語。[Perl](http://ja.wikipedia.org/wiki/Perl)とともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。 (Pythonには、爬虫類のニシキヘビの意味があり、Python言語のマスコットやアイコンとして使われることがある。)
+
+|||||||||||||||||||||||||||||THIS SHOULD BE LTR|||||||||||||||||||||||||
+
+|||||||||||||||||||||||||||||THIS SHOULD BE RTL||||||||||||||||||||||||| {@dir=rtl}
+
+
+(**بايثون** لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (THIS SHOULD BE LTR ) وقابلة للتطوير {@dir=ltr} بالإضافة إلى أنها مجانية و مفتوح
+
+
+
+
+
+پایتون زبان برنامهنویسی تفسیری و سطح بالا ، شیگرا و یک زبان برنامهنویسی تفسیری سمت سرور قدرتمند است که توسط گیدو ون روسوم در سال ۱۹۹۰ ساخته شد. این زبان در ویژگیها شبیه پرل، روبی، اسکیم، اسمالتاک و تیسیال است و از مدیریت خودکار حافظه استفاده میکند
+
+Python,是一种面向对象的、直譯式的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。
+
+ބްލޫ ވޭލްގެ ދޫ މަތީގައި އެއްފަހަރާ 50 މީހުންނަށް ތިބެވިދާނެވެ. ބޮޑު މަހުގެ ދުލަކީ އެހާމެ ބޮޑު އެއްޗެކެވެ.
+
+**உருது** 13ஆம் நூற்றாண்டில் உருவான ஒரு இந்தோ-ஐரோப்பிய மொழியாகும். உருது, ஹிந்தியுடன் சேர்த்து "ஹிந்துஸ்தானி" என அழைக்கப்படுகின்றது. மண்டரின், ஆங்கிலம் ஆகியவற்றுக்கு அடுத்தபடியாக மூன்றாவது கூடிய அளவு மக்களால் புரிந்து கொள்ளப்படக்கூடியது ஹிந்துஸ்தானியேயாகும். தாய் மொழியாகப் பேசுபவர்கள் எண்ணிக்கையின் அடிப்படையில் உருது உலகின் 20 ஆவது பெரிய மொழியாகும். 6 கோடி மக்கள் இதனைத் தாய் மொழியாகக் கொண்டுள்ளார்கள். இரண்டாவது மொழியாகக் கொண்டுள்ளவர்கள் உட்பட 11 கோடிப் பேர் இதனைப் பேசுகிறார்கள். உருது பாகிஸ்தானின் அரசகரும மொழியாகவும், இந்தியாவின் அரசகரும மொழிகளுள் ஒன்றாகவும் விளங்குகிறது.
+
+اردو ہندوآریائی زبانوں کی ہندويورپی شاخ کی ایک زبان ہے جو تيرھويں صدی ميں بر صغير ميں پيدا ہوئی ـ اردو پاکستان کی سرکاری زبان ہے اور بھارت کی سرکاری زبانوں ميں سے ايک ہے۔ اردو بھارت ميں 5 کروڑ اور پاکستان ميں 1 کروڑ لوگوں کی مادری زبان ہے مگر اسے بھارت اور پاکستان کے تقریباً 50 کروڑ لوگ بول اور سمجھ سکتے ھیں ۔ جن میں سے تقریباً 10.5 کروڑ لوگ اسے باقاعدہ بولتے ھیں۔
+
+بايثون
+=====
+
+**بايثون** لغة برمجة حديثة بسيطة، واضحة، سريعة ، تستخدم أسلوب البرمجة الكائنية (OOP) وقابلة للتطوير بالإضافة إلى أنها مجانية و مفتوحة المصدر. صُنفت بالأساس كلغة تفسيرية ، بايثون مصممة أصلاً للأداء بعض المهام الخاصة أو المحدودة. إلا أنه يمكن استخدامها بايثون لإنجاز المشاريع الضخمه كأي لغة برمجية أخرى، غالباً ما يُنصح المبتدئين في ميدان البرمجة بتعلم هذه اللغة لأنها من بين أسهل اللغات البرمجية تعلماً.
+
+|||||||||||||||||||||||||||||THIS SHOULD BE RTL|||||||||||||||||||||||||
+
+(نشأت بايثون في مركز CWI (مركز العلوم والحاسب الآلي) بأمستردام على يد جويدو فان رُزوم. تم تطويرها بلغة C. أطلق فان رُزوم اسم "بايثون" على لغته تعبيرًا عن إعجابه بفِرقَة مسرحية هزلية شهيرة من بريطانيا، كانت تطلق على نفسها اسم مونتي بايثون Monty Python.
+
+تتميز بايثون بمجتمعها النشط ، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة والتي برمجها أشخاص من مجتمع هذه اللغة ، مثلاً مكتبة PyGame التي توفر مجموعه من الوظائف من اجل برمجة الالعاب. ويمكن لبايثون التعامل مع العديد من أنواع قواعد البيانات مثل MySQL وغيره.
+
+##أمثلة
+مثال Hello World!
+
+ print "Hello World!"
+
+
+مثال لاستخراج المضروب Factorial :
+
+ num = 1
+ x = raw_input('Insert the number please ')
+ x = int(x)
+
+ if x > 69:
+ print 'Math Error !'
+ else:
+ while x > 1:
+ num *= x
+ x = x-1
+
+ print num
+
+
+
+##وصلات خارجية
+* [الموقع الرسمي للغة بايثون](http://www.python.org)
+
+ بذرة حاس
+
+
+**Недвард «Нед» Фландерс** (Nedward «Ned» Flanders) — вымышленный персонаж мультсериала «[Симпсоны][]», озвученный Гарри Ширером. Он и его семья живут по соседству от семьи Симпсонов. Набожный христианин, Нед является одним из столпов морали Спрингфилда. В эпизоде «Alone Again, Natura-Diddily» он овдовел, его жена Мод погибла в результате несчастного случая.
+
+Нед был одним из первых персонажей в мультсериале, который не был членом семьи Симпсонов. Начиная с первых серий, он регулярно появляется в «Симпсонах». Считается, что Нед Фландерс был назван в честь улицы *Northeast Flanders St.* в [Портленде](http://www.portland.gov), Орегон, родном городе создателя мультсериала Мэтта Грейнинга]]. Надпись на указателе улицы *NE Flanders St.* хулиганы часто исправляли на _NED Flanders St._
+
+
--- /dev/null
+<p>aaaaaaaaaaa</p>
+<blockquote></blockquote>
+<p>bbbbbbbbbbb</p>
\ No newline at end of file
--- /dev/null
+
+aaaaaaaaaaa
+
+>
+
+bbbbbbbbbbb
--- /dev/null
+<section>
+ <header>
+ <hgroup>
+ <h1>Hello :-)</h1>
+ </hgroup>
+ </header>
+ <figure>
+ <img src="image.png" alt="" />
+ <figcaption>Caption</figcaption>
+ </figure>
+ <footer>
+ <p>Some footer</p>
+ </footer>
+</section>
+
+<figure></figure>
\ No newline at end of file
--- /dev/null
+<section>
+ <header>
+ <hgroup>
+ <h1>Hello :-)</h1>
+ </hgroup>
+ </header>
+ <figure>
+ <img src="image.png" alt="" />
+ <figcaption>Caption</figcaption>
+ </figure>
+ <footer>
+ <p>Some footer</p>
+ </footer>
+</section><figure></figure>
--- /dev/null
+<blockquote>
+Raw HTML processing should not confuse this with the blockquote below
+</blockquote>
+
+<div id="current-content">
+ <div id="primarycontent" class="hfeed">
+ <div id="post-">
+ <div class="page-head">
+ <h2>Header2</h2>
+ </div>
+ <div class="entry-content">
+ <h3>Header3</h3>
+ <p>Paragraph</p>
+ <h3>Header3</h3>
+ <p>Paragraph</p>
+ <blockquote>
+ <p>Paragraph</p>
+ </blockquote>
+ <p>Paragraph</p>
+ <p><a href="/somelink">linktext</a></p>
+ </div>
+ </div><!-- #post-ID -->
+ <!-- add contact form here -->
+ </div><!-- #primarycontent -->
+</div>
+
+<!-- #current-content -->
\ No newline at end of file
--- /dev/null
+<blockquote>
+Raw HTML processing should not confuse this with the blockquote below
+</blockquote>
+<div id="current-content">
+ <div id="primarycontent" class="hfeed">
+ <div id="post-">
+ <div class="page-head">
+ <h2>Header2</h2>
+ </div>
+ <div class="entry-content">
+ <h3>Header3</h3>
+ <p>Paragraph</p>
+ <h3>Header3</h3>
+ <p>Paragraph</p>
+ <blockquote>
+ <p>Paragraph</p>
+ </blockquote>
+ <p>Paragraph</p>
+ <p><a href="/somelink">linktext</a></p>
+ </div>
+ </div><!-- #post-ID -->
+ <!-- add contact form here -->
+ </div><!-- #primarycontent -->
+</div><!-- #current-content -->
--- /dev/null
+<p>foo</p>
+
+<ul>
+<li>
+<p>bar</p>
+</li>
+<li>
+<p>baz</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+<p>foo</p>
+<ul>
+<li>
+<p>bar</p>
+</li>
+<li>
+<p>baz</p>
+</li>
+</ul>
--- /dev/null
+<p>Paragraph</p>
+<blockquote>
+<p>Block quote
+Yep</p>
+</blockquote>
+<p>Paragraph</p>
+<blockquote>
+<p>no space
+Nope</p>
+</blockquote>
+<p>Paragraph one</p>
+<blockquote>
+<p>blockquote
+More blockquote.</p>
+</blockquote>
\ No newline at end of file
--- /dev/null
+Paragraph
+> Block quote
+> Yep
+
+Paragraph
+>no space
+>Nope
+
+Paragraph one
+> blockquote
+More blockquote.
--- /dev/null
+<p>This is a paragraph.</p>
+<hr />
+<blockquote>
+<p>Block quote with horizontal lines.</p>
+<hr />
+<blockquote>
+<p>Double block quote.</p>
+<hr />
+<p>End of the double block quote.</p>
+</blockquote>
+<p>A new paragraph.
+With multiple lines.
+Even a lazy line.</p>
+<hr />
+<p>The last line.</p>
+</blockquote>
\ No newline at end of file
--- /dev/null
+This is a paragraph.
+
+---
+
+> Block quote with horizontal lines.
+
+> ---
+
+> > Double block quote.
+
+> > ---
+
+> > End of the double block quote.
+
+> A new paragraph.
+> With multiple lines.
+Even a lazy line.
+
+> ---
+
+> The last line.
--- /dev/null
+<blockquote>
+<p>blockquote with no whitespace before <code>></code>.</p>
+</blockquote>
+<p>foo</p>
+<blockquote>
+<p>blockquote with one space before the <code>></code>.</p>
+</blockquote>
+<p>bar</p>
+<blockquote>
+<p>blockquote with 2 spaces.</p>
+</blockquote>
+<p>baz</p>
+<blockquote>
+<p>this has three spaces so its a paragraph.</p>
+</blockquote>
+<p>blah</p>
+<pre><code>> this one had four so it's a code block.
+</code></pre>
+<blockquote>
+<blockquote>
+<p>this nested blockquote has 0 on level one and 3 (one after the first <code>></code> + 2 more) on level 2.</p>
+<p>and this has 4 on level 2 - another code block.</p>
+</blockquote>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> blockquote with no whitespace before `>`.
+
+foo
+
+ > blockquote with one space before the `>`.
+
+bar
+
+ > blockquote with 2 spaces.
+
+baz
+
+ > this has three spaces so its a paragraph.
+
+blah
+
+ > this one had four so it's a code block.
+
+> > this nested blockquote has 0 on level one and 3 (one after the first `>` + 2 more) on level 2.
+
+> > and this has 4 on level 2 - another code block.
--- /dev/null
+<p><strong>bold <a href="http://example.com">link</a></strong></p>
\ No newline at end of file
--- /dev/null
+**bold [link](http://example.com)**
--- /dev/null
+<p>Output:</p>
+<pre><code><p>Some of these words <em>are emphasized</em>.
+Some of these words <em>are emphasized also</em>.</p>
+
+<p>Use two asterisks for <strong>strong emphasis</strong>.
+Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+</code></pre>
+<h2>Lists</h2>
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
\ No newline at end of file
--- /dev/null
+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:
+
--- /dev/null
+<p>[x
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx</p>
\ No newline at end of file
--- /dev/null
+
+[x
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
+xxx xxx xxx xxx xxx xxx xxx xxx
--- /dev/null
+<pre><code>print "This is a code block."
+</code></pre>
\ No newline at end of file
--- /dev/null
+ print "This is a code block."
--- /dev/null
+<p>X<0</p>
+<p>X>0</p>
+<!-- A comment -->
+
+<div>as if</div>
+
+<!-- comment -->
+
+<p><strong>no blank line</strong></p>
\ No newline at end of file
--- /dev/null
+X<0
+
+X>0
+
+<!-- A comment -->
+
+<div>as if</div>
+
+<!-- comment -->
+__no blank line__
--- /dev/null
+<div id="sidebar">
+
+ _foo_
+
+</div>
\ No newline at end of file
--- /dev/null
+<div id="sidebar">
+
+ _foo_
+
+</div>
--- /dev/null
+<h1>Title</h1>
+<ul>
+<li><em><a href="http://packages.python.org/Markdown/">Python in Markdown</a> by some
+ great folks</em> - This <em>does</em> work as expected.</li>
+<li><em><a href="http://packages.python.org/Markdown/">Python in Markdown</a> by some
+ great folks</em> - This <em>does</em> work as expected.</li>
+<li><a href="http://packages.python.org/Markdown/"><em>Python in Markdown</em></a> by some
+ great folks - This <em>does</em> work as expected.</li>
+<li><a href="http://packages.python.org/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://packages.python.org/Markdown/">Python in Markdown</a> by some
+great folks</em> - This <em>does</em> work as expected.</p>
\ No newline at end of file
--- /dev/null
+# Title
+
+ - *[Python in Markdown](http://packages.python.org/Markdown/) by some
+ great folks* - This *does* work as expected.
+ - _[Python in Markdown](http://packages.python.org/Markdown/) by some
+ great folks_ - This *does* work as expected.
+ - [_Python in Markdown_](http://packages.python.org/Markdown/) by some
+ great folks - This *does* work as expected.
+ - [_Python in Markdown_](http://packages.python.org/Markdown/) _by some
+ great folks_ - This *does* work as expected.
+
+_[Python in Markdown](http://packages.python.org/Markdown/) by some
+great folks_ - This *does* work as expected.
+
--- /dev/null
+<p>One asterisk: *</p>
+<p>One underscore: _</p>
+<p>Two asterisks: **</p>
+<p>With spaces: * *</p>
+<p>Two underscores __</p>
+<p>with spaces: _ _</p>
+<p>three asterisks: ***</p>
+<p>with spaces: * * *</p>
+<p>three underscores: ___</p>
+<p>with spaces: _ _ _</p>
+<p>One char: <em>a</em></p>
\ No newline at end of file
--- /dev/null
+One asterisk: *
+
+One underscore: _
+
+Two asterisks: **
+
+With spaces: * *
+
+Two underscores __
+
+with spaces: _ _
+
+three asterisks: ***
+
+with spaces: * * *
+
+three underscores: ___
+
+with spaces: _ _ _
+
+One char: _a_
--- /dev/null
+<p>asdfasdfadsfasd <a href="mailto:yuri@freewisdom.org">yuri@freewisdom.org</a> or you can say
+instead <a href="mailto:yuri@freewisdom.org">yuri@freewisdom.org</a></p>
\ No newline at end of file
--- /dev/null
+
+asdfasdfadsfasd <yuri@freewisdom.org> or you can say
+instead <mailto:yuri@freewisdom.org>
--- /dev/null
+<p>Backslashed in links:</p>
+<p><a href="/query?q=go:GO\:0000307">q=go:GO\:0000307</a></p>
+<p><a href="/query?q=go:GO\:0000308" title="/query?q=go:GO\:0000308">q=go:GO\:0000308</a></p>
\ No newline at end of file
--- /dev/null
+Backslashed in links:
+
+[q=go:GO\\:0000307](/query?q=go:GO\\:0000307)
+
+[q=go:GO\\:0000308][foo]
+
+[foo]: /query?q=go:GO\:0000308 "/query?q=go:GO\:0000308"
--- /dev/null
+<ol>
+<li>this starts a list <em>with</em> numbers</li>
+<li>this will show as number "2"</li>
+<li>this will show as number "3."</li>
+<li>any number, +, -, or * will keep the list going.</li>
+</ol>
+<p>aaaaaaaaaaaaaaa</p>
+<ul>
+<li>now a normal list</li>
+<li>and more</li>
+</ul>
\ No newline at end of file
--- /dev/null
+1. this starts a list *with* numbers
++ this will show as number "2"
+* this will show as number "3."
+9. any number, +, -, or * will keep the list going.
+
+aaaaaaaaaaaaaaa
+
+- now a normal list
+- and more
--- /dev/null
+<h2>Header</h2>
+<h1>Header 2</h1>
+<h3>H3</h3>
+<h1>H1</h1>
+<h2>H2</h2>
\ No newline at end of file
--- /dev/null
+Header
+------
+
+Header 2
+========
+
+### H3
+
+H1
+=
+
+H2
+--
--- /dev/null
+<p>a</p>
+<pre>
+#!/usr/bin/python
+hello</pre>
+
+<p>a</p>
+<pre>
+!/usr/bin/python
+hello</pre>
+
+<p>a</p>
\ No newline at end of file
--- /dev/null
+a
+
+<pre>
+#!/usr/bin/python
+hello</pre>
+
+a
+
+<pre>
+!/usr/bin/python
+hello</pre>
+
+a
--- /dev/null
+<p>Tight List:</p>
+<ul>
+<li>
+<h1>Header1</h1>
+Line 1-2 - <strong>not</strong> a header <em>or</em> paragraph!</li>
+<li>
+<h1>Header2</h1>
+Line 2-2 - not a header or paragraph!</li>
+</ul>
+<p>Loose List:</p>
+<ul>
+<li>
+<h1>Header1</h1>
+<p>Line 1-2 - <em>a</em> paragraph</p>
+</li>
+<li>
+<h1>Header2</h1>
+<p>Line 2-2 - a paragraph</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+Tight List:
+
+* #Header1
+Line 1-2 - **not** a header *or* paragraph!
+* #Header2
+Line 2-2 - not a header or paragraph!
+
+Loose List:
+
+* #Header1
+Line 1-2 - *a* paragraph
+
+* #Header2
+Line 2-2 - a paragraph
--- /dev/null
+<h3>Hello world</h3>
+<p>Line 2
+Line 3</p>
+<h1>[Markdown][5]</h1>
+<h1><a href="http://some.link.com/">Markdown</a></h1>
+<h1>[5]: http://foo.com/</h1>
+<h1>Issue #1: Markdown</h1>
+<p>Text</p>
+<h1>Header</h1>
+<p>Some other text</p>
\ No newline at end of file
--- /dev/null
+### Hello world
+Line 2
+Line 3
+
+# [Markdown][5]
+
+# [Markdown](http://some.link.com/)
+
+# [5]: http://foo.com/
+
+# Issue #1: Markdown
+
+Text
+# Header
+Some other text
--- /dev/null
+<h1>Header</h1>
+<p>Next line</p>
\ No newline at end of file
--- /dev/null
+
+#Header
+Next line
+
+
--- /dev/null
+<p>Here is HTML <!-- **comment** -->
+and once more <p><!--comment--></p></p>
\ No newline at end of file
--- /dev/null
+Here is HTML <!-- **comment** -->
+and once more <p><!--comment--></p>
--- /dev/null
+<h1>Block level html</h1>
+
+<p>Some inline <b>stuff<b>.<br />
+</p>
+<p>Now some <arbitrary>arbitrary tags</arbitrary>.</p>
+<div>More block level html.</div>
+
+<div class="foo bar" title="with 'quoted' text." valueless_attr weirdness="<i>foo</i>">
+Html with various attributes.
+</div>
+
+<p>And of course <script>blah</script>.</p>
+<p><a href="script>stuff</script">this <script>link</a></p>
+<p>Some funky <x\]> inline stuff with markdown escaping syntax.</p>
+<p><img scr="foo.png" title="Only one inline element on a line." /></p>
+<p>And now a line with only an opening bracket:</p>
+<p><</p>
+<p>And one with other stuff but no closing bracket:</p>
+<p>< foo</p>
\ No newline at end of file
--- /dev/null
+
+<h1>Block level html</h1>
+
+Some inline <b>stuff<b>.
+
+Now some <arbitrary>arbitrary tags</arbitrary>.
+
+<div>More block level html.</div>
+
+<div class="foo bar" title="with 'quoted' text." valueless_attr weirdness="<i>foo</i>">
+Html with various attributes.
+</div>
+
+And of course <script>blah</script>.
+
+[this <script>link](<script>stuff</script>)
+
+Some funky <x\]> inline stuff with markdown escaping syntax.
+
+<img scr="foo.png" title="Only one inline element on a line." />
+
+And now a line with only an opening bracket:
+
+<
+
+And one with other stuff but no closing bracket:
+
+< foo
+
--- /dev/null
+<p><a href="http://src.com/"><em>link!</em></a></p>
+<p><em><a href="http://www.freewisdom.org">link</a></em></p>
\ No newline at end of file
--- /dev/null
+[*link!*](http://src.com/)
+
+*[link](http://www.freewisdom.org)*
--- /dev/null
+<p><img alt="Poster" src="http://humane_man.jpg" title="The most humane man." /></p>
\ No newline at end of file
--- /dev/null
+
+
--- /dev/null
+<p><a href="path/to/image.png"><img alt="altname" src="path/to/img_thumb.png" /></a></p>
\ No newline at end of file
--- /dev/null
+
+
+[](path/to/image.png)
--- /dev/null
+<p><ins>Hello, fellow developer</ins> this ins should be wrapped in a p.</p>
\ No newline at end of file
--- /dev/null
+<ins>Hello, fellow developer</ins> this ins should be wrapped in a p.
--- /dev/null
+<p><a href="stuff"> <strong>ok</strong>? </a></p>
\ No newline at end of file
--- /dev/null
+<a href="stuff"> __ok__? </a>
--- /dev/null
+<h1>パイソン (Python)</h1>
+<p><strong>Python</strong>(パイソン)は、<a href="http://en.wikipedia.org/wiki/Guido_van_Rossum">Guido van Rossum</a> によって作られたオープンソースのオブジェクト指向スクリプト言語。<a href="http://ja.wikipedia.org/wiki/Perl">Perl</a>とともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。 (Pythonには、爬虫類のニシキヘビの意味があり、Python言語のマスコットやアイコンとして使われることがある。)</p>
+<h2>概要</h2>
+<p>プログラミング言語 Python は初心者から専門家まで幅広いユーザ層を獲得している。利用目的は汎用で、方向性としてはJavaに近い。ただし、最初からネットワーク利用をメインとして考えられているJavaよりセキュリティについてはやや寛大である。多くのプラットフォームをサポートしており(⇒<a href="#somelink">動作するプラットフォーム</a>)、豊富なライブラリがあることから、産業界でも利用が増えつつある。また、Pythonは純粋なプログラミング言語のほかにも、多くの異なる言語で書かれたモジュールをまとめる糊言語のひとつとして位置づけることができる。実際Pythonは多くの商用アプリケーションでスクリプト言語として採用されている(⇒Pythonを使っている製品あるいはソフトウェアの一覧)。豊富なドキュメントをもち、Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。</p>
+<p>Python は基本的にインタプリタ上で実行されることを念頭において設計されており、以下のような特徴をもっている:</p>
+<ul>
+<li>動的な型付け。</li>
+<li>オブジェクトのメンバに対するアクセスが制限されていない。(属性や専用のメソッドフックを実装することによって制限は可能。)</li>
+<li>モジュール、クラス、オブジェクト等の言語の要素が内部からアクセス可能であり、リフレクションを利用した記述が可能。</li>
+</ul>
+<p>また、Pythonではインデントによりブロックを指定する構文を採用している(⇒<a href="#jklj">オフサイドルール</a>)。この構文はPythonに慣れたユーザからは称賛をもって受け入れられているが、他の言語のユーザからは批判も多い。このほかにも、大きすぎる実行ファイルや、Javaに比べて遅い処理速度などが欠点として指摘されている。しかし <strong>プロトタイピング</strong> の際にはこれらの点はさして問題とはならないことから、研究開発部門では頻繁に利用されている。</p>
\ No newline at end of file
--- /dev/null
+パイソン (Python)
+=======
+
+**Python**(パイソン)は、[Guido van Rossum](http://en.wikipedia.org/wiki/Guido_van_Rossum) によって作られたオープンソースのオブジェクト指向スクリプト言語。[Perl](http://ja.wikipedia.org/wiki/Perl)とともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。 (Pythonには、爬虫類のニシキヘビの意味があり、Python言語のマスコットやアイコンとして使われることがある。)
+
+## 概要
+プログラミング言語 Python は初心者から専門家まで幅広いユーザ層を獲得している。利用目的は汎用で、方向性としてはJavaに近い。ただし、最初からネットワーク利用をメインとして考えられているJavaよりセキュリティについてはやや寛大である。多くのプラットフォームをサポートしており(⇒[動作するプラットフォーム](#somelink))、豊富なライブラリがあることから、産業界でも利用が増えつつある。また、Pythonは純粋なプログラミング言語のほかにも、多くの異なる言語で書かれたモジュールをまとめる糊言語のひとつとして位置づけることができる。実際Pythonは多くの商用アプリケーションでスクリプト言語として採用されている(⇒Pythonを使っている製品あるいはソフトウェアの一覧)。豊富なドキュメントをもち、Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。
+
+Python は基本的にインタプリタ上で実行されることを念頭において設計されており、以下のような特徴をもっている:
+
+* 動的な型付け。
+* オブジェクトのメンバに対するアクセスが制限されていない。(属性や専用のメソッドフックを実装することによって制限は可能。)
+* モジュール、クラス、オブジェクト等の言語の要素が内部からアクセス可能であり、リフレクションを利用した記述が可能。
+
+また、Pythonではインデントによりブロックを指定する構文を採用している(⇒[オフサイドルール](#jklj))。この構文はPythonに慣れたユーザからは称賛をもって受け入れられているが、他の言語のユーザからは批判も多い。このほかにも、大きすぎる実行ファイルや、Javaに比べて遅い処理速度などが欠点として指摘されている。しかし **プロトタイピング** の際にはこれらの点はさして問題とはならないことから、研究開発部門では頻繁に利用されている。
--- /dev/null
+<blockquote>
+<p>Line one of lazy block quote.
+Line two of lazy block quote.</p>
+<p>Line one of paragraph two.
+Line two of paragraph two.</p>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> Line one of lazy block quote.
+Line two of lazy block quote.
+
+> Line one of paragraph two.
+Line two of paragraph two.
--- /dev/null
+<p><a href="http://en.wikipedia.org/wiki/ZIP_(file_format)" title="ZIP (file format) - Wikipedia, the free encyclopedia">ZIP archives</a></p>
\ No newline at end of file
--- /dev/null
+[ZIP archives](http://en.wikipedia.org/wiki/ZIP_(file_format) "ZIP (file format) - Wikipedia, the free encyclopedia")
--- /dev/null
+<ul>
+<li>A multi-paragraph list,
+unindented.</li>
+</ul>
+<p>Simple tight list</p>
+<ul>
+<li>Uno</li>
+<li>Due</li>
+<li>Tri</li>
+</ul>
+<p>A singleton tight list:</p>
+<ul>
+<li>Uno</li>
+</ul>
+<p>A lose list:</p>
+<ul>
+<li>
+<p>One</p>
+</li>
+<li>
+<p>Two</p>
+</li>
+<li>
+<p>Three</p>
+</li>
+</ul>
+<p>A lose list with paragraphs</p>
+<ul>
+<li>
+<p>One one one one</p>
+<p>one one one one</p>
+</li>
+<li>
+<p>Two two two two</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+
+* A multi-paragraph list,
+unindented.
+
+
+
+Simple tight list
+
+* Uno
+* Due
+* Tri
+
+A singleton tight list:
+
+* Uno
+
+A lose list:
+
+* One
+
+* Two
+
+* Three
+
+A lose list with paragraphs
+
+* One one one one
+
+ one one one one
+
+* Two two two two
--- /dev/null
+<ul>
+<li>blah blah blah
+sdf asdf asdf asdf asdf
+asda asdf asdfasd</li>
+</ul>
\ No newline at end of file
--- /dev/null
+* blah blah blah
+sdf asdf asdf asdf asdf
+asda asdf asdfasd
--- /dev/null
+<ul>
+<li>blah blah blah
+ sdf asdf asdf asdf asdf
+ asda asdf asdfasd</li>
+</ul>
\ No newline at end of file
--- /dev/null
+* blah blah blah
+ sdf asdf asdf asdf asdf
+ asda asdf asdfasd
--- /dev/null
+<ul>
+<li>item1</li>
+<li>item2<ol>
+<li>Number 1</li>
+<li>Number 2</li>
+</ol>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+
+* item1
+* item2
+ 1. Number 1
+ 2. Number 2
--- /dev/null
+<blockquote>
+<p>This is a test of a block quote
+With just two lines</p>
+</blockquote>
+<p>A paragraph</p>
+<blockquote>
+<p>This is a more difficult case
+With a list item inside the quote</p>
+<ul>
+<li>Alpha</li>
+<li>Beta
+Etc.</li>
+</ul>
+</blockquote>
\ No newline at end of file
--- /dev/null
+> This is a test of a block quote
+> With just two lines
+
+A paragraph
+
+> This is a more difficult case
+> With a list item inside the quote
+>
+> * Alpha
+> * Beta
+> Etc.
+
--- /dev/null
+<p>Test five or more spaces as start of list:</p>
+<ul>
+<li>five spaces</li>
+</ul>
+<p>not first item:</p>
+<ul>
+<li>one space</li>
+<li>five spaces</li>
+</ul>
+<p>loose list:</p>
+<ul>
+<li>
+<p>one space</p>
+</li>
+<li>
+<p>five spaces</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+Test five or more spaces as start of list:
+
+* five spaces
+
+not first item:
+
+* one space
+* five spaces
+
+loose list:
+
+* one space
+
+* five spaces
--- /dev/null
+<ul>
+<li>item 1</li>
+<li>
+<ul>
+<li>item 2-1</li>
+<li>item 2-2</li>
+<li>item 2-3</li>
+<li>item 2-4</li>
+</ul>
+</li>
+<li>item 3</li>
+<li>
+<ul>
+<li>
+<p>item 4-1</p>
+</li>
+<li>
+<p>item 4-2</p>
+</li>
+<li>
+<p>item 4-3</p>
+</li>
+<li>
+<p>item 4-4</p>
+</li>
+</ul>
+</li>
+</ul>
+<h2>same as above, different spacing</h2>
+<ul>
+<li>item 1</li>
+<li>
+<ul>
+<li>item 2-1</li>
+<li>item 2-2</li>
+</ul>
+</li>
+<li>item 3</li>
+<li>
+<ul>
+<li>
+<p>item 4-1</p>
+</li>
+<li>
+<p>item 4-2</p>
+</li>
+</ul>
+</li>
+</ul>
+<h2>only 1 item in nested list ##</h2>
+<ul>
+<li>item 1</li>
+<li>
+<ul>
+<li>item 2-1</li>
+</ul>
+</li>
+<li>item 3</li>
+<li>
+<ul>
+<li>item 4-1</li>
+</ul>
+</li>
+</ul>
+<h2>Something ludicrous ##</h2>
+<ul>
+<li>item 1</li>
+<li>
+<ul>
+<li>item 2-1</li>
+<li>item 2-2</li>
+<li>
+<ul>
+<li>item 2-2-1</li>
+<li>item 2-2-2</li>
+</ul>
+</li>
+<li>item 2-3</li>
+</ul>
+</li>
+<li>item 3</li>
+<li>
+<ul>
+<li>
+<p>item 4-1</p>
+</li>
+<li>
+<ul>
+<li>item 4-1-1</li>
+<li>item 4-1-2</li>
+</ul>
+</li>
+<li>
+<p>item 4-2</p>
+</li>
+</ul>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+* item 1
+* * item 2-1
+ * item 2-2
+ * item 2-3
+ * item 2-4
+* item 3
+* * item 4-1
+
+ * item 4-2
+
+ * item 4-3
+
+ * item 4-4
+
+## same as above, different spacing
+* item 1
+* * item 2-1
+ * item 2-2
+* item 3
+* * item 4-1
+
+ * item 4-2
+
+## only 1 item in nested list ##
+* item 1
+* * item 2-1
+* item 3
+* * item 4-1
+
+## Something ludicrous ##
+* item 1
+* * item 2-1
+ * item 2-2
+ * * item 2-2-1
+ * item 2-2-2
+ * item 2-3
+* item 3
+* * item 4-1
+
+ * * item 4-1-1
+ * item 4-1-2
+
+ * item 4-2
+
--- /dev/null
+<h1>Lists with blockquotes</h1>
+<ol>
+<li>
+<blockquote>
+<p>Four-score and seven years ago...</p>
+</blockquote>
+</li>
+<li>
+<blockquote>
+<p>We have nothing to fear...</p>
+</blockquote>
+</li>
+<li>
+<blockquote>
+<p>This is it...</p>
+</blockquote>
+</li>
+</ol>
+<h1>Multi-line blockquotes</h1>
+<ul>
+<li>
+<blockquote>
+<p>Four-score and sever years ago
+our fathers brought forth</p>
+</blockquote>
+</li>
+<li>
+<blockquote>
+<p>We have nothing to fear
+but fear itself</p>
+</blockquote>
+</li>
+<li>
+<blockquote>
+<p>This is it
+as far as I'm concerned</p>
+</blockquote>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+# Lists with blockquotes
+1. > Four-score and seven years ago...
+
+2. > We have nothing to fear...
+
+3. > This is it...
+
+# Multi-line blockquotes
+* > Four-score and sever years ago
+ > our fathers brought forth
+
+* > We have nothing to fear
+ > but fear itself
+
+* > This is it
+ > as far as I'm concerned
--- /dev/null
+<p>
+
+_foo_
+
+</p>
+
+<p>
+_foo_
+</p>
+
+<p>_foo_</p>
+
+<p>
+
+_foo_
+</p>
+
+<p>
+_foo_
+
+</p>
\ No newline at end of file
--- /dev/null
+<p>
+
+_foo_
+
+</p>
+
+<p>
+_foo_
+</p>
+
+<p>_foo_</p>
+
+<p>
+
+_foo_
+</p>
+
+<p>
+_foo_
+
+</p>
--- /dev/null
+<p>Some text</p>
+
+<div>some more text</div>
+
+<p>and a bit more</p>
+<p>And this output</p>
+
+<p><em>Compatible with PHP Markdown Extra 1.2.2 and Markdown.pl1.0.2b8:</em></p>
+<!-- comment -->
+
+<p><div>text</div><br /></p>
+
+<p><br /></p>
+<p>Should be in p</p>
\ No newline at end of file
--- /dev/null
+<p>Some text</p><div>some more text</div>
+
+and a bit more
+
+<p>And this output</p> *Compatible with PHP Markdown Extra 1.2.2 and Markdown.pl1.0.2b8:*
+
+<!-- comment --><p><div>text</div><br /></p><br />
+
+Should be in p
--- /dev/null
+<p>This is a [missing link][empty] and a <a href="http://example.com">valid</a> and [missing][again].</p>
\ No newline at end of file
--- /dev/null
+This is a [missing link][empty] and a [valid][link] and [missing][again].
+
+[link]: http://example.com
+
--- /dev/null
+<!--asd@asdfd.com>
+
+<!asd@asdfd.com>
+
+<p><asd!@asdfd.com></p>
+<p>Test</p>
\ No newline at end of file
--- /dev/null
+<!--asd@asdfd.com>
+
+
+<!asd@asdfd.com>
+
+
+<asd!@asdfd.com>
+
+Test
--- /dev/null
+<div>
+
+asdf asdfasd
+
+</div>
+
+<div>
+
+foo bar
+
+</div>
+
+<p>No blank line.</p>
\ No newline at end of file
--- /dev/null
+
+<div>
+
+asdf asdfasd
+
+</div>
+
+<div>
+
+foo bar
+
+</div>
+No blank line.
--- /dev/null
+<blockquote>
+<p>This is line one of paragraph one
+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
--- /dev/null
+> This is line one of paragraph one
+> This is line two of paragraph one
+
+> This is line one of paragraph two
+
+
+
+> This is another blockquote.
--- /dev/null
+<h1 id="inthebeginning">Header </h1>
+<p>Now, let's try something <em class="special">inline</em>, to see if it works</p>
+<p>Blah blah blah <a href="http://www.slashdot.org">http://www.slashdot.org</a></p>
+<ul>
+<li>Basic list</li>
+<li>Basic list 2</li>
+</ul>
+<p>addss</p>
+<ul>
+<li>Lazy list</li>
+</ul>
+<p>An <a href="http://example.com" title="Title">example</a> (oops)</p>
+<p>Now, let's use a footnote[^1]. Not bad, eh?
+Let's continue.</p>
+<p>[^1]: Here is the text of the footnote
+ continued on several lines.
+ some more of the footnote, etc.</p>
+<pre><code>Actually, another paragraph too.
+</code></pre>
+<p>And then there is a little bit of text.</p>
\ No newline at end of file
--- /dev/null
+
+# Header {@id=inthebeginning}
+
+Now, let's try something *inline{@class=special}*, to see if it works
+
+
+Blah blah blah <http://www.slashdot.org>
+
+* Basic list
+* Basic list 2
+
+addss
+
+ * Lazy list
+
+An [example][ref] (oops)
+
+ [ref]: http://example.com "Title"
+
+
+Now, let's use a footnote[^1]. Not bad, eh?
+Let's continue.
+
+ [^1]: Here is the text of the footnote
+ continued on several lines.
+ some more of the footnote, etc.
+
+ Actually, another paragraph too.
+
+And then there is a little bit of text.
+
+
--- /dev/null
+<!--
+
+foo
+
+-->
+
+<p>
+
+foo
+
+</p>
+
+<div>
+
+foo
+
+</div>
\ No newline at end of file
--- /dev/null
+<!--
+
+foo
+
+-->
+
+<p>
+
+foo
+
+</p>
+
+
+<div>
+
+foo
+
+</div>
--- /dev/null
+<ul>
+<li>
+<p>item 1</p>
+<p>paragraph 2</p>
+</li>
+<li>
+<p>item 2</p>
+<ul>
+<li>item 2-1</li>
+<li>
+<p>item 2-2</p>
+<ul>
+<li>item 2-2-1</li>
+</ul>
+</li>
+<li>
+<p>item 2-3</p>
+<ul>
+<li>item 2-3-1</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+<p>item 3</p>
+</li>
+</ul>
+<p>plain text</p>
+<ul>
+<li>item 1<ul>
+<li>item 1-1</li>
+<li>item 1-2<ul>
+<li>item 1-2-1</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>item 2</li>
+<li>item 3</li>
+<li>
+<p>item 4</p>
+<ul>
+<li>item 4-1</li>
+<li>item 4-2</li>
+<li>
+<p>item 4-3</p>
+<p>Paragraph under item 4-3</p>
+</li>
+</ul>
+<p>Paragraph under item 4</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+* item 1
+
+ paragraph 2
+
+* item 2
+
+ * item 2-1
+ * item 2-2
+
+ * item 2-2-1
+
+ * item 2-3
+
+ * item 2-3-1
+
+* item 3
+
+plain text
+
+* item 1
+ * item 1-1
+ * item 1-2
+ * item 1-2-1
+* item 2
+* item 3
+* item 4
+ * item 4-1
+ * item 4-2
+ * item 4-3
+
+ Paragraph under item 4-3
+
+ Paragraph under item 4
--- /dev/null
+<p><strong><em><a href="http://example.com">link</a></em></strong>
+<strong><em><a href="http://example.com">link</a></em></strong>
+<strong><a href="http://example.com"><em>link</em></a></strong>
+<strong><a href="http://example.com"><em>link</em></a></strong>
+<strong><a href="http://example.com"><em>link</em></a></strong>
+<strong><a href="http://example.com"><em>link</em></a></strong>
+<a href="http://example.com"><strong><em>link</em></strong></a></p>
\ No newline at end of file
--- /dev/null
+___[link](http://example.com)___
+***[link](http://example.com)***
+**[*link*](http://example.com)**
+__[_link_](http://example.com)__
+__[*link*](http://example.com)__
+**[_link_](http://example.com)**
+[***link***](http://example.com)
--- /dev/null
+<p>Regression <em>test</em> for issue 87</p>
+<p>It's run with enable_attributes=False so this {@id=explanation} should not become an attribute</p>
\ No newline at end of file
--- /dev/null
+Regression *test* for issue 87
+
+It's run with enable_attributes=False so this {@id=explanation} should not become an attribute
--- /dev/null
+<p><a href="http://www.stuff.com/q?x=1&y=2<>">Link</a></p>
\ No newline at end of file
--- /dev/null
+
+[Link](http://www.stuff.com/q?x=1&y=2<>)
--- /dev/null
+<p><a href="mailto:user@gmail.com">user@gmail.com</a></p>
+<p>This is an entity: ê </p>
\ No newline at end of file
--- /dev/null
+
+<user@gmail.com>
+
+This is an entity: ê
--- /dev/null
+<p>Here is a paragraph, followed by a horizontal rule.</p>
+<hr />
+<p>Followed by another paragraph.</p>
+<p>Here is another paragraph, followed by:
+*** not an HR.
+Followed by more of the same paragraph.</p>
\ No newline at end of file
--- /dev/null
+Here is a paragraph, followed by a horizontal rule.
+***
+Followed by another paragraph.
+
+Here is another paragraph, followed by:
+*** not an HR.
+Followed by more of the same paragraph.
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+
+<p><b>This should have a p tag</b></p>
+<!--This is a comment -->
+
+<div>This shouldn't</div>
+
+<?php echo "block_level";?>
+
+<p><?php echo "not_block_level";?></p>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+
+<b>This should have a p tag</b>
+
+<!--This is a comment -->
+
+<div>This shouldn't</div>
+
+<?php echo "block_level";?>
+
+ <?php echo "not_block_level";?>
+
--- /dev/null
+<pre>
+
+aaa
+
+bbb
+</pre>
+
+<pre>
+* and this is pre-formatted content
+* and it should be printed just like this
+* and not formatted as a list
+
+</pre>
\ No newline at end of file
--- /dev/null
+<pre>
+
+aaa
+
+bbb
+</pre>
+
+<pre>
+* and this is pre-formatted content
+* and it should be printed just like this
+* and not formatted as a list
+
+</pre>
+
--- /dev/null
+<p>Preserve whitespace in raw html</p>
+<pre>
+class Foo():
+ bar = 'bar'
+
+ def baz(self):
+ print self.bar
+</pre>
\ No newline at end of file
--- /dev/null
+Preserve whitespace in raw html
+
+<pre>
+class Foo():
+ bar = 'bar'
+
+ def baz(self):
+ print self.bar
+</pre>
+
--- /dev/null
+<h1>Недвард «Нед» Фландерс</h1>
+<p><strong>Недвард «Нед» Фландерс</strong> (Nedward «Ned» Flanders) — вымышленный персонаж мультсериала «[Симпсоны][]», озвученный Гарри Ширером. Он и его семья живут по соседству от семьи Симпсонов. Набожный христианин, Нед является одним из столпов морали Спрингфилда. В эпизоде «Alone Again, Natura-Diddily» он овдовел, его жена Мод погибла в результате несчастного случая. </p>
+<p>Нед был одним из первых персонажей в мультсериале, который не был членом семьи Симпсонов. Начиная с первых серий, он регулярно появляется в «Симпсонах». Считается, что Нед Фландерс был назван в честь улицы <em>Northeast Flanders St.</em> в <a href="http://www.portland.gov">Портленде</a>, Орегон, родном городе создателя мультсериала Мэтта Грейнинга]]. Надпись на указателе улицы <em>NE Flanders St.</em> хулиганы часто исправляли на <em>NED Flanders St.</em></p>
+<h2>Биография</h2>
+<p>Нед Фландерс родился в Нью-Йорке, его родители были битниками. Его отец в точности похож на взрослого Неда, только он носил козлиную бородку. Их отказ от воспитания Неда и то, что они, в общем-то, были плохими родителями («мы ничего в этом не понимаем и не знаем как начать») привело к тому, что Нед превратился в ужасного сорванца. В конце концов они согласились на экспериментальную восьмимесячную шлепологическую терапию Миннесотского Университета (воспоминания Неда в эпизоде «Hurricane Neddy»), которая научила его подавлять чувство злости. Побочным эфектом терапии стало то, что Нед стал ненавидеть своих родителей (это одна из двух вещей которые ненавидит Фландерс, вторая — отделения почты, чьи длинные очереди, суета и угрюмый персонал раздражают его).</p>
+<p>У Неда есть странная привычка добавлять «дидли», «дадли» и другие бессмысленные слова в свои фразы при разговоре, например: «Hi-diddly-ho, neighbor-ino» («Приветик, соседушка»). Это результат сублимации его злости, вызванной сдерживанием гнева, который не имеет никакого другого выхода.</p>
\ No newline at end of file
--- /dev/null
+Недвард «Нед» Фландерс
+======================
+
+
+**Недвард «Нед» Фландерс** (Nedward «Ned» Flanders) — вымышленный персонаж мультсериала «[Симпсоны][]», озвученный Гарри Ширером. Он и его семья живут по соседству от семьи Симпсонов. Набожный христианин, Нед является одним из столпов морали Спрингфилда. В эпизоде «Alone Again, Natura-Diddily» он овдовел, его жена Мод погибла в результате несчастного случая.
+
+Нед был одним из первых персонажей в мультсериале, который не был членом семьи Симпсонов. Начиная с первых серий, он регулярно появляется в «Симпсонах». Считается, что Нед Фландерс был назван в честь улицы *Northeast Flanders St.* в [Портленде](http://www.portland.gov), Орегон, родном городе создателя мультсериала Мэтта Грейнинга]]. Надпись на указателе улицы *NE Flanders St.* хулиганы часто исправляли на _NED Flanders St._
+
+## Биография
+
+Нед Фландерс родился в Нью-Йорке, его родители были битниками. Его отец в точности похож на взрослого Неда, только он носил козлиную бородку. Их отказ от воспитания Неда и то, что они, в общем-то, были плохими родителями («мы ничего в этом не понимаем и не знаем как начать») привело к тому, что Нед превратился в ужасного сорванца. В конце концов они согласились на экспериментальную восьмимесячную шлепологическую терапию Миннесотского Университета (воспоминания Неда в эпизоде «Hurricane Neddy»), которая научила его подавлять чувство злости. Побочным эфектом терапии стало то, что Нед стал ненавидеть своих родителей (это одна из двух вещей которые ненавидит Фландерс, вторая — отделения почты, чьи длинные очереди, суета и угрюмый персонал раздражают его).
+
+У Неда есть странная привычка добавлять «дидли», «дадли» и другие бессмысленные слова в свои фразы при разговоре, например: «Hi-diddly-ho, neighbor-ino» («Приветик, соседушка»). Это результат сублимации его злости, вызванной сдерживанием гнева, который не имеет никакого другого выхода.
+
+
--- /dev/null
+<p><em>emphasis</em></p>
+<p>this_is_not_emphasis</p>
+<p>[<em>punctuation with emphasis</em>]</p>
+<p>[<em>punctuation_with_emphasis</em>]</p>
+<p>[punctuation_without_emphasis]</p>
\ No newline at end of file
--- /dev/null
+_emphasis_
+
+this_is_not_emphasis
+
+[_punctuation with emphasis_]
+
+[_punctuation_with_emphasis_]
+
+[punctuation_without_emphasis]
--- /dev/null
+<hr />
+<ul>
+<li>
+<p>as if</p>
+</li>
+<li>
+<p>as if2</p>
+</li>
+</ul>
+<hr />
+<ul>
+<li>
+<p>as if</p>
+</li>
+<li>
+<p>as if2</p>
+</li>
+</ul>
+<hr />
+<ul>
+<li>as if
+ non_code</li>
+<li>as if2</li>
+</ul>
+<p>Markdown</p>
+<ul>
+<li>
+<p>Python
+ is ok</p>
+<ul>
+<li>Therefore i am</li>
+</ul>
+</li>
+<li>
+<p>Perl sucks
+ big time</p>
+<ul>
+<li>But that's
+ok</li>
+</ul>
+</li>
+<li>
+<p>Python is
+ok
+ Or not?</p>
+</li>
+</ul>
+<p>Here is a normal paragraph</p>
+<ol>
+<li>Another list
+with a bunch of items</li>
+<li>
+<p>Mostly fruits</p>
+<ol>
+<li>Apple</li>
+<li>Pare</li>
+</ol>
+</li>
+</ol>
+<p>asdfasdfasd</p>
+<pre><code># This is a code example
+import stuff
+
+Another code example
+* Lists and similar stuff
+
+> Should be ignored
+</code></pre>
\ No newline at end of file
--- /dev/null
+----------------------
+
+* as if
+
+* as if2
+
+----------------------
+
+* as if
+
+* as if2
+
+----------------------
+
+* as if
+ non_code
+* as if2
+
+
+
+
+Markdown
+
+* Python
+ is ok
+ * Therefore i am
+
+* Perl sucks
+ big time
+ * But that's
+ ok
+
+* Python is
+ok
+ Or not?
+
+Here is a normal paragraph
+
+1. Another list
+with a bunch of items
+2. Mostly fruits
+
+
+
+ 3. Apple
+ 4. Pare
+
+asdfasdfasd
+
+
+ # This is a code example
+ import stuff
+
+ Another code example
+ * Lists and similar stuff
+
+ > Should be ignored
--- /dev/null
+<p><span id="someId"> Foo <em>bar</em> Baz </span></p>
+<div><b>*foo*</b></div>
+
+<div id="someId"> Foo *bar* Baz </div>
+
+<p><baza id="someId"> Foo <em>bar</em> Baz </baza></p>
\ No newline at end of file
--- /dev/null
+
+<span id="someId"> Foo *bar* Baz </span>
+
+<div><b>*foo*</b></div>
+
+<div id="someId"> Foo *bar* Baz </div>
+
+<baza id="someId"> Foo *bar* Baz </baza>
+
+
--- /dev/null
+<p><strong>this_is_strong</strong></p>
\ No newline at end of file
--- /dev/null
+__this_is_strong__
--- /dev/null
+<p>this is a <a href="http://example.com/"><strong>test</strong></a></p>
+<p>this is a second <strong><a href="http://example.com">test</a></strong></p>
+<p>reference <strong>[test][]</strong>
+reference [<strong>test</strong>][]</p>
\ No newline at end of file
--- /dev/null
+this is a [**test**](http://example.com/)
+
+this is a second **[test](http://example.com)**
+
+reference **[test][]**
+reference [**test**][]
+
+
--- /dev/null
+<p>First a list with a tabbed line</p>
+<ul>
+<li>
+<p>A</p>
+</li>
+<li>
+<p>B</p>
+</li>
+</ul>
+<p>Just a blank line:</p>
+<ul>
+<li>
+<p>A</p>
+</li>
+<li>
+<p>B</p>
+</li>
+</ul>
+<p>Now a list with 4 spaces and some text:</p>
+<ul>
+<li>A
+ abcdef</li>
+<li>B</li>
+</ul>
+<p>Now with a tab and an extra space:</p>
+<ul>
+<li>
+<p>A</p>
+</li>
+<li>
+<p>B</p>
+</li>
+</ul>
+<p>Now a list with 4 spaces:</p>
+<ul>
+<li>
+<p>A</p>
+</li>
+<li>
+<p>B</p>
+</li>
+</ul>
\ No newline at end of file
--- /dev/null
+First a list with a tabbed line
+
+* A
+
+* B
+
+Just a blank line:
+
+* A
+
+* B
+
+
+Now a list with 4 spaces and some text:
+
+* A
+ abcdef
+* B
+
+
+Now with a tab and an extra space:
+
+* A
+
+* B
+
+Now a list with 4 spaces:
+
+* A
+
+* B
+
--- /dev/null
+[no-attributes]
+enable_attributes=False
\ No newline at end of file
--- /dev/null
+<p>This line has two spaces at the end<br />
+but this one has none
+but this line has three <br />
+and this is the second from last line
+in this test message</p>
+<ul>
+<li>This list item has two spaces.<br />
+</li>
+<li>
+<p>This has none.
+ This line has three. <br />
+ This line has none.
+ And this line two.<br />
+</p>
+<p>This line has none.</p>
+</li>
+<li>
+<p>This line has none.</p>
+</li>
+</ul>
+<p>And this is the end.</p>
\ No newline at end of file
--- /dev/null
+This line has two spaces at the end
+but this one has none
+but this line has three
+and this is the second from last line
+in this test message
+
+* This list item has two spaces.
+* This has none.
+ This line has three.
+ This line has none.
+ And this line two.
+
+ This line has none.
+
+* This line has none.
+
+And this is the end.
--- /dev/null
+<p><img alt="asif" src="http://fourthought.com/images/ftlogo.png" title="Fourthought logo" /></p>
+<p><a href="http://fourthought.com/"><img alt="" src="http://fourthought.com/images/ftlogo.png" style="float: left; margin: 10px; border: none;" title="Fourthought logo" /></a></p>
+<p><a href="http://link.com/"><img alt="text" src="x" /></a></p>
\ No newline at end of file
--- /dev/null
+
+
+[](http://fourthought.com/)
+
+[](http://link.com/)
--- /dev/null
+<p>THIS_SHOULD_STAY_AS_IS</p>
+<p>Here is some <em>emphasis</em>, ok?</p>
+<p>Ok, at least <em>this</em> should work.</p>
+<p>THIS<strong>SHOULD</strong>STAY</p>
+<p>Here is some <strong>strong</strong> stuff.</p>
+<p>THIS<strong><em>SHOULD</em></strong>STAY?</p>
\ No newline at end of file
--- /dev/null
+THIS_SHOULD_STAY_AS_IS
+
+Here is some _emphasis_, ok?
+
+Ok, at least _this_ should work.
+
+THIS__SHOULD__STAY
+
+Here is some __strong__ stuff.
+
+THIS___SHOULD___STAY?
--- /dev/null
+<p><a href="http://wikipedia.org/wiki/Dawn of War">Dawn of War</a></p>
+<p><a href="http://wikipedia.org/wiki/Dawn of War" title="Dawn of War">Dawn of War</a></p>
\ No newline at end of file
--- /dev/null
+[Dawn of War](http://wikipedia.org/wiki/Dawn of War)
+
+
+[Dawn of War](http://wikipedia.org/wiki/Dawn of War "Dawn of War")
--- /dev/null
+<p>A numbered list from daringfireball:</p>
+<ol start="3">
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+<p>Again:</p>
+<ol start="3">
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+<p>Now starting with 1:</p>
+<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
\ No newline at end of file
--- /dev/null
+A numbered list from daringfireball:
+
+3. Bird
+1. McHale
+8. Parish
+
+Again:
+
+3. Bird
+1. McHale
+8. Parish
+
+Now starting with 1:
+
+1. Bird
+1. McHale
+8. Parish
--- /dev/null
+[lazy_ol_off]
+lazy_ol = False
--- /dev/null
+[DEFAULT]
+extensions=extra
+normalize=1
+input_ext=.text
+output_ext=.xhtml
+skip=1
--- /dev/null
+[DEFAULT]
+normalize=1
+input_ext=.text
+output_ext=.xhtml
+#skip=1
+
+[Quotes in attributes]
+# attributes get output in differant order
+skip=1
+
+[Inline HTML (Span)]
+# Backtick in raw HTML attribute TODO: fixme
+skip=1
+
+[Backslash escapes]
+# Weird whitespace issue in output
+skip=1
+
+[Ins & del]
+# Our behavior follows markdown.pl I think PHP is wrong here
+skip=1
+
+[Auto Links]
+# TODO: fix raw HTML so is doesn't match <hr@example.com> as a <hr>.
+skip=1
+
+[Empty List Item]
+# We match markdown.pl here. Maybe someday we'll support this
+skip=1
+
+[Headers]
+# TODO: fix headers to not require blank line before
+skip=1
+
+[Mixed OLs and ULs]
+# We match markdown.pl here. I think PHP is wrong here
+skip=1
+
+[Emphasis]
+# We have various minor differances in combined & incorrect em markup.
+# Maybe fix a few of them - but most aren't too important
+skip=1
+
+[Code block in a list item]
+# We match markdown.pl - not sure how php gets that output??
+skip=1
--- /dev/null
+<p>AT&T has an ampersand in their name.</p>
+
+<p>AT&T is another way to write it.</p>
+
+<p>This & that.</p>
+
+<p>4 < 5.</p>
+
+<p>6 > 5.</p>
+
+<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p>
+
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
--- /dev/null
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+
+<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p>
+
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+
+<blockquote>
+ <p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+
+<p>Auto-links should not occur here: <code><http://example.com/></code></p>
+
+<pre><code>or here: <http://example.com/>
+</code></pre>
--- /dev/null
+<p>These should all get escaped:</p>
+
+<p>Backslash: \</p>
+
+<p>Backtick: `</p>
+
+<p>Asterisk: *</p>
+
+<p>Underscore: _</p>
+
+<p>Left brace: {</p>
+
+<p>Right brace: }</p>
+
+<p>Left bracket: [</p>
+
+<p>Right bracket: ]</p>
+
+<p>Left paren: (</p>
+
+<p>Right paren: )</p>
+
+<p>Greater-than: ></p>
+
+<p>Hash: #</p>
+
+<p>Period: .</p>
+
+<p>Bang: !</p>
+
+<p>Plus: +</p>
+
+<p>Minus: -</p>
+
+<p>These should not, because they occur within a code block:</p>
+
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+
+<p>Nor should these, which occur in code spans:</p>
+
+<p>Backslash: <code>\\</code></p>
+
+<p>Backtick: <code>\`</code></p>
+
+<p>Asterisk: <code>\*</code></p>
+
+<p>Underscore: <code>\_</code></p>
+
+<p>Left brace: <code>\{</code></p>
+
+<p>Right brace: <code>\}</code></p>
+
+<p>Left bracket: <code>\[</code></p>
+
+<p>Right bracket: <code>\]</code></p>
+
+<p>Left paren: <code>\(</code></p>
+
+<p>Right paren: <code>\)</code></p>
+
+<p>Greater-than: <code>\></code></p>
+
+<p>Hash: <code>\#</code></p>
+
+<p>Period: <code>\.</code></p>
+
+<p>Bang: <code>\!</code></p>
+
+<p>Plus: <code>\+</code></p>
+
+<p>Minus: <code>\-</code></p>
--- /dev/null
+<blockquote>
+ <p>Example:</p>
+
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+
+ <p>Or:</p>
+
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<p>Here's a simple block:</p>
+
+<div>
+ foo
+</div>
+
+<p>This should be a code block, though:</p>
+
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+
+<p>As should this:</p>
+
+<pre><code><div>foo</div>
+</code></pre>
+
+<p>Now, nested:</p>
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+<p>This should just be an HTML comment:</p>
+
+<!-- Comment -->
+
+<p>Multiline:</p>
+
+<!--
+Blah
+Blah
+-->
+
+<p>Code block:</p>
+
+<pre><code><!-- Comment -->
+</code></pre>
+
+<p>Just plain comment, with trailing spaces on the line:</p>
+
+<!-- foo -->
+
+<p>Code:</p>
+
+<pre><code><hr />
+</code></pre>
+
+<p>Hr's:</p>
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
--- /dev/null
+<h1>Markdown: Basics</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<h2>Getting the Gist of Markdown's Formatting Syntax</h2>
+
+<p>This page offers a brief overview of what it's like to use Markdown.
+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.</p>
+
+<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.</p>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<h2>Paragraphs, Headers, Blockquotes</h2>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.
+Setext-style headers for <code><h1></code> and <code><h2></code> are created by
+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.
+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.</p>
+
+<p>Blockquotes are indicated using email-style '<code>></code>' angle brackets.</p>
+
+<p>Markdown:</p>
+
+<pre><code>A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+> This is a blockquote.
+>
+> This is the second paragraph in the blockquote.
+>
+> ## This is an H2 in a blockquote
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><h1>A First Level Header</h1>
+
+<h2>A Second Level Header</h2>
+
+<p>Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.</p>
+
+<p>The quick brown fox jumped over the lazy
+dog's back.</p>
+
+<h3>Header 3</h3>
+
+<blockquote>
+ <p>This is a blockquote.</p>
+
+ <p>This is the second paragraph in the blockquote.</p>
+
+ <h2>This is an H2 in a blockquote</h2>
+</blockquote>
+</code></pre>
+
+<h3>Phrase Emphasis</h3>
+
+<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>
+
+<p>Markdown:</p>
+
+<pre><code>Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>Some of these words <em>are emphasized</em>.
+Some of these words <em>are emphasized also</em>.</p>
+
+<p>Use two asterisks for <strong>strong emphasis</strong>.
+Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+</code></pre>
+
+<h2>Lists</h2>
+
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
+
+<pre><code>* Candy.
+* Gum.
+* Booze.
+</code></pre>
+
+<p>this:</p>
+
+<pre><code>+ Candy.
++ Gum.
++ Booze.
+</code></pre>
+
+<p>and this:</p>
+
+<pre><code>- Candy.
+- Gum.
+- Booze.
+</code></pre>
+
+<p>all produce the same output:</p>
+
+<pre><code><ul>
+<li>Candy.</li>
+<li>Gum.</li>
+<li>Booze.</li>
+</ul>
+</code></pre>
+
+<p>Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:</p>
+
+<pre><code>1. Red
+2. Green
+3. Blue
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><ol>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ol>
+</code></pre>
+
+<p>If you put blank lines between items, you'll get <code><p></code> tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:</p>
+
+<pre><code>* A list item.
+
+ With multiple paragraphs.
+
+* Another item in the list.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><ul>
+<li><p>A list item.</p>
+<p>With multiple paragraphs.</p></li>
+<li><p>Another item in the list.</p></li>
+</ul>
+</code></pre>
+
+<h3>Links</h3>
+
+<p>Markdown supports two styles for creating links: <em>inline</em> and
+<em>reference</em>. With both styles, you use square brackets to delimit the
+text you want to turn into a link.</p>
+
+<p>Inline-style links use parentheses immediately after the link text.
+For example:</p>
+
+<pre><code>This is an [example link](http://example.com/).
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>This is an <a href="http://example.com/">
+example link</a>.</p>
+</code></pre>
+
+<p>Optionally, you may include a title attribute in the parentheses:</p>
+
+<pre><code>This is an [example link](http://example.com/ "With a Title").
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>This is an <a href="http://example.com/" title="With a Title">
+example link</a>.</p>
+</code></pre>
+
+<p>Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:</p>
+
+<pre><code>I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/ "Google"
+[2]: http://search.yahoo.com/ "Yahoo Search"
+[3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from <a href="http://search.yahoo.com/"
+title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
+title="MSN Search">MSN</a>.</p>
+</code></pre>
+
+<p>The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are <em>not</em> case sensitive:</p>
+
+<pre><code>I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I start my morning with a cup of coffee and
+<a href="http://www.nytimes.com/">The New York Times</a>.</p>
+</code></pre>
+
+<h3>Images</h3>
+
+<p>Image syntax is very much like link syntax.</p>
+
+<p>Inline (titles are optional):</p>
+
+<pre><code>
+</code></pre>
+
+<p>Reference-style:</p>
+
+<pre><code>![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+</code></pre>
+
+<p>Both of the above examples produce the same output:</p>
+
+<pre><code><img src="/path/to/img.jpg" alt="alt text" title="Title" />
+</code></pre>
+
+<h3>Code</h3>
+
+<p>In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (<code>&</code>) and angle brackets (<code><</code> or
+<code>></code>) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:</p>
+
+<pre><code>I strongly recommend against using any `<blink>` tags.
+
+I wish SmartyPants used named entities like `&mdash;`
+instead of decimal-encoded entites like `&#8212;`.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I strongly recommend against using any
+<code>&lt;blink&gt;</code> tags.</p>
+
+<p>I wish SmartyPants used named entities like
+<code>&amp;mdash;</code> instead of decimal-encoded
+entites like <code>&amp;#8212;</code>.</p>
+</code></pre>
+
+<p>To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, <code>&</code>, <code><</code>,
+and <code>></code> characters will be escaped automatically.</p>
+
+<p>Markdown:</p>
+
+<pre><code>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+ <blockquote>
+ <p>For example.</p>
+ </blockquote>
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:</p>
+
+<pre><code>&lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+&lt;/blockquote&gt;
+</code></pre>
+</code></pre>
--- /dev/null
+<h1>Markdown: Syntax</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a>
+<ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul></li>
+<li><a href="#block">Block Elements</a>
+<ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul></li>
+<li><a href="#span">Span Elements</a>
+<ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul></li>
+<li><a href="#misc">Miscellaneous</a>
+<ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul></li>
+</ul>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<hr />
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+
+<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,
+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>
+
+<p>For example, to add an HTML table to a Markdown article:</p>
+
+<pre><code>This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+</code></pre>
+
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+
+<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code><</code>
+and <code>&</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&lt;</code>, and
+<code>&amp;</code>.</p>
+
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+
+<pre><code>http://images.google.com/images?num=30&q=larry+bird
+</code></pre>
+
+<p>you need to encode the URL as:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;</code>.</p>
+
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+
+<pre><code>&copy;
+</code></pre>
+
+<p>and Markdown will leave it alone. But if you write:</p>
+
+<pre><code>AT&T
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>AT&amp;T
+</code></pre>
+
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+
+<pre><code>4 < 5
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>4 &lt; 5
+</code></pre>
+
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code><</code>
+and <code>&</code> in your example code needs to be escaped.)</p>
+
+<hr />
+
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code><br /></code> tag.</p>
+
+<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+
+<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic
+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>></code> before every line:</p>
+
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Markdown allows you to be lazy and only put the <code>></code> before the first
+line of a hard-wrapped paragraph:</p>
+
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>></code>:</p>
+
+<pre><code>> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+</code></pre>
+
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+
+<pre><code>> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+</code></pre>
+
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+
+<p>is equivalent to:</p>
+
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+
+<p>and:</p>
+
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+
+<p>Ordered lists use numbers followed by periods:</p>
+
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+
+<pre><code><ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</code></pre>
+
+<p>If you instead wrote the list in Markdown like this:</p>
+
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+
+<p>or even:</p>
+
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>But if you want to be lazy, you don't have to:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code><p></code> tags in the HTML output. For example, this input:</p>
+
+<pre><code>* Bird
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+</code></pre>
+
+<p>But this:</p>
+
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+</code></pre>
+
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+
+<p>To put a blockquote within a list item, the blockquote's <code>></code>
+delimiters need to be indented:</p>
+
+<pre><code>* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+</code></pre>
+
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+
+<pre><code>* A list item with a code block:
+
+ <code goes here>
+</code></pre>
+
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+
+<pre><code>1986. What a great season.
+</code></pre>
+
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+
+<pre><code>1986\. What a great season.
+</code></pre>
+
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code><pre></code> and <code><code></code> tags.</p>
+
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+
+<p>Markdown will generate:</p>
+
+<pre><code><p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+</code></pre>
+
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+ beep
+end tell
+</code></pre>
+</code></pre>
+
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+
+<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+
+<pre><code> <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+</code></pre>
+
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+
+<hr />
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+
+<p>In both styles, the link text is delimited by [square brackets].</p>
+
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+
+<p>Will produce:</p>
+
+<pre><code><p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+</code></pre>
+
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+
+<p>You can optionally use a space to separate the sets of brackets:</p>
+
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>Square brackets containing the link identifier (optionally
+indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+in double or single quotes.</li>
+</ul>
+
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+
+<pre><code>[id]: <http://example.com/> "Optional Title Here"
+</code></pre>
+
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+
+<p>are equivalent.</p>
+
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+
+<pre><code>[Google][]
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Google]: http://google.com/
+</code></pre>
+
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+
+<p>Here's an example of reference links in action:</p>
+
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Using the implicit link name shortcut, you could instead write:</p>
+
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Both of the above examples will produce the following HTML output:</p>
+
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+</code></pre>
+
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code><strong></code> tag. E.g., this input:</p>
+
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+</code></pre>
+
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+
+<p>Emphasis can be used in the middle of a word:</p>
+
+<pre><code>un*fucking*believable
+</code></pre>
+
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+
+<pre><code>Use the `printf()` function.
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><p>Use the <code>printf()</code> function.</p>
+</code></pre>
+
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+
+<p>which will produce this:</p>
+
+<pre><code><p><code>There is a literal backtick (`) here.</code></p>
+</code></pre>
+
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+</code></pre>
+
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+
+<pre><code>Please don't use any `<blink>` tags.
+</code></pre>
+
+<p>into:</p>
+
+<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+</code></pre>
+
+<p>You can write this:</p>
+
+<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+</code></pre>
+
+<p>to produce:</p>
+
+<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+</code></pre>
+
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+
+<p>Inline image syntax looks like this:</p>
+
+<pre><code>
+
+
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+the image, and an optional <code>title</code> attribute enclosed in double
+or single quotes.</li>
+</ul>
+
+<p>Reference-style image syntax looks like this:</p>
+
+<pre><code>![Alt text][id]
+</code></pre>
+
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code><img></code> tags.</p>
+
+<hr />
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+
+<pre><code><http://example.com/>
+</code></pre>
+
+<p>Markdown will turn this into:</p>
+
+<pre><code><a href="http://example.com/">http://example.com/</a>
+</code></pre>
+
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+
+<pre><code><address@example.com>
+</code></pre>
+
+<p>into something like this:</p>
+
+<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+</code></pre>
+
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes
+before the asterisks, like this:</p>
+
+<pre><code>\*literal asterisks\*
+</code></pre>
+
+<p>Markdown provides backslash escapes for the following characters:</p>
+
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
--- /dev/null
+<blockquote>
+ <p>foo</p>
+
+ <blockquote>
+ <p>bar</p>
+ </blockquote>
+
+ <p>foo</p>
+</blockquote>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
--- /dev/null
+
+
+<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>
+
+
--- /dev/null
+
+<p>Lorem ipsum <a href="mailto:yuri@domain.org">yuri@domain.org</a>, etc.
+</p>
+<ul>
+ <li>
+ An email address in a list
+ </li>
+
+ <li>
+ <a href="mailto:yuri@domain.org">yuri@domain.org</a>
+ </li>
+
+ <li>
+ Another item.
+ </li>
+</ul>
+
+
--- /dev/null
+
+<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">↩</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">↩</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">↩</a>
+ </li>
+</ol>
+</div>
--- /dev/null
+<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>
--- /dev/null
+[DEFAULT]
+input_ext=.text
+normalize=1
+# comment out next line to run these tests
+#skip=1
+
+[Yuri-Footnotes]
+extensions=footnotes
+skip=1
+
--- /dev/null
+<p>AT&T has an ampersand in their name.</p>
+
+<p>AT&T is another way to write it.</p>
+
+<p>This & that.</p>
+
+<p>4 < 5.</p>
+
+<p>6 > 5.</p>
+
+<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p>
+
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
--- /dev/null
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+
+<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p>
+
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+
+<blockquote>
+ <p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+
+<p>Auto-links should not occur here: <code><http://example.com/></code></p>
+
+<pre><code>or here: <http://example.com/>
+</code></pre>
--- /dev/null
+<p>These should all get escaped:</p>
+
+<p>Backslash: \</p>
+
+<p>Backtick: `</p>
+
+<p>Asterisk: *</p>
+
+<p>Underscore: _</p>
+
+<p>Left brace: {</p>
+
+<p>Right brace: }</p>
+
+<p>Left bracket: [</p>
+
+<p>Right bracket: ]</p>
+
+<p>Left paren: (</p>
+
+<p>Right paren: )</p>
+
+<p>Greater-than: ></p>
+
+<p>Hash: #</p>
+
+<p>Period: .</p>
+
+<p>Bang: !</p>
+
+<p>Plus: +</p>
+
+<p>Minus: -</p>
+
+<p>These should not, because they occur within a code block:</p>
+
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+
+<p>Nor should these, which occur in code spans:</p>
+
+<p>Backslash: <code>\\</code></p>
+
+<p>Backtick: <code>\`</code></p>
+
+<p>Asterisk: <code>\*</code></p>
+
+<p>Underscore: <code>\_</code></p>
+
+<p>Left brace: <code>\{</code></p>
+
+<p>Right brace: <code>\}</code></p>
+
+<p>Left bracket: <code>\[</code></p>
+
+<p>Right bracket: <code>\]</code></p>
+
+<p>Left paren: <code>\(</code></p>
+
+<p>Right paren: <code>\)</code></p>
+
+<p>Greater-than: <code>\></code></p>
+
+<p>Hash: <code>\#</code></p>
+
+<p>Period: <code>\.</code></p>
+
+<p>Bang: <code>\!</code></p>
+
+<p>Plus: <code>\+</code></p>
+
+<p>Minus: <code>\-</code></p>
+
+
+<p>These should get escaped, even though they're matching pairs for
+other Markdown constructs:</p>
+
+<p>*asterisks*</p>
+
+<p>_underscores_</p>
+
+<p>`backticks`</p>
+
+<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p>
+
+<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>
+
+<p>This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.</p>
--- /dev/null
+<blockquote>
+ <p>Example:</p>
+
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+
+ <p>Or:</p>
+
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
--- /dev/null
+<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>
--- /dev/null
+<p><code><test a="</code> content of attribute <code>"></code></p>
+
+<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>
+
+<p>Here's how you put <code>`backticks`</code> in a code span.</p>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<p>Here's a simple block:</p>
+
+<div>
+ foo
+</div>
+
+<p>This should be a code block, though:</p>
+
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+
+<p>As should this:</p>
+
+<pre><code><div>foo</div>
+</code></pre>
+
+<p>Now, nested:</p>
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+<p>This should just be an HTML comment:</p>
+
+<!-- Comment -->
+
+<p>Multiline:</p>
+
+<!--
+Blah
+Blah
+-->
+
+<p>Code block:</p>
+
+<pre><code><!-- Comment -->
+</code></pre>
+
+<p>Just plain comment, with trailing spaces on the line:</p>
+
+<!-- foo -->
+
+<p>Code:</p>
+
+<pre><code><hr />
+</code></pre>
+
+<p>Hr's:</p>
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+
+<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
--- /dev/null
+<h1>Markdown: Basics</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<h2>Getting the Gist of Markdown's Formatting Syntax</h2>
+
+<p>This page offers a brief overview of what it's like to use Markdown.
+The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.</p>
+
+<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.</p>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<h2>Paragraphs, Headers, Blockquotes</h2>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.
+Setext-style headers for <code><h1></code> and <code><h2></code> are created by
+"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.
+To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.</p>
+
+<p>Blockquotes are indicated using email-style '<code>></code>' angle brackets.</p>
+
+<p>Markdown:</p>
+
+<pre><code>A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+> This is a blockquote.
+>
+> This is the second paragraph in the blockquote.
+>
+> ## This is an H2 in a blockquote
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><h1>A First Level Header</h1>
+
+<h2>A Second Level Header</h2>
+
+<p>Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.</p>
+
+<p>The quick brown fox jumped over the lazy
+dog's back.</p>
+
+<h3>Header 3</h3>
+
+<blockquote>
+ <p>This is a blockquote.</p>
+
+ <p>This is the second paragraph in the blockquote.</p>
+
+ <h2>This is an H2 in a blockquote</h2>
+</blockquote>
+</code></pre>
+
+<h3>Phrase Emphasis</h3>
+
+<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>
+
+<p>Markdown:</p>
+
+<pre><code>Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>Some of these words <em>are emphasized</em>.
+Some of these words <em>are emphasized also</em>.</p>
+
+<p>Use two asterisks for <strong>strong emphasis</strong>.
+Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+</code></pre>
+
+<h2>Lists</h2>
+
+<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,
+<code>+</code>, and <code>-</code>) as list markers. These three markers are
+interchangable; this:</p>
+
+<pre><code>* Candy.
+* Gum.
+* Booze.
+</code></pre>
+
+<p>this:</p>
+
+<pre><code>+ Candy.
++ Gum.
++ Booze.
+</code></pre>
+
+<p>and this:</p>
+
+<pre><code>- Candy.
+- Gum.
+- Booze.
+</code></pre>
+
+<p>all produce the same output:</p>
+
+<pre><code><ul>
+<li>Candy.</li>
+<li>Gum.</li>
+<li>Booze.</li>
+</ul>
+</code></pre>
+
+<p>Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:</p>
+
+<pre><code>1. Red
+2. Green
+3. Blue
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><ol>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ol>
+</code></pre>
+
+<p>If you put blank lines between items, you'll get <code><p></code> tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:</p>
+
+<pre><code>* A list item.
+
+ With multiple paragraphs.
+
+* Another item in the list.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><ul>
+<li><p>A list item.</p>
+<p>With multiple paragraphs.</p></li>
+<li><p>Another item in the list.</p></li>
+</ul>
+</code></pre>
+
+<h3>Links</h3>
+
+<p>Markdown supports two styles for creating links: <em>inline</em> and
+<em>reference</em>. With both styles, you use square brackets to delimit the
+text you want to turn into a link.</p>
+
+<p>Inline-style links use parentheses immediately after the link text.
+For example:</p>
+
+<pre><code>This is an [example link](http://example.com/).
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>This is an <a href="http://example.com/">
+example link</a>.</p>
+</code></pre>
+
+<p>Optionally, you may include a title attribute in the parentheses:</p>
+
+<pre><code>This is an [example link](http://example.com/ "With a Title").
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>This is an <a href="http://example.com/" title="With a Title">
+example link</a>.</p>
+</code></pre>
+
+<p>Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:</p>
+
+<pre><code>I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/ "Google"
+[2]: http://search.yahoo.com/ "Yahoo Search"
+[3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from <a href="http://search.yahoo.com/"
+title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
+title="MSN Search">MSN</a>.</p>
+</code></pre>
+
+<p>The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are <em>not</em> case sensitive:</p>
+
+<pre><code>I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I start my morning with a cup of coffee and
+<a href="http://www.nytimes.com/">The New York Times</a>.</p>
+</code></pre>
+
+<h3>Images</h3>
+
+<p>Image syntax is very much like link syntax.</p>
+
+<p>Inline (titles are optional):</p>
+
+<pre><code>
+</code></pre>
+
+<p>Reference-style:</p>
+
+<pre><code>![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+</code></pre>
+
+<p>Both of the above examples produce the same output:</p>
+
+<pre><code><img src="/path/to/img.jpg" alt="alt text" title="Title" />
+</code></pre>
+
+<h3>Code</h3>
+
+<p>In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (<code>&</code>) and angle brackets (<code><</code> or
+<code>></code>) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:</p>
+
+<pre><code>I strongly recommend against using any `<blink>` tags.
+
+I wish SmartyPants used named entities like `&mdash;`
+instead of decimal-encoded entites like `&#8212;`.
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>I strongly recommend against using any
+<code>&lt;blink&gt;</code> tags.</p>
+
+<p>I wish SmartyPants used named entities like
+<code>&amp;mdash;</code> instead of decimal-encoded
+entites like <code>&amp;#8212;</code>.</p>
+</code></pre>
+
+<p>To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, <code>&</code>, <code><</code>,
+and <code>></code> characters will be escaped automatically.</p>
+
+<p>Markdown:</p>
+
+<pre><code>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+ <blockquote>
+ <p>For example.</p>
+ </blockquote>
+</code></pre>
+
+<p>Output:</p>
+
+<pre><code><p>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:</p>
+
+<pre><code>&lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+&lt;/blockquote&gt;
+</code></pre>
+</code></pre>
--- /dev/null
+<h1>Markdown: Syntax</h1>
+
+<ul id="ProjectSubmenu">
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
+ <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li>
+ <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li>
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
+</ul>
+
+<ul>
+<li><a href="#overview">Overview</a>
+<ul>
+<li><a href="#philosophy">Philosophy</a></li>
+<li><a href="#html">Inline HTML</a></li>
+<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li>
+</ul></li>
+<li><a href="#block">Block Elements</a>
+<ul>
+<li><a href="#p">Paragraphs and Line Breaks</a></li>
+<li><a href="#header">Headers</a></li>
+<li><a href="#blockquote">Blockquotes</a></li>
+<li><a href="#list">Lists</a></li>
+<li><a href="#precode">Code Blocks</a></li>
+<li><a href="#hr">Horizontal Rules</a></li>
+</ul></li>
+<li><a href="#span">Span Elements</a>
+<ul>
+<li><a href="#link">Links</a></li>
+<li><a href="#em">Emphasis</a></li>
+<li><a href="#code">Code</a></li>
+<li><a href="#img">Images</a></li>
+</ul></li>
+<li><a href="#misc">Miscellaneous</a>
+<ul>
+<li><a href="#backslash">Backslash Escapes</a></li>
+<li><a href="#autolink">Automatic Links</a></li>
+</ul></li>
+</ul>
+
+<p><strong>Note:</strong> This document is itself written using Markdown; you
+can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
+
+<hr />
+
+<h2 id="overview">Overview</h2>
+
+<h3 id="philosophy">Philosophy</h3>
+
+<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>
+
+<p>Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>,
+<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.</p>
+
+<p>To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.</p>
+
+<h3 id="html">Inline HTML</h3>
+
+<p>Markdown's syntax is intended for one purpose: to be used as a
+format for <em>writing</em> for the web.</p>
+
+<p>Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is <em>not</em> to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.</p>
+
+<p>For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.</p>
+
+<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>,
+<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p>
+
+<p>For example, to add an HTML table to a Markdown article:</p>
+
+<pre><code>This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+</code></pre>
+
+<p>Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
+HTML block.</p>
+
+<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
+link or image syntax, go right ahead.</p>
+
+<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within
+span-level tags.</p>
+
+<h3 id="autoescape">Automatic Escaping for Special Characters</h3>
+
+<p>In HTML, there are two characters that demand special treatment: <code><</code>
+and <code>&</code>. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. <code>&lt;</code>, and
+<code>&amp;</code>.</p>
+
+<p>Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:</p>
+
+<pre><code>http://images.google.com/images?num=30&q=larry+bird
+</code></pre>
+
+<p>you need to encode the URL as:</p>
+
+<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird
+</code></pre>
+
+<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.</p>
+
+<p>Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into <code>&amp;</code>.</p>
+
+<p>So, if you want to include a copyright symbol in your article, you can write:</p>
+
+<pre><code>&copy;
+</code></pre>
+
+<p>and Markdown will leave it alone. But if you write:</p>
+
+<pre><code>AT&T
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>AT&amp;T
+</code></pre>
+
+<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:</p>
+
+<pre><code>4 < 5
+</code></pre>
+
+<p>Markdown will translate it to:</p>
+
+<pre><code>4 &lt; 5
+</code></pre>
+
+<p>However, inside Markdown code spans and blocks, angle brackets and
+ampersands are <em>always</em> encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single <code><</code>
+and <code>&</code> in your example code needs to be escaped.)</p>
+
+<hr />
+
+<h2 id="block">Block Elements</h2>
+
+<h3 id="p">Paragraphs and Line Breaks</h3>
+
+<p>A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.</p>
+
+<p>The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a <code><br /></code> tag.</p>
+
+<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you
+end a line with two or more spaces, then type return.</p>
+
+<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic
+"every line break is a <code><br /></code>" rule wouldn't work for Markdown.
+Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a>
+work best -- and look better -- when you format them with hard breaks.</p>
+
+<h3 id="header">Headers</h3>
+
+<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p>
+
+<p>Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:</p>
+
+<pre><code>This is an H1
+=============
+
+This is an H2
+-------------
+</code></pre>
+
+<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>
+
+<p>Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:</p>
+
+<pre><code># This is an H1
+
+## This is an H2
+
+###### This is an H6
+</code></pre>
+
+<p>Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :</p>
+
+<pre><code># This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+</code></pre>
+
+<h3 id="blockquote">Blockquotes</h3>
+
+<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a <code>></code> before every line:</p>
+
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Markdown allows you to be lazy and only put the <code>></code> before the first
+line of a hard-wrapped paragraph:</p>
+
+<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of <code>></code>:</p>
+
+<pre><code>> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+</code></pre>
+
+<p>Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:</p>
+
+<pre><code>> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+</code></pre>
+
+<p>Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.</p>
+
+<h3 id="list">Lists</h3>
+
+<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>
+
+<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:</p>
+
+<pre><code>* Red
+* Green
+* Blue
+</code></pre>
+
+<p>is equivalent to:</p>
+
+<pre><code>+ Red
++ Green
++ Blue
+</code></pre>
+
+<p>and:</p>
+
+<pre><code>- Red
+- Green
+- Blue
+</code></pre>
+
+<p>Ordered lists use numbers followed by periods:</p>
+
+<pre><code>1. Bird
+2. McHale
+3. Parish
+</code></pre>
+
+<p>It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:</p>
+
+<pre><code><ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</code></pre>
+
+<p>If you instead wrote the list in Markdown like this:</p>
+
+<pre><code>1. Bird
+1. McHale
+1. Parish
+</code></pre>
+
+<p>or even:</p>
+
+<pre><code>3. Bird
+1. McHale
+8. Parish
+</code></pre>
+
+<p>you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.</p>
+
+<p>If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.</p>
+
+<p>List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.</p>
+
+<p>To make lists look nice, you can wrap items with hanging indents:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>But if you want to be lazy, you don't have to:</p>
+
+<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>If list items are separated by blank lines, Markdown will wrap the
+items in <code><p></code> tags in the HTML output. For example, this input:</p>
+
+<pre><code>* Bird
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+</code></pre>
+
+<p>But this:</p>
+
+<pre><code>* Bird
+
+* Magic
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+</code></pre>
+
+<p>List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:</p>
+
+<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+</code></pre>
+
+<p>It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:</p>
+
+<pre><code>* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+</code></pre>
+
+<p>To put a blockquote within a list item, the blockquote's <code>></code>
+delimiters need to be indented:</p>
+
+<pre><code>* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+</code></pre>
+
+<p>To put a code block within a list item, the code block needs
+to be indented <em>twice</em> -- 8 spaces or two tabs:</p>
+
+<pre><code>* A list item with a code block:
+
+ <code goes here>
+</code></pre>
+
+<p>It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:</p>
+
+<pre><code>1986. What a great season.
+</code></pre>
+
+<p>In other words, a <em>number-period-space</em> sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:</p>
+
+<pre><code>1986\. What a great season.
+</code></pre>
+
+<h3 id="precode">Code Blocks</h3>
+
+<p>Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both <code><pre></code> and <code><code></code> tags.</p>
+
+<p>To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:</p>
+
+<pre><code>This is a normal paragraph:
+
+ This is a code block.
+</code></pre>
+
+<p>Markdown will generate:</p>
+
+<pre><code><p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+</code></pre>
+
+<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:</p>
+
+<pre><code>Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+ beep
+end tell
+</code></pre>
+</code></pre>
+
+<p>A code block continues until it reaches a line that is not indented
+(or the end of the article).</p>
+
+<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:</p>
+
+<pre><code> <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+</code></pre>
+
+<p>will turn into:</p>
+
+<pre><code><pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+</code></pre>
+
+<p>Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.</p>
+
+<h3 id="hr">Horizontal Rules</h3>
+
+<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:</p>
+
+<pre><code>* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+</code></pre>
+
+<hr />
+
+<h2 id="span">Span Elements</h2>
+
+<h3 id="link">Links</h3>
+
+<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>
+
+<p>In both styles, the link text is delimited by [square brackets].</p>
+
+<p>To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an <em>optional</em>
+title for the link, surrounded in quotes. For example:</p>
+
+<pre><code>This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+</code></pre>
+
+<p>Will produce:</p>
+
+<pre><code><p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+</code></pre>
+
+<p>If you're referring to a local resource on the same server, you can
+use relative paths:</p>
+
+<pre><code>See my [About](/about/) page for details.
+</code></pre>
+
+<p>Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:</p>
+
+<pre><code>This is [an example][id] reference-style link.
+</code></pre>
+
+<p>You can optionally use a space to separate the sets of brackets:</p>
+
+<pre><code>This is [an example] [id] reference-style link.
+</code></pre>
+
+<p>Then, anywhere in the document, you define your link label like this,
+on a line by itself:</p>
+
+<pre><code>[id]: http://example.com/ "Optional Title Here"
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>Square brackets containing the link identifier (optionally
+indented from the left margin using up to three spaces);</li>
+<li>followed by a colon;</li>
+<li>followed by one or more spaces (or tabs);</li>
+<li>followed by the URL for the link;</li>
+<li>optionally followed by a title attribute for the link, enclosed
+in double or single quotes.</li>
+</ul>
+
+<p>The link URL may, optionally, be surrounded by angle brackets:</p>
+
+<pre><code>[id]: <http://example.com/> "Optional Title Here"
+</code></pre>
+
+<p>You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:</p>
+
+<pre><code>[id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+</code></pre>
+
+<p>Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.</p>
+
+<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>
+
+<pre><code>[link text][a]
+[link text][A]
+</code></pre>
+
+<p>are equivalent.</p>
+
+<p>The <em>implicit link name</em> shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:</p>
+
+<pre><code>[Google][]
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Google]: http://google.com/
+</code></pre>
+
+<p>Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:</p>
+
+<pre><code>Visit [Daring Fireball][] for more information.
+</code></pre>
+
+<p>And then define the link:</p>
+
+<pre><code>[Daring Fireball]: http://daringfireball.net/
+</code></pre>
+
+<p>Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.</p>
+
+<p>Here's an example of reference links in action:</p>
+
+<pre><code>I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Using the implicit link name shortcut, you could instead write:</p>
+
+<pre><code>I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+</code></pre>
+
+<p>Both of the above examples will produce the following HTML output:</p>
+
+<pre><code><p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+</code></pre>
+
+<p>For comparison, here is the same paragraph written using
+Markdown's inline link style:</p>
+
+<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+</code></pre>
+
+<p>The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.</p>
+
+<p>With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.</p>
+
+<h3 id="em">Emphasis</h3>
+
+<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of
+emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an
+HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML
+<code><strong></code> tag. E.g., this input:</p>
+
+<pre><code>*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+</code></pre>
+
+<p>You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.</p>
+
+<p>Emphasis can be used in the middle of a word:</p>
+
+<pre><code>un*fucking*believable
+</code></pre>
+
+<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a
+literal asterisk or underscore.</p>
+
+<p>To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:</p>
+
+<pre><code>\*this text is surrounded by literal asterisks\*
+</code></pre>
+
+<h3 id="code">Code</h3>
+
+<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:</p>
+
+<pre><code>Use the `printf()` function.
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><p>Use the <code>printf()</code> function.</p>
+</code></pre>
+
+<p>To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:</p>
+
+<pre><code>``There is a literal backtick (`) here.``
+</code></pre>
+
+<p>which will produce this:</p>
+
+<pre><code><p><code>There is a literal backtick (`) here.</code></p>
+</code></pre>
+
+<p>The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:</p>
+
+<pre><code>A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+</code></pre>
+
+<p>will produce:</p>
+
+<pre><code><p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+</code></pre>
+
+<p>With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:</p>
+
+<pre><code>Please don't use any `<blink>` tags.
+</code></pre>
+
+<p>into:</p>
+
+<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+</code></pre>
+
+<p>You can write this:</p>
+
+<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+</code></pre>
+
+<p>to produce:</p>
+
+<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+</code></pre>
+
+<h3 id="img">Images</h3>
+
+<p>Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.</p>
+
+<p>Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>
+
+<p>Inline image syntax looks like this:</p>
+
+<pre><code>
+
+
+</code></pre>
+
+<p>That is:</p>
+
+<ul>
+<li>An exclamation mark: <code>!</code>;</li>
+<li>followed by a set of square brackets, containing the <code>alt</code>
+attribute text for the image;</li>
+<li>followed by a set of parentheses, containing the URL or path to
+the image, and an optional <code>title</code> attribute enclosed in double
+or single quotes.</li>
+</ul>
+
+<p>Reference-style image syntax looks like this:</p>
+
+<pre><code>![Alt text][id]
+</code></pre>
+
+<p>Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:</p>
+
+<pre><code>[id]: url/to/image "Optional title attribute"
+</code></pre>
+
+<p>As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML <code><img></code> tags.</p>
+
+<hr />
+
+<h2 id="misc">Miscellaneous</h2>
+
+<h3 id="autolink">Automatic Links</h3>
+
+<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>
+
+<pre><code><http://example.com/>
+</code></pre>
+
+<p>Markdown will turn this into:</p>
+
+<pre><code><a href="http://example.com/">http://example.com/</a>
+</code></pre>
+
+<p>Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:</p>
+
+<pre><code><address@example.com>
+</code></pre>
+
+<p>into something like this:</p>
+
+<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+</code></pre>
+
+<p>which will render in a browser as a clickable link to "address@example.com".</p>
+
+<p>(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)</p>
+
+<h3 id="backslash">Backslash Escapes</h3>
+
+<p>Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes
+before the asterisks, like this:</p>
+
+<pre><code>\*literal asterisks\*
+</code></pre>
+
+<p>Markdown provides backslash escapes for the following characters:</p>
+
+<pre><code>\ backslash
+` backtick
+* asterisk
+_ underscore
+{} curly braces
+[] square brackets
+() parentheses
+# hash mark
++ plus sign
+- minus sign (hyphen)
+. dot
+! exclamation mark
+</code></pre>
--- /dev/null
+<blockquote>
+ <p>foo</p>
+
+ <blockquote>
+ <p>bar</p>
+ </blockquote>
+
+ <p>foo</p>
+</blockquote>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
--- /dev/null
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
--- /dev/null
+[DEFAULT]
+input_ext=.text
+normalize=1
+# comment out next line to run these tests
+#skip=1
+
+[Images]
+# the attributes don't get ordered the same so we skip this
+skip=1
+
+[Code Blocks]
+# some weird whitespace issue
+skip=1
+
+[Links, reference style]
+# weird issue with nested brackets TODO: fixme
+skip=1
+
+[Backslash escapes]
+# backticks in raw html attributes TODO: fixme
+skip=1
+
+[Code Spans]
+# more backticks in raw html attributes TODO: fixme
+skip=1
--- /dev/null
+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('&', '&')
+ html = html.replace('<', '<')
+ html = html.replace('>', '>')
+ 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>')
+
--- /dev/null
+<p>to:</p>
+<p><td /><td style="text-align: center; white-space: nowrap;"><br /></p>
+<blockquote>
+<p>3) You don't need to alter all localization files.
+ Adding the new labels to the en_US files will do it.</p>
+</blockquote>
\ No newline at end of file
--- /dev/null
+to:
+
+<td /><td style="text-align: center; white-space: nowrap;"><br />
+
+> 3) You don't need to alter all localization files.
+> Adding the new labels to the en_US files will do it.
--- /dev/null
+<p>Simple block on one line:</p>
+<p><div>foo</div></p>
+<p>And nested without indentation:</p>
+<p><div>
+<div>
+<div>
+foo
+</div>
+</div>
+<div>bar</div>
+</div></p>
\ No newline at end of file
--- /dev/null
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+</div>
+<div>bar</div>
+</div>
--- /dev/null
+<p>Paragraph one.</p>
+<p><!-- This is a simple comment --></p>
+<p><!--
+ This is another comment.
+--></p>
+<p>Paragraph two.</p>
+<p><!-- one comment block -- -- with two comments --></p>
+<p>The end.</p>
\ No newline at end of file
--- /dev/null
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
--- /dev/null
+<p>Here's a simple block:</p>
+<p><div>
+ foo
+</div></p>
+<p>This should be a code block, though:</p>
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+<p>As should this:</p>
+<pre><code><div>foo</div>
+</code></pre>
+<p>Now, nested:</p>
+<p><div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div></p>
+<p>This should just be an HTML comment:</p>
+<p><!-- Comment --></p>
+<p>Multiline:</p>
+<p><!--
+Blah
+Blah
+--></p>
+<p>Code block:</p>
+<pre><code><!-- Comment -->
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<p><!-- foo --> <br />
+</p>
+<p>Code:</p>
+<pre><code><hr />
+</code></pre>
+<p>Hr's:</p>
+<p><hr></p>
+<p><hr/></p>
+<p><hr /></p>
+<p><hr> <br />
+</p>
+<p><hr/><br />
+</p>
+<p><hr /> </p>
+<p><hr class="foo" id="bar" /></p>
+<p><hr class="foo" id="bar"/></p>
+<p><hr class="foo" id="bar" ></p>
+<p><some <a href="http://example.com">weird</a> stuff></p>
\ No newline at end of file
--- /dev/null
+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" >
+
+<some [weird](http://example.com) stuff>
--- /dev/null
+<p>Here's a simple block:</p>
+<p></p>
+<p>This should be a code block, though:</p>
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+<p>As should this:</p>
+<pre><code><div>foo</div>
+</code></pre>
+<p>Now, nested:</p>
+<p></p>
+<p>This should just be an HTML comment:</p>
+<p></p>
+<p>Multiline:</p>
+<p></p>
+<p>Code block:</p>
+<pre><code><!-- Comment -->
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<p></p>
+<p>Code:</p>
+<pre><code><hr />
+</code></pre>
+<p>Hr's:</p>
+<p></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
--- /dev/null
+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" >
+
+<some [weird](http://example.com) stuff>
--- /dev/null
+<p>Here's a simple block:</p>
+<p>[HTML_REMOVED]</p>
+<p>This should be a code block, though:</p>
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+<p>As should this:</p>
+<pre><code><div>foo</div>
+</code></pre>
+<p>Now, nested:</p>
+<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><!-- Comment -->
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<p>[HTML_REMOVED]</p>
+<p>Code:</p>
+<pre><code><hr />
+</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>
+<p>[HTML_REMOVED]</p>
\ No newline at end of file
--- /dev/null
+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" >
+
+<some [weird](http://example.com) stuff>
--- /dev/null
+<p>This should be stripped/escaped in safe_mode.</p>
+<p><script>
+alert("Hello world!")
+</script></p>
+<p>With blank lines.</p>
+<p><script></p>
+<p>alert("Hello world!")</p>
+<p></script></p>
+<p>Now with some weirdness</p>
+<p><code><script <!--
+alert("Hello world!")
+</script <></code> `</p>
+<p>Try another way.</p>
+<p><script <!--
+alert("Hello world!")
+</script <></p>
+<p>This time with blank lines.</p>
+<p><script <!--</p>
+<p>alert("Hello world!")</p>
+<p></script <></p>
\ No newline at end of file
--- /dev/null
+This should be stripped/escaped in safe_mode.
+
+<script>
+alert("Hello world!")
+</script>
+
+With blank lines.
+
+<script>
+
+alert("Hello world!")
+
+</script>
+
+Now with some weirdness
+
+``<script <!--
+alert("Hello world!")
+</script <>`` `
+
+Try another way.
+
+<script <!--
+alert("Hello world!")
+</script <>
+
+This time with blank lines.
+
+<script <!--
+
+alert("Hello world!")
+
+</script <>
--- /dev/null
+[DEFAULT]
+safe_mode=escape
+
+[remove]
+safe_mode=remove
+
+[replace]
+safe_mode=replace
--- /dev/null
+<p>These links should be unsafe and not allowed in safe_mode</p>
+<p><a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a>
+<a href="">link</a></p>
+<p><img alt="img" src="" />
+<a href="">ref</a>
+<img alt="imgref" src="" /></p>
+<p>These should work regardless:</p>
+<p><a href="relative/url.html">relative</a>
+<a href="mailto:foo@bar.com">email</a>
+<a href="news:some.news.group.com">news scheme</a>
+<a href="http://example.com">http link</a></p>
\ No newline at end of file
--- /dev/null
+These links should be unsafe and not allowed in safe_mode
+
+[link](javascript:alert%28'Hello%20world!'%29)
+[link](vbscript:msgbox%28%22Hello%20world!%22%29)
+[link](livescript:alert%28'Hello%20world!'%29)
+[link](mocha:[code])
+[link](jAvAsCrIpT:alert%28'Hello%20world!'%29)
+[link](ja vas cr ipt:alert%28'Hello%20world!'%29)
+[link](ja vas cr ipt:alert%28'Hello%20world!'%29)
+[link](ja vas cr ipt:alert%28'Hello%20world!'%29)
+[link](ja%09 %0Avas cr
ipt:alert%28'Hello%20world!'%29)
+[link](ja%20vas%20cr%20ipt:alert%28'Hello%20world!'%29)
+[link](live%20script:alert%28'Hello%20world!'%29)
+
+
+[ref][]
+![imgref][]
+
+[ref]: javascript:alert%29'XSS'%29
+[imgref]: javascript:alert%29'XSS'%29
+
+These should work regardless:
+
+[relative](relative/url.html)
+[email](mailto:foo@bar.com)
+[news scheme](news:some.news.group.com)
+[http link](http://example.com)
--- /dev/null
+#!/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 sys
+import types
+import markdown
+import warnings
+
+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.util.etree.Element("div")
+ text = 'foo'
+ self.parser.parseChunk(root, text)
+ self.assertEqual(markdown.serializers.to_xhtml_string(root),
+ "<div><p>foo</p></div>")
+
+ def testParseDocument(self):
+ """ Test BlockParser.parseDocument. """
+ lines = ['#foo', '', 'bar', '', ' baz']
+ tree = self.parser.parseDocument(lines)
+ self.assertTrue(isinstance(tree, markdown.util.etree.ElementTree))
+ self.assertTrue(markdown.util.etree.iselement(tree.getroot()))
+ self.assertEqual(markdown.serializers.to_xhtml_string(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.util.HtmlStash()
+ self.placeholder = self.stash.store('foo')
+
+ def testSimpleStore(self):
+ """ Test HtmlStash.store. """
+ self.assertEqual(self.placeholder, self.stash.get_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, self.stash.get_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')])
+
+ def textBadLink(self):
+ """ Test OrderedDict change order with bad location. """
+ self.assertRaises(ValueError, self.odict.link('fourth', '<bad'))
+ # Check for data integrity ("fourth" wasn't deleted).'
+ self.assertEqual(self.odict.items(),
+ [('first', 'This'), ('third', 'a'),
+ ('fourth', 'self'), ('fifth', 'test')])
+
+class TestErrors(unittest.TestCase):
+ """ Test Error Reporting. """
+
+ def setUp(self):
+ # Set warnings to be raised as errors
+ warnings.simplefilter('error')
+
+ def tearDown(self):
+ # Reset warning behavior back to default
+ warnings.simplefilter('default')
+
+ def testNonUnicodeSource(self):
+ """ Test falure on non-unicode source text. """
+ if sys.version_info < (3, 0):
+ source = "foo".encode('utf-16')
+ self.assertRaises(UnicodeDecodeError, markdown.markdown, source)
+
+ def testBadOutputFormat(self):
+ """ Test failure on bad output_format. """
+ self.assertRaises(KeyError, markdown.Markdown, output_format='invalid')
+
+ def testLoadExtensionFailure(self):
+ """ Test failure of an extension to load. """
+ self.assertRaises(ValueError,
+ markdown.Markdown, extensions=['non_existant_ext'])
+
+ def testLoadBadExtension(self):
+ """ Test loading of an Extension with no makeExtension function. """
+ _create_fake_extension(name='fake', has_factory_func=False)
+ self.assertRaises(ValueError, markdown.Markdown, extensions=['fake'])
+
+ def testNonExtension(self):
+ """ Test loading a non Extension object as an extension. """
+ _create_fake_extension(name='fake', is_wrong_type=True)
+ self.assertRaises(ValueError, markdown.Markdown, extensions=['fake'])
+
+ def testBaseExtention(self):
+ """ Test that the base Extension class will raise NotImplemented. """
+ _create_fake_extension(name='fake')
+ self.assertRaises(NotImplementedError,
+ markdown.Markdown, extensions=['fake'])
+
+
+def _create_fake_extension(name, has_factory_func=True, is_wrong_type=False):
+ """ Create a fake extension module for testing. """
+ mod_name = '_'.join(['mdx', name])
+ ext_mod = types.ModuleType(mod_name)
+ def makeExtension(configs=None):
+ if is_wrong_type:
+ return object
+ else:
+ return markdown.extensions.Extension(configs=configs)
+ if has_factory_func:
+ ext_mod.makeExtension = makeExtension
+ # Warning: this brute forces the extenson module onto the system. Either
+ # this needs to be specificly overriden or a new python session needs to
+ # be started to get rid of this. This should be ok in a testing context.
+ sys.modules[mod_name] = ext_mod
+
+
+class testETreeComments(unittest.TestCase):
+ """
+ Test that ElementTree Comments work.
+
+ These tests should only be a concern when using cElementTree with third
+ party serializers (including markdown's (x)html serializer). While markdown
+ doesn't use ElementTree.Comment itself, we should certainly support any
+ third party extensions which may. Therefore, these tests are included to
+ ensure such support is maintained.
+ """
+
+ def setUp(self):
+ # Create comment node
+ self.comment = markdown.util.etree.Comment('foo')
+ if hasattr(markdown.util.etree, 'test_comment'):
+ self.test_comment = markdown.util.etree.test_comment
+ else:
+ self.test_comment = markdown.util.etree.Comment
+
+ def testCommentIsComment(self):
+ """ Test that an ElementTree Comment passes the `is Comment` test. """
+ self.assertTrue(self.comment.tag is markdown.util.etree.test_comment)
+
+ def testCommentIsBlockLevel(self):
+ """ Test that an ElementTree Comment is recognized as BlockLevel. """
+ self.assertFalse(markdown.util.isBlockLevel(self.comment.tag))
+
+ def testCommentSerialization(self):
+ """ Test that an ElementTree Comment serializes properly. """
+ self.assertEqual(markdown.serializers.to_html_string(self.comment),
+ '<!--foo-->')
+
+ def testCommentPrettify(self):
+ """ Test that an ElementTree Comment is prettified properly. """
+ pretty = markdown.treeprocessors.PrettifyTreeprocessor()
+ pretty.run(self.comment)
+ self.assertEqual(markdown.serializers.to_html_string(self.comment),
+ '<!--foo-->\n')
+
+
+class testAtomicString(unittest.TestCase):
+ """ Test that AtomicStrings are honored (not parsed). """
+
+ def setUp(self):
+ md = markdown.Markdown()
+ self.inlineprocessor = md.treeprocessors['inline']
+
+ def testString(self):
+ """ Test that a regular string is parsed. """
+ tree = markdown.util.etree.Element('div')
+ p = markdown.util.etree.SubElement(tree, 'p')
+ p.text = u'some *text*'
+ new = self.inlineprocessor.run(tree)
+ self.assertEqual(markdown.serializers.to_html_string(new),
+ '<div><p>some <em>text</em></p></div>')
+
+ def testSimpleAtomicString(self):
+ """ Test that a simple AtomicString is not parsed. """
+ tree = markdown.util.etree.Element('div')
+ p = markdown.util.etree.SubElement(tree, 'p')
+ p.text = markdown.util.AtomicString(u'some *text*')
+ new = self.inlineprocessor.run(tree)
+ self.assertEqual(markdown.serializers.to_html_string(new),
+ '<div><p>some *text*</p></div>')
+
+ def testNestedAtomicString(self):
+ """ Test that a nested AtomicString is not parsed. """
+ tree = markdown.util.etree.Element('div')
+ p = markdown.util.etree.SubElement(tree, 'p')
+ p.text = markdown.util.AtomicString(u'*some* ')
+ span1 = markdown.util.etree.SubElement(p, 'span')
+ span1.text = markdown.util.AtomicString(u'*more* ')
+ span2 = markdown.util.etree.SubElement(span1, 'span')
+ span2.text = markdown.util.AtomicString(u'*text* ')
+ span3 = markdown.util.etree.SubElement(span2, 'span')
+ span3.text = markdown.util.AtomicString(u'*here*')
+ span3.tail = markdown.util.AtomicString(u' *to*')
+ span2.tail = markdown.util.AtomicString(u' *test*')
+ span1.tail = markdown.util.AtomicString(u' *with*')
+ new = self.inlineprocessor.run(tree)
+ self.assertEqual(markdown.serializers.to_html_string(new),
+ '<div><p>*some* <span>*more* <span>*text* <span>*here*</span> '
+ '*to*</span> *test*</span> *with*</p></div>')
+
--- /dev/null
+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 []
+ if value.lower() in ['yes', 'true', 'on', '1']:
+ return True
+ if value.lower() in ['no', 'false', 'off', '0']:
+ return False
+ return value