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

Unified Diff: pkg/path/lib/src/internal_style.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, 7 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
Index: pkg/path/lib/src/internal_style.dart
diff --git a/pkg/path/lib/src/internal_style.dart b/pkg/path/lib/src/internal_style.dart
index 13fb57e1454dac40877690cdf456f24e2aeda630..6eedc4d378e601bb0384c5fbf82133817bc8563e 100644
--- a/pkg/path/lib/src/internal_style.dart
+++ b/pkg/path/lib/src/internal_style.dart
@@ -13,55 +13,33 @@ import 'style.dart';
/// the members that [Context] uses should be hidden from them. Those members
/// are defined on this class instead.
abstract class InternalStyle extends Style {
- /// The path separator for this style. On POSIX, this is `/`. On Windows,
- /// it's `\`.
+ /// The default path separator for this style.
+ ///
+ /// On POSIX, this is `/`. On Windows, it's `\`.
String get separator;
- /// The [Pattern] that can be used to match a separator for a path in this
- /// style. Windows allows both "/" and "\" as path separators even though "\"
- /// is the canonical one.
- Pattern get separatorPattern;
+ /// All valid path separators for this style.
+ ///
+ /// These are assumed to each be a single character.
+ List<String> get separators;
- /// The [Pattern] that matches path components that need a separator after
- /// them.
+ /// Returns whether this path component needs a separator after it.
///
/// Windows and POSIX styles just need separators when the previous component
/// doesn't already end in a separator, but the URL always needs to place a
/// separator between the root and the first component, even if the root
/// already ends in a separator character. For example, to join "file://" and
/// "usr", an additional "/" is needed (making "file:///usr").
- Pattern get needsSeparatorPattern;
-
- /// The [Pattern] that can be used to match the root prefix of an absolute
- /// path in this style.
- Pattern get rootPattern;
-
- /// The [Pattern] that can be used to match the root prefix of a root-relative
- /// path in this style.
- ///
- /// This can be null to indicate that this style doesn't support root-relative
- /// paths.
- final Pattern relativeRootPattern = null;
+ bool needsSeparator(String path);
/// Gets the root prefix of [path] if path is absolute. If [path] is relative,
/// returns `null`.
- String getRoot(String path) {
- // TODO(rnystrom): Use firstMatch() when #7080 is fixed.
- var matches = rootPattern.allMatches(path);
- if (matches.isNotEmpty) return matches.first[0];
- return getRelativeRoot(path);
- }
+ String getRoot(String path);
/// Gets the root prefix of [path] if it's root-relative.
///
/// If [path] is relative or absolute and not root-relative, returns `null`.
- String getRelativeRoot(String path) {
- if (relativeRootPattern == null) return null;
- // TODO(rnystrom): Use firstMatch() when #7080 is fixed.
- var matches = relativeRootPattern.allMatches(path);
- if (matches.isEmpty) return null;
- return matches.first[0];
- }
+ String getRelativeRoot(String path);
/// Returns the path represented by [uri] in this style.
String pathFromUri(Uri uri);

Powered by Google App Engine
This is Rietveld 408576698