@@ -1865,6 +1865,8 @@ def csnames(group, names):
1865
1865
"|" .join (map (re .escape , tex2uni )))
1866
1866
)("sym" ).leaveWhitespace ()
1867
1867
p .unknown_symbol = Regex (r"\\[A-Za-z]+" )("name" )
1868
+ def unclosed_group (self , s , loc , toks ):
1869
+ raise ParseFatalException (s , len (s ), "Expected '}'" )
1868
1870
1869
1871
p .font = csnames ("font" , self ._fontnames )
1870
1872
p .start_group = Optional (r"\math" + oneOf (self ._fontnames )("font" )) + "{"
@@ -1894,6 +1896,7 @@ def csnames(group, names):
1894
1896
p .function = csnames ("name" , self ._function_names )
1895
1897
1896
1898
p .group = p .start_group + ZeroOrMore (p .token )("group" ) + p .end_group
1899
+ p .unclosed_group = (p .start_group + ZeroOrMore (p .token )("group" ) + StringEnd ())
1897
1900
1898
1901
p .frac = cmd (r"\frac" , p .required_group ("num" ) + p .required_group ("den" ))
1899
1902
p .dfrac = cmd (r"\dfrac" , p .required_group ("num" ) + p .required_group ("den" ))
@@ -1942,6 +1945,7 @@ def csnames(group, names):
1942
1945
p .token <<= (
1943
1946
p .simple
1944
1947
| p .auto_delim
1948
+ | p .unclosed_group
1945
1949
| p .unknown_symbol # Must be last
1946
1950
)
1947
1951
@@ -2145,6 +2149,9 @@ def symbol(self, s, loc, toks):
2145
2149
def unknown_symbol (self , s , loc , toks ):
2146
2150
raise ParseFatalException (s , loc , f"Unknown symbol: { toks ['name' ]} " )
2147
2151
2152
+ def unclosed_group (self , s , loc , toks ):
2153
+ raise ParseFatalException (s , len (s ), "Expected '}'" )
2154
+
2148
2155
_accent_map = {
2149
2156
r'hat' : r'\circumflexaccent' ,
2150
2157
r'breve' : r'\combiningbreve' ,
0 commit comments