factor out Filter::Keyword::Parser
[p5sagit/Filter-Keyword.git] / lib / Filter / Keyword.pm
1 package Filter::Keyword;
2
3 use Filter::Util::Call;
4 use Filter::Keyword::Parser;
5 use Moo;
6
7 has parser => (is => 'ro', required => 1);
8
9 has parser_object => (is => 'lazy');
10
11 sub _build_parser_object {
12   my ($self) = @_;
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);
24 }
25
26 sub install {
27   my ($self) = @_;
28   my $parser = $self->parser_object;
29   filter_add(sub {
30     my ($string, $code) = $parser->get_next;
31     $_ = $string;
32     return $code;
33   });
34 }
35
36 1;