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, as specified by RFC-3986, http://tools.ietf.org/html/rfc3986. | 8 * A parsed URI, as specified by RFC-3986, http://tools.ietf.org/html/rfc3986. |
| 9 */ | 9 */ |
| 10 class Uri { | 10 class Uri { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 final String query; | 74 final String query; |
| 75 | 75 |
| 76 /** | 76 /** |
| 77 * Returns the fragment identifier component. | 77 * Returns the fragment identifier component. |
| 78 * | 78 * |
| 79 * Returns the empty string if there is no fragment identifier | 79 * Returns the empty string if there is no fragment identifier |
| 80 * component. | 80 * component. |
| 81 */ | 81 */ |
| 82 final String fragment; | 82 final String fragment; |
| 83 | 83 |
| 84 List<String> _pathSegments; | |
|
Lasse Reichstein Nielsen
2013/05/30 11:57:50
Dartdoc saying that this caches the computed retur
Søren Gjesse
2013/05/30 13:38:25
Done.
| |
| 85 Map<String, String> _queryParameters; | |
|
Lasse Reichstein Nielsen
2013/05/30 11:57:50
Similar.
Søren Gjesse
2013/05/30 13:38:25
Done.
| |
| 86 | |
| 84 /** | 87 /** |
| 85 * Creates a new URI object by parsing a URI string. | 88 * Creates a new URI object by parsing a URI string. |
| 86 */ | 89 */ |
| 87 static Uri parse(String uri) => new Uri._fromMatch(_splitRe.firstMatch(uri)); | 90 static Uri parse(String uri) => new Uri._fromMatch(_splitRe.firstMatch(uri)); |
| 88 | 91 |
| 89 Uri._fromMatch(Match m) : | 92 Uri._fromMatch(Match m) : |
| 90 this(scheme: _emptyIfNull(m[_COMPONENT_SCHEME]), | 93 this(scheme: _emptyIfNull(m[_COMPONENT_SCHEME]), |
| 91 userInfo: _emptyIfNull(m[_COMPONENT_USER_INFO]), | 94 userInfo: _emptyIfNull(m[_COMPONENT_USER_INFO]), |
| 92 host: _eitherOf( | 95 host: _eitherOf( |
| 93 m[_COMPONENT_HOST], m[_COMPONENT_HOST_IPV6]), | 96 m[_COMPONENT_HOST], m[_COMPONENT_HOST_IPV6]), |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 _port = 0; | 163 _port = 0; |
| 161 } else { | 164 } else { |
| 162 _port = port; | 165 _port = port; |
| 163 } | 166 } |
| 164 } | 167 } |
| 165 | 168 |
| 166 /* | 169 /* |
| 167 * Returns the URI path split into its segments. Each of the | 170 * Returns the URI path split into its segments. Each of the |
| 168 * segments in the returned list have been decoded. If the path is | 171 * segments in the returned list have been decoded. If the path is |
| 169 * empty the empty list will be returned. | 172 * empty the empty list will be returned. |
| 173 * | |
| 174 * The returned list should not be modified as the same object will | |
| 175 * be returned for each call. | |
|
Lasse Reichstein Nielsen
2013/05/30 11:57:50
"should not" isn't very safe. Could you make it un
Søren Gjesse
2013/05/30 13:38:25
Created an immutable list wrapper.
| |
| 170 */ | 176 */ |
| 171 List<String> get pathSegments { | 177 List<String> get pathSegments { |
| 172 if (path == "") return const<String>[]; | 178 if (_pathSegments == null) { |
| 173 return path.split("/").map(Uri.decodeComponent).toList(growable: false); | 179 _pathSegments = |
| 180 path == "" ? const<String>[] | |
| 181 : path.split("/") | |
| 182 .map(Uri.decodeComponent) | |
| 183 .toList(growable: false); | |
| 184 } | |
| 185 return _pathSegments; | |
| 174 } | 186 } |
| 175 | 187 |
| 176 /* | 188 /* |
| 177 * Returns the URI query split into a map according to the rules | 189 * Returns the URI query split into a map according to the rules |
| 178 * specified for FORM post in the HTML 4.01 specification. Each key | 190 * specified for FORM post in the HTML 4.01 specification. Each key |
| 179 * and value in the returned map have been decoded. If there is no | 191 * and value in the returned map have been decoded. If there is no |
| 180 * query the empty map will be returned. | 192 * query the empty map will be returned. |
| 193 * | |
| 194 * The returned map should not be modified as the same object will | |
| 195 * be returned for each call. | |
| 181 */ | 196 */ |
| 182 Map<String, String> get queryParameters { | 197 Map<String, String> get queryParameters { |
| 183 return query.split("&").fold({}, (map, element) { | 198 if (_queryParameters == null) { |
| 199 _queryParameters = query.split("&").fold({}, (map, element) { | |
| 184 int index = element.indexOf("="); | 200 int index = element.indexOf("="); |
| 185 if (index == -1) { | 201 if (index == -1) { |
| 186 if (!element.isEmpty) map[element] = ""; | 202 if (!element.isEmpty) map[element] = ""; |
| 187 } else if (index != 0) { | 203 } else if (index != 0) { |
| 188 var key = element.substring(0, index); | 204 var key = element.substring(0, index); |
| 189 var value = element.substring(index + 1); | 205 var value = element.substring(index + 1); |
| 190 map[Uri.decodeQueryComponent(key)] = decodeQueryComponent(value); | 206 map[Uri.decodeQueryComponent(key)] = decodeQueryComponent(value); |
| 191 } | 207 } |
| 192 return map; | 208 return map; |
| 193 }); | 209 }); |
| 210 } | |
| 211 return _queryParameters; | |
| 194 } | 212 } |
| 195 | 213 |
| 196 static String _makeScheme(String scheme) { | 214 static String _makeScheme(String scheme) { |
| 197 bool isSchemeLowerCharacter(int ch) { | 215 bool isSchemeLowerCharacter(int ch) { |
| 198 return ch < 128 && | 216 return ch < 128 && |
| 199 ((_schemeLowerTable[ch >> 4] & (1 << (ch & 0x0f))) != 0); | 217 ((_schemeLowerTable[ch >> 4] & (1 << (ch & 0x0f))) != 0); |
| 200 } | 218 } |
| 201 | 219 |
| 202 bool isSchemeCharacter(int ch) { | 220 bool isSchemeCharacter(int ch) { |
| 203 return ch < 128 && ((_schemeTable[ch >> 4] & (1 << (ch & 0x0f))) != 0); | 221 return ch < 128 && ((_schemeTable[ch >> 4] & (1 << (ch & 0x0f))) != 0); |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 937 0xafff, // 0x30 - 0x3f 1111111111110101 | 955 0xafff, // 0x30 - 0x3f 1111111111110101 |
| 938 // @ABCDEFGHIJKLMNO | 956 // @ABCDEFGHIJKLMNO |
| 939 0xffff, // 0x40 - 0x4f 1111111111111111 | 957 0xffff, // 0x40 - 0x4f 1111111111111111 |
| 940 // PQRSTUVWXYZ _ | 958 // PQRSTUVWXYZ _ |
| 941 0x87ff, // 0x50 - 0x5f 1111111111100001 | 959 0x87ff, // 0x50 - 0x5f 1111111111100001 |
| 942 // abcdefghijklmno | 960 // abcdefghijklmno |
| 943 0xfffe, // 0x60 - 0x6f 0111111111111111 | 961 0xfffe, // 0x60 - 0x6f 0111111111111111 |
| 944 // pqrstuvwxyz ~ | 962 // pqrstuvwxyz ~ |
| 945 0x47ff]; // 0x70 - 0x7f 1111111111100010 | 963 0x47ff]; // 0x70 - 0x7f 1111111111100010 |
| 946 } | 964 } |
| OLD | NEW |