in lib/src/parser.dart [90:132]
AstNode? _parseRange() {
if (!_scanner.scan('[')) return null;
if (_scanner.matches(']')) _scanner.error('unexpected "]".');
var negated = _scanner.scan('!') || _scanner.scan('^');
int readRangeChar() {
var char = _scanner.readChar();
if (negated || char != _slash) return char;
_scanner.error('"/" may not be used in a range.',
position: _scanner.position - 1);
}
var ranges = <Range>[];
while (!_scanner.scan(']')) {
var start = _scanner.position;
// Allow a backslash to escape a character.
_scanner.scan('\\');
var char = readRangeChar();
if (_scanner.scan('-')) {
if (_scanner.matches(']')) {
ranges.add(Range.singleton(char));
ranges.add(Range.singleton(_hyphen));
continue;
}
// Allow a backslash to escape a character.
_scanner.scan('\\');
var end = readRangeChar();
if (end < char) {
_scanner.error('Range out of order.',
position: start, length: _scanner.position - start);
}
ranges.add(Range(char, end));
} else {
ranges.add(Range.singleton(char));
}
}
return RangeNode(ranges, negated: negated, caseSensitive: _caseSensitive);
}