|
version 1.1, 2012/02/21 23:05:51
|
version 1.1.1.2, 2012/02/21 23:50:25
|
|
Line 1
|
Line 1
|
| #! /usr/bin/env perl |
#! /usr/bin/env perl |
| |
|
| # Program for testing regular expressions with perl to check that PCRE handles |
# Program for testing regular expressions with perl to check that PCRE handles |
| # them the same. This is the version that supports /8 for UTF-8 testing. As it | # them the same. This version supports /8 for UTF-8 testing. However, it needs |
| # stands, it requires at least Perl 5.8 for UTF-8 support. However, it needs to | # to have "use utf8" at the start for running the UTF-8 tests, but *not* for |
| # have "use utf8" at the start for running the UTF-8 tests, but *not* for the | # the other tests. The only way I've found for doing this is to cat this line |
| # other tests. The only way I've found for doing this is to cat this line in | # in explicitly in the RunPerlTest script. I've also used this method to supply |
| # explicitly in the RunPerlTest script. | # "require Encode" for the UTF-8 tests, so that the main test will still run |
| | # where Encode is not installed. |
| |
|
| # use locale; # With this included, \x0b matches \s! |
# use locale; # With this included, \x0b matches \s! |
| |
|
| # Function for turning a string into a string of printing chars. There are | # Function for turning a string into a string of printing chars. |
| # currently problems with UTF-8 strings; this fudges round them. | |
| |
|
| |
#require Encode; |
| |
|
| sub pchars { |
sub pchars { |
| my($t) = ""; |
my($t) = ""; |
| |
|
|
Line 21 if ($utf8)
|
Line 23 if ($utf8)
|
| foreach $c (@p) |
foreach $c (@p) |
| { |
{ |
| if ($c >= 32 && $c < 127) { $t .= chr $c; } |
if ($c >= 32 && $c < 127) { $t .= chr $c; } |
| else { $t .= sprintf("\\x{%02x}", $c); } | else { $t .= sprintf("\\x{%02x}", $c); |
| | } |
| } |
} |
| } |
} |
| |
|
| else |
else |
| { |
{ |
| foreach $c (split(//, $_[0])) |
foreach $c (split(//, $_[0])) |
|
Line 192 for (;;)
|
Line 194 for (;;)
|
| { |
{ |
| printf $outfile "No match"; |
printf $outfile "No match"; |
| if (defined $REGERROR && $REGERROR != 1) |
if (defined $REGERROR && $REGERROR != 1) |
| { print $outfile (", mark = $REGERROR"); } | { printf $outfile (", mark = %s", &pchars($REGERROR)); } |
| printf $outfile "\n"; |
printf $outfile "\n"; |
| } |
} |
| else |
else |
|
Line 214 for (;;)
|
Line 216 for (;;)
|
| } |
} |
| splice(@subs, 0, 18); |
splice(@subs, 0, 18); |
| } |
} |
| |
|
| |
# It seems that $REGMARK is not marked as UTF-8 even when use utf8 is |
| |
# set and the input pattern was a UTF-8 string. We can, however, force |
| |
# it to be so marked. |
| |
|
| if (defined $REGMARK && $REGMARK != 1) |
if (defined $REGMARK && $REGMARK != 1) |
| { print $outfile ("MK: $REGMARK\n"); } | { |
| | $xx = $REGMARK; |
| | $xx = Encode::decode_utf8($xx) if $utf8; |
| | printf $outfile ("MK: %s\n", &pchars($xx)); |
| | } |
| } |
} |
| } |
} |
| } |
} |