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<PPIx::Regexp::Structure::Regexp> is a
14             L<PPIx::Regexp::Structure::Main|PPIx::Regexp::Structure::Main>.
15              
16             C<PPIx::Regexp::Structure::Regexp> 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</SYNOPSIS>, 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   45 use strict;
  9         14  
  9         245  
35 9     9   28 use warnings;
  9         13  
  9         344  
36              
37 9     9   32 use base qw{ PPIx::Regexp::Structure::Main };
  9         12  
  9         724  
38              
39 9     9   40 use PPIx::Regexp::Constant qw{ @CARP_NOT };
  9         12  
  9         2675  
40              
41             our $VERSION = '0.091';
42              
43 1     1 1 3 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 558 my ( $self ) = @_;
57 328         458 my %name;
58 328 100       990 my $captures = $self->find(
59             'PPIx::Regexp::Structure::NamedCapture')
60             or return;
61 21         35 foreach my $grab ( @{ $captures } ) {
  21         43  
62 21         81 $name{$grab->name()}++;
63             }
64 21         149 return ( sort keys %name );
65             }
66              
67             sub explain {
68 1     1 1 3 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 672 my ( $self ) = @_;
83 332         685 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   607 my ( $self, $lexer ) = @_;
91 326         521 my $rslt = 0;
92 326         1088 foreach my $elem ( $self->elements() ) {
93 1541         3326 $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         1109 $self->__PPIX_LEXER__record_capture_number( 1 ) - 1;
100              
101 326         656 return $rslt;
102             }
103              
104             1;
105              
106             __END__
107              
108             =head1 SUPPORT
109              
110             Support is by the author. Please file bug reports at
111             L<https://rt.cpan.org/Public/Dist/Display.html?Name=PPIx-Regexp>,
112             L<https://github.com/trwyant/perl-PPIx-Regexp/issues>, or in
113             electronic mail to the author.
114              
115             =head1 AUTHOR
116              
117             Thomas R. Wyant, III F<wyant at cpan dot org>
118              
119             =head1 COPYRIGHT AND LICENSE
120              
121             Copyright (C) 2009-2023, 2025 by Thomas R. Wyant, III
122              
123             This program is free software; you can redistribute it and/or modify it
124             under the same terms as Perl 5.10.0. For more details, see the full text
125             of the licenses in the directory LICENSES.
126              
127             This program is distributed in the hope that it will be useful, but
128             without any warranty; without even the implied warranty of
129             merchantability or fitness for a particular purpose.
130              
131             =cut
132              
133             # ex: set textwidth=72 :