Parent Directory
|
Revision Log
2002-11-06 Wakaba <w@suika.fam.cx> * SevenBit.esr, EightBit.esr, JUNET.esr, JUNETCompatible.esr, EUCJA.esr, EUCJACompatible.esr, EUCKR.esr, EUCZH.esr: New files. * SevenBit.pm, EightBit.pm: Removed. (Now these modules are auto-generated from *.esr files.)
| 1 | wakaba | 1.1 | =head1 NAME |
| 2 | |||
| 3 | Encode::ISO2022::Eight --- Encode and decode of 8-bit ISO/IEC 2022 | ||
| 4 | based encodings (most of them are also known as EUCs) | ||
| 5 | |||
| 6 | =head1 ENCODINGS | ||
| 7 | |||
| 8 | =over 4 | ||
| 9 | |||
| 10 | =cut | ||
| 11 | |||
| 12 | require 5.7.3; | ||
| 13 | use strict; | ||
| 14 | package Encode::ISO2022::EightBit; | ||
| 15 | use vars qw($VERSION); | ||
| 16 | wakaba | 1.6 | $VERSION=do{my @r=(q$Revision: 1.5 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
| 17 | wakaba | 1.1 | use base qw(Encode::Encoding); |
| 18 | require Encode::ISO2022; | ||
| 19 | |||
| 20 | sub encode ($$;$) { | ||
| 21 | my ($obj, $str, $chk) = @_; | ||
| 22 | $_[1] = '' if $chk; | ||
| 23 | wakaba | 1.5 | if (!defined $obj->{_encode_mapping} || $obj->{_encode_mapping}) { |
| 24 | require Encode::Table; | ||
| 25 | $str = Encode::Table::convert ($str, $obj->__encode_map, | ||
| 26 | -autoload => defined $obj->{_encode_mapping_autoload} ? | ||
| 27 | $obj->{_encode_mapping_autoload} : 1); | ||
| 28 | } | ||
| 29 | wakaba | 1.1 | $str = &Encode::ISO2022::internal_to_iso2022 ($str, $obj->__2022_encode); |
| 30 | wakaba | 1.5 | $str; |
| 31 | wakaba | 1.1 | } |
| 32 | |||
| 33 | sub decode ($$;$) { | ||
| 34 | my ($obj, $str, $chk) = @_; | ||
| 35 | $_[1] = '' if $chk; | ||
| 36 | wakaba | 1.5 | $str = &Encode::ISO2022::iso2022_to_internal ($str, $obj->__2022_decode); |
| 37 | if (!defined $obj->{_decode_mapping} || $obj->{_decode_mapping}) { | ||
| 38 | require Encode::Table; | ||
| 39 | $str = Encode::Table::convert ($str, $obj->__decode_map, | ||
| 40 | -autoload => defined $obj->{_decode_mapping_autoload} ? | ||
| 41 | $obj->{_decode_mapping_autoload} : 1); | ||
| 42 | } | ||
| 43 | $str; | ||
| 44 | wakaba | 1.1 | } |
| 45 | |||
| 46 | ## prototype for EUCs | ||
| 47 | |||
| 48 | sub __2022__common ($) { | ||
| 49 | my $C = Encode::ISO2022->new_object; | ||
| 50 | $C->{bit} = 8; | ||
| 51 | $C->{option}->{designate_to}->{C0}->{default} = -1; | ||
| 52 | $C->{option}->{designate_to}->{C0}->{"\x40"} = 0; | ||
| 53 | $C->{option}->{designate_to}->{C1}->{default} = -1; | ||
| 54 | $C->{option}->{designate_to}->{G94}->{default} = -1; | ||
| 55 | $C->{option}->{designate_to}->{G94n}->{default} = -1; | ||
| 56 | $C->{option}->{designate_to}->{G96}->{default} = -1; | ||
| 57 | $C->{option}->{designate_to}->{G96n}->{default} = -1; | ||
| 58 | $C->{option}->{Ginvoke_to_left} = [1,0,0,0]; | ||
| 59 | $C->{option}->{Ginvoke_by_single_shift} = [0,0,1,1]; | ||
| 60 | $C->{option}->{C1invoke_to_right} = 1; | ||
| 61 | $C->{option}->{reset}->{Gdesignation} = 0; | ||
| 62 | $C->{option}->{reset}->{Ginvoke} = 0; | ||
| 63 | $C; | ||
| 64 | } | ||
| 65 | sub __2022_encode ($) { | ||
| 66 | my $C = shift->__2022__common; | ||
| 67 | $C; | ||
| 68 | } | ||
| 69 | sub __2022_decode ($) { | ||
| 70 | my $C = shift->__2022__common; | ||
| 71 | $C; | ||
| 72 | } | ||
| 73 | wakaba | 1.5 | sub __encode_map ($) { |
| 74 | []; | ||
| 75 | } | ||
| 76 | sub __decode_map ($) { | ||
| 77 | []; | ||
| 78 | } | ||
| 79 | wakaba | 1.1 | |
| 80 | wakaba | 1.5 | sub __clone ($) { |
| 81 | my $self = shift; | ||
| 82 | bless {%$self}, ref $self; | ||
| 83 | }; | ||
| 84 | |||
| 85 | package Encode::ISO2022::EightBit::EUCJapanOldDefinition; | ||
| 86 | wakaba | 1.1 | use vars qw/@ISA/; |
| 87 | push @ISA, 'Encode::ISO2022::EightBit'; | ||
| 88 | wakaba | 1.5 | __PACKAGE__->Define (qw/ujis x-ujis euc-jp-1983 euc-japan-1983 deckanji/); |
| 89 | wakaba | 1.1 | |
| 90 | =item ujis | ||
| 91 | |||
| 92 | wakaba | 1.5 | EUC (ISO/IEC 2022 based 8-bit encoding) for Japanese |
| 93 | with JIS X 0208 (JIS C 6226)-1983 | ||
| 94 | (obsoleted definition of pre-1990 days). (Alias: x-ujis, | ||
| 95 | euc-japan-1983, euc-jp-1983) | ||
| 96 | wakaba | 1.1 | |
| 97 | =cut | ||
| 98 | |||
| 99 | sub __2022__common ($) { | ||
| 100 | my $C = shift->SUPER::__2022__common; | ||
| 101 | $C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{B}; ## JIS X 0208-1983 | ||
| 102 | $C->{G2} = $Encode::ISO2022::CHARSET{G94}->{I}; ## JIS X 0201 Katakana | ||
| 103 | $C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{' @'}; ## Gaiji (undefined) | ||
| 104 | $C; | ||
| 105 | } | ||
| 106 | wakaba | 1.5 | sub __encode_map ($) { |
| 107 | [qw/ucs_to_ascii ucs_to_jisx0208_1983 ucs_to_jisx0201_katakana/]; | ||
| 108 | } | ||
| 109 | sub __decode_map ($) { | ||
| 110 | [qw/jisx0208_1983_to_ucs jisx0201_katakana_to_ucs/]; | ||
| 111 | } | ||
| 112 | wakaba | 1.1 | |
| 113 | package Encode::ISO2022::EightBit::EUCJapan; | ||
| 114 | use vars qw/@ISA/; | ||
| 115 | push @ISA, 'Encode::ISO2022::EightBit'; | ||
| 116 | wakaba | 1.5 | __PACKAGE__->Define (qw/euc-japan euc-japan-1990 euc-japan-1997 euc-jp euc-jp-1990 |
| 117 | euc-jp-1997 euc-j eucjp euc_jp x-euc-jp | ||
| 118 | x-eucjp eucjis euc-jis eucj Extended_UNIX_Code_Packed_Format_for_Japanese | ||
| 119 | csEUCPkdFmtJapanese eujis | ||
| 120 | wakaba | 1.1 |