shinypress / shinypress /

Full commit
import codecs

from shinypress.utils import group_paragraphs

def replace_all(s, o, n):
    while o in s:
        s = s.replace(o, n)
    return s

def latexify(content):
    Turn Pango markup into latex code.
    Warning: does not check validity of markup!
    Warning: this also allows LaTeX code straight through
        (this is an intentional bug?)
    replacements = {
        '#': r'\#',

        '<sc>': r'\textsc{',
        '</sc>': '}',

        '<sup>': r'\textsuperscript{',
        '</sup>': '}',

        '<tt>': r'\texttt{',
        '</tt>': '}',

        '<i>': r'\emph{',
        '</i>': '}',

        '<u>': r'\uline{',
        '</u>': '}',

        '<b>': r'\textbf{',
        '</b>': '}',

    # replace all line breaks with LaTeX line breaks
    content = content.replace('\n', r'\\')
    content = content.replace('<br>', r'\\')

    # replace paragraphs with LaTeX paragraph breaks
    content = content.replace(r'<p>', '\n\n')

    # remove line breaks next to paragraph breaks
    content = replace_all(content, r'\\''\n', '\n')
    content = replace_all(content, '\n'r'\\', '\n')

    # prettify line breaks
    content = content.replace(r'\\', r'\\''\n')

    for old, new in replacements.items():
        content = content.replace(old, new)

    return content

def render(filename):
    source =, 'rU', 'utf-8')
    source = (line[:-1] for line in source)
    paragraphs = ('\n'.join(para) for para in group_paragraphs(source))
    title =
    return (template.render(title=title, text=paragraphs), [])

def title(title):
    return (r'\frame[plain]{\frametitle{%s}}' % title, [])