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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
105 /// | 105 /// |
106 /// path.join('path/', 'to', 'foo'); // -> 'path/to/foo | 106 /// path.join('path/', 'to', 'foo'); // -> 'path/to/foo |
107 /// | 107 /// |
108 /// If a part is an absolute path, then anything before that will be ignored: | 108 /// If a part is an absolute path, then anything before that will be ignored: |
109 /// | 109 /// |
110 /// path.join('path', '/to', 'foo'); // -> '/to/foo' | 110 /// path.join('path', '/to', 'foo'); // -> '/to/foo' |
111 String join(String part1, [String part2, String part3, String part4, | 111 String join(String part1, [String part2, String part3, String part4, |
112 String part5, String part6, String part7, String part8]) => | 112 String part5, String part6, String part7, String part8]) => |
113 _builder.join(part1, part2, part3, part4, part5, part6, part7, part8); | 113 _builder.join(part1, part2, part3, part4, part5, part6, part7, part8); |
114 | 114 |
115 /// Joins the given path parts into a single path using the current platform's | |
116 /// [separator]. Example: | |
117 /// | |
118 /// path.joinAll(['path', 'to', 'foo']); // -> 'path/to/foo' | |
119 /// | |
120 /// If any part ends in a path separator, then a redundant separator will not | |
121 /// be added: | |
122 /// | |
123 /// path.joinAll(['path/', 'to', 'foo']); // -> 'path/to/foo | |
124 /// | |
125 /// If a part is an absolute path, then anything before that will be ignored: | |
126 /// | |
127 /// path.joinAll(['path', '/to', 'foo']); // -> '/to/foo' | |
128 /// | |
129 /// For a fixed number of parts, [join] usually terser. | |
Bob Nystrom
2013/02/21 22:03:27
"usually" -> "is usually".
nweiz
2013/02/21 22:19:25
Done.
| |
130 String joinAll(Iterable<String> parts) => _builder.joinAll(parts); | |
131 | |
115 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. | 132 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. |
116 /// Splits [path] into its components using the current platform's [separator]. | 133 /// Splits [path] into its components using the current platform's [separator]. |
117 /// | 134 /// |
118 /// path.split('path/to/foo'); // -> ['path', 'to', 'foo'] | 135 /// path.split('path/to/foo'); // -> ['path', 'to', 'foo'] |
119 /// | 136 /// |
120 /// The path will *not* be normalized before splitting. | 137 /// The path will *not* be normalized before splitting. |
121 /// | 138 /// |
122 /// path.split('path/../foo'); // -> ['path', '..', 'foo'] | 139 /// path.split('path/../foo'); // -> ['path', '..', 'foo'] |
123 /// | 140 /// |
124 /// If [path] is absolute, the root directory will be the first element in the | 141 /// If [path] is absolute, the root directory will be the first element in the |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
314 /// be added: | 331 /// be added: |
315 /// | 332 /// |
316 /// builder.join('path/', 'to', 'foo'); // -> 'path/to/foo | 333 /// builder.join('path/', 'to', 'foo'); // -> 'path/to/foo |
317 /// | 334 /// |
318 /// If a part is an absolute path, then anything before that will be ignored: | 335 /// If a part is an absolute path, then anything before that will be ignored: |
319 /// | 336 /// |
320 /// builder.join('path', '/to', 'foo'); // -> '/to/foo' | 337 /// builder.join('path', '/to', 'foo'); // -> '/to/foo' |
321 /// | 338 /// |
322 String join(String part1, [String part2, String part3, String part4, | 339 String join(String part1, [String part2, String part3, String part4, |
323 String part5, String part6, String part7, String part8]) { | 340 String part5, String part6, String part7, String part8]) { |
341 var parts = [part1, part2, part3, part4, part5, part6, part7, part8]; | |
342 _validateArgList("join", parts); | |
343 return joinAll(parts.where((part) => part != null)); | |
344 } | |
345 | |
346 /// Joins the given path parts into a single path. Example: | |
347 /// | |
348 /// builder.joinAll(['path', 'to', 'foo']); // -> 'path/to/foo' | |
349 /// | |
350 /// If any part ends in a path separator, then a redundant separator will not | |
351 /// be added: | |
352 /// | |
353 /// builder.joinAll(['path/', 'to', 'foo']); // -> 'path/to/foo | |
354 /// | |
355 /// If a part is an absolute path, then anything before that will be ignored: | |
356 /// | |
357 /// builder.joinAll(['path', '/to', 'foo']); // -> '/to/foo' | |
358 /// | |
359 /// For a fixed number of parts, [join] usually terser. | |
Bob Nystrom
2013/02/21 22:03:27
Ditto.
nweiz
2013/02/21 22:19:25
Done.
| |
360 String joinAll(Iterable<String> parts) { | |
324 var buffer = new StringBuffer(); | 361 var buffer = new StringBuffer(); |
325 var needsSeparator = false; | 362 var needsSeparator = false; |
326 | 363 |
327 var parts = [part1, part2, part3, part4, part5, part6, part7, part8]; | |
328 _validateArgList("join", parts); | |
329 | |
330 for (var part in parts) { | 364 for (var part in parts) { |
331 if (part == null) continue; | |
332 | |
333 if (this.isAbsolute(part)) { | 365 if (this.isAbsolute(part)) { |
334 // An absolute path discards everything before it. | 366 // An absolute path discards everything before it. |
335 buffer.clear(); | 367 buffer.clear(); |
336 buffer.add(part); | 368 buffer.add(part); |
337 } else { | 369 } else { |
338 if (part.length > 0 && part[0].contains(style.separatorPattern)) { | 370 if (part.length > 0 && part[0].contains(style.separatorPattern)) { |
339 // The part starts with a separator, so we don't need to add one. | 371 // The part starts with a separator, so we don't need to add one. |
340 } else if (needsSeparator) { | 372 } else if (needsSeparator) { |
341 buffer.add(separator); | 373 buffer.add(separator); |
342 } | 374 } |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
692 // If there is no dot, or it's the first character, like '.bashrc', it | 724 // If there is no dot, or it's the first character, like '.bashrc', it |
693 // doesn't count. | 725 // doesn't count. |
694 if (lastDot <= 0) return [file, '']; | 726 if (lastDot <= 0) return [file, '']; |
695 | 727 |
696 return [file.substring(0, lastDot), file.substring(lastDot)]; | 728 return [file.substring(0, lastDot), file.substring(lastDot)]; |
697 } | 729 } |
698 | 730 |
699 _ParsedPath clone() => new _ParsedPath( | 731 _ParsedPath clone() => new _ParsedPath( |
700 style, root, new List.from(parts), new List.from(separators)); | 732 style, root, new List.from(parts), new List.from(separators)); |
701 } | 733 } |
OLD | NEW |