OLD | NEW |
| (Empty) |
1 part of petitparser.debug; | |
2 | |
3 /// Handler function for the [ContinuationParser]. | |
4 typedef Result ContinuationHandler( | |
5 Result continuation(Context context), Context context); | |
6 | |
7 /// Continuation parser that when activated captures a continuation function | |
8 /// and passes it together with the current context into the handler. | |
9 /// | |
10 /// Handlers are not required to call the continuation, but can completely ignor
e | |
11 /// it, call it multiple times, and/or store it away for later use. Similarly | |
12 /// handlers can modify the current context and/or modify the returned result. | |
13 /// | |
14 /// The following example shows a simple wrapper. Messages are printed before an
d | |
15 /// after the `digit()` parser is activated: | |
16 /// | |
17 /// var wrapped = digit(); | |
18 /// var parser = new ContinuationParser(wrapped, (continuation, context) { | |
19 /// print('Parser will be activated, the context is $context.'); | |
20 /// var result = continuation(context); | |
21 /// print('Parser was activated, the result is $result.'); | |
22 /// return result; | |
23 /// }); | |
24 /// | |
25 /// See [profile], [progress], and [trace] for more elaborate examples. | |
26 class ContinuationParser extends DelegateParser { | |
27 final ContinuationHandler handler; | |
28 | |
29 ContinuationParser(parser, this.handler) : super(parser); | |
30 | |
31 @override | |
32 Result parseOn(Context context) { | |
33 return handler((result) => super.parseOn(result), context); | |
34 } | |
35 | |
36 @override | |
37 Parser copy() => new ContinuationParser(children[0], handler); | |
38 } | |
OLD | NEW |