parseAsync method
Experimental. Not yet fully implemented
Implementation
@override
AsyncResult<String> parseAsync(State<ChunkedData<StringReader>> state) {
final result = AsyncResult<String>();
if (!backtrack(state)) {
result.ok = false;
return result;
}
final input = state.input;
final start = input.start;
input.buffering++;
final data = input.data;
final source = data.source;
final end = input.end;
var ok = true;
int? c;
while (state.pos < end) {
c = source.runeAt(state.pos - start);
if (!f(c)) {
ok = false;
break;
}
state.pos += c > 0xffff ? 2 : 1;
}
if (!ok) {
input.buffering--;
result.value = const Result('');
result.ok = true;
input.handler = result.handler;
return result;
}
void parse() {
final data = input.data;
final source = data.source;
final end = input.end;
var ok = true;
int? c;
while (state.pos < end) {
c = source.runeAt(state.pos - start);
if (!f(c)) {
ok = false;
break;
}
state.pos += c > 0xffff ? 2 : 1;
}
if (ok && !input.isClosed) {
input.sleep = true;
input.handler = parse;
return;
}
input.buffering--;
result.value = const Result('');
result.ok = true;
input.handler = result.handler;
}
parse();
return result;
}