parseScriptsAndLimits static method
(LatexNode?, LatexNode?, LimitsMode)
parseScriptsAndLimits(
- LatexParserContext ctx,
- LatexTokenStream stream
Parses following \limits/\nolimits and sub/superscripts. Returns a tuple of (subscript, superscript, limitsMode).
Implementation
static (LatexNode?, LatexNode?, LimitsMode) parseScriptsAndLimits(
LatexParserContext ctx,
LatexTokenStream stream,
) {
LatexNode? subscript;
LatexNode? superscript;
LimitsMode limitsMode = LimitsMode.auto;
while (!stream.isEOF()) {
final token = stream.peek();
if (token is WhitespaceToken) {
final nextToken = stream.peekSkipping((it) => it is WhitespaceToken);
bool shouldContinue = false;
if (nextToken is CommandToken &&
(nextToken.name == "limits" || nextToken.name == "nolimits")) {
shouldContinue = true;
} else if (nextToken is SubscriptToken && subscript == null) {
shouldContinue = true;
} else if (nextToken is SuperscriptToken && superscript == null) {
shouldContinue = true;
}
if (!shouldContinue) {
break;
}
while (stream.peek() is WhitespaceToken) {
stream.advance();
}
} else if (token is CommandToken && token.name == "limits") {
stream.advance();
limitsMode = LimitsMode.limits;
} else if (token is CommandToken && token.name == "nolimits") {
stream.advance();
limitsMode = LimitsMode.noLimits;
} else if (token is SubscriptToken && subscript == null) {
stream.advance();
subscript = parseScriptContent(ctx, stream);
} else if (token is SuperscriptToken && superscript == null) {
stream.advance();
superscript = parseScriptContent(ctx, stream);
} else {
break;
}
}
return (subscript, superscript, limitsMode);
}