OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 path.context; | 5 library path.context; |
6 | 6 |
7 import 'internal_style.dart'; | 7 import 'internal_style.dart'; |
8 import 'style.dart'; | 8 import 'style.dart'; |
9 import 'parsed_path.dart'; | 9 import 'parsed_path.dart'; |
10 import 'path_exception.dart'; | 10 import 'path_exception.dart'; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 /// context.rootPrefix('/path/to/foo'); // -> '/' | 141 /// context.rootPrefix('/path/to/foo'); // -> '/' |
142 /// | 142 /// |
143 /// // Windows | 143 /// // Windows |
144 /// context.rootPrefix(r'path\to\foo'); // -> '' | 144 /// context.rootPrefix(r'path\to\foo'); // -> '' |
145 /// context.rootPrefix(r'C:\path\to\foo'); // -> r'C:\' | 145 /// context.rootPrefix(r'C:\path\to\foo'); // -> r'C:\' |
146 /// | 146 /// |
147 /// // URL | 147 /// // URL |
148 /// context.rootPrefix('path/to/foo'); // -> '' | 148 /// context.rootPrefix('path/to/foo'); // -> '' |
149 /// context.rootPrefix('http://dartlang.org/path/to/foo'); | 149 /// context.rootPrefix('http://dartlang.org/path/to/foo'); |
150 /// // -> 'http://dartlang.org' | 150 /// // -> 'http://dartlang.org' |
151 String rootPrefix(String path) { | 151 String rootPrefix(String path) => path.substring(0, style.rootLength(path)); |
152 var root = _parse(path).root; | |
153 return root == null ? '' : root; | |
154 } | |
155 | 152 |
156 /// Returns `true` if [path] is an absolute path and `false` if it is a | 153 /// Returns `true` if [path] is an absolute path and `false` if it is a |
157 /// relative path. | 154 /// relative path. |
158 /// | 155 /// |
159 /// On POSIX systems, absolute paths start with a `/` (forward slash). On | 156 /// On POSIX systems, absolute paths start with a `/` (forward slash). On |
160 /// Windows, an absolute path starts with `\\`, or a drive letter followed by | 157 /// Windows, an absolute path starts with `\\`, or a drive letter followed by |
161 /// `:/` or `:\`. For URLs, absolute paths either start with a protocol and | 158 /// `:/` or `:\`. For URLs, absolute paths either start with a protocol and |
162 /// optional hostname (e.g. `http://dartlang.org`, `file://`) or with a `/`. | 159 /// optional hostname (e.g. `http://dartlang.org`, `file://`) or with a `/`. |
163 /// | 160 /// |
164 /// URLs that start with `/` are known as "root-relative", since they're | 161 /// URLs that start with `/` are known as "root-relative", since they're |
165 /// relative to the root of the current URL. Since root-relative paths are | 162 /// relative to the root of the current URL. Since root-relative paths are |
166 /// still absolute in every other sense, [isAbsolute] will return true for | 163 /// still absolute in every other sense, [isAbsolute] will return true for |
167 /// them. They can be detected using [isRootRelative]. | 164 /// them. They can be detected using [isRootRelative]. |
168 bool isAbsolute(String path) => _parse(path).isAbsolute; | 165 bool isAbsolute(String path) => style.rootLength(path) > 0; |
169 | 166 |
170 /// Returns `true` if [path] is a relative path and `false` if it is absolute. | 167 /// Returns `true` if [path] is a relative path and `false` if it is absolute. |
171 /// On POSIX systems, absolute paths start with a `/` (forward slash). On | 168 /// On POSIX systems, absolute paths start with a `/` (forward slash). On |
172 /// Windows, an absolute path starts with `\\`, or a drive letter followed by | 169 /// Windows, an absolute path starts with `\\`, or a drive letter followed by |
173 /// `:/` or `:\`. | 170 /// `:/` or `:\`. |
174 bool isRelative(String path) => !this.isAbsolute(path); | 171 bool isRelative(String path) => !this.isAbsolute(path); |
175 | 172 |
176 /// Returns `true` if [path] is a root-relative path and `false` if it's not. | 173 /// Returns `true` if [path] is a root-relative path and `false` if it's not. |
177 /// | 174 /// |
178 /// URLs that start with `/` are known as "root-relative", since they're | 175 /// URLs that start with `/` are known as "root-relative", since they're |
179 /// relative to the root of the current URL. Since root-relative paths are | 176 /// relative to the root of the current URL. Since root-relative paths are |
180 /// still absolute in every other sense, [isAbsolute] will return true for | 177 /// still absolute in every other sense, [isAbsolute] will return true for |
181 /// them. They can be detected using [isRootRelative]. | 178 /// them. They can be detected using [isRootRelative]. |
182 /// | 179 /// |
183 /// No POSIX and Windows paths are root-relative. | 180 /// No POSIX and Windows paths are root-relative. |
184 bool isRootRelative(String path) => _parse(path).isRootRelative; | 181 bool isRootRelative(String path) => style.isRootRelative(path); |
185 | 182 |
186 /// Joins the given path parts into a single path. Example: | 183 /// Joins the given path parts into a single path. Example: |
187 /// | 184 /// |
188 /// context.join('path', 'to', 'foo'); // -> 'path/to/foo' | 185 /// context.join('path', 'to', 'foo'); // -> 'path/to/foo' |
189 /// | 186 /// |
190 /// If any part ends in a path separator, then a redundant separator will not | 187 /// If any part ends in a path separator, then a redundant separator will not |
191 /// be added: | 188 /// be added: |
192 /// | 189 /// |
193 /// context.join('path/', 'to', 'foo'); // -> 'path/to/foo | 190 /// context.join('path/', 'to', 'foo'); // -> 'path/to/foo |
194 /// | 191 /// |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 // Show the arguments. | 544 // Show the arguments. |
548 var message = new StringBuffer(); | 545 var message = new StringBuffer(); |
549 message.write("$method("); | 546 message.write("$method("); |
550 message.write(args.take(numArgs) | 547 message.write(args.take(numArgs) |
551 .map((arg) => arg == null ? "null" : '"$arg"') | 548 .map((arg) => arg == null ? "null" : '"$arg"') |
552 .join(", ")); | 549 .join(", ")); |
553 message.write("): part ${i - 1} was null, but part $i was not."); | 550 message.write("): part ${i - 1} was null, but part $i was not."); |
554 throw new ArgumentError(message.toString()); | 551 throw new ArgumentError(message.toString()); |
555 } | 552 } |
556 } | 553 } |
OLD | NEW |