Index: mojo/public/dart/third_party/path/lib/src/style/url.dart |
diff --git a/mojo/public/dart/third_party/path/lib/src/style/url.dart b/mojo/public/dart/third_party/path/lib/src/style/url.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..255f22a6ff7ff933910d0a138eea3729335a1950 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/path/lib/src/style/url.dart |
@@ -0,0 +1,64 @@ |
+// Copyright (c) 2013, 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 path.style.url; |
+ |
+import '../characters.dart' as chars; |
+import '../internal_style.dart'; |
+ |
+/// The style for URL paths. |
+class UrlStyle extends InternalStyle { |
+ UrlStyle(); |
+ |
+ final name = 'url'; |
+ final separator = '/'; |
+ final separators = const ['/']; |
+ |
+ // Deprecated properties. |
+ |
+ final separatorPattern = new RegExp(r'/'); |
+ final needsSeparatorPattern = |
+ new RegExp(r"(^[a-zA-Z][-+.a-zA-Z\d]*://|[^/])$"); |
+ final rootPattern = new RegExp(r"[a-zA-Z][-+.a-zA-Z\d]*://[^/]*"); |
+ final relativeRootPattern = new RegExp(r"^/"); |
+ |
+ bool containsSeparator(String path) => path.contains('/'); |
+ |
+ bool isSeparator(int codeUnit) => codeUnit == chars.SLASH; |
+ |
+ bool needsSeparator(String path) { |
+ if (path.isEmpty) return false; |
+ |
+ // A URL that doesn't end in "/" always needs a separator. |
+ if (!isSeparator(path.codeUnitAt(path.length - 1))) return true; |
+ |
+ // A URI that's just "scheme://" needs an extra separator, despite ending |
+ // with "/". |
+ return path.endsWith("://") && rootLength(path) == path.length; |
+ } |
+ |
+ int rootLength(String path) { |
+ if (path.isEmpty) return 0; |
+ if (isSeparator(path.codeUnitAt(0))) return 1; |
+ var index = path.indexOf("/"); |
+ if (index > 0 && path.startsWith('://', index - 1)) { |
+ // The root part is up until the next '/', or the full path. Skip |
+ // '://' and search for '/' after that. |
+ index = path.indexOf('/', index + 2); |
+ if (index > 0) return index; |
+ return path.length; |
+ } |
+ return 0; |
+ } |
+ |
+ bool isRootRelative(String path) => |
+ path.isNotEmpty && isSeparator(path.codeUnitAt(0)); |
+ |
+ String getRelativeRoot(String path) => isRootRelative(path) ? '/' : null; |
+ |
+ String pathFromUri(Uri uri) => uri.toString(); |
+ |
+ Uri relativePathToUri(String path) => Uri.parse(path); |
+ Uri absolutePathToUri(String path) => Uri.parse(path); |
+} |