readMacroName method

Token? readMacroName()

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;
}