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

Side by Side Diff: third_party/pkg/route_hierarchical/lib/pattern.dart

Issue 257423008: Update all Angular libs (run update_all.sh). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 /**
6 * Pattern utilities for use with server.Router.
7 *
8 * Example:
9 *
10 * var router = new Router(server);
11 * router.filter(matchesAny(new UrlPattern(r'/(\w+)'),
12 * exclude: [new UrlPattern('/login')]), authFilter);
13 */
14 library pattern;
15
16 class _MultiPattern extends Pattern {
17 final Iterable<Pattern> include;
18 final Iterable<Pattern> exclude;
19
20 _MultiPattern(Iterable<Pattern> this.include,
21 {Iterable<Pattern> this.exclude});
22
23 Iterable<Match> allMatches(String str) {
24 var _allMatches = [];
25 for (var pattern in include) {
26 var matches = pattern.allMatches(str);
27 if (_hasMatch(matches)) {
28 if (exclude != null) {
29 for (var excludePattern in exclude) {
30 if (_hasMatch(excludePattern.allMatches(str))) {
31 return [];
32 }
33 }
34 }
35 _allMatches.add(matches);
36 }
37 }
38 return _allMatches.expand((x) => x);
39 }
40
41 Match matchAsPrefix(String string, [int start = 0]) {
42 throw new UnimplementedError('matchAsPrefix is not implemented');
43 }
44 }
45
46 /**
47 * Returns a [Pattern] that matches against every pattern in [include] and
48 * returns all the matches. If the input string matches against any pattern in
49 * [exclude] no matches are returned.
50 */
51 Pattern matchAny(Iterable<Pattern> include, {Iterable<Pattern> exclude}) =>
52 new _MultiPattern(include, exclude: exclude);
53
54 /**
55 * Returns true if [pattern] has a single match in [str] that matches the whole
56 * string, not a substring.
57 */
58 bool matchesFull(Pattern pattern, String str) {
59 var iter = pattern.allMatches(str).iterator;
60 if (iter.moveNext()) {
61 var match = iter.current;
62 return match.start == 0 && match.end == str.length && !iter.moveNext();
63 }
64 return false;
65 }
66
67 bool matchesPrefix(Pattern pattern, String str) {
68 Iterable<Match> matches = pattern.allMatches(str);
69 return !matches.isEmpty && matches.first.start == 0;
70 }
71
72 /// return the tail
73 Match prefixMatch(Pattern pattern, String str) {
74 Iterable<Match> matches = pattern.allMatches(str);
75 if (!matches.isEmpty && matches.first.start == 0) {
76 return matches.first;
77 }
78 return null;
79 }
80
81 bool _hasMatch(Iterable<Match> matches) => matches.iterator.moveNext();
OLDNEW
« no previous file with comments | « third_party/pkg/route_hierarchical/lib/client.dart ('k') | third_party/pkg/route_hierarchical/lib/url_pattern.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698