in lib/src/scanner.dart [357:478]
void _fetchNextToken() {
if (!_streamStartProduced) {
_fetchStreamStart();
return;
}
_scanToNextToken();
_staleSimpleKeys();
_unrollIndent(_scanner.column);
if (_scanner.isDone) {
_fetchStreamEnd();
return;
}
if (_scanner.column == 0) {
if (_scanner.peekChar() == PERCENT) {
_fetchDirective();
return;
}
if (_isBlankOrEndAt(3)) {
if (_scanner.matches('---')) {
_fetchDocumentIndicator(TokenType.documentStart);
return;
}
if (_scanner.matches('...')) {
_fetchDocumentIndicator(TokenType.documentEnd);
return;
}
}
}
switch (_scanner.peekChar()) {
case LEFT_SQUARE:
_fetchFlowCollectionStart(TokenType.flowSequenceStart);
return;
case LEFT_CURLY:
_fetchFlowCollectionStart(TokenType.flowMappingStart);
return;
case RIGHT_SQUARE:
_fetchFlowCollectionEnd(TokenType.flowSequenceEnd);
return;
case RIGHT_CURLY:
_fetchFlowCollectionEnd(TokenType.flowMappingEnd);
return;
case COMMA:
_fetchFlowEntry();
return;
case ASTERISK:
_fetchAnchor(anchor: false);
return;
case AMPERSAND:
_fetchAnchor();
return;
case EXCLAMATION:
_fetchTag();
return;
case SINGLE_QUOTE:
_fetchFlowScalar(singleQuote: true);
return;
case DOUBLE_QUOTE:
_fetchFlowScalar();
return;
case VERTICAL_BAR:
if (!_inBlockContext) _invalidScalarCharacter();
_fetchBlockScalar(literal: true);
return;
case RIGHT_ANGLE:
if (!_inBlockContext) _invalidScalarCharacter();
_fetchBlockScalar();
return;
case PERCENT:
case AT:
case GRAVE_ACCENT:
_invalidScalarCharacter();
return;
// These characters may sometimes begin plain scalars.
case HYPHEN:
if (_isPlainCharAt(1)) {
_fetchPlainScalar();
} else {
_fetchBlockEntry();
}
return;
case QUESTION:
if (_isPlainCharAt(1)) {
_fetchPlainScalar();
} else {
_fetchKey();
}
return;
case COLON:
if (!_inBlockContext && _tokens.isNotEmpty) {
// If a colon follows a "JSON-like" value (an explicit map or list, or
// a quoted string) it isn't required to have whitespace after it
// since it unambiguously describes a map.
var token = _tokens.last;
if (token.type == TokenType.flowSequenceEnd ||
token.type == TokenType.flowMappingEnd ||
(token.type == TokenType.scalar &&
(token as ScalarToken).style.isQuoted)) {
_fetchValue();
return;
}
}
if (_isPlainCharAt(1)) {
_fetchPlainScalar();
} else {
_fetchValue();
}
return;
default:
if (!_isNonBreak) _invalidScalarCharacter();
_fetchPlainScalar();
return;
}
}