| 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 /// | 6 /// |
| 7 /// ## Installing ## | 7 /// ## Installing ## |
| 8 /// | 8 /// |
| 9 /// Use [pub][] to install this package. Add the following to your | 9 /// Use [pub][] to install this package. Add the following to your |
| 10 /// `pubspec.yaml` file. | 10 /// `pubspec.yaml` file. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 /// | 37 /// |
| 38 /// If you want to work with paths for a specific platform regardless of the | 38 /// If you want to work with paths for a specific platform regardless of the |
| 39 /// underlying platform that the program is running on, you can create a | 39 /// underlying platform that the program is running on, you can create a |
| 40 /// [Context] and give it an explicit [Style]: | 40 /// [Context] and give it an explicit [Style]: |
| 41 /// | 41 /// |
| 42 /// var context = new path.Context(style: Style.windows); | 42 /// var context = new path.Context(style: Style.windows); |
| 43 /// context.join("directory", "file.txt"); | 43 /// context.join("directory", "file.txt"); |
| 44 /// | 44 /// |
| 45 /// This will join "directory" and "file.txt" using the Windows path separator, | 45 /// This will join "directory" and "file.txt" using the Windows path separator, |
| 46 /// even when the program is run on a POSIX machine. | 46 /// even when the program is run on a POSIX machine. |
| 47 library path; | |
| 48 | |
| 49 import 'src/context.dart'; | 47 import 'src/context.dart'; |
| 50 import 'src/style.dart'; | 48 import 'src/style.dart'; |
| 51 | 49 |
| 52 export 'src/context.dart' hide createInternal; | 50 export 'src/context.dart' hide createInternal; |
| 53 export 'src/path_exception.dart'; | 51 export 'src/path_exception.dart'; |
| 54 export 'src/style.dart'; | 52 export 'src/style.dart'; |
| 55 | 53 |
| 56 /// A default context for manipulating POSIX paths. | 54 /// A default context for manipulating POSIX paths. |
| 57 final Context posix = new Context(style: Style.posix); | 55 final Context posix = new Context(style: Style.posix); |
| 58 | 56 |
| 59 /// A default context for manipulating Windows paths. | 57 /// A default context for manipulating Windows paths. |
| 60 final Context windows = new Context(style: Style.windows); | 58 final Context windows = new Context(style: Style.windows); |
| 61 | 59 |
| 62 /// A default context for manipulating URLs. | 60 /// A default context for manipulating URLs. |
| 61 /// |
| 62 /// URL path equality is undefined for paths that differ only in their |
| 63 /// percent-encoding or only in the case of their host segment. |
| 63 final Context url = new Context(style: Style.url); | 64 final Context url = new Context(style: Style.url); |
| 64 | 65 |
| 65 /// The system path context. | 66 /// The system path context. |
| 66 /// | 67 /// |
| 67 /// This differs from a context created with [new Context] in that its | 68 /// This differs from a context created with [new Context] in that its |
| 68 /// [Context.current] is always the current working directory, rather than being | 69 /// [Context.current] is always the current working directory, rather than being |
| 69 /// set once when the context is created. | 70 /// set once when the context is created. |
| 70 final Context context = createInternal(); | 71 final Context context = createInternal(); |
| 71 | 72 |
| 72 /// Returns the [Style] of the current context. | 73 /// Returns the [Style] of the current context. |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 /// path.split('/path/to/foo'); // -> ['/', 'path', 'to', 'foo'] | 277 /// path.split('/path/to/foo'); // -> ['/', 'path', 'to', 'foo'] |
| 277 /// | 278 /// |
| 278 /// // Windows | 279 /// // Windows |
| 279 /// path.split(r'C:\path\to\foo'); // -> [r'C:\', 'path', 'to', 'foo'] | 280 /// path.split(r'C:\path\to\foo'); // -> [r'C:\', 'path', 'to', 'foo'] |
| 280 /// | 281 /// |
| 281 /// // Browser | 282 /// // Browser |
| 282 /// path.split('http://dartlang.org/path/to/foo'); | 283 /// path.split('http://dartlang.org/path/to/foo'); |
| 283 /// // -> ['http://dartlang.org', 'path', 'to', 'foo'] | 284 /// // -> ['http://dartlang.org', 'path', 'to', 'foo'] |
| 284 List<String> split(String path) => context.split(path); | 285 List<String> split(String path) => context.split(path); |
| 285 | 286 |
| 287 /// Canonicalizes [path]. |
| 288 /// |
| 289 /// This is guaranteed to return the same path for two different input paths |
| 290 /// if and only if both input paths point to the same location. Unlike |
| 291 /// [normalize], it returns absolute paths when possible and canonicalizes |
| 292 /// ASCII case on Windows. |
| 293 /// |
| 294 /// Note that this does not resolve symlinks. |
| 295 /// |
| 296 /// If you want a map that uses path keys, it's probably more efficient to |
| 297 /// pass [equals] and [hash] to [new HashMap] than it is to canonicalize every |
| 298 /// key. |
| 299 String canonicalize(String path) => context.canonicalize(path); |
| 300 |
| 286 /// Normalizes [path], simplifying it by handling `..`, and `.`, and | 301 /// Normalizes [path], simplifying it by handling `..`, and `.`, and |
| 287 /// removing redundant path separators whenever possible. | 302 /// removing redundant path separators whenever possible. |
| 288 /// | 303 /// |
| 304 /// Note that this is *not* guaranteed to return the same result for two |
| 305 /// equivalent input paths. For that, see [canonicalize]. Or, if you're using |
| 306 /// paths as map keys, pass [equals] and [hash] to [new HashMap]. |
| 307 /// |
| 289 /// path.normalize('path/./to/..//file.text'); // -> 'path/file.txt' | 308 /// path.normalize('path/./to/..//file.text'); // -> 'path/file.txt' |
| 290 String normalize(String path) => context.normalize(path); | 309 String normalize(String path) => context.normalize(path); |
| 291 | 310 |
| 292 /// Attempts to convert [path] to an equivalent relative path from the current | 311 /// Attempts to convert [path] to an equivalent relative path from the current |
| 293 /// directory. | 312 /// directory. |
| 294 /// | 313 /// |
| 295 /// // Given current directory is /root/path: | 314 /// // Given current directory is /root/path: |
| 296 /// path.relative('/root/path/a/b.dart'); // -> 'a/b.dart' | 315 /// path.relative('/root/path/a/b.dart'); // -> 'a/b.dart' |
| 297 /// path.relative('/root/other.dart'); // -> '../other.dart' | 316 /// path.relative('/root/other.dart'); // -> '../other.dart' |
| 298 /// | 317 /// |
| (...skipping 20 matching lines...) Expand all Loading... |
| 319 String relative(String path, {String from}) => | 338 String relative(String path, {String from}) => |
| 320 context.relative(path, from: from); | 339 context.relative(path, from: from); |
| 321 | 340 |
| 322 /// Returns `true` if [child] is a path beneath `parent`, and `false` otherwise. | 341 /// Returns `true` if [child] is a path beneath `parent`, and `false` otherwise. |
| 323 /// | 342 /// |
| 324 /// path.isWithin('/root/path', '/root/path/a'); // -> true | 343 /// path.isWithin('/root/path', '/root/path/a'); // -> true |
| 325 /// path.isWithin('/root/path', '/root/other'); // -> false | 344 /// path.isWithin('/root/path', '/root/other'); // -> false |
| 326 /// path.isWithin('/root/path', '/root/path') // -> false | 345 /// path.isWithin('/root/path', '/root/path') // -> false |
| 327 bool isWithin(String parent, String child) => context.isWithin(parent, child); | 346 bool isWithin(String parent, String child) => context.isWithin(parent, child); |
| 328 | 347 |
| 348 /// Returns `true` if [path1] points to the same location as [path2], and |
| 349 /// `false` otherwise. |
| 350 /// |
| 351 /// The [hash] function returns a hash code that matches these equality |
| 352 /// semantics. |
| 353 bool equals(String path1, String path2) => context.equals(path1, path2); |
| 354 |
| 355 /// Returns a hash code for [path] such that, if [equals] returns `true` for two |
| 356 /// paths, their hash codes are the same. |
| 357 /// |
| 358 /// Note that the same path may have different hash codes on different platforms |
| 359 /// or with different [current] directories. |
| 360 int hash(String path) => context.hash(path); |
| 361 |
| 329 /// Removes a trailing extension from the last part of [path]. | 362 /// Removes a trailing extension from the last part of [path]. |
| 330 /// | 363 /// |
| 331 /// withoutExtension('path/to/foo.dart'); // -> 'path/to/foo' | 364 /// withoutExtension('path/to/foo.dart'); // -> 'path/to/foo' |
| 332 String withoutExtension(String path) => context.withoutExtension(path); | 365 String withoutExtension(String path) => context.withoutExtension(path); |
| 333 | 366 |
| 334 /// Returns the path represented by [uri], which may be a [String] or a [Uri]. | 367 /// Returns the path represented by [uri], which may be a [String] or a [Uri]. |
| 335 /// | 368 /// |
| 336 /// For POSIX and Windows styles, [uri] must be a `file:` URI. For the URL | 369 /// For POSIX and Windows styles, [uri] must be a `file:` URI. For the URL |
| 337 /// style, this will just convert [uri] to a string. | 370 /// style, this will just convert [uri] to a string. |
| 338 /// | 371 /// |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 /// | 424 /// |
| 392 /// // Windows at "C:\root\path" | 425 /// // Windows at "C:\root\path" |
| 393 /// path.prettyUri('file:///C:/root/path/a/b.dart'); // -> r'a\b.dart' | 426 /// path.prettyUri('file:///C:/root/path/a/b.dart'); // -> r'a\b.dart' |
| 394 /// path.prettyUri('http://dartlang.org/'); // -> 'http://dartlang.org' | 427 /// path.prettyUri('http://dartlang.org/'); // -> 'http://dartlang.org' |
| 395 /// | 428 /// |
| 396 /// // URL at "http://dartlang.org/root/path" | 429 /// // URL at "http://dartlang.org/root/path" |
| 397 /// path.prettyUri('http://dartlang.org/root/path/a/b.dart'); | 430 /// path.prettyUri('http://dartlang.org/root/path/a/b.dart'); |
| 398 /// // -> r'a/b.dart' | 431 /// // -> r'a/b.dart' |
| 399 /// path.prettyUri('file:///root/path'); // -> 'file:///root/path' | 432 /// path.prettyUri('file:///root/path'); // -> 'file:///root/path' |
| 400 String prettyUri(uri) => context.prettyUri(uri); | 433 String prettyUri(uri) => context.prettyUri(uri); |
| OLD | NEW |