diff options
-rw-r--r-- | markdown/extensions/html_tidy.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/markdown/extensions/html_tidy.py b/markdown/extensions/html_tidy.py new file mode 100644 index 0000000..5105e33 --- /dev/null +++ b/markdown/extensions/html_tidy.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +""" +HTML Tidy Extension for Python-Markdown +======================================= + +Runs [HTML Tidy][] on the output of Python-Markdown using the [uTidylib][] +Python wrapper. Both libtidy and uTidylib must be installed on your system. + +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``. + +[HTML Tidy]: http://tidy.sourceforge.net/ +[uTidylib]: http://utidylib.berlios.de/ +[options]: http://tidy.sourceforge.net/docs/quickref.html + +Copyright (c)2008 [Waylan Limberg](http://achinghead.com) + +License: [BSD](http://www.opensource.org/licenses/bsd-license.php) + +Dependencies: +* [Python2.3+](http://python.org) +* [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/) +* [HTML Tidy](http://utidylib.berlios.de/) +* [uTidylib](http://utidylib.berlios.de/) + +""" + +import markdown +import tidy + +class TidyExtension(markdown.Extension): + + def __init__(self, configs): + # Set defaults to match typical markdown behavior. + self.config = dict(output_xhtml=1, + show_body_only=1, + ) + # Merge in user defined configs overriding any present if nessecary. + for c in configs: + self.config[c[0]] = c[1] + + def extendMarkdown(self, md, md_globals): + # Save options to markdown instance + md.tidy_options = self.config + # Add TidyProcessor to postprocessors + 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)) + + +def makeExtension(configs=None): + return TidyExtension(configs=configs) |