diff options
author | Jean-Baptiste Queru <jbq@google.com> | 2011-02-04 14:12:08 -0800 |
---|---|---|
committer | Jean-Baptiste Queru <jbq@google.com> | 2011-02-04 14:12:08 -0800 |
commit | 6516b99bb74dfb7187a08f7090bf7ca22a006f15 (patch) | |
tree | 2cda04a3eee460c97f0411722bce3e9d9e54663d /markdown/postprocessors.py | |
parent | e46e2414e0d5f0405da714c6531c176643aed09c (diff) | |
download | markdown-6516b99bb74dfb7187a08f7090bf7ca22a006f15.tar.gz |
Import python-markdown
This is from git://gitorious.org/python-markdown/mainline.git
at tag 2.0.3 (commit 067d88bc41c7924c9087b724ff5247235243ce6b)
Change-Id: I5091438ce3243b87a099b8a75dd6307921966e76
Diffstat (limited to 'markdown/postprocessors.py')
-rw-r--r-- | markdown/postprocessors.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/markdown/postprocessors.py b/markdown/postprocessors.py new file mode 100644 index 0000000..80227bb --- /dev/null +++ b/markdown/postprocessors.py @@ -0,0 +1,77 @@ +""" +POST-PROCESSORS +============================================================================= + +Markdown also allows post-processors, which are similar to preprocessors in +that they need to implement a "run" method. However, they are run after core +processing. + +""" + + +import markdown + +class Processor: + def __init__(self, markdown_instance=None): + if markdown_instance: + self.markdown = markdown_instance + +class Postprocessor(Processor): + """ + Postprocessors are run after the ElementTree it converted back into text. + + Each Postprocessor implements a "run" method that takes a pointer to a + text string, modifies it as necessary and returns a text string. + + Postprocessors must extend markdown.Postprocessor. + + """ + + def run(self, text): + """ + Subclasses of Postprocessor should implement a `run` method, which + takes the html document as a single text string and returns a + (possibly modified) string. + + """ + pass + + +class RawHtmlPostprocessor(Postprocessor): + """ Restore raw html to the document. """ + + def run(self, text): + """ Iterate over html stash and restore "safe" html. """ + for i in range(self.markdown.htmlStash.html_counter): + html, safe = self.markdown.htmlStash.rawHtmlBlocks[i] + if self.markdown.safeMode and not safe: + if str(self.markdown.safeMode).lower() == 'escape': + html = self.escape(html) + elif str(self.markdown.safeMode).lower() == 'remove': + html = '' + else: + html = markdown.HTML_REMOVED_TEXT + if safe or not self.markdown.safeMode: + text = text.replace("<p>%s</p>" % + (markdown.preprocessors.HTML_PLACEHOLDER % i), + html + "\n") + text = text.replace(markdown.preprocessors.HTML_PLACEHOLDER % i, + html) + return text + + def escape(self, html): + """ Basic html escaping """ + html = html.replace('&', '&') + html = html.replace('<', '<') + html = html.replace('>', '>') + return html.replace('"', '"') + + +class AndSubstitutePostprocessor(Postprocessor): + """ Restore valid entities """ + def __init__(self): + pass + + def run(self, text): + text = text.replace(markdown.AMP_SUBSTITUTE, "&") + return text |