File Coverage

blib/lib/PPIx/Regexp/Structure/Regexp.pm
Criterion Covered Total %
statement 29 29 100.0
branch 2 2 100.0
condition n/a
subroutine 9 9 100.0
pod 4 4 100.0
total 44 44 100.0


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             PPIx::Regexp::Structure::Regexp - Represent the top-level regular expression
4              
5             =head1 SYNOPSIS
6              
7             use PPIx::Regexp::Dumper;
8             PPIx::Regexp::Dumper->new( 'qr{foo}smx' )
9             ->print();
10              
11             =head1 INHERITANCE
12              
13             C is a
14             L.
15              
16             C has no descendants.
17              
18             =head1 DESCRIPTION
19              
20             This class represents the top-level regular expression. In the example
21             given in the L, the C<{foo}> will be represented by this
22             class.
23              
24             =head1 METHODS
25              
26             This class provides the following public methods. Methods not documented
27             here are private, and unsupported in the sense that the author reserves
28             the right to change or remove them without notice.
29              
30             =cut
31              
32             package PPIx::Regexp::Structure::Regexp;
33              
34 9     9   46 use strict;
  9         14  
  9         254  
35 9     9   35 use warnings;
  9         10  
  9         390  
36              
37 9     9   30 use base qw{ PPIx::Regexp::Structure::Main };
  9         11  
  9         832  
38              
39 9     9   41 use PPIx::Regexp::Constant qw{ @CARP_NOT };
  9         38  
  9         2678  
40              
41             our $VERSION = '0.092';
42              
43 1     1 1 2 sub can_be_quantified { return; }
44              
45             =head2 capture_names
46              
47             foreach my $name ( $re->capture_names() ) {
48             print "Capture name '$name'\n";
49             }
50              
51             This method returns the capture names found in the regular expression.
52              
53             =cut
54              
55             sub capture_names {
56 328     328 1 515 my ( $self ) = @_;
57 328         383 my %name;
58 328 100       936 my $captures = $self->find(
59             'PPIx::Regexp::Structure::NamedCapture')
60             or return;
61 21         34 foreach my $grab ( @{ $captures } ) {
  21         38  
62 21         76 $name{$grab->name()}++;
63             }
64 21         93 return ( sort keys %name );
65             }
66              
67             sub explain {
68 1     1 1 5 return 'Regular expression';
69             }
70              
71             =head2 max_capture_number
72              
73             print "Highest used capture number ",
74             $re->max_capture_number(), "\n";
75              
76             This method returns the highest capture number used by the regular
77             expression. If there are no captures, the return will be 0.
78              
79             =cut
80              
81             sub max_capture_number {
82 332     332 1 536 my ( $self ) = @_;
83 332         620 return $self->{max_capture_number};
84             }
85              
86             # Called by the lexer once it has done its worst to all the tokens.
87             # Called as a method with the lexer as argument. The return is the
88             # number of parse failures discovered when finalizing.
89             sub __PPIX_LEXER__finalize {
90 326     326   544 my ( $self, $lexer ) = @_;
91 326         445 my $rslt = 0;
92 326         924 foreach my $elem ( $self->elements() ) {
93 1541         3296 $rslt += $elem->__PPIX_LEXER__finalize( $lexer );
94             }
95              
96             # Calculate the maximum capture group, and number all the other
97             # capture groups along the way.
98             $self->{max_capture_number} =
99 326         947 $self->__PPIX_LEXER__record_capture_number( 1 ) - 1;
100              
101 326         626 return $rslt;
102             }
103              
104             1;
105              
106             __END__