scan method
bool
scan(
- JanetSimpleExternalScannerState state,
- TreeSitterExternalLexer lexer,
- List<
bool> validSymbols
override
Implementation
@override
bool scan(
JanetSimpleExternalScannerState state,
TreeSitterExternalLexer lexer,
List<bool> validSymbols,
) {
// Exact counterpart of the pinned scanner's iswspace loop under the C
// locale used by the native grammar build.
while (_isWhitespace(lexer.lookahead)) {
lexer.advance(skip: true);
}
if (!_valid(validSymbols, JanetSimpleExternalToken.longBufferLiteral) &&
!_valid(validSymbols, JanetSimpleExternalToken.longStringLiteral)) {
return false;
}
if (lexer.lookahead == 0x40) {
lexer.setResultSymbol(
symbols[JanetSimpleExternalToken.longBufferLiteral.index],
);
lexer.advance(skip: false);
} else {
lexer.setResultSymbol(
symbols[JanetSimpleExternalToken.longStringLiteral.index],
);
}
if (lexer.lookahead != 0x60) return false;
lexer.advance(skip: false);
var openingBackticks = 1;
while (true) {
if (lexer.isEof) return false;
if (lexer.lookahead == 0x60) {
openingBackticks++;
lexer.advance(skip: false);
continue;
}
lexer.advance(skip: false);
break;
}
var consecutiveBackticks = 0;
while (true) {
if (lexer.isEof) return false;
if (lexer.lookahead == 0x60) {
consecutiveBackticks++;
if (consecutiveBackticks == openingBackticks) {
lexer.advance(skip: false);
return true;
}
} else {
consecutiveBackticks = 0;
}
lexer.advance(skip: false);
}
}