Commit | Line | Data |
---|---|---|
3b08744b | 1 | package Filter::Keyword; |
2 | ||
3b08744b | 3 | use Filter::Util::Call; |
c46d1069 | 4 | use Filter::Keyword::Parser; |
3b08744b | 5 | use Moo; |
6 | ||
c46d1069 | 7 | has parser => (is => 'ro', required => 1); |
3b08744b | 8 | |
c46d1069 | 9 | has parser_object => (is => 'lazy'); |
3b08744b | 10 | |
c46d1069 | 11 | sub _build_parser_object { |
3b08744b | 12 | my ($self) = @_; |
c46d1069 | 13 | my %args = %{$self->parser}; |
14 | $args{reader} = sub { my $r = filter_read; ($_, $r) }; | |
15 | $args{re_add} = sub { | |
16 | my $parser = shift; | |
17 | filter_add(sub { | |
18 | my ($string, $code) = $parser->get_next; | |
19 | $_ = $string; | |
20 | return $code; | |
21 | }); | |
22 | }; | |
23 | Filter::Keyword::Parser->new(\%args); | |
3b08744b | 24 | } |
25 | ||
c46d1069 | 26 | sub install { |
3b08744b | 27 | my ($self) = @_; |
c46d1069 | 28 | my $parser = $self->parser_object; |
29 | filter_add(sub { | |
30 | my ($string, $code) = $parser->get_next; | |
31 | $_ = $string; | |
32 | return $code; | |
33 | }); | |
3b08744b | 34 | } |
35 | ||
36 | 1; |