1=head1 NAME
2
3PPIx::Regexp::Token::Whitespace - Represent whitespace
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
13C<PPIx::Regexp::Token::Whitespace> is a
14L<PPIx::Regexp::Token::NoOp|PPIx::Regexp::Token::NoOp>.
15
16C<PPIx::Regexp::Token::Whitespace> has no descendants.
17
18=head1 DESCRIPTION
19
20This class represents whitespace. It will appear inside the regular
21expression only if the C</x> modifier is present, but it may also appear
22between the type and the opening delimiter (e.g. C<qr {foo}>) or after
23the regular expression in a bracketed substitution (e.g. C<s{foo}
24{bar}>).
25
26If the C</xx> modifier is present, it can also appear inside bracketed
27character classes. This was introduced in Perl 5.25.9.
28
29=head1 METHODS
30
31This class provides no public methods beyond those provided by its
32superclass.
33
34=cut
35
36package PPIx::Regexp::Token::Whitespace;
37
38use strict;
39use warnings;
40
41use base qw{ PPIx::Regexp::Token::NoOp };
42
43use PPIx::Regexp::Constant qw{
44    COOKIE_REGEX_SET
45    MINIMUM_PERL
46    @CARP_NOT
47};
48
49our $VERSION = '0.082';
50
51sub __new {
52    my ( $class, $content, %arg ) = @_;
53
54    defined $arg{perl_version_introduced}
55	or $arg{perl_version_introduced} =
56	( grep { 127 < ord } split qr{}, $content )
57	? '5.021001'
58	: MINIMUM_PERL;
59
60    return $class->SUPER::__new( $content, %arg );
61}
62
63sub explain {
64    my ( $self ) = @_;
65    my $parent;
66    if (
67	$parent = $self->parent()
68	    and $parent->isa( 'PPIx::Regexp' )
69    ) {
70	return $self->SUPER::explain();
71    } elsif ( $self->in_regex_set() ) {
72	return q<Not significant in extended character class>;
73    } elsif ( my $count = $self->modifier_asserted( 'x*' ) ) {
74	return q<Not significant under /> . ( 'x' x $count );
75    } else {
76	return $self->SUPER::explain();
77    }
78}
79
80sub whitespace {
81    return 1;
82}
83
84# Objects of this class are generated either by the tokenizer itself
85# (when scanning for delimiters) or by PPIx::Regexp::Token::Literal (if
86# it hits a match for \s and finds the regular expression has the /x
87# modifier asserted.
88#
89# sub __PPIX_TOKENIZER__regexp {
90#     my ( $class, $tokenizer, $character ) = @_;
91#
92#     return scalar $tokenizer->find_regexp( qr{ \A \s+ }smx );
93#
94# }
95
961;
97
98__END__
99
100=head1 SUPPORT
101
102Support is by the author. Please file bug reports at
103L<https://rt.cpan.org/Public/Dist/Display.html?Name=PPIx-Regexp>,
104L<https://github.com/trwyant/perl-PPIx-Regexp/issues>, or in
105electronic mail to the author.
106
107=head1 AUTHOR
108
109Thomas R. Wyant, III F<wyant at cpan dot org>
110
111=head1 COPYRIGHT AND LICENSE
112
113Copyright (C) 2009-2021 by Thomas R. Wyant, III
114
115This program is free software; you can redistribute it and/or modify it
116under the same terms as Perl 5.10.0. For more details, see the full text
117of the licenses in the directory LICENSES.
118
119This program is distributed in the hope that it will be useful, but
120without any warranty; without even the implied warranty of
121merchantability or fitness for a particular purpose.
122
123=cut
124
125# ex: set textwidth=72 :
126