diff options
author | Yuri Takhteyev <yuri@freewisdom.org> | 2008-11-18 01:16:55 -0800 |
---|---|---|
committer | Yuri Takhteyev <yuri@freewisdom.org> | 2008-11-18 01:16:55 -0800 |
commit | 60ef37b47b99fc51683a51640ba98f2d5a25a427 (patch) | |
tree | 0c4fcd0cf41a770046896840f168896d1415f786 /markdown/postprocessors.py | |
parent | 159a274a977c496434dbc484a1b253663cde4eed (diff) | |
download | markdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.tar.gz markdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.tar.bz2 markdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.zip |
More refactoring.
Diffstat (limited to 'markdown/postprocessors.py')
-rw-r--r-- | markdown/postprocessors.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/markdown/postprocessors.py b/markdown/postprocessors.py new file mode 100644 index 0000000..cd872cf --- /dev/null +++ b/markdown/postprocessors.py @@ -0,0 +1,65 @@ + +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.linepreprocessors.HTML_PLACEHOLDER % i), + html + "\n") + text = text.replace(markdown.linepreprocessors.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 |