Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Unified Diff: utils/uri/uri.dart

Issue 9325085: Move utils/{uri, utf8} to lib/{uri, utf8} . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/create_sdk.py ('k') | utils/utf8/utf8.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/uri/uri.dart
===================================================================
--- utils/uri/uri.dart (revision 3949)
+++ utils/uri/uri.dart (working copy)
@@ -1,215 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#library('uri');
-
-/**
- * A parsed URI, inspired by:
- * http://closure-library.googlecode.com/svn/docs/class_goog_Uri.html
- */
-class Uri {
- final String scheme;
- final String userInfo;
- final String domain;
- final int port;
- final String path;
- final String query;
- final String fragment;
-
- Uri.fromString(String uri) : this._fromMatch(_splitRe.firstMatch(uri));
-
- Uri._fromMatch(Match m) : this(_emptyIfNull(m[_COMPONENT_SCHEME]),
- _emptyIfNull(m[_COMPONENT_USER_INFO]),
- _emptyIfNull(m[_COMPONENT_DOMAIN]),
- _parseIntOrZero(m[_COMPONENT_PORT]),
- _emptyIfNull(m[_COMPONENT_PATH]),
- _emptyIfNull(m[_COMPONENT_QUERY_DATA]),
- _emptyIfNull(m[_COMPONENT_FRAGMENT]));
-
- const Uri([String this.scheme = "", String this.userInfo ="",
- String this.domain = "", int this.port = 0,
- String this.path = "", String this.query = "",
- String this.fragment = ""]);
-
- static String _emptyIfNull(String val) => val != null ? val : '';
-
- static int _parseIntOrZero(String val) {
- if (val !== null && val != '') {
- return Math.parseInt(val);
- } else {
- return 0;
- }
- }
-
- // NOTE: This code was ported from: closure-library/closure/goog/uri/utils.js
- static final RegExp _splitRe = const RegExp(
- '^' +
- '(?:' +
- '([^:/?#.]+)' + // scheme - ignore special characters
- // used by other URL parts such as :,
- // ?, /, #, and .
- ':)?' +
- '(?://' +
- '(?:([^/?#]*)@)?' + // userInfo
- '([\\w\\d\\-\\u0100-\\uffff.%]*)' +
- // domain - restrict to letters,
- // digits, dashes, dots, percent
- // escapes, and unicode characters.
- '(?::([0-9]+))?' + // port
- ')?' +
- '([^?#]+)?' + // path
- '(?:\\?([^#]*))?' + // query
- '(?:#(.*))?' + // fragment
- '\$');
-
- static final _COMPONENT_SCHEME = 1;
- static final _COMPONENT_USER_INFO = 2;
- static final _COMPONENT_DOMAIN = 3;
- static final _COMPONENT_PORT = 4;
- static final _COMPONENT_PATH = 5;
- static final _COMPONENT_QUERY_DATA = 6;
- static final _COMPONENT_FRAGMENT = 7;
-
- /**
- * Determines whether a URI is absolute.
- *
- * See: http://tools.ietf.org/html/rfc3986#section-4.3
- */
- bool isAbsolute() {
- if ("" == scheme) return false;
- if ("" != fragment) return false;
- return true;
-
- /* absolute-URI = scheme ":" hier-part [ "?" query ]
- * hier-part = "//" authority path-abempty
- * / path-absolute
- * / path-rootless
- * / path-empty
- *
- * path = path-abempty ; begins with "/" or is empty
- * / path-absolute ; begins with "/" but not "//"
- * / path-noscheme ; begins with a non-colon segment
- * / path-rootless ; begins with a segment
- * / path-empty ; zero characters
- *
- * path-abempty = *( "/" segment )
- * path-absolute = "/" [ segment-nz *( "/" segment ) ]
- * path-noscheme = segment-nz-nc *( "/" segment )
- * path-rootless = segment-nz *( "/" segment )
- * path-empty = 0<pchar>
- * segment = *pchar
- * segment-nz = 1*pchar
- * segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- * ; non-zero-length segment without any colon ":"
- *
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
- */
- }
-
- Uri resolve(String uri) {
- return resolveUri(new Uri.fromString(uri));
- }
-
- Uri resolveUri(Uri reference) {
- // From RFC 3986.
- String targetScheme;
- String targetUserInfo;
- String targetDomain;
- int targetPort;
- String targetPath;
- String targetQuery;
- if (reference.scheme != "") {
- targetScheme = reference.scheme;
- targetUserInfo = reference.userInfo;
- targetDomain = reference.domain;
- targetPort = reference.port;
- targetPath = removeDotSegments(reference.path);
- targetQuery = reference.query;
- } else {
- if (reference.hasAuthority()) {
- targetUserInfo = reference.userInfo;
- targetDomain = reference.domain;
- targetPort = reference.port;
- targetPath = removeDotSegments(reference.path);
- targetQuery = reference.query;
- } else {
- if (reference.path == "") {
- targetPath = this.path;
- if (reference.query != "") {
- targetQuery = reference.query;
- } else {
- targetQuery = this.query;
- }
- } else {
- if (reference.path.startsWith("/")) {
- targetPath = removeDotSegments(reference.path);
- } else {
- targetPath = removeDotSegments(merge(this.path, reference.path));
- }
- targetQuery = reference.query;
- }
- targetUserInfo = this.userInfo;
- targetDomain = this.domain;
- targetPort = this.port;
- }
- targetScheme = this.scheme;
- }
- return new Uri(targetScheme, targetUserInfo, targetDomain, targetPort,
- targetPath, targetQuery, reference.fragment);
- }
-
- bool hasAuthority() {
- return (userInfo != "") || (domain != "") || (port != 0);
- }
-
- String toString() {
- StringBuffer sb = new StringBuffer();
- _addIfNonEmpty(sb, scheme, scheme, ':');
- if (hasAuthority() || (scheme == "file")) {
- sb.add("//");
- _addIfNonEmpty(sb, userInfo, userInfo, "@");
- sb.add(domain === null ? "null" : domain);
- if (port != 0) {
- sb.add(":");
- sb.add(port.toString());
- }
- }
- sb.add(path === null ? "null" : path);
- _addIfNonEmpty(sb, query, "?", query);
- _addIfNonEmpty(sb, fragment, "#", fragment);
- return sb.toString();
- }
-
- static void _addIfNonEmpty(StringBuffer sb, String test,
- String first, String second) {
- if ("" != test) {
- sb.add(first === null ? "null" : first);
- sb.add(second === null ? "null" : second);
- }
- }
-}
-
-String merge(String base, String reference) {
- if (base == "") return "/$reference";
- return base.substring(0, base.lastIndexOf("/") + 1) + "$reference";
-}
-
-String removeDotSegments(String path) {
- List<String> output = [];
- bool appendSlash = false;
- for (String segment in path.split("/")) {
- appendSlash = false;
- if (segment == "..") {
- if (!output.isEmpty() &&
- ((output.length != 1) || (output[0] != ""))) output.removeLast();
- appendSlash = true;
- } else if ("." == segment) {
- appendSlash = true;
- } else {
- output.add(segment);
- }
- }
- if (appendSlash) output.add("");
- return Strings.join(output, "/");
-}
« no previous file with comments | « tools/create_sdk.py ('k') | utils/utf8/utf8.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698