blob: 12952e88151139317a443ca6a25befc148d52330 [file] [log] [blame]
// 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;
/// 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;
}
/// 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]}");