Index: packages/glob/lib/src/parser.dart |
diff --git a/packages/glob/lib/src/parser.dart b/packages/glob/lib/src/parser.dart |
index 5dac14617bc517d6fe25f73f0f49b35d4ff5a70b..d3c7e1ddd9658a99e1139831fe79ea23854c05a3 100644 |
--- a/packages/glob/lib/src/parser.dart |
+++ b/packages/glob/lib/src/parser.dart |
@@ -2,8 +2,6 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-library glob.single_component; |
- |
import 'package:path/path.dart' as p; |
import 'package:string_scanner/string_scanner.dart'; |
@@ -21,8 +19,12 @@ class Parser { |
/// The path context for the glob. |
final p.Context _context; |
- Parser(String component, this._context) |
- : _scanner = new StringScanner(component); |
+ /// Whether this glob is case-sensitive. |
+ final bool _caseSensitive; |
+ |
+ Parser(String component, this._context, {bool caseSensitive: true}) |
+ : _scanner = new StringScanner(component), |
+ _caseSensitive = caseSensitive; |
/// Parses an entire glob. |
SequenceNode parse() => _parseSequence(); |
@@ -31,7 +33,7 @@ class Parser { |
/// |
/// If [inOptions] is true, this is parsing within an [OptionsNode]. |
SequenceNode _parseSequence({bool inOptions: false}) { |
- var nodes = []; |
+ var nodes = <AstNode>[]; |
if (_scanner.isDone) { |
_scanner.error('expected a glob.', position: 0, length: 0); |
@@ -42,7 +44,7 @@ class Parser { |
nodes.add(_parseNode(inOptions: inOptions)); |
} |
- return new SequenceNode(nodes); |
+ return new SequenceNode(nodes, caseSensitive: _caseSensitive); |
} |
/// Parses an [AstNode]. |
@@ -69,7 +71,9 @@ class Parser { |
/// Returns `null` if there's not one to parse. |
AstNode _parseStar() { |
if (!_scanner.scan('*')) return null; |
- return _scanner.scan('*') ? new DoubleStarNode(_context) : new StarNode(); |
+ return _scanner.scan('*') |
+ ? new DoubleStarNode(_context, caseSensitive: _caseSensitive) |
+ : new StarNode(caseSensitive: _caseSensitive); |
} |
/// Tries to parse an [AnyCharNode]. |
@@ -77,7 +81,7 @@ class Parser { |
/// Returns `null` if there's not one to parse. |
AstNode _parseAnyChar() { |
if (!_scanner.scan('?')) return null; |
- return new AnyCharNode(); |
+ return new AnyCharNode(caseSensitive: _caseSensitive); |
} |
/// Tries to parse an [RangeNode]. |
@@ -95,7 +99,7 @@ class Parser { |
position: _scanner.position - 1); |
} |
- var ranges = []; |
+ var ranges = <Range>[]; |
while (!_scanner.scan(']')) { |
var start = _scanner.position; |
// Allow a backslash to escape a character. |
@@ -125,7 +129,8 @@ class Parser { |
} |
} |
- return new RangeNode(ranges, negated: negated); |
+ return new RangeNode(ranges, |
+ negated: negated, caseSensitive: _caseSensitive); |
} |
/// Tries to parse an [OptionsNode]. |
@@ -135,7 +140,7 @@ class Parser { |
if (!_scanner.scan('{')) return null; |
if (_scanner.matches('}')) _scanner.error('unexpected "}".'); |
- var options = []; |
+ var options = <SequenceNode>[]; |
do { |
options.add(_parseSequence(inOptions: true)); |
} while (_scanner.scan(',')); |
@@ -144,7 +149,7 @@ class Parser { |
if (options.length == 1) _scanner.expect(','); |
_scanner.expect('}'); |
- return new OptionsNode(options); |
+ return new OptionsNode(options, caseSensitive: _caseSensitive); |
} |
/// Parses a [LiteralNode]. |
@@ -168,6 +173,7 @@ class Parser { |
} |
if (!inOptions && _scanner.matches('}')) _scanner.error('unexpected "}"'); |
- return new LiteralNode(buffer.toString(), _context); |
+ return new LiteralNode(buffer.toString(), |
+ context: _context, caseSensitive: _caseSensitive); |
} |
} |