Alien-Selenium
view release on metacpan or search on metacpan
inc/Pod/Snippets.pm view on Meta::CPAN
$snippets[$i] = Pod::Snippets::_Snippet->new
($line, $text, $snippets[$i]->names_set);
}
\@snippets;
};
return @{$self->{merged_snippets}};
}
=head2 _number_of_newlines_in($string)
This function (B<not> a method) returns the number of times $/ is
found in $string.
=cut
sub _number_of_newlines_in {
my @occurences = shift =~ m|($/)|gs;
return scalar @occurences;
}
=head1 Pod::Snippets::_Parser
This class is a subclass to L<Pod::Parser>, that builds appropriate
state on behalf of a I<Pod::Snippets> object.
=cut
package Pod::Snippets::_Parser;
use base "Pod::Parser";
=head2 new_for_pod_snippets (-opt1 => $val1, ...)
An alternate constructor with a different syntax suited for calling
from I<Pod::Snippets>. Available named options are:
=over
=item B<< -markup => $string >>
=item B<< -report_errors => $sub >>
=item B<< -filename => $filename >>
=item B<< -line => $line >>
Same as in L</load>, except that all these options are mandatory and
therefore caller should substitute appropriate default values if need
be.
=item B<< -impure => "ignore" >>
=item B<< -impure => "warn" >>
=item B<< -impure => "error" >>
=item B<< -overlap => "ignore" >> and so on
The parse flags to use for handling errors, properly decoded from the
B<-named_snippets> named argument to L</load>.
=back
=cut
sub new_for_pod_snippets {
my ($class, %opts) = @_;
my $self = $class->new;
while(my ($k, $v) = each %opts) {
$k =~ s/^(-?)(.*)$/$1pod_snippets_$2/;
$self->{$k} = $v;
}
return $self;
}
=head2 finalize_pod_snippets ()
Called after parsing is done; must raise any and all errors that occur
at the end of the file (eg snippets without a closing tag).
=cut
sub finalize_pod_snippets {
my ($self) = @_;
foreach my $snipname ($self->in_named_pod_snippet) {
$self->maybe_raise_pod_snippets_bad_pairing($snipname);
}
}
=head2 command ()
Overloaded so as to catch the I<Pod::Snippets> markup and keep state
accordingly.
=cut
sub command {
my ($self, $command, $paragraph, $line_num) = @_;
$self->pod_snippets_source_line_number($line_num);
$self->break_current_pod_snippet, return unless
($command =~ m/^(for|begin|end)/);
$self->break_current_pod_snippet, return unless
(my ($details) = $paragraph =~
m/\A\s*$self->{-pod_snippets_markup}(.*)$/m);
# Accept "=begin test" and "=end test" and do nothing...
if (! $details) {
$self->ignoring_pod_snippets(0) if ($command eq "for");
return;
}
# ... But moan about "=begin test ignore".
if ($command eq "for" && $details =~ m/\s+ignore\s*$/) {
$self->ignoring_pod_snippets(1);
return;
( run in 0.629 second using v1.01-cache-2.11-cpan-8450f2e95f3 )