/usr/share/pyshared/webhelpers/html/converters.py is in python-webhelpers 1.3-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | """Functions that convert from text markup languages to HTML and back.
"""
import re
from webhelpers.html import HTML, escape, literal, lit_sub
import webhelpers.textile as textile
# render() and sanitize() are imported from the private module 'render'.
from webhelpers.html.render import render, sanitize
__all__ = [
"format_paragraphs",
"markdown",
"nl2br",
"render",
"sanitize",
"textilize",
]
_universal_newline_rx = re.compile(R"\r\n|\n|\r") # All types of newline.
_paragraph_rx = re.compile(R"\n{2,}") # Paragraph break: 2 or more newlines.
br = HTML.br() + "\n"
def markdown(text, markdown=None, **kwargs):
"""Format the text to HTML with Markdown formatting.
Markdown is a wiki-like text markup language, originally written by
John Gruber for Perl. The helper converts Markdown text to HTML.
There are at least two Python implementations of Markdown.
Markdown <http://www.freewisdom.org/projects/python-markdown/>`_is the
original port, and version 2.x contains extensions for footnotes, RSS, etc.
`Markdown2 <http://code.google.com/p/python-markdown2/>`_ is another port
which claims to be faster and to handle edge cases better.
You can pass the desired Markdown module as the ``markdown``
argument, or the helper will try to import ``markdown``. If neither is
available, it will fall back to ``webhelpers.markdown``, which is
Freewisdom's Markdown 1.7 without extensions.
IMPORTANT:
If your source text is untrusted and may contain malicious HTML markup,
pass ``safe_mode="escape"`` to escape it, ``safe_mode="replace"`` to
replace it with a scolding message, or ``safe_mode="remove"`` to strip it.
"""
if not markdown:
markdown = _get_markdown_module()
return literal(markdown.markdown(text, **kwargs))
def _get_markdown_module():
try:
import markdown
except ImportError:
import webhelpers.markdown as markdown
return markdown
def textilize(text, sanitize=False):
"""Format the text to HTML with Textile formatting.
This function uses the `PyTextile library <http://dealmeida.net/>`_
which is included with WebHelpers.
Additionally, the output can be sanitized which will fix tags like
<img />, <br /> and <hr /> for proper XHTML output.
"""
texer = textile.Textiler(text)
return literal(texer.process(sanitize=sanitize))
def nl2br(text):
"""Insert a <br /> before each newline.
"""
if text is None:
return literal("")
text = lit_sub(_universal_newline_rx, "\n", text)
text = HTML(text).replace("\n", br)
return text
def format_paragraphs(text, preserve_lines=False):
"""Convert text to HTML paragraphs.
``text``:
the text to convert. Split into paragraphs at blank lines (i.e.,
wherever two or more consecutive newlines appear), and wrap each
paragraph in a <p>.
``preserve_lines``:
If true, add <br /> before each single line break
"""
if text is None:
return literal("")
text = lit_sub(_universal_newline_rx, "\n", text)
paragraphs = _paragraph_rx.split(text)
for i, para in enumerate(paragraphs):
if preserve_lines:
para = HTML(para)
para = para.replace("\n", br)
paragraphs[i] = HTML.p(para)
return "\n\n".join(paragraphs)
|