| OLD | NEW |
| 1 // Copyright 2013 Google Inc. All Rights Reserved. | 1 // Copyright 2013 Google Inc. All Rights Reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 part of quiver.pattern; | 15 part of quiver.pattern; |
| 16 | 16 |
| 17 // TODO(justin): add more detailed documentation and explain how matching | 17 // TODO(justin): add more detailed documentation and explain how matching |
| 18 // differs or is similar to globs in Python and various shells. | 18 // differs or is similar to globs in Python and various shells. |
| 19 /** | 19 /// A [Pattern] that matches against filesystem path-like strings with |
| 20 * A [Pattern] that matches against filesystem path-like strings with | 20 /// wildcards. |
| 21 * wildcards. | 21 /// |
| 22 * | 22 /// The pattern matches strings as follows: |
| 23 * The pattern matches strings as follows: | 23 /// * The whole string must match, not a substring |
| 24 * * The whole string must match, not a substring | 24 /// * Any non wildcard is matched as a literal |
| 25 * * Any non wildcard is matched as a literal | 25 /// * '*' matches one or more characters except '/' |
| 26 * * '*' matches one or more characters except '/' | 26 /// * '?' matches exactly one character except '/' |
| 27 * * '?' matches exactly one character except '/' | 27 /// * '**' matches one or more characters including '/' |
| 28 * * '**' matches one or more characters including '/' | |
| 29 */ | |
| 30 class Glob implements Pattern { | 28 class Glob implements Pattern { |
| 31 final RegExp regex; | 29 final RegExp regex; |
| 32 final String pattern; | 30 final String pattern; |
| 33 | 31 |
| 34 Glob(String pattern) | 32 Glob(String pattern) |
| 35 : pattern = pattern, | 33 : pattern = pattern, |
| 36 regex = _regexpFromGlobPattern(pattern); | 34 regex = _regexpFromGlobPattern(pattern); |
| 37 | 35 |
| 38 Iterable<Match> allMatches(String str, [int start = 0]) => | 36 Iterable<Match> allMatches(String str, [int start = 0]) => |
| 39 regex.allMatches(str, start); | 37 regex.allMatches(str, start); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 67 } | 65 } |
| 68 } else if (c == '?') { | 66 } else if (c == '?') { |
| 69 sb.write('[^/]'); | 67 sb.write('[^/]'); |
| 70 } else { | 68 } else { |
| 71 sb.write(c); | 69 sb.write(c); |
| 72 } | 70 } |
| 73 } | 71 } |
| 74 sb.write(r'$'); | 72 sb.write(r'$'); |
| 75 return new RegExp(sb.toString()); | 73 return new RegExp(sb.toString()); |
| 76 } | 74 } |
| OLD | NEW |