404

[ Avaa Bypassed ]




Upload:

Command:

botdev@3.143.236.11: ~ $
"""
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.

"""

from __future__ import absolute_import
from __future__ import unicode_literals
from collections import OrderedDict
from . import util
from . import odict
import re


def build_postprocessors(md_instance, **kwargs):
    """ Build the default postprocessors for Markdown. """
    postprocessors = odict.OrderedDict()
    postprocessors["raw_html"] = RawHtmlPostprocessor(md_instance)
    postprocessors["amp_substitute"] = AndSubstitutePostprocessor()
    postprocessors["unescape"] = UnescapePostprocessor()
    return postprocessors


class Postprocessor(util.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  # pragma: no cover


class RawHtmlPostprocessor(Postprocessor):
    """ Restore raw html to the document. """

    def run(self, text):
        """ Iterate over html stash and restore "safe" html. """
        replacements = OrderedDict()
        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 = self.markdown.html_replacement_text
            if (self.isblocklevel(html) and
               (safe or not self.markdown.safeMode)):
                replacements["<p>%s</p>" %
                             (self.markdown.htmlStash.get_placeholder(i))] = \
                    html + "\n"
            replacements[self.markdown.htmlStash.get_placeholder(i)] = html

        if replacements:
            pattern = re.compile("|".join(re.escape(k) for k in replacements))
            text = pattern.sub(lambda m: replacements[m.group(0)], text)

        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;')

    def isblocklevel(self, html):
        m = re.match(r'^\<\/?([^ >]+)', html)
        if m:
            if m.group(1)[0] in ('!', '?', '@', '%'):
                # Comment, php etc...
                return True
            return util.isBlockLevel(m.group(1))
        return False


class AndSubstitutePostprocessor(Postprocessor):
    """ Restore valid entities """

    def run(self, text):
        text = text.replace(util.AMP_SUBSTITUTE, "&")
        return text


class UnescapePostprocessor(Postprocessor):
    """ Restore escaped chars """

    RE = re.compile(r'%s(\d+)%s' % (util.STX, util.ETX))

    def unescape(self, m):
        return util.int2str(int(m.group(1)))

    def run(self, text):
        return self.RE.sub(self.unescape, text)

Filemanager

Name Type Size Permission Actions
extensions Folder 0755
__init__.py File 20.31 KB 0644
__init__.pyc File 16.28 KB 0644
__main__.py File 5.02 KB 0644
__main__.pyc File 4.29 KB 0644
__version__.py File 880 B 0644
__version__.pyc File 941 B 0644
blockparser.py File 3.43 KB 0644
blockparser.pyc File 4.65 KB 0644
blockprocessors.py File 22.47 KB 0644
blockprocessors.pyc File 19.21 KB 0644
inlinepatterns.py File 16.73 KB 0644
inlinepatterns.pyc File 20.04 KB 0644
odict.py File 5.9 KB 0644
odict.pyc File 7.78 KB 0644
postprocessors.py File 3.53 KB 0644
postprocessors.pyc File 5.33 KB 0644
preprocessors.py File 14.3 KB 0644
preprocessors.pyc File 10.9 KB 0644
serializers.py File 9.59 KB 0644
serializers.pyc File 6.99 KB 0644
treeprocessors.py File 12.73 KB 0644
treeprocessors.pyc File 11.54 KB 0644
util.py File 5.51 KB 0644
util.pyc File 5.46 KB 0644