File Coverage

blib/lib/String/Multibyte/GB18030.pm
Criterion Covered Total %
statement 3 3 100.0
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 4 4 100.0


line stmt bran cond sub pod time code
1             package String::Multibyte::GB18030;
2              
3 1     1   6 use vars qw($VERSION);
  1         3  
  1         317  
4             $VERSION = '1.12';
5              
6             +{
7             charset => 'GB18030',
8              
9             regexp => '(?:[\x00-\x80]|[\x81-\xFE][\x40-\x7E\x80-\xFE]|'
10             . '[\x81-\xFE][\x30-\x39][\x81-\xFE][\x30-\x39])',
11              
12             cmpchar => sub {
13             length($_[0]) <=> length($_[1]) || $_[0] cmp $_[1];
14             },
15              
16             nextchar => sub {
17             my $ch = shift;
18             my $len = length $ch;
19             if ($len == 1) {
20             return $ch eq "\x80"
21             ? "\x81\x40"
22             : chr(ord($ch)+1);
23             }
24             elsif ($len == 2) {
25             my($c, $d) = unpack('CC', $ch);
26             return $ch eq "\xFE\xFE"
27             ? "\x81\x30\x81\x30"
28             : $d == 0xFE
29             ? chr($c+1)."\x40"
30             : $d == 0x7E
31             ? chr($c) ."\x80"
32             : pack('CC', $c, $d+1);
33             }
34             elsif ($len == 4) {
35             my($c, $d, $e, $f) = unpack('CCCC', $ch);
36             return $f == 0x39
37             ? $e == 0xFE
38             ? $d == 0x39
39             ? $c == 0xFE
40             ? undef
41             : pack('CCCC', $c+1, 0x30, 0x81, 0x30)
42             : pack('CCCC', $c, $d+1, 0x81, 0x30)
43             : pack('CCCC', $c, $d, $e+1, 0x30)
44             : pack('CCCC', $c, $d, $e, $f+1);
45             }
46             else {
47             return;
48             }
49             },
50             };
51              
52             __END__