— |
#! /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,
0x0021,
0x0022,
0x0023,
0x00a4,
0x0025,
0x0026,
0x0027,
0x0028,
0x0029,
0x002a,
0x002b,
0x002c,
0x002d,
0x002e,
0x002f,
0x0030,
0x0031,
0x0032,
0x0033,
0x0034,
0x0035,
0x0036,
0x0037,
0x0038,
0x0039,
0x003a,
0x003b,
0x003c,
0x003d,
0x003e,
0x003f,
0x0040,
0x0391,
0x0392,
0x0393,
0x0394,
0x0395,
0x0396,
0x0397,
0x0398,
0x0399,
0x039a,
0x039b,
0x039c,
0x039d,
0x039e,
0x039f,
0x03a0,
0x03a1,
0xfffd,
0x03a3,
0x03a4,
0x03a5,
0x03a6,
0x03a7,
0x03a8,
0x03a9,
0xfffd,
0x005b,
0x005c,
0x005d,
0x005e,
0x005f,
0xfffd,
0x03b1,
0x03b2,
0x03b3,
0x03b4,
0x03b5,
0x03b6,
0x03b7,
0x03b8,
0x03b9,
0x03ba,
0x03bb,
0x03bc,
0x03bd,
0x03be,
0x03bf,
0x03c0,
0x03c1,
0x03c2,
0x03c3,
0x03c4,
0x03c5,
0x03c6,
0x03c7,
0x03c8,
0x03c9,
0xfffd,
0x007b,
0x007c,
0x007d,
0x00af,
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" ,
"\x21" ,
"\x22" ,
"\x23" ,
"\xc2\xa4" ,
"\x25" ,
"\x26" ,
"\x27" ,
"\x28" ,
"\x29" ,
"\x2a" ,
"\x2b" ,
"\x2c" ,
"\x2d" ,
"\x2e" ,
"\x2f" ,
"\x30" ,
"\x31" ,
"\x32" ,
"\x33" ,
"\x34" ,
"\x35" ,
"\x36" ,
"\x37" ,
"\x38" ,
"\x39" ,
"\x3a" ,
"\x3b" ,
"\x3c" ,
"\x3d" ,
"\x3e" ,
"\x3f" ,
"\x40" ,
"\xce\x91" ,
"\xce\x92" ,
"\xce\x93" ,
"\xce\x94" ,
"\xce\x95" ,
"\xce\x96" ,
"\xce\x97" ,
"\xce\x98" ,
"\xce\x99" ,
"\xce\x9a" ,
"\xce\x9b" ,
"\xce\x9c" ,
"\xce\x9d" ,
"\xce\x9e" ,
"\xce\x9f" ,
"\xce\xa0" ,
"\xce\xa1" ,
"\xef\xbf\xbd" ,
"\xce\xa3" ,
"\xce\xa4" ,
"\xce\xa5" ,
"\xce\xa6" ,
"\xce\xa7" ,
"\xce\xa8" ,
"\xce\xa9" ,
"\xef\xbf\xbd" ,
"\x5b" ,
"\x5c" ,
"\x5d" ,
"\x5e" ,
"\x5f" ,
"\xef\xbf\xbd" ,
"\xce\xb1" ,
"\xce\xb2" ,
"\xce\xb3" ,
"\xce\xb4" ,
"\xce\xb5" ,
"\xce\xb6" ,
"\xce\xb7" ,
"\xce\xb8" ,
"\xce\xb9" ,
"\xce\xba" ,
"\xce\xbb" ,
"\xce\xbc" ,
"\xce\xbd" ,
"\xce\xbe" ,
"\xce\xbf" ,
"\xcf\x80" ,
"\xcf\x81" ,
"\xcf\x82" ,
"\xcf\x83" ,
"\xcf\x84" ,
"\xcf\x85" ,
"\xcf\x86" ,
"\xcf\x87" ,
"\xcf\x88" ,
"\xcf\x89" ,
"\xef\xbf\xbd" ,
"\x7b" ,
"\x7c" ,
"\x7d" ,
"\xc2\xaf" ,
"\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" ,
0x00000021 => "\x21" ,
0x00000022 => "\x22" ,
0x00000023 => "\x23" ,
0x00000025 => "\x25" ,
0x00000026 => "\x26" ,
0x00000027 => "\x27" ,
0x00000028 => "\x28" ,
0x00000029 => "\x29" ,
0x0000002a => "\x2a" ,
0x0000002b => "\x2b" ,
0x0000002c => "\x2c" ,
0x0000002d => "\x2d" ,
0x0000002e => "\x2e" ,
0x0000002f => "\x2f" ,
0x00000030 => "\x30" ,
0x00000031 => "\x31" ,
0x00000032 => "\x32" ,
0x00000033 => "\x33" ,
0x00000034 => "\x34" ,
0x00000035 => "\x35" ,
0x00000036 => "\x36" ,
0x00000037 => "\x37" ,
0x00000038 => "\x38" ,
0x00000039 => "\x39" ,
0x0000003a => "\x3a" ,
0x0000003b => "\x3b" ,
0x0000003c => "\x3c" ,
0x0000003d => "\x3d" ,
0x0000003e => "\x3e" ,
0x0000003f => "\x3f" ,
0x00000040 => "\x40" ,
0x0000005b => "\x5b" ,
0x0000005c => "\x5c" ,
0x0000005d => "\x5d" ,
0x0000005e => "\x5e" ,
0x0000005f => "\x5f" ,
0x0000007b => "\x7b" ,
0x0000007c => "\x7c" ,
0x0000007d => "\x7d" ,
0x0000007f => "\x7f" ,
0x000000a4 => "\x24" ,
0x000000af => "\x7e" ,
0x00000391 => "\x41" ,
0x00000392 => "\x42" ,
0x00000393 => "\x43" ,
0x00000394 => "\x44" ,
0x00000395 => "\x45" ,
0x00000396 => "\x46" ,
0x00000397 => "\x47" ,
0x00000398 => "\x48" ,
0x00000399 => "\x49" ,
0x0000039a => "\x4a" ,
0x0000039b => "\x4b" ,
0x0000039c => "\x4c" ,
0x0000039d => "\x4d" ,
0x0000039e => "\x4e" ,
0x0000039f => "\x4f" ,
0x000003a0 => "\x50" ,
0x000003a1 => "\x51" ,
0x000003a3 => "\x53" ,
0x000003a4 => "\x54" ,
0x000003a5 => "\x55" ,
0x000003a6 => "\x56" ,
0x000003a7 => "\x57" ,
0x000003a8 => "\x58" ,
0x000003a9 => "\x59" ,
0x000003b1 => "\x61" ,
0x000003b2 => "\x62" ,
0x000003b3 => "\x63" ,
0x000003b4 => "\x64" ,
0x000003b5 => "\x65" ,
0x000003b6 => "\x66" ,
0x000003b7 => "\x67" ,
0x000003b8 => "\x68" ,
0x000003b9 => "\x69" ,
0x000003ba => "\x6a" ,
0x000003bb => "\x6b" ,
0x000003bc => "\x6c" ,
0x000003bd => "\x6d" ,
0x000003be => "\x6e" ,
0x000003bf => "\x6f" ,
0x000003c0 => "\x70" ,
0x000003c1 => "\x71" ,
0x000003c2 => "\x72" ,
0x000003c3 => "\x73" ,
0x000003c4 => "\x74" ,
0x000003c5 => "\x75" ,
0x000003c6 => "\x76" ,
0x000003c7 => "\x77" ,
0x000003c8 => "\x78" ,
0x000003c9 => "\x79" ,
);
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;
|