"""Latex filters. Module of useful filters for processing Latex within Jinja latex templates. """ #----------------------------------------------------------------------------- # Copyright (c) 2013, the IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- import re #----------------------------------------------------------------------------- # Globals and constants #----------------------------------------------------------------------------- MARKDOWN_IMAGE_RE = re.compile(r'!\[(?P.*?)\]\(/?files/(?P.*?)\)') LATEX_RE_SUBS = ( (re.compile(r'\.\.\.+'), r'\\ldots'), ) # Latex substitutions for escaping latex. # see: http://stackoverflow.com/questions/16259923/how-can-i-escape-latex-special-characters-inside-django-templates LATEX_SUBS = { '&': r'\&', '%': r'\%', '$': r'\$', '#': r'\#', '_': r'\_', '{': r'\{', '}': r'\}', '~': r'\textasciitilde{}', '^': r'\^{}', '\\': r'\textbackslash{}', } #----------------------------------------------------------------------------- # Functions #----------------------------------------------------------------------------- __all__ = ['escape_latex', 'strip_url_static_file_prefix'] def escape_latex(text): """ Escape characters that may conflict with latex. Parameters ---------- text : str Text containing characters that may conflict with Latex """ text = ''.join(LATEX_SUBS.get(c, c) for c in text) for pattern, replacement in LATEX_RE_SUBS: text = pattern.sub(replacement, text) return text def strip_url_static_file_prefix(text): text = MARKDOWN_IMAGE_RE.sub(r'![\1](\2)', text) return text