OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /// A comprehensive, cross-platform path manipulation library. | 5 /// A comprehensive, cross-platform path manipulation library. |
6 library path; | 6 library path; |
7 | 7 |
8 import 'dart:io' as io; | 8 import 'dart:io' as io; |
9 | 9 |
10 /// An internal builder for the current OS so we can provide a straight | 10 /// An internal builder for the current OS so we can provide a straight |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 } | 287 } |
288 | 288 |
289 for (var part in parts) { | 289 for (var part in parts) { |
290 if (part == null) continue; | 290 if (part == null) continue; |
291 | 291 |
292 if (this.isAbsolute(part)) { | 292 if (this.isAbsolute(part)) { |
293 // An absolute path discards everything before it. | 293 // An absolute path discards everything before it. |
294 buffer.clear(); | 294 buffer.clear(); |
295 buffer.add(part); | 295 buffer.add(part); |
296 } else { | 296 } else { |
297 if (part.length > 0 && style.separatorPattern.hasMatch(part[0])) { | 297 if (part.length > 0 && part[0].contains(style.separatorPattern)) { |
Bob Nystrom
2012/12/18 19:40:35
A simpler fix here is to just make separatorPatter
nweiz
2012/12/19 01:10:21
I think using str.contains(pattern) is about as cl
| |
298 // The part starts with a separator, so we don't need to add one. | 298 // The part starts with a separator, so we don't need to add one. |
299 } else if (needsSeparator) { | 299 } else if (needsSeparator) { |
300 buffer.add(separator); | 300 buffer.add(separator); |
301 } | 301 } |
302 | 302 |
303 buffer.add(part); | 303 buffer.add(part); |
304 } | 304 } |
305 | 305 |
306 // Unless this part ends with a separator, we'll need to add one before | 306 // Unless this part ends with a separator, we'll need to add one before |
307 // the next part. | 307 // the next part. |
308 needsSeparator = part.length > 0 && | 308 needsSeparator = part.length > 0 && |
309 !style.separatorPattern.hasMatch(part[part.length - 1]); | 309 !part[part.length - 1].contains(style.separatorPattern); |
310 } | 310 } |
311 | 311 |
312 return buffer.toString(); | 312 return buffer.toString(); |
313 } | 313 } |
314 | 314 |
315 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. | 315 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. |
316 /// Splits [path] into its components using the current platform's | 316 /// Splits [path] into its components using the current platform's |
317 /// [separator]. Example: | 317 /// [separator]. Example: |
318 /// | 318 /// |
319 /// builder.split('path/to/foo'); // -> ['path', 'to', 'foo'] | 319 /// builder.split('path/to/foo'); // -> ['path', 'to', 'foo'] |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
517 /// "\" is the canonical one. | 517 /// "\" is the canonical one. |
518 final Pattern separatorPattern; | 518 final Pattern separatorPattern; |
519 | 519 |
520 /// The [Pattern] that can be used to match the root prefix of an absolute | 520 /// The [Pattern] that can be used to match the root prefix of an absolute |
521 /// path in this style. | 521 /// path in this style. |
522 final Pattern _rootPattern; | 522 final Pattern _rootPattern; |
523 | 523 |
524 /// Gets the root prefix of [path] if path is absolute. If [path] is relative, | 524 /// Gets the root prefix of [path] if path is absolute. If [path] is relative, |
525 /// returns `null`. | 525 /// returns `null`. |
526 String getRoot(String path) { | 526 String getRoot(String path) { |
527 var match = _rootPattern.firstMatch(path); | 527 var matches = _rootPattern.allMatches(path).iterator(); |
528 if (match == null) return null; | 528 if (!matches.hasNext) return null; |
529 return match[0]; | 529 return matches.next()[0]; |
530 } | 530 } |
531 | 531 |
532 String toString() => name; | 532 String toString() => name; |
533 } | 533 } |
534 | 534 |
535 // TODO(rnystrom): Make this public? | 535 // TODO(rnystrom): Make this public? |
536 class _ParsedPath { | 536 class _ParsedPath { |
537 /// The [Style] that was used to parse this path. | 537 /// The [Style] that was used to parse this path. |
538 Style style; | 538 Style style; |
539 | 539 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
642 | 642 |
643 var lastDot = file.lastIndexOf('.'); | 643 var lastDot = file.lastIndexOf('.'); |
644 | 644 |
645 // If there is no dot, or it's the first character, like '.bashrc', it | 645 // If there is no dot, or it's the first character, like '.bashrc', it |
646 // doesn't count. | 646 // doesn't count. |
647 if (lastDot <= 0) return [file, '']; | 647 if (lastDot <= 0) return [file, '']; |
648 | 648 |
649 return [file.substring(0, lastDot), file.substring(lastDot)]; | 649 return [file.substring(0, lastDot), file.substring(lastDot)]; |
650 } | 650 } |
651 } | 651 } |
OLD | NEW |