Viewing file: postprocessors.py (2.41 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
""" 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
|