readMacroName method
Reads a control-sequence name, either bare (\foo) or braced
({\foo}). Returns null (and leaves input) when neither is present.
Implementation
Token? readMacroName() {
skipRawSpaces();
final t = peekRaw();
if (t.isControl || (t.kind == TokenKind.character && t.text == '~')) {
return popRaw();
}
if (t.kind == TokenKind.character && t.text == '{') {
popRaw();
skipRawSpaces();
final name = popRaw();
skipRawSpaces();
final close = peekRaw();
if (close.kind == TokenKind.character && close.text == '}') popRaw();
if (name.isControl) return name;
return null;
}
return null;
}