OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library glob; | 5 library glob; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 | 9 |
10 import 'package:path/path.dart' as p; | 10 import 'package:path/path.dart' as p; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 bool matches(String path) => matchAsPrefix(path) != null; | 148 bool matches(String path) => matchAsPrefix(path) != null; |
149 | 149 |
150 Match matchAsPrefix(String path, [int start = 0]) { | 150 Match matchAsPrefix(String path, [int start = 0]) { |
151 // Globs are like anchored RegExps in that they only match entire paths, so | 151 // Globs are like anchored RegExps in that they only match entire paths, so |
152 // if the match starts anywhere after the first character it can't succeed. | 152 // if the match starts anywhere after the first character it can't succeed. |
153 if (start != 0) return null; | 153 if (start != 0) return null; |
154 | 154 |
155 if (_patternCanMatchAbsolute && | 155 if (_patternCanMatchAbsolute && |
156 (_contextIsAbsolute || context.isAbsolute(path))) { | 156 (_contextIsAbsolute || context.isAbsolute(path))) { |
157 var absolutePath = context.normalize(context.absolute(path)); | 157 var absolutePath = context.normalize(context.absolute(path)); |
158 if (_ast.matches(_toPosixPath(absolutePath))) { | 158 if (_ast.matches(toPosixPath(context, absolutePath))) { |
159 return new GlobMatch(path, this); | 159 return new GlobMatch(path, this); |
160 } | 160 } |
161 } | 161 } |
162 | 162 |
163 if (_patternCanMatchRelative) { | 163 if (_patternCanMatchRelative) { |
164 var relativePath = context.relative(path); | 164 var relativePath = context.relative(path); |
165 if (_ast.matches(_toPosixPath(relativePath))) { | 165 if (_ast.matches(toPosixPath(context, relativePath))) { |
166 return new GlobMatch(path, this); | 166 return new GlobMatch(path, this); |
167 } | 167 } |
168 } | 168 } |
169 | 169 |
170 return null; | 170 return null; |
171 } | 171 } |
172 | 172 |
173 /// Returns [path] converted to the POSIX format that globs match against. | |
174 String _toPosixPath(String path) { | |
175 if (context.style == p.Style.windows) return path.replaceAll('\\', '/'); | |
176 if (context.style == p.Style.url) return Uri.decodeFull(path); | |
177 return path; | |
178 } | |
179 | |
180 Iterable<Match> allMatches(String path, [int start = 0]) { | 173 Iterable<Match> allMatches(String path, [int start = 0]) { |
181 var match = matchAsPrefix(path, start); | 174 var match = matchAsPrefix(path, start); |
182 return match == null ? [] : [match]; | 175 return match == null ? [] : [match]; |
183 } | 176 } |
184 | 177 |
185 String toString() => pattern; | 178 String toString() => pattern; |
186 } | 179 } |
OLD | NEW |