parseScriptGroup static method

(LatexNode?, LatexNode?) parseScriptGroup(
  1. LatexParserContext ctx,
  2. LatexTokenStream stream
)

Parses a script group {_a^b} and returns (sub, sup).

Implementation

static (LatexNode?, LatexNode?) parseScriptGroup(
  LatexParserContext ctx,
  LatexTokenStream stream,
) {
  if (stream.peek() is! LeftBraceToken) {
    return (null, null);
  }
  stream.advance(); // consume '{'

  LatexNode? sub;
  LatexNode? sup;

  while (!stream.isEOF() && stream.peek() is! RightBraceToken) {
    final token = stream.peek();
    if (token is SubscriptToken) {
      stream.advance();
      sub = ctx.parseFactor();
    } else if (token is SuperscriptToken) {
      stream.advance();
      sup = ctx.parseFactor();
    } else if (token is WhitespaceToken) {
      stream.advance();
    } else {
      stream.advance();
    }
  }

  if (!stream.isEOF()) {
    stream.advance(); // consume '}'
  }

  return (sub, sup);
}