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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/util/uri_extras.dart

Issue 16019002: Merge the dart:uri library into dart:core and update the Uri class (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Final cleanup Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 library uri_extras; 5 library uri_extras;
6 6
7 import 'dart:math'; 7 import 'dart:math';
8 import 'dart:uri';
9 8
10 String relativize(Uri base, Uri uri, bool isWindows) { 9 String relativize(Uri base, Uri uri, bool isWindows) {
11 if (!base.path.startsWith('/')) { 10 if (!base.path.startsWith('/')) {
12 // Also throw an exception if [base] or base.path is null. 11 // Also throw an exception if [base] or base.path is null.
13 throw new ArgumentError('Expected absolute path: ${base.path}'); 12 throw new ArgumentError('Expected absolute path: ${base.path}');
14 } 13 }
15 if (!uri.path.startsWith('/')) { 14 if (!uri.path.startsWith('/')) {
16 // Also throw an exception if [uri] or uri.path is null. 15 // Also throw an exception if [uri] or uri.path is null.
17 throw new ArgumentError('Expected absolute path: ${uri.path}'); 16 throw new ArgumentError('Expected absolute path: ${uri.path}');
18 } 17 }
19 bool equalsNCS(String a, String b) { 18 bool equalsNCS(String a, String b) {
20 return a.toLowerCase() == b.toLowerCase(); 19 return a.toLowerCase() == b.toLowerCase();
21 } 20 }
22 21
23 String normalize(String path) { 22 String normalize(String path) {
24 if (isWindows) { 23 if (isWindows) {
25 return path.toLowerCase(); 24 return path.toLowerCase();
26 } else { 25 } else {
27 return path; 26 return path;
28 } 27 }
29 } 28 }
30 29
31 if (equalsNCS(base.scheme, 'file') && 30 if (equalsNCS(base.scheme, 'file') &&
32 equalsNCS(base.scheme, uri.scheme) && 31 equalsNCS(base.scheme, uri.scheme) &&
33 base.userInfo == uri.userInfo && 32 base.userInfo == uri.userInfo &&
34 equalsNCS(base.domain, uri.domain) && 33 equalsNCS(base.host, uri.host) &&
35 base.port == uri.port && 34 base.port == uri.port &&
36 uri.query == "" && uri.fragment == "") { 35 uri.query == "" && uri.fragment == "") {
37 if (normalize(uri.path).startsWith(normalize(base.path))) { 36 if (normalize(uri.path).startsWith(normalize(base.path))) {
38 return uri.path.substring(base.path.length); 37 return uri.path.substring(base.path.length);
39 } 38 }
40 List<String> uriParts = uri.path.split('/'); 39 List<String> uriParts = uri.path.split('/');
41 List<String> baseParts = base.path.split('/'); 40 List<String> baseParts = base.path.split('/');
42 int common = 0; 41 int common = 0;
43 int length = min(uriParts.length, baseParts.length); 42 int length = min(uriParts.length, baseParts.length);
44 while (common < length && 43 while (common < length &&
(...skipping 11 matching lines...) Expand all
56 sb.write('../'); 55 sb.write('../');
57 } 56 }
58 for (int i = common; i < uriParts.length - 1; i++) { 57 for (int i = common; i < uriParts.length - 1; i++) {
59 sb.write('${uriParts[i]}/'); 58 sb.write('${uriParts[i]}/');
60 } 59 }
61 sb.write('${uriParts.last}'); 60 sb.write('${uriParts.last}');
62 return sb.toString(); 61 return sb.toString();
63 } 62 }
64 return uri.toString(); 63 return uri.toString();
65 } 64 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698