in lib/src/mustachio/parser.dart [319:379]
_KeyParseResult _parseKey({bool escape = true}) {
var startIndex = _index;
while (true) {
if (_atEnd) {
return _KeyParseResult.endOfFile;
}
var char = _thisChar;
if ((char >= $a && char <= $z) ||
(char >= $A && char <= $Z) ||
(char >= $0 && char <= $9) ||
char == $underscore ||
char == $dot ||
char == $dollar) {
_index++;
continue;
} else {
break;
}
}
if (_index == startIndex) {
return _KeyParseResult.notKey;
}
var key = template.substring(startIndex, _index);
var span = _sourceFile.span(startIndex, _index);
if (key.length > 1 &&
(key.codeUnitAt(0) == $dot || key.codeUnitAt(key.length - 1) == $dot)) {
// A key cannot start or end with dot.
return _KeyParseResult.notKey;
}
_walkPastWhitespace();
if (_nextAtEnd) {
return _KeyParseResult.endOfFile;
}
var char0 = _thisChar;
var char1 = _nextChar;
if (escape) {
if (char0 == $rbrace && char1 == $rbrace) {
_index += 2;
return _KeyParseResult(_KeyParseResultType.parsedKey, key, span: span);
} else {
return _KeyParseResult.notKey;
}
} else {
if (_nextNextAtEnd) {
return _KeyParseResult.endOfFile;
}
// Need one more right brace.
var char2 = _nextNextChar;
if (char0 == $rbrace && char1 == $rbrace && char2 == $rbrace) {
_index += 3;
return _KeyParseResult(_KeyParseResultType.parsedKey, key, span: span);
} else {
return _KeyParseResult.notKey;
}
}
}