Dashboard
PHP:
8.2.30
OS:
Linux
User:
dh_nv8b2m
/
/
usr
/
lib
/
python3
/
dist-packages
/
sphinx
/
util
π€ Upload
π New File
π New Folder
Close
Editing: texescape.py
""" sphinx.util.texescape ~~~~~~~~~~~~~~~~~~~~~ TeX escaping helper. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re from typing import Dict tex_replacements = [ # map TeX special chars ('$', r'\$'), ('%', r'\%'), ('&', r'\&'), ('#', r'\#'), ('_', r'\_'), ('{', r'\{'), ('}', r'\}'), ('\\', r'\textbackslash{}'), ('~', r'\textasciitilde{}'), ('^', r'\textasciicircum{}'), # map chars to avoid mis-interpretation in LaTeX ('[', r'{[}'), (']', r'{]}'), # map special Unicode characters to TeX commands ('β', r'\(\checkmark\)'), ('β', r'\(\pmb{\checkmark}\)'), ('β', r'\(\times\)'), ('β', r'\(\pmb{\times}\)'), # used to separate -- in options ('ο»Ώ', r'{}'), # map some special Unicode characters to similar ASCII ones # (even for Unicode LaTeX as may not be supported by OpenType font) ('β½', r'\_'), ('β―', r'e'), ('β ', r'i'), # Greek alphabet not escaped: pdflatex handles it via textalpha and inputenc # OHM SIGN U+2126 is handled by LaTeX textcomp package ] # A map to avoid TeX ligatures or character replacements in PDF output # xelatex/lualatex/uplatex are handled differently (#5790, #6888) ascii_tex_replacements = [ # Note: the " renders curly in OT1 encoding but straight in T1, T2A, LY1... # escaping it to \textquotedbl would break documents using OT1 # Sphinx does \shorthandoff{"} to avoid problems with some languages # There is no \text... LaTeX escape for the hyphen character - ('-', r'\sphinxhyphen{}'), # -- and --- are TeX ligatures # ,, is a TeX ligature in T1 encoding, but escaping the comma adds # complications (whether by {}, or a macro) and is not done # the next two require textcomp package ("'", r'\textquotesingle{}'), # else ' renders curly, and '' is a ligature ('`', r'\textasciigrave{}'), # else \` and \`\` render curly ('<', r'\textless{}'), # < is inv. exclam in OT1, << is a T1-ligature ('>', r'\textgreater{}'), # > is inv. quest. mark in 0T1, >> a T1-ligature ] # A map Unicode characters to LaTeX representation # (for LaTeX engines which don't support unicode) unicode_tex_replacements = [ # map some more common Unicode characters to TeX commands ('ΒΆ', r'\P{}'), ('Β§', r'\S{}'), ('β¬', r'\texteuro{}'), ('β', r'\(\infty\)'), ('Β±', r'\(\pm\)'), ('β', r'\(\rightarrow\)'), ('β£', r'\(\rightarrow\)'), ('β', r'\textendash{}'), # superscript ('β°', r'\(\sp{\text{0}}\)'), ('ΒΉ', r'\(\sp{\text{1}}\)'), ('Β²', r'\(\sp{\text{2}}\)'), ('Β³', r'\(\sp{\text{3}}\)'), ('β΄', r'\(\sp{\text{4}}\)'), ('β΅', r'\(\sp{\text{5}}\)'), ('βΆ', r'\(\sp{\text{6}}\)'), ('β·', r'\(\sp{\text{7}}\)'), ('βΈ', r'\(\sp{\text{8}}\)'), ('βΉ', r'\(\sp{\text{9}}\)'), # subscript ('β', r'\(\sb{\text{0}}\)'), ('β', r'\(\sb{\text{1}}\)'), ('β', r'\(\sb{\text{2}}\)'), ('β', r'\(\sb{\text{3}}\)'), ('β', r'\(\sb{\text{4}}\)'), ('β ', r'\(\sb{\text{5}}\)'), ('β', r'\(\sb{\text{6}}\)'), ('β', r'\(\sb{\text{7}}\)'), ('β', r'\(\sb{\text{8}}\)'), ('β', r'\(\sb{\text{9}}\)'), ] # TODO: this should be called tex_idescape_map because its only use is in # sphinx.writers.latex.LaTeXTranslator.idescape() # %, {, }, \, #, and ~ are the only ones which must be replaced by _ character # It would be simpler to define it entirely here rather than in init(). # Unicode replacements are superfluous, as idescape() uses backslashreplace tex_replace_map: Dict[int, str] = {} _tex_escape_map: Dict[int, str] = {} _tex_escape_map_without_unicode: Dict[int, str] = {} _tex_hlescape_map: Dict[int, str] = {} _tex_hlescape_map_without_unicode: Dict[int, str] = {} def escape(s: str, latex_engine: str = None) -> str: """Escape text for LaTeX output.""" if latex_engine in ('lualatex', 'xelatex'): # unicode based LaTeX engine return s.translate(_tex_escape_map_without_unicode) else: return s.translate(_tex_escape_map) def hlescape(s: str, latex_engine: str = None) -> str: """Escape text for LaTeX highlighter.""" if latex_engine in ('lualatex', 'xelatex'): # unicode based LaTeX engine return s.translate(_tex_hlescape_map_without_unicode) else: return s.translate(_tex_hlescape_map) def escape_abbr(text: str) -> str: """Adjust spacing after abbreviations. Works with @ letter or other.""" return re.sub(r'\.(?=\s|$)', r'.\@{}', text) def init() -> None: for a, b in tex_replacements: _tex_escape_map[ord(a)] = b _tex_escape_map_without_unicode[ord(a)] = b tex_replace_map[ord(a)] = '_' # no reason to do this for _tex_escape_map_without_unicode for a, b in ascii_tex_replacements: _tex_escape_map[ord(a)] = b # but the hyphen has a specific PDF bookmark problem # https://github.com/latex3/hyperref/issues/112 _tex_escape_map_without_unicode[ord('-')] = r'\sphinxhyphen{}' for a, b in unicode_tex_replacements: _tex_escape_map[ord(a)] = b # This is actually unneeded: tex_replace_map[ord(a)] = '_' for a, b in tex_replacements: if a in '[]{}\\': continue _tex_hlescape_map[ord(a)] = b _tex_hlescape_map_without_unicode[ord(a)] = b for a, b in unicode_tex_replacements: _tex_hlescape_map[ord(a)] = b
Save
Cancel