Index: mojo/public/dart/third_party/glob/lib/src/utils.dart |
diff --git a/mojo/public/dart/third_party/glob/lib/src/utils.dart b/mojo/public/dart/third_party/glob/lib/src/utils.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f17f2ed8cc64a5216c72d8ce41b1989678fb96f1 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/glob/lib/src/utils.dart |
@@ -0,0 +1,78 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// 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.utils; |
+ |
+import 'package:path/path.dart' as p; |
+ |
+/// A range from [min] to [max], inclusive. |
+class Range { |
+ /// The minimum value included by the range. |
+ final int min; |
+ |
+ /// The maximum value included by the range. |
+ final int max; |
+ |
+ /// Whether this range covers only a single number. |
+ bool get isSingleton => min == max; |
+ |
+ Range(this.min, this.max); |
+ |
+ /// Returns a range that covers only [value]. |
+ Range.singleton(int value) |
+ : this(value, value); |
+ |
+ /// Whether [this] contains [value]. |
+ bool contains(int value) => value >= min && value <= max; |
+ |
+ bool operator==(Object other) => other is Range && |
+ other.min == min && other.max == max; |
+ |
+ int get hashCode => 3 * min + 7 * max; |
+} |
+ |
+/// An implementation of [Match] constructed by [Glob]s. |
+class GlobMatch implements Match { |
+ final String input; |
+ final Pattern pattern; |
+ final int start = 0; |
+ |
+ int get end => input.length; |
+ int get groupCount => 0; |
+ |
+ GlobMatch(this.input, this.pattern); |
+ |
+ String operator [](int group) => this.group(group); |
+ |
+ String group(int group) { |
+ if (group != 0) throw new RangeError.range(group, 0, 0); |
+ return input; |
+ } |
+ |
+ List<String> groups(List<int> groupIndices) => |
+ groupIndices.map((index) => group(index)).toList(); |
+} |
+ |
+final _quote = new RegExp(r"[+*?{}|[\]\\().^$-]"); |
+ |
+/// Returns [contents] with characters that are meaningful in regular |
+/// expressions backslash-escaped. |
+String regExpQuote(String contents) => |
+ contents.replaceAllMapped(_quote, (char) => "\\${char[0]}"); |
+ |
+/// Returns [path] with all its separators replaced with forward slashes. |
+/// |
+/// This is useful when converting from Windows paths to globs. |
+String separatorToForwardSlash(String path) { |
+ if (p.style != p.Style.windows) return path; |
+ return path.replaceAll('\\', '/'); |
+} |
+ |
+/// Returns [path] which follows [context] converted to the POSIX format that |
+/// globs match against. |
+String toPosixPath(p.Context context, String path) { |
+ if (context.style == p.Style.windows) return path.replaceAll('\\', '/'); |
+ if (context.style == p.Style.url) return Uri.decodeFull(path); |
+ return path; |
+} |