factor out Filter::Keyword::Parser
[p5sagit/Filter-Keyword.git] / lib / Filter / Keyword.pm
CommitLineData
3b08744b 1package Filter::Keyword;
2
3b08744b 3use Filter::Util::Call;
c46d1069 4use Filter::Keyword::Parser;
3b08744b 5use Moo;
6
c46d1069 7has parser => (is => 'ro', required => 1);
3b08744b 8
c46d1069 9has parser_object => (is => 'lazy');
3b08744b 10
c46d1069 11sub _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 26sub 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
361;