The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

=head1 NAME
ActionParser::Specific - Makepp scanner class for a specified command scanner
=head1 SYNOPSIS
use ActionParser::Specific;
my $scanner=ActionParser::Specific->new("CommandParser::Vcs");
=head1 DESCRIPTION
C<ActionParser::Specific> is a class of type C<ActionParser> that always
chooses the specified command parser.
=cut
use strict;
our @ISA = qw/ActionParser/;
=head1 METHODS
=head2 new
my $rp = ActionParser::Specific->new($command_parser_class_name);
Returns a new ActionParser object that always uses a default-constructed
object of class $command_parser_class_name as its command parser.
=cut
sub new {
my ($self, $cp_class)=@_;
my $class=ref($self)||$self;
$cp_class = "CommandParser::$cp_class" unless $cp_class =~ /^CommandParser::/;
eval "require $cp_class";
unless($cp_class->can("new")) {
warn $@ if $@;
die "Unable to find `new' method via class $cp_class\n";
}
bless { COMMAND_PARSER_CLASS => $cp_class }, $class;
}
=head2 find_command_parser
my $cp = $rp->find_command_parser($command, $rule, $dir, \$found);
Construct the predefined CommandParser class object with $rule and $dir.
=cut
sub find_command_parser {
${$_[4]}++;
$_[0]->{COMMAND_PARSER_CLASS}->new(@_[2..3]);
# skip command text $_[0]
}
1;