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

Side by Side Diff: packages/petitparser/lib/src/petitparser/actions.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 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
OLDNEW
(Empty)
1 part of petitparser;
2
3 /// A parser that performs a transformation with a given function on the
4 /// successful parse result of the delegate.
5 class ActionParser extends DelegateParser {
6 final Function _function;
7
8 ActionParser(parser, this._function) : super(parser);
9
10 @override
11 Result parseOn(Context context) {
12 var result = _delegate.parseOn(context);
13 if (result.isSuccess) {
14 return result.success(_function(result.value));
15 } else {
16 return result;
17 }
18 }
19
20 @override
21 Parser copy() => new ActionParser(_delegate, _function);
22
23 @override
24 bool hasEqualProperties(Parser other) {
25 return other is ActionParser
26 && super.hasEqualProperties(other)
27 && _function == other._function;
28 }
29 }
30
31 /// A parser that silently consumes input of another parser around
32 /// its delegate.
33 class TrimmingParser extends DelegateParser {
34 Parser _left;
35 Parser _right;
36
37 TrimmingParser(parser, this._left, this._right) : super(parser);
38
39 @override
40 Result parseOn(Context context) {
41 var current = context;
42 do {
43 current = _left.parseOn(current);
44 } while (current.isSuccess);
45 var result = _delegate.parseOn(current);
46 if (result.isFailure) {
47 return result;
48 }
49 current = result;
50 do {
51 current = _right.parseOn(current);
52 } while (current.isSuccess);
53 return current.success(result.value);
54 }
55
56 @override
57 Parser copy() => new TrimmingParser(_delegate, _left, _right);
58
59 @override
60 List<Parser> get children => [_delegate, _left, _right];
61
62 @override
63 void replace(Parser source, Parser target) {
64 super.replace(source, target);
65 if (_left == source) {
66 _left = target;
67 }
68 if (_right == source) {
69 _right = target;
70 }
71 }
72 }
73
74 /// A parser that answers a substring or sub-list of the range its delegate
75 /// parses.
76 class FlattenParser extends DelegateParser {
77 FlattenParser(parser) : super(parser);
78
79 @override
80 Result parseOn(Context context) {
81 var result = _delegate.parseOn(context);
82 if (result.isSuccess) {
83 var output = context.buffer is String
84 ? context.buffer.substring(context.position, result.position)
85 : context.buffer.sublist(context.position, result.position);
86 return result.success(output);
87 } else {
88 return result;
89 }
90 }
91
92 @override
93 Parser copy() => new FlattenParser(_delegate);
94 }
95
96 /// A parser that answers a token of the result its delegate parses.
97 class TokenParser extends DelegateParser {
98 TokenParser(parser) : super(parser);
99
100 @override
101 Result parseOn(Context context) {
102 var result = _delegate.parseOn(context);
103 if (result.isSuccess) {
104 var token = new Token(
105 result.value, context.buffer, context.position, result.position);
106 return result.success(token);
107 } else {
108 return result;
109 }
110 }
111
112 @override
113 Parser copy() => new TokenParser(_delegate);
114 }
OLDNEW
« no previous file with comments | « packages/petitparser/lib/src/lisp/standard.dart ('k') | packages/petitparser/lib/src/petitparser/characters.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698