# shinypress / shinypress / pango.py

  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 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'\#', '': r'\textsc{', '': '}', '': r'\textsuperscript{', '': '}', '': r'\texttt{', '': '}', '': r'\emph{', '': '}', '': r'\uline{', '': '}', '': r'\textbf{', '': '}', } # replace all line breaks with LaTeX line breaks content = content.replace('\n', r'\\') content = content.replace('
', r'\\') # replace paragraphs with LaTeX paragraph breaks content = content.replace(r'

', '\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 = codecs.open(filename, 'rU', 'utf-8') source = (line[:-1] for line in source) paragraphs = ('\n'.join(para) for para in group_paragraphs(source)) title = paragraphs.next() return (template.render(title=title, text=paragraphs), []) def title(title): return (r'\frame[plain]{\frametitle{%s}}' % title, [])