mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
28 lines
929 B
Python
28 lines
929 B
Python
![]() |
import re
|
||
|
|
||
|
def num_tex_symbols(tex: str) -> int:
|
||
|
"""
|
||
|
This function attempts to estimate the number of symbols that
|
||
|
a given string of tex would produce.
|
||
|
|
||
|
No guarantees this is accurate.
|
||
|
"""
|
||
|
count_to_subtrs = [
|
||
|
(0, [
|
||
|
"emph", "textbf", "big", "Big", "small", "Small",
|
||
|
"quad", "qquad", ",", ";", "ghost",
|
||
|
*"^{} \n\t_",
|
||
|
]),
|
||
|
(2, ["sqrt", "ne"]),
|
||
|
(6, ["underbrace"]),
|
||
|
# Replace all other \expressions (like "\pi") with a single character
|
||
|
# Deliberately put this last.
|
||
|
(1, ["[a-zA-Z]+"])
|
||
|
]
|
||
|
for count, substrs in count_to_subtrs:
|
||
|
# Replace occurances of the given substrings with `count` characters
|
||
|
pattern = "|".join((R"\\" + s for s in substrs ))
|
||
|
tex = re.sub(pattern, "X" * count, tex)
|
||
|
# Ignore various control characters
|
||
|
return sum(map(lambda c: c not in "^{} \n\t_", tex))
|