Chromium Code Reviews| 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 part of dart.core; | 5 part of dart.core; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A parsed URI, such as a URL. | 8 * A parsed URI, such as a URL. |
| 9 * | 9 * |
| 10 * **See also:** | 10 * **See also:** |
| (...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 697 * // This throws an error. A path with a drive letter is not absolute. | 697 * // This throws an error. A path with a drive letter is not absolute. |
| 698 * new Uri.file(r"C:xxx\yyy", windows: true); | 698 * new Uri.file(r"C:xxx\yyy", windows: true); |
| 699 * | 699 * |
| 700 * // file://server/share/file | 700 * // file://server/share/file |
| 701 * new Uri.file(r"\\server\share\file", windows: true); | 701 * new Uri.file(r"\\server\share\file", windows: true); |
| 702 * ``` | 702 * ``` |
| 703 * | 703 * |
| 704 * If the path passed is not a legal file path [ArgumentError] is thrown. | 704 * If the path passed is not a legal file path [ArgumentError] is thrown. |
| 705 */ | 705 */ |
| 706 factory Uri.file(String path, {bool windows}) { | 706 factory Uri.file(String path, {bool windows}) { |
| 707 windows = windows == null ? Uri._isWindows : windows; | 707 windows = (windows == null) ? Uri._isWindows : windows; |
| 708 return windows ? _makeWindowsFileUrl(path) : _makeFileUri(path); | 708 return windows ? _makeWindowsFileUrl(path, false) |
| 709 : _makeFileUri(path, false); | |
| 709 } | 710 } |
| 710 | 711 |
| 711 /** | 712 /** |
| 713 * Like [Uri.file] except that a non-empty URI path ends in a slash. | |
| 714 * | |
| 715 * If [path] is not empty, and it doesn't end in a directory separator, | |
| 716 * then a slash is added to the returned URI's path. | |
| 717 * In all other cases, the result is the same as returned by `Uri.file`. | |
| 718 */ | |
| 719 factory Uri.directory(String path, {bool windows}) { | |
| 720 windows = (windows == null) ? Uri._isWindows : windows; | |
| 721 return windows ? _makeWindowsFileUrl(path, true) | |
| 722 : _makeFileUri(path, true); | |
| 723 } | |
| 724 | |
| 725 /** | |
| 712 * Returns the natural base URI for the current platform. | 726 * Returns the natural base URI for the current platform. |
| 713 * | 727 * |
| 714 * When running in a browser this is the current URL (from | 728 * When running in a browser this is the current URL (from |
| 715 * `window.location.href`). | 729 * `window.location.href`). |
| 716 * | 730 * |
| 717 * When not running in a browser this is the file URI referencing | 731 * When not running in a browser this is the file URI referencing |
| 718 * the current working directory. | 732 * the current working directory. |
| 719 */ | 733 */ |
| 720 external static Uri get base; | 734 external static Uri get base; |
| 721 | 735 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 755 } | 769 } |
| 756 if (argumentError) { | 770 if (argumentError) { |
| 757 throw new ArgumentError("Illegal drive letter " + | 771 throw new ArgumentError("Illegal drive letter " + |
| 758 new String.fromCharCode(charCode)); | 772 new String.fromCharCode(charCode)); |
| 759 } else { | 773 } else { |
| 760 throw new UnsupportedError("Illegal drive letter " + | 774 throw new UnsupportedError("Illegal drive letter " + |
| 761 new String.fromCharCode(charCode)); | 775 new String.fromCharCode(charCode)); |
| 762 } | 776 } |
| 763 } | 777 } |
| 764 | 778 |
| 765 static _makeFileUri(String path) { | 779 static _makeFileUri(String path, bool slashTerminated) { |
|
Søren Gjesse
2015/04/17 08:33:21
Optional named argument for documentation in the a
Lasse Reichstein Nielsen
2015/04/17 08:41:40
No optional arguments for internal functions.
It's
| |
| 766 const String sep = "/"; | 780 const String sep = "/"; |
| 781 var segments = path.split(sep); | |
| 782 if (slashTerminated && | |
| 783 segments.isNotEmpty && | |
| 784 segments.last.isNotEmpty) { | |
| 785 segments.add(""); // Extra separator at end. | |
| 786 } | |
| 767 if (path.startsWith(sep)) { | 787 if (path.startsWith(sep)) { |
| 768 // Absolute file:// URI. | 788 // Absolute file:// URI. |
| 769 return new Uri(scheme: "file", pathSegments: path.split(sep)); | 789 return new Uri(scheme: "file", pathSegments: segments); |
| 770 } else { | 790 } else { |
| 771 // Relative URI. | 791 // Relative URI. |
| 772 return new Uri(pathSegments: path.split(sep)); | 792 return new Uri(pathSegments: segments); |
| 773 } | 793 } |
| 774 } | 794 } |
| 775 | 795 |
| 776 static _makeWindowsFileUrl(String path) { | 796 static _makeWindowsFileUrl(String path, bool slashTerminated) { |
| 777 if (path.startsWith(r"\\?\")) { | 797 if (path.startsWith(r"\\?\")) { |
| 778 if (path.startsWith(r"UNC\", 4)) { | 798 if (path.startsWith(r"UNC\", 4)) { |
| 779 path = path.replaceRange(0, 7, r'\'); | 799 path = path.replaceRange(0, 7, r'\'); |
| 780 } else { | 800 } else { |
| 781 path = path.substring(4); | 801 path = path.substring(4); |
| 782 if (path.length < 3 || | 802 if (path.length < 3 || |
| 783 path.codeUnitAt(1) != _COLON || | 803 path.codeUnitAt(1) != _COLON || |
| 784 path.codeUnitAt(2) != _BACKSLASH) { | 804 path.codeUnitAt(2) != _BACKSLASH) { |
| 785 throw new ArgumentError( | 805 throw new ArgumentError( |
| 786 r"Windows paths with \\?\ prefix must be absolute"); | 806 r"Windows paths with \\?\ prefix must be absolute"); |
| 787 } | 807 } |
| 788 } | 808 } |
| 789 } else { | 809 } else { |
| 790 path = path.replaceAll("/", r'\'); | 810 path = path.replaceAll("/", r'\'); |
| 791 } | 811 } |
| 792 const String sep = r'\'; | 812 const String sep = r'\'; |
| 793 if (path.length > 1 && path.codeUnitAt(1) == _COLON) { | 813 if (path.length > 1 && path.codeUnitAt(1) == _COLON) { |
| 794 _checkWindowsDriveLetter(path.codeUnitAt(0), true); | 814 _checkWindowsDriveLetter(path.codeUnitAt(0), true); |
| 795 if (path.length == 2 || path.codeUnitAt(2) != _BACKSLASH) { | 815 if (path.length == 2 || path.codeUnitAt(2) != _BACKSLASH) { |
| 796 throw new ArgumentError( | 816 throw new ArgumentError( |
| 797 "Windows paths with drive letter must be absolute"); | 817 "Windows paths with drive letter must be absolute"); |
| 798 } | 818 } |
| 799 // Absolute file://C:/ URI. | 819 // Absolute file://C:/ URI. |
| 800 var pathSegments = path.split(sep); | 820 var pathSegments = path.split(sep); |
| 821 if (slashTerminated && | |
| 822 pathSegments.last.isNotEmpty) { | |
| 823 pathSegments.add(""); // Extra separator at end. | |
| 824 } | |
| 801 _checkWindowsPathReservedCharacters(pathSegments, true, 1); | 825 _checkWindowsPathReservedCharacters(pathSegments, true, 1); |
| 802 return new Uri(scheme: "file", pathSegments: pathSegments); | 826 return new Uri(scheme: "file", pathSegments: pathSegments); |
| 803 } | 827 } |
| 804 | 828 |
| 805 if (path.startsWith(sep)) { | 829 if (path.startsWith(sep)) { |
| 806 if (path.startsWith(sep, 1)) { | 830 if (path.startsWith(sep, 1)) { |
| 807 // Absolute file:// URI with host. | 831 // Absolute file:// URI with host. |
| 808 int pathStart = path.indexOf(r'\', 2); | 832 int pathStart = path.indexOf(r'\', 2); |
| 809 String hostPart = | 833 String hostPart = |
| 810 (pathStart < 0) ? path.substring(2) : path.substring(2, pathStart); | 834 (pathStart < 0) ? path.substring(2) : path.substring(2, pathStart); |
| 811 String pathPart = | 835 String pathPart = |
| 812 (pathStart < 0) ? "" : path.substring(pathStart + 1); | 836 (pathStart < 0) ? "" : path.substring(pathStart + 1); |
| 813 var pathSegments = pathPart.split(sep); | 837 var pathSegments = pathPart.split(sep); |
| 814 _checkWindowsPathReservedCharacters(pathSegments, true); | 838 _checkWindowsPathReservedCharacters(pathSegments, true); |
| 839 if (slashTerminated && | |
| 840 pathSegments.last.isNotEmpty) { | |
| 841 pathSegments.add(""); // Extra separator at end. | |
| 842 } | |
| 815 return new Uri( | 843 return new Uri( |
| 816 scheme: "file", host: hostPart, pathSegments: pathSegments); | 844 scheme: "file", host: hostPart, pathSegments: pathSegments); |
| 817 } else { | 845 } else { |
| 818 // Absolute file:// URI. | 846 // Absolute file:// URI. |
| 819 var pathSegments = path.split(sep); | 847 var pathSegments = path.split(sep); |
| 848 if (slashTerminated && | |
| 849 pathSegments.last.isNotEmpty) { | |
| 850 pathSegments.add(""); // Extra separator at end. | |
| 851 } | |
| 820 _checkWindowsPathReservedCharacters(pathSegments, true); | 852 _checkWindowsPathReservedCharacters(pathSegments, true); |
| 821 return new Uri(scheme: "file", pathSegments: pathSegments); | 853 return new Uri(scheme: "file", pathSegments: pathSegments); |
| 822 } | 854 } |
| 823 } else { | 855 } else { |
| 824 // Relative URI. | 856 // Relative URI. |
| 825 var pathSegments = path.split(sep); | 857 var pathSegments = path.split(sep); |
| 826 _checkWindowsPathReservedCharacters(pathSegments, true); | 858 _checkWindowsPathReservedCharacters(pathSegments, true); |
| 859 if (slashTerminated && | |
| 860 pathSegments.isNotEmpty && | |
| 861 pathSegments.last.isNotEmpty) { | |
| 862 pathSegments.add(""); // Extra separator at end. | |
| 863 } | |
| 827 return new Uri(pathSegments: pathSegments); | 864 return new Uri(pathSegments: pathSegments); |
| 828 } | 865 } |
| 829 } | 866 } |
| 830 | 867 |
| 831 /** | 868 /** |
| 832 * Returns a new `Uri` based on this one, but with some parts replaced. | 869 * Returns a new `Uri` based on this one, but with some parts replaced. |
| 833 * | 870 * |
| 834 * This method takes the same parameters as the [new Uri] constructor, | 871 * This method takes the same parameters as the [new Uri] constructor, |
| 835 * and they have the same meaning. | 872 * and they have the same meaning. |
| 836 * | 873 * |
| (...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2427 0xafff, // 0x30 - 0x3f 1111111111110101 | 2464 0xafff, // 0x30 - 0x3f 1111111111110101 |
| 2428 // @ABCDEFGHIJKLMNO | 2465 // @ABCDEFGHIJKLMNO |
| 2429 0xffff, // 0x40 - 0x4f 1111111111111111 | 2466 0xffff, // 0x40 - 0x4f 1111111111111111 |
| 2430 // PQRSTUVWXYZ _ | 2467 // PQRSTUVWXYZ _ |
| 2431 0x87ff, // 0x50 - 0x5f 1111111111100001 | 2468 0x87ff, // 0x50 - 0x5f 1111111111100001 |
| 2432 // abcdefghijklmno | 2469 // abcdefghijklmno |
| 2433 0xfffe, // 0x60 - 0x6f 0111111111111111 | 2470 0xfffe, // 0x60 - 0x6f 0111111111111111 |
| 2434 // pqrstuvwxyz ~ | 2471 // pqrstuvwxyz ~ |
| 2435 0x47ff]; // 0x70 - 0x7f 1111111111100010 | 2472 0x47ff]; // 0x70 - 0x7f 1111111111100010 |
| 2436 } | 2473 } |
| OLD | NEW |