Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: pkg/path/lib/path.dart

Issue 12314047: Add path.joinAll. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/path/test/path_posix_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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] is usually terser.
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
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] is usually terser.
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/path/test/path_posix_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698