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 // Frequently used character codes. | 7 // Frequently used character codes. |
8 const int _SPACE = 0x20; | 8 const int _SPACE = 0x20; |
9 const int _PERCENT = 0x25; | 9 const int _PERCENT = 0x25; |
10 const int _PLUS = 0x2B; | 10 const int _PLUS = 0x2B; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 * | 68 * |
69 * The port part of the authority component is set through | 69 * The port part of the authority component is set through |
70 * [port]. | 70 * [port]. |
71 * If [port] is omitted or `null`, it implies the default port for | 71 * If [port] is omitted or `null`, it implies the default port for |
72 * the URI's scheme, and is equivalent to passing that port explicitly. | 72 * the URI's scheme, and is equivalent to passing that port explicitly. |
73 * The recognized schemes, and their default ports, are "http" (80) and | 73 * The recognized schemes, and their default ports, are "http" (80) and |
74 * "https" (443). All other schemes are considered as having zero as the | 74 * "https" (443). All other schemes are considered as having zero as the |
75 * default port. | 75 * default port. |
76 * | 76 * |
77 * If any of `userInfo`, `host` or `port` are provided, | 77 * If any of `userInfo`, `host` or `port` are provided, |
78 * the URI has an autority according to [hasAuthority]. | 78 * the URI has an authority according to [hasAuthority]. |
79 * | 79 * |
80 * The path component is set through either [path] or | 80 * The path component is set through either [path] or |
81 * [pathSegments]. | 81 * [pathSegments]. |
82 * When [path] is used, it should be a valid URI path, | 82 * When [path] is used, it should be a valid URI path, |
83 * but invalid characters, except the general delimiters ':/@[]?#', | 83 * but invalid characters, except the general delimiters ':/@[]?#', |
84 * will be escaped if necessary. | 84 * will be escaped if necessary. |
85 * When [pathSegments] is used, each of the provided segments | 85 * When [pathSegments] is used, each of the provided segments |
86 * is first percent-encoded and then joined using the forward slash | 86 * is first percent-encoded and then joined using the forward slash |
87 * separator. | 87 * separator. |
88 * | 88 * |
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 * This method takes the same parameters as the [new Uri] constructor, | 606 * This method takes the same parameters as the [new Uri] constructor, |
607 * and they have the same meaning. | 607 * and they have the same meaning. |
608 * | 608 * |
609 * At most one of [path] and [pathSegments] must be provided. | 609 * At most one of [path] and [pathSegments] must be provided. |
610 * Likewise, at most one of [query] and [queryParameters] must be provided. | 610 * Likewise, at most one of [query] and [queryParameters] must be provided. |
611 * | 611 * |
612 * Each part that is not provided will default to the corresponding | 612 * Each part that is not provided will default to the corresponding |
613 * value from this `Uri` instead. | 613 * value from this `Uri` instead. |
614 * | 614 * |
615 * This method is different from [Uri.resolve] which overrides in a | 615 * This method is different from [Uri.resolve] which overrides in a |
616 * hierarchial manner, | 616 * hierarchical manner, |
617 * and can instead replace each part of a `Uri` individually. | 617 * and can instead replace each part of a `Uri` individually. |
618 * | 618 * |
619 * Example: | 619 * Example: |
620 * | 620 * |
621 * Uri uri1 = Uri.parse("a://b@c:4/d/e?f#g"); | 621 * Uri uri1 = Uri.parse("a://b@c:4/d/e?f#g"); |
622 * Uri uri2 = uri1.replace(scheme: "A", path: "D/E/E", fragment: "G"); | 622 * Uri uri2 = uri1.replace(scheme: "A", path: "D/E/E", fragment: "G"); |
623 * print(uri2); // prints "A://b@c:4/D/E/E/?f#G" | 623 * print(uri2); // prints "A://b@c:4/D/E/E/?f#G" |
624 * | 624 * |
625 * This method acts similarly to using the `new Uri` constructor with | 625 * This method acts similarly to using the `new Uri` constructor with |
626 * some of the arguments taken from this `Uri` . Example: | 626 * some of the arguments taken from this `Uri` . Example: |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1053 static String encodeQueryComponent(String component, | 1053 static String encodeQueryComponent(String component, |
1054 {Encoding encoding: UTF8}) { | 1054 {Encoding encoding: UTF8}) { |
1055 return _Uri._uriEncode(_Uri._unreservedTable, component, encoding, true); | 1055 return _Uri._uriEncode(_Uri._unreservedTable, component, encoding, true); |
1056 } | 1056 } |
1057 | 1057 |
1058 /** | 1058 /** |
1059 * Decodes the percent-encoding in [encodedComponent]. | 1059 * Decodes the percent-encoding in [encodedComponent]. |
1060 * | 1060 * |
1061 * Note that decoding a URI component might change its meaning as | 1061 * Note that decoding a URI component might change its meaning as |
1062 * some of the decoded characters could be characters with are | 1062 * some of the decoded characters could be characters with are |
1063 * delimiters for a given URI componene type. Always split a URI | 1063 * delimiters for a given URI component type. Always split a URI |
1064 * component using the delimiters for the component before decoding | 1064 * component using the delimiters for the component before decoding |
1065 * the individual parts. | 1065 * the individual parts. |
1066 * | 1066 * |
1067 * For handling the [path] and [query] components consider using | 1067 * For handling the [path] and [query] components consider using |
1068 * [pathSegments] and [queryParameters] to get the separated and | 1068 * [pathSegments] and [queryParameters] to get the separated and |
1069 * decoded component. | 1069 * decoded component. |
1070 */ | 1070 */ |
1071 static String decodeComponent(String encodedComponent) { | 1071 static String decodeComponent(String encodedComponent) { |
1072 return _Uri._uriDecode(encodedComponent, 0, encodedComponent.length, | 1072 return _Uri._uriDecode(encodedComponent, 0, encodedComponent.length, |
1073 UTF8, false); | 1073 UTF8, false); |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 */ | 1354 */ |
1355 String _path; | 1355 String _path; |
1356 | 1356 |
1357 // The query content, or null if there is no query. | 1357 // The query content, or null if there is no query. |
1358 final String _query; | 1358 final String _query; |
1359 | 1359 |
1360 // The fragment content, or null if there is no fragment. | 1360 // The fragment content, or null if there is no fragment. |
1361 final String _fragment; | 1361 final String _fragment; |
1362 | 1362 |
1363 /** | 1363 /** |
1364 * Cache the computed return value of [pathSegements]. | 1364 * Cache the computed return value of [pathSegments]. |
1365 */ | 1365 */ |
1366 List<String> _pathSegments; | 1366 List<String> _pathSegments; |
1367 | 1367 |
1368 /** | 1368 /** |
1369 * Cache of the full normalized text representation of the URI. | 1369 * Cache of the full normalized text representation of the URI. |
1370 */ | 1370 */ |
1371 String _text; | 1371 String _text; |
1372 | 1372 |
1373 /** | 1373 /** |
1374 * Cache of the hashCode of [_text]. | 1374 * Cache of the hashCode of [_text]. |
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2735 /** | 2735 /** |
2736 * Uri-decode a percent-encoded string. | 2736 * Uri-decode a percent-encoded string. |
2737 * | 2737 * |
2738 * It unescapes the string [text] and returns the unescaped string. | 2738 * It unescapes the string [text] and returns the unescaped string. |
2739 * | 2739 * |
2740 * This function is similar to the JavaScript-function `decodeURI`. | 2740 * This function is similar to the JavaScript-function `decodeURI`. |
2741 * | 2741 * |
2742 * If [plusToSpace] is `true`, plus characters will be converted to spaces. | 2742 * If [plusToSpace] is `true`, plus characters will be converted to spaces. |
2743 * | 2743 * |
2744 * The decoder will create a byte-list of the percent-encoded parts, and then | 2744 * The decoder will create a byte-list of the percent-encoded parts, and then |
2745 * decode the byte-list using [encoding]. The default encodingis UTF-8. | 2745 * decode the byte-list using [encoding]. The default encodings UTF-8. |
2746 */ | 2746 */ |
2747 static String _uriDecode(String text, | 2747 static String _uriDecode(String text, |
2748 int start, | 2748 int start, |
2749 int end, | 2749 int end, |
2750 Encoding encoding, | 2750 Encoding encoding, |
2751 bool plusToSpace) { | 2751 bool plusToSpace) { |
2752 assert(0 <= start); | 2752 assert(0 <= start); |
2753 assert(start <= end); | 2753 assert(start <= end); |
2754 assert(end <= text.length); | 2754 assert(end <= text.length); |
2755 assert(encoding != null); | 2755 assert(encoding != null); |
(...skipping 1750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4506 int delta = (text.codeUnitAt(start + 4) ^ _COLON) * 3; | 4506 int delta = (text.codeUnitAt(start + 4) ^ _COLON) * 3; |
4507 delta |= text.codeUnitAt(start) ^ 0x64 /*d*/; | 4507 delta |= text.codeUnitAt(start) ^ 0x64 /*d*/; |
4508 delta |= text.codeUnitAt(start + 1) ^ 0x61 /*a*/; | 4508 delta |= text.codeUnitAt(start + 1) ^ 0x61 /*a*/; |
4509 delta |= text.codeUnitAt(start + 2) ^ 0x74 /*t*/; | 4509 delta |= text.codeUnitAt(start + 2) ^ 0x74 /*t*/; |
4510 delta |= text.codeUnitAt(start + 3) ^ 0x61 /*a*/; | 4510 delta |= text.codeUnitAt(start + 3) ^ 0x61 /*a*/; |
4511 return delta; | 4511 return delta; |
4512 } | 4512 } |
4513 | 4513 |
4514 /// Helper function returning the length of a string, or `0` for `null`. | 4514 /// Helper function returning the length of a string, or `0` for `null`. |
4515 int _stringOrNullLength(String s) => (s == null) ? 0 : s.length; | 4515 int _stringOrNullLength(String s) => (s == null) ? 0 : s.length; |
OLD | NEW |