@@ -1865,6 +1865,8 @@ def csnames(group, names):
18651865 "|" .join (map (re .escape , tex2uni )))
18661866 )("sym" ).leaveWhitespace ()
18671867 p .unknown_symbol = Regex (r"\\[A-Za-z]+" )("name" )
1868+ def unclosed_group (self , s , loc , toks ):
1869+ raise ParseFatalException (s , len (s ), "Expected '}'" )
18681870
18691871 p .font = csnames ("font" , self ._fontnames )
18701872 p .start_group = Optional (r"\math" + oneOf (self ._fontnames )("font" )) + "{"
@@ -1894,6 +1896,7 @@ def csnames(group, names):
18941896 p .function = csnames ("name" , self ._function_names )
18951897
18961898 p .group = p .start_group + ZeroOrMore (p .token )("group" ) + p .end_group
1899+ p .unclosed_group = (p .start_group + ZeroOrMore (p .token )("group" ) + StringEnd ())
18971900
18981901 p .frac = cmd (r"\frac" , p .required_group ("num" ) + p .required_group ("den" ))
18991902 p .dfrac = cmd (r"\dfrac" , p .required_group ("num" ) + p .required_group ("den" ))
@@ -1942,6 +1945,7 @@ def csnames(group, names):
19421945 p .token <<= (
19431946 p .simple
19441947 | p .auto_delim
1948+ | p .unclosed_group
19451949 | p .unknown_symbol # Must be last
19461950 )
19471951
@@ -2145,6 +2149,9 @@ def symbol(self, s, loc, toks):
21452149 def unknown_symbol (self , s , loc , toks ):
21462150 raise ParseFatalException (s , loc , f"Unknown symbol: { toks ['name' ]} " )
21472151
2152+ def unclosed_group (self , s , loc , toks ):
2153+ raise ParseFatalException (s , len (s ), "Expected '}'" )
2154+
21482155 _accent_map = {
21492156 r'hat' : r'\circumflexaccent' ,
21502157 r'breve' : r'\combiningbreve' ,
0 commit comments