Browse Source

Use str.replace() instead of regex. #13

pull/28/head
Jan Černohorský 1 year ago
parent
commit
516c2fb8e0
  1. 13
      src/formatitko/html_generator.py
  2. 24
      src/formatitko/latex_generator.py

13
src/formatitko/html_generator.py

@ -4,7 +4,6 @@ from panflute import TableRow, TableCell, Caption, Doc
from panflute import ListContainer, Element from panflute import ListContainer, Element
from typing import Union, Dict from typing import Union, Dict
import re
import os import os
import io import io
import warnings import warnings
@ -33,12 +32,12 @@ class HTMLGenerator(OutputGenerator):
super().generate(e) super().generate(e)
def escape_special_chars(self, text: str) -> str: def escape_special_chars(self, text: str) -> str:
text = re.sub(re.compile(r"&"), "&", text) text = text.replace("&", "&")
text = re.sub(re.compile(r"<"), "&lt;", text) text = text.replace("<", "&lt;")
text = re.sub(re.compile(r">"), "&rt;", text) text = text.replace(">", "&rt;")
text = re.sub(re.compile(r"\""), "&quot;", text) text = text.replace("\"", "&quot;")
text = re.sub(re.compile(r"'"), "&#39;", text) text = text.replace("'", "&#39;")
# text = re.sub(re.compile(r" '), "&nbsp;", text) # Don't replace no-break spaces with HTML escapes, because we trust unicode? # text = text.replace(" ", "&nbsp;") # Don't replace no-break spaces with HTML escapes, because we trust unicode?
return text return text
def stag(self, tag: str, attributes: Dict[str,str]={}) -> str: def stag(self, tag: str, attributes: Dict[str,str]={}) -> str:

24
src/formatitko/latex_generator.py

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

Loading…
Cancel
Save