aboutsummaryrefslogtreecommitdiffstats
path: root/markdown/postprocessors.py
diff options
context:
space:
mode:
authorYuri Takhteyev <yuri@freewisdom.org>2008-11-18 01:16:55 -0800
committerYuri Takhteyev <yuri@freewisdom.org>2008-11-18 01:16:55 -0800
commit60ef37b47b99fc51683a51640ba98f2d5a25a427 (patch)
tree0c4fcd0cf41a770046896840f168896d1415f786 /markdown/postprocessors.py
parent159a274a977c496434dbc484a1b253663cde4eed (diff)
downloadmarkdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.tar.gz
markdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.tar.bz2
markdown-60ef37b47b99fc51683a51640ba98f2d5a25a427.zip
More refactoring.
Diffstat (limited to 'markdown/postprocessors.py')
-rw-r--r--markdown/postprocessors.py65
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('&', '&amp;')
+ html = html.replace('<', '&lt;')
+ html = html.replace('>', '&gt;')
+ return html.replace('"', '&quot;')
+
+
+class AndSubstitutePostprocessor(Postprocessor):
+ """ Restore valid entities """
+ def __init__(self):
+ pass
+
+ def run(self, text):
+ text = text.replace(markdown.AMP_SUBSTITUTE, "&")
+ return text