scan method

  1. @override
bool scan(
  1. HtmlExternalScannerState state,
  2. TreeSitterExternalLexer lexer,
  3. List<bool> validSymbols
)
override

Implementation

@override
bool scan(
  HtmlExternalScannerState state,
  TreeSitterExternalLexer lexer,
  List<bool> validSymbols,
) {
  while (_isWhitespace(lexer.lookahead)) {
    lexer.advance(skip: true);
  }

  if (_valid(validSymbols, HtmlExternalToken.rawText.index) &&
      !_valid(validSymbols, HtmlExternalToken.startTagName.index) &&
      !_valid(validSymbols, HtmlExternalToken.endTagName.index)) {
    return _scanRawText(state, lexer);
  }

  switch (lexer.lookahead) {
    case 0x3c: // <
      lexer.markEnd();
      lexer.advance(skip: false);
      if (lexer.lookahead == 0x21) {
        lexer.advance(skip: false);
        return _scanComment(lexer);
      }
      if (_valid(validSymbols, HtmlExternalToken.implicitEndTag.index)) {
        return _scanImplicitEndTag(state, lexer);
      }
      break;
    case 0:
      if (_valid(validSymbols, HtmlExternalToken.implicitEndTag.index)) {
        return _scanImplicitEndTag(state, lexer);
      }
      break;
    case 0x2f: // /
      if (_valid(
        validSymbols,
        HtmlExternalToken.selfClosingTagDelimiter.index,
      )) {
        return _scanSelfClosingTagDelimiter(state, lexer);
      }
      break;
    default:
      if ((_valid(validSymbols, HtmlExternalToken.startTagName.index) ||
              _valid(validSymbols, HtmlExternalToken.endTagName.index)) &&
          !_valid(validSymbols, HtmlExternalToken.rawText.index)) {
        return _valid(validSymbols, HtmlExternalToken.startTagName.index)
            ? _scanStartTagName(state, lexer)
            : _scanEndTagName(state, lexer);
      }
  }
  return false;
}