File Coverage

blib/lib/Regexp/CharClasses.pm
Criterion Covered Total %
statement 89 89 100.0
branch 2 2 100.0
condition n/a
subroutine 64 64 100.0
pod 0 56 0.0
total 155 211 73.4


line stmt bran cond sub pod time code
1             package Regexp::CharClasses;
2              
3 11     11   254003 use strict;
  11         29  
  11         290  
4 11     11   58 use warnings;
  11         20  
  11         246  
5              
6 11     11   249 use 5.010;
  11         41  
7              
8 11     11   70 use Exporter ();
  11         20  
  11         203  
9 11     11   19455 use charnames ();
  11         659764  
  11         17328  
10              
11             our @ISA = qw (Exporter);
12             our $VERSION = '2015112801';
13              
14             our %EXPORT_TAGS = (
15             digits => [qw [IsDigit0 IsDigit1 IsDigit2 IsDigit3 IsDigit4
16             IsDigit5 IsDigit6 IsDigit7 IsDigit8 IsDigit9
17             IsLatinDigit]],
18             perl => [qw [IsPerlSigil IsLeftParen IsRightParen IsParen]],
19             english => [qw [IsLcVowel IsUcVowel IsVowel
20             IsLcConsonant IsUcConsonant IsConsonant]],
21             encode => [qw [IsUuencode IsBase64 IsBase64url IsBase32 IsBase32hex
22             IsBase16 IsBinHex]],
23             );
24              
25             #
26             # @EXPORT is defined at the bottom of the file.
27             #
28              
29             sub _d {
30 31     31   85 my $number = shift;
31             join "\n" => map {
32 31 100       79 my $char = $_ ? "$_ DIGIT $number" : "DIGIT $number";
  899         195127  
33 899         2375 sprintf "%04X" => charnames::vianame ($char)
34             } @_;
35             }
36              
37             sub _n {
38             join "\n" => map {
39 14     14   86 s/^\s+//;
  113         86343  
40 113         346 sprintf "%04X" => charnames::vianame ($_)
41             } split "\n" => shift;
42             }
43              
44             sub __ {
45 32     32   101 local $_ = shift;
46 32         230 s/^\s+//mg;
47 32         131 $_;
48             }
49              
50             #
51             # I'd prefer 'state', but that gives errors.
52             #
53             my $digits = [map {s/^\s+//; $_} split "\n" => <<"--"];
54              
55             ARABIC-INDIC
56             EXTENDED ARABIC-INDIC
57             NKO
58             DEVANAGARI
59             BENGALI
60             GURMUKHI
61             GUJARATI
62             ORIYA
63             TAMIL
64             TELUGU
65             KANNADA
66             MALAYALAM
67             THAI
68             LAO
69             TIBETAN
70             MYANMAR
71             KHMER
72             MONGOLIAN
73             LIMBU
74             NEW TAI LUE
75             BALINESE
76             FULLWIDTH
77             OSMANYA
78             MATHEMATICAL BOLD
79             MATHEMATICAL DOUBLE-STRUCK
80             MATHEMATICAL SANS-SERIF
81             MATHEMATICAL SANS-SERIF BOLD
82             MATHEMATICAL MONOSPACE
83             --
84              
85             my $numbers = [map {s/^\s+//; $_} split "\n" => <<"--"];
86             ZERO
87             ONE
88             TWO
89             THREE
90             FOUR
91             FIVE
92             SIX
93             SEVEN
94             EIGHT
95             NINE
96             --
97              
98 1369     1369 0 662189 sub IsDigit0 {state $return = _d ZERO => @$digits}
99 1324     1324 0 654049 sub IsDigit1 {state $return = _d ONE => @$digits}
100 1324     1324 0 631875 sub IsDigit2 {state $return = _d TWO => @$digits}
101 1300     1300 0 607935 sub IsDigit3 {state $return = _d THREE => @$digits}
102 1286     1286 0 587505 sub IsDigit4 {state $return = _d FOUR => @$digits}
103 1299     1299 0 573734 sub IsDigit5 {state $return = _d FIVE => @$digits}
104 1340     1340 0 599953 sub IsDigit6 {state $return = _d SIX => @$digits}
105 1314     1314 0 581366 sub IsDigit7 {state $return = _d SEVEN => @$digits}
106 1295     1295 0 588453 sub IsDigit8 {state $return = _d EIGHT => @$digits}
107 794     794 0 413026 sub IsDigit9 {state $return = _d NINE => @$digits}
108              
109             foreach my $language (@$digits) {
110             next if !$language;
111             my $t_name = join "" => map {ucfirst lc} split /\W+/ => $language;
112             my $sub_name = "Is${t_name}Digit";
113             push @{$EXPORT_TAGS {digits}} => $sub_name;
114             if ($language eq "FULLWIDTH" || $language =~ /^MATHEMATICAL/
115             || $language =~ /ARABIC-INDIC$/) {
116 22     22 0 28670 eval <<" --";
  10     22 0 27  
  22     22 0 20110  
  10     22 0 38  
  22     22 0 25083  
  10     22 0 29  
  22     22 0 21396  
  10     22 0 28  
  22         22402  
  10         34  
  22         24518  
  10         33  
  22         23601  
  10         46  
  22         23666  
  10         38  
117             sub $sub_name {
118             state \$return = _n join "\n" =>
119             map {"$language DIGIT \$_"} \@\$numbers;
120             }
121             --
122             die $@ if $@;
123             }
124             else {
125 22     22 0 28049 eval <<" --";
  22     22 0 39178  
  22     22 0 326521  
  22     22 0 40336  
  22     22 0 34846  
  22     22 0 35994  
  22     22 0 43629  
  22     22 0 46376  
  22     22 0 51921  
  22     22 0 28391  
  22     22 0 52874  
  22     22 0 24228  
  22     22 0 46815  
  22     22 0 688829  
  22     22 0 44667  
  22     22 0 24874  
  22     22 0 40668  
  22     22 0 35788  
  22     22 0 25106  
  22     22 0 33167  
126             sub $sub_name {state \$return = __ <<" --"}
127             +utf8::Is${t_name}
128             &utf8::IsDigit
129             --
130             --
131             die $@ if $@;
132             }
133             }
134              
135             sub IsLatinDigit {
136 3     3 0 4580 state $return = _n join "\n" => map {"DIGIT $_"} @$numbers
  10         23  
137             }
138              
139 2     2 0 4071 sub IsPerlSigil {state $return = _n <<"--"}
140             DOLLAR SIGN
141             PERCENT SIGN
142             AMPERSAND
143             ASTERISK
144             COMMERCIAL AT
145             --
146              
147 5     5 0 4508 sub IsLeftParen {state $return = _n <<"--"}
148             LEFT PARENTHESIS
149             LESS-THAN SIGN
150             LEFT SQUARE BRACKET
151             LEFT CURLY BRACKET
152             --
153              
154 5     5 0 1003 sub IsRightParen {state $return = _n <<"--"}
155             RIGHT PARENTHESIS
156             GREATER-THAN SIGN
157             RIGHT SQUARE BRACKET
158             RIGHT CURLY BRACKET
159             --
160              
161 3     3 0 824 sub IsParen {state $return = __ <<"--"}
162             +Regexp::CharClasses::IsLeftParen
163             +Regexp::CharClasses::IsRightParen
164             --
165              
166 10     10 0 4358 sub IsLcVowel {state $return = _n <<"--"}
167             LATIN SMALL LETTER A
168             LATIN SMALL LETTER E
169             LATIN SMALL LETTER I
170             LATIN SMALL LETTER O
171             LATIN SMALL LETTER U
172             --
173              
174 10     10 0 1243 sub IsUcVowel {state $return = _n <<"--"}
175             LATIN CAPITAL LETTER A
176             LATIN CAPITAL LETTER E
177             LATIN CAPITAL LETTER I
178             LATIN CAPITAL LETTER O
179             LATIN CAPITAL LETTER U
180             --
181              
182 3     3 0 612 sub IsVowel {state $return = __ <<"--"}
183             +Regexp::CharClasses::IsLcVowel
184             +Regexp::CharClasses::IsUcVowel
185             --
186              
187 5     5 0 652 sub IsLcConsonant {state $return = __ <<"--"}
188             0061 007A
189             -Regexp::CharClasses::IsLcVowel
190             --
191              
192 5     5 0 811 sub IsUcConsonant {state $return = __ <<"--"}
193             0041 005A
194             -Regexp::CharClasses::IsUcVowel
195             --
196              
197 3     3 0 503 sub IsConsonant {state $return = __ <<"--"}
198             +Regexp::CharClasses::IsLcConsonant
199             +Regexp::CharClasses::IsUcConsonant
200             --
201              
202             # Space to grave accent.
203 2     2 0 33662 sub IsUuencode {state $return = __ <<"--"}
204             0020 0060
205             --
206              
207             # A-Z, a-z, 0-9, '+' and '/'; '=' is use for padding. (RFC 4648)
208 2     2 0 39175 sub IsBase64 {state $return = __ <<"--"}
209             0030 0039
210             0041 005A
211             0061 007A
212             002B
213             002F
214             003D
215             --
216              
217             # A-Z, a-z, 0-9, '-' and '_'; '=' is use for padding. (RFC 4648)
218 2     2 0 33796 sub IsBase64url {state $return = __ <<"--"}
219             0030 0039
220             0041 005A
221             0061 007A
222             002D
223             005F
224             003D
225             --
226              
227             # A-Z, 2-7; '=' is use for padding. (RFC 4648)
228 2     2 0 59795 sub IsBase32 {state $return = __ <<"--"}
229             0032 0037
230             0041 005A
231             003D
232             --
233              
234              
235             # 0-9, A-V; '=' is use for padding. (RFC 4648)
236 2     2 0 48252 sub IsBase32hex {state $return = __ <<"--"}
237             0030 0039
238             0041 0056
239             003D
240             --
241              
242              
243             # 0-9, A-F. (RFC 4648)
244 2     2 0 19586 sub IsBase16 {state $return = __ <<"--"}
245             0030 0039
246             0041 0046
247             --
248              
249             # !"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr
250             # Note, no 'O', no 'W', no 'g', no 'n', no 'o'
251 2     2 0 29121 sub IsBinHex {state $return = __ <<"--"}
252             0021 002D
253             0030 0039
254             0040 004E
255             0050 0056
256             0058 005B
257             0060 0066
258             0068 006D
259             0070 0072
260             --
261              
262              
263             our @EXPORT = map {@$_} values %EXPORT_TAGS;
264              
265             1;
266              
267             __END__