App-SimpleScan-Plugin-LinkCheck
view release on metacpan or search on metacpan
lib/App/SimpleScan/Plugin/LinkCheck.pm view on Meta::CPAN
package App::SimpleScan::Plugin::LinkCheck;
$VERSION = '1.03';
use warnings;
use strict;
use Carp;
use Scalar::Util qw(looks_like_number);
use Text::Balanced qw(extract_quotelike extract_multiple);
sub import {
no strict 'refs';
*{caller() . '::_do_has_link'} = \&_do_has_link;
*{caller() . '::_do_no_link'} = \&_do_no_link;
*{caller() . '::link_condition'} = \&link_condition;
*{caller() . '::_link_conditions'} = \&_link_conditions;
*{caller() . '::_add_link_condition'} = \&_add_link_condition;
*{caller() . '::_extract_quotelike_args'} =
\&_extract_quotelike_args;
}
sub pragmas {
return ['has_link', \&_do_has_link],
['no_link', \&_do_no_link],
['forget_link', \&_do_forget_link],
['forget_all_links', \&_do_forget_all];
}
sub init {
my($class, $app) = @_;
$app->{Link_conditions} = {};
}
sub _do_forget_all {
my($self, $args) = @_;
$self->{Link_conditions} = {};
}
sub _do_forget_link {
my($self, $args) = @_;
my @links = $self->_extract_quotelike_args($args);
for my $link (@links) {
delete $self->{Link_conditions}->{$link};
}
}
sub _do_has_link {
my($self, $args) = @_;
my($name, $compare, $count);
if (!defined $args) {
$self->stack_code( qq(fail "No arguments for %%has_link";\n) );
$self->test_count( $self->test_count() + 1 );
return;
}
else {
# Extract strings and backticked strings and just plain words.
# We explicitly junk anything past the first three items.
($name, $compare, $count) = $self->_extract_quotelike_args($args);
}
$self->_add_link_condition( { name=>$name, compare=>$compare, count=>$count } );
}
sub _do_no_link {
my($self, $args) = @_;
if (!defined $args) {
$self->stack_code( qq(fail "No arguments for %%no_link";\n) );
$self->test_count( $self->test_count() + 1 );
}
else {
my ($name) = $self->_extract_quotelike_args($args);
$self->_do_has_link(qq($name == 0));
}
}
sub _link_conditions {
my ($self) = shift;
return wantarray ? @{ $self->{Link_conditions} } : $self->{Link_conditions};
}
( run in 0.757 second using v1.01-cache-2.11-cpan-39bf76dae61 )