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

Side by Side Diff: pkg/path/lib/src/style/posix.dart

Issue 309803003: Avoid using RegExps in path to work around issue 19090. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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) 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.style.posix; 5 library path.style.posix;
6 6
7 import '../parsed_path.dart'; 7 import '../parsed_path.dart';
8 import '../internal_style.dart'; 8 import '../internal_style.dart';
9 9
10 /// The style for POSIX paths. 10 /// The style for POSIX paths.
11 class PosixStyle extends InternalStyle { 11 class PosixStyle extends InternalStyle {
12 PosixStyle(); 12 PosixStyle();
13 13
14 final name = 'posix'; 14 final name = 'posix';
15 final separator = '/'; 15 final separator = '/';
16 final separators = const ['/'];
17
18 // Deprecated properties.
19
16 final separatorPattern = new RegExp(r'/'); 20 final separatorPattern = new RegExp(r'/');
17 final needsSeparatorPattern = new RegExp(r'[^/]$'); 21 final needsSeparatorPattern = new RegExp(r'[^/]$');
18 final rootPattern = new RegExp(r'^/'); 22 final rootPattern = new RegExp(r'^/');
23 final relativeRootPattern = null;
24
25 bool needsSeparator(String path) =>
26 !path.isEmpty && path.codeUnitAt(path.length - 1) != 0x2f; // "/"
Bob Nystrom 2014/06/02 22:43:05 !path.isEmpty -> path.isNotEmpty and elsewhere.
nweiz 2014/06/02 23:13:25 Done.
27
28 String getRoot(String path) {
29 if (!path.isEmpty && path.codeUnitAt(0) == 0x2f) return '/';
30 return null;
31 }
32
33 String getRelativeRoot(String path) => null;
19 34
20 String pathFromUri(Uri uri) { 35 String pathFromUri(Uri uri) {
21 if (uri.scheme == '' || uri.scheme == 'file') { 36 if (uri.scheme == '' || uri.scheme == 'file') {
22 return Uri.decodeComponent(uri.path); 37 return Uri.decodeComponent(uri.path);
23 } 38 }
24 throw new ArgumentError("Uri $uri must have scheme 'file:'."); 39 throw new ArgumentError("Uri $uri must have scheme 'file:'.");
25 } 40 }
26 41
27 Uri absolutePathToUri(String path) { 42 Uri absolutePathToUri(String path) {
28 var parsed = new ParsedPath.parse(path, this); 43 var parsed = new ParsedPath.parse(path, this);
29 if (parsed.parts.isEmpty) { 44 if (parsed.parts.isEmpty) {
30 // If the path is a bare root (e.g. "/"), [components] will 45 // If the path is a bare root (e.g. "/"), [components] will
31 // currently be empty. We add two empty components so the URL constructor 46 // currently be empty. We add two empty components so the URL constructor
32 // produces "file:///", with a trailing slash. 47 // produces "file:///", with a trailing slash.
33 parsed.parts.addAll(["", ""]); 48 parsed.parts.addAll(["", ""]);
34 } else if (parsed.hasTrailingSeparator) { 49 } else if (parsed.hasTrailingSeparator) {
35 // If the path has a trailing slash, add a single empty component so the 50 // If the path has a trailing slash, add a single empty component so the
36 // URI has a trailing slash as well. 51 // URI has a trailing slash as well.
37 parsed.parts.add(""); 52 parsed.parts.add("");
38 } 53 }
39 54
40 return new Uri(scheme: 'file', pathSegments: parsed.parts); 55 return new Uri(scheme: 'file', pathSegments: parsed.parts);
41 } 56 }
42 } 57 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698