|
|
@ -10,8 +10,6 @@ from .context import Group |
|
|
|
from .output_generator import OutputGenerator |
|
|
|
from .images import ImageProcessor |
|
|
|
|
|
|
|
import re |
|
|
|
|
|
|
|
class LaTeXGenerator(OutputGenerator): |
|
|
|
def __init__(self, output_file, imageProcessor: ImageProcessor, *args, **kwargs): |
|
|
|
self.imageProcessor = imageProcessor |
|
|
@ -23,17 +21,17 @@ class LaTeXGenerator(OutputGenerator): |
|
|
|
super().generate(e) |
|
|
|
|
|
|
|
def escape_special_chars(self, text: str) -> str: |
|
|
|
text = re.sub(re.compile(r"&"), "\\&", text) |
|
|
|
text = re.sub(re.compile(r"%"), "\\%", text) |
|
|
|
text = re.sub(re.compile(r"\$"), "\\$", text) |
|
|
|
text = re.sub(re.compile(r"#"), "\\#", text) |
|
|
|
text = re.sub(re.compile(r"_"), "\\_", text) |
|
|
|
text = re.sub(re.compile(r"\{"), "\\{", text) |
|
|
|
text = re.sub(re.compile(r"\}"), "\\}", text) |
|
|
|
text = re.sub(re.compile(r"~"), "\\textasciitilde{}", text) |
|
|
|
text = re.sub(re.compile(r"\^"), "\\textasciicircum{}", text) |
|
|
|
text = re.sub(re.compile(r"\\"), "\\textbackslash{}", text) |
|
|
|
text = re.sub(re.compile(r" "), "~", text) # We use unicode no-break spaces to force nbsp in output |
|
|
|
text = text.replace("&", "\\&") |
|
|
|
text = text.replace("%", "\\%") |
|
|
|
text = text.replace("$", "\\$") |
|
|
|
text = text.replace("#", "\\#") |
|
|
|
text = text.replace("_", "\\_") |
|
|
|
text = text.replace("{", "\\{") |
|
|
|
text = text.replace("}", "\\}") |
|
|
|
text = text.replace("~", "\\textasciitilde{}") |
|
|
|
text = text.replace("^", "\\textasciicircum{}") |
|
|
|
text = text.replace("\\", "\\textbackslash{}") |
|
|
|
text = text.replace(" ", "~") # We use unicode no-break spaces to force nbsp in output |
|
|
|
return text |
|
|
|
|
|
|
|
def stag(self, tag: str, attributes: Dict[str,str]={}) -> str: |
|
|
|