— |
#! /bin/false
my @to_ucs4 = (
0x0000,
0x0001,
0x0002,
0x0003,
0x0004,
0x0005,
0x0006,
0x0007,
0x0008,
0x0009,
0x000a,
0x000b,
0x000c,
0x000d,
0x000e,
0x000f,
0x0010,
0x0011,
0x0012,
0x0013,
0x0014,
0x0015,
0x0016,
0x0017,
0x0018,
0x0019,
0x001a,
0x001b,
0x001c,
0x001d,
0x001e,
0x001f,
0x0020,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0x0030,
0x0031,
0x0032,
0x0033,
0x0034,
0x0035,
0x0036,
0x0037,
0x0038,
0x0039,
0x2446,
0x2447,
0x2448,
0x2449,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0x007f,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
);
my @to_utf8 = (
"\x00" ,
"\x01" ,
"\x02" ,
"\x03" ,
"\x04" ,
"\x05" ,
"\x06" ,
"\x07" ,
"\x08" ,
"\x09" ,
"\x0a" ,
"\x0b" ,
"\x0c" ,
"\x0d" ,
"\x0e" ,
"\x0f" ,
"\x10" ,
"\x11" ,
"\x12" ,
"\x13" ,
"\x14" ,
"\x15" ,
"\x16" ,
"\x17" ,
"\x18" ,
"\x19" ,
"\x1a" ,
"\x1b" ,
"\x1c" ,
"\x1d" ,
"\x1e" ,
"\x1f" ,
"\x20" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x30" ,
"\x31" ,
"\x32" ,
"\x33" ,
"\x34" ,
"\x35" ,
"\x36" ,
"\x37" ,
"\x38" ,
"\x39" ,
"\xe2\x91\x86" ,
"\xe2\x91\x87" ,
"\xe2\x91\x88" ,
"\xe2\x91\x89" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x7f" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
);
my %from_ucs4 = (
0x00000000 => "\x00" ,
0x00000001 => "\x01" ,
0x00000002 => "\x02" ,
0x00000003 => "\x03" ,
0x00000004 => "\x04" ,
0x00000005 => "\x05" ,
0x00000006 => "\x06" ,
0x00000007 => "\x07" ,
0x00000008 => "\x08" ,
0x00000009 => "\x09" ,
0x0000000a => "\x0a" ,
0x0000000b => "\x0b" ,
0x0000000c => "\x0c" ,
0x0000000d => "\x0d" ,
0x0000000e => "\x0e" ,
0x0000000f => "\x0f" ,
0x00000010 => "\x10" ,
0x00000011 => "\x11" ,
0x00000012 => "\x12" ,
0x00000013 => "\x13" ,
0x00000014 => "\x14" ,
0x00000015 => "\x15" ,
0x00000016 => "\x16" ,
0x00000017 => "\x17" ,
0x00000018 => "\x18" ,
0x00000019 => "\x19" ,
0x0000001a => "\x1a" ,
0x0000001b => "\x1b" ,
0x0000001c => "\x1c" ,
0x0000001d => "\x1d" ,
0x0000001e => "\x1e" ,
0x0000001f => "\x1f" ,
0x00000020 => "\x20" ,
0x00000030 => "\x30" ,
0x00000031 => "\x31" ,
0x00000032 => "\x32" ,
0x00000033 => "\x33" ,
0x00000034 => "\x34" ,
0x00000035 => "\x35" ,
0x00000036 => "\x36" ,
0x00000037 => "\x37" ,
0x00000038 => "\x38" ,
0x00000039 => "\x39" ,
0x0000007f => "\x7f" ,
0x00002446 => "\x3a" ,
0x00002447 => "\x3b" ,
0x00002448 => "\x3c" ,
0x00002449 => "\x3d" ,
);
sub _recode
{
if ( $_ [0]->{_from} eq 'INTERNAL' ) {
$_ [1] = join '' ,
map $from_ucs4 { $_ }
|| ( defined $from_ucs4 { $_ } ? $from_ucs4 { $_ } : "\x3f" ),
@{ $_ [1]};
} elsif ( $_ [0]->{_to} eq 'UTF-8' ,) {
$_ [1] = join '' , map $to_utf8 [ $_ ], unpack 'C*' , $_ [1];
} else {
$_ [1] = [ map
$to_ucs4 [ $_ ],
unpack 'C*' , $_ [1]
];
}
return 1;
}
1;
|