]>
git.scottworley.com Git - paperdoorknob/blob - texfilter.py
1 # paperdoorknob: Print glowfic
3 # This program is free software: you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License as published by the
5 # Free Software Foundation, version 3.
9 from typing
import Callable
, List
, Tuple
12 TexFilters
: List
[Tuple
[str, Callable
[[bytes], bytes]]] = [
13 # Work around `Extra }, or forgotten \endgroup.`
14 ("FixBareNesting", lambda x
: re
.sub(
15 b
'(^|\n)(\\\\(emph|st){)', b'\\1\\\\hspace{0pt}\\2', x
)),
16 ("UnicodeApprox", lambda x
: re
.sub('≈'.encode('utf-8'), b
'$\\approx$', x
)),
17 ("UnicodeTriangle", lambda x
: re
.sub('◁'.encode('utf-8'), b
'$\\lhd$', x
)),
21 class TexFilterError(Exception):
25 def ApplyTexFilters(filter_list
: str, data
: bytes) -> bytes:
26 for filter_name
in filter_list
.split(','):
27 filters
= [f
for (name
, f
) in TexFilters
if name
== filter_name
]
29 raise TexFilterError(f
"Unknown Tex filter: {filter_name}")
32 f
"Multiple Tex filters with the same name!?: {filter_name}")
33 data
= filters
[0](data
)