OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 path.context; | 5 library path.context; |
6 | 6 |
7 import 'internal_style.dart'; | 7 import 'internal_style.dart'; |
8 import 'style.dart'; | 8 import 'style.dart'; |
9 import 'parsed_path.dart'; | 9 import 'parsed_path.dart'; |
10 import 'path_exception.dart'; | 10 import 'path_exception.dart'; |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 var buffer = new StringBuffer(); | 212 var buffer = new StringBuffer(); |
213 var needsSeparator = false; | 213 var needsSeparator = false; |
214 var isAbsoluteAndNotRootRelative = false; | 214 var isAbsoluteAndNotRootRelative = false; |
215 | 215 |
216 for (var part in parts.where((part) => part != '')) { | 216 for (var part in parts.where((part) => part != '')) { |
217 if (this.isRootRelative(part) && isAbsoluteAndNotRootRelative) { | 217 if (this.isRootRelative(part) && isAbsoluteAndNotRootRelative) { |
218 // If the new part is root-relative, it preserves the previous root but | 218 // If the new part is root-relative, it preserves the previous root but |
219 // replaces the path after it. | 219 // replaces the path after it. |
220 var parsed = _parse(part); | 220 var parsed = _parse(part); |
221 parsed.root = this.rootPrefix(buffer.toString()); | 221 parsed.root = this.rootPrefix(buffer.toString()); |
222 if (parsed.root.contains(style.needsSeparatorPattern)) { | 222 if (style.needsSeparator(parsed.root)) { |
223 parsed.separators[0] = style.separator; | 223 parsed.separators[0] = style.separator; |
224 } | 224 } |
225 buffer.clear(); | 225 buffer.clear(); |
226 buffer.write(parsed.toString()); | 226 buffer.write(parsed.toString()); |
227 } else if (this.isAbsolute(part)) { | 227 } else if (this.isAbsolute(part)) { |
228 isAbsoluteAndNotRootRelative = !this.isRootRelative(part); | 228 isAbsoluteAndNotRootRelative = !this.isRootRelative(part); |
229 // An absolute path discards everything before it. | 229 // An absolute path discards everything before it. |
230 buffer.clear(); | 230 buffer.clear(); |
231 buffer.write(part); | 231 buffer.write(part); |
232 } else { | 232 } else { |
233 if (part.length > 0 && part[0].contains(style.separatorPattern)) { | 233 if (part.length > 0 && style.containsSeparator(part[0])) { |
234 // The part starts with a separator, so we don't need to add one. | 234 // The part starts with a separator, so we don't need to add one. |
235 } else if (needsSeparator) { | 235 } else if (needsSeparator) { |
236 buffer.write(separator); | 236 buffer.write(separator); |
237 } | 237 } |
238 | 238 |
239 buffer.write(part); | 239 buffer.write(part); |
240 } | 240 } |
241 | 241 |
242 // Unless this part ends with a separator, we'll need to add one before | 242 // Unless this part ends with a separator, we'll need to add one before |
243 // the next part. | 243 // the next part. |
244 needsSeparator = part.contains(style.needsSeparatorPattern); | 244 needsSeparator = style.needsSeparator(part); |
245 } | 245 } |
246 | 246 |
247 return buffer.toString(); | 247 return buffer.toString(); |
248 } | 248 } |
249 | 249 |
250 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. | 250 // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed. |
251 /// Splits [path] into its components using the current platform's | 251 /// Splits [path] into its components using the current platform's |
252 /// [separator]. Example: | 252 /// [separator]. Example: |
253 /// | 253 /// |
254 /// context.split('path/to/foo'); // -> ['path', 'to', 'foo'] | 254 /// context.split('path/to/foo'); // -> ['path', 'to', 'foo'] |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 // Show the arguments. | 538 // Show the arguments. |
539 var message = new StringBuffer(); | 539 var message = new StringBuffer(); |
540 message.write("$method("); | 540 message.write("$method("); |
541 message.write(args.take(numArgs) | 541 message.write(args.take(numArgs) |
542 .map((arg) => arg == null ? "null" : '"$arg"') | 542 .map((arg) => arg == null ? "null" : '"$arg"') |
543 .join(", ")); | 543 .join(", ")); |
544 message.write("): part ${i - 1} was null, but part $i was not."); | 544 message.write("): part ${i - 1} was null, but part $i was not."); |
545 throw new ArgumentError(message.toString()); | 545 throw new ArgumentError(message.toString()); |
546 } | 546 } |
547 } | 547 } |
OLD | NEW |