parseString function
Implementation
Token? parseString(String input, int index, int line, int column) {
final startIndex = index;
// final buffer = StringBuffer();
var state = _StringState._START_;
while (index < input.length) {
final char = input[index];
switch (state) {
case _StringState._START_:
{
if (char == '"') {
index++;
state = _StringState.START_QUOTE_OR_CHAR;
} else {
return null;
}
break;
}
case _StringState.START_QUOTE_OR_CHAR:
{
if (char == '\\') {
// buffer.write(char);
index++;
state = _StringState.ESCAPE;
} else if (char == '"') {
index++;
return Token(TokenType.STRING, line, column + index - startIndex,
index, safeSubstring(input, startIndex, index));
} else {
// buffer.write(char);
index++;
}
break;
}
case _StringState.ESCAPE:
{
if (escapes.containsKey(char)) {
// buffer.write(char);
index++;
if (char == 'u') {
for (var i = 0; i < 4; i++) {
final curChar = input[index];
if (curChar != '' && isHex(curChar)) {
// buffer.write(char);
index++;
} else {
return null;
}
}
}
state = _StringState.START_QUOTE_OR_CHAR;
} else {
return null;
}
break;
}
}
}
return null;
}