/[suikacvs]/test/oldencodeutils/lib/Encode/ISO2022/EightBit.pm
Suika

Contents of /test/oldencodeutils/lib/Encode/ISO2022/EightBit.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Sat Oct 12 07:27:01 2002 UTC (24 years, 1 month ago) by wakaba
Branch: MAIN
Changes since 1.4: +165 -26 lines
2002-10-12  Nanashi-san

	* SJIS.pm: New module.
	* SJIS/: New directory.
	(Commited by Wakaba <w@suika.fam.cx>)

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.5 $VERSION=do{my @r=(q$Revision: 1.4 $=~/\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 japanese-iso-8bit cp51932 japanese_euc
121     ajec eucjp-open ibm-eucjp cp33722 33722 sdeckanji/);
122    
123     =item euc-japan
124    
125 wakaba 1.5 EUC (ISO/IEC 2022 based 8-bit encoding) for Japanese
126     with JIS X 0208-1990.
127     (Alias: euc-japan-1990 (emacsen), euc-japan-1997, euc-jp (IANA), euc-jp-1990,
128     euc-jp-1997, eujis (locale),
129     euc-j, eucjp (locale), euc_jp, eucj, x-eucjp, x-euc-jp, eucjis, euc-jis,
130 wakaba 1.1 extended_unix_code_packed_format_for_japanese (IANA),
131     cseucpkdfmtjapanese (IANA), japanese-iso-8bit (emacsen),
132     cp51932 (M$), japanese_euc)
133    
134     =cut
135    
136     sub __2022__common ($) {
137     my $C = shift->SUPER::__2022__common;
138     $C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{'B@'}; ## JIS X 0208-1990
139     $C->{G2} = $Encode::ISO2022::CHARSET{G94}->{I}; ## JIS X 0201 Katakana
140     $C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{D}; ## JIS X 0212-1990
141     $C;
142     }
143 wakaba 1.5 sub __encode_map ($) {
144     [qw/ucs_to_ascii ucs_to_jisx0208_1990 ucs_to_jisx0212_1990 ucs_to_jisx0201_katakana/];
145     }
146     sub __decode_map ($) {
147     [qw/jisx0208_1990_to_ucs jisx0212_1990_to_ucs jisx0201_katakana_to_ucs/];
148     }
149    
150     package Encode::ISO2022::EightBit::EUCJapan1978;
151     use vars qw/@ISA/;
152     push @ISA, 'Encode::ISO2022::EightBit';
153     __PACKAGE__->Define (qw/euc-japan-1978 euc-jp-1978/);
154    
155     =item euc-japan-1978
156    
157     EUC (ISO/IEC 2022 based 8-bit encoding) for Japanese
158     with JIS X 0208 (JIS C 6226)-1978. (Alias: euc-jp-1978)
159    
160     =cut
161    
162     sub __2022__common ($) {
163     my $C = shift->SUPER::__2022__common;
164     $C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{'@'}; ## JIS X 0208-1978
165     $C->{G2} = $Encode::ISO2022::CHARSET{G94}->{I}; ## JIS X 0201 Katakana
166     $C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{D}; ## JIS X 0212-1990
167     $C;
168     }
169     sub __encode_map ($) {
170     [qw/ucs_to_ascii ucs_to_jisx0208_1978 ucs_to_jisx0212_1990 ucs_to_jisx0201_katakana/];
171     }
172     sub __decode_map ($) {
173     [qw/jisx0208_1978_to_ucs jisx0212_1990_to_ucs jisx0201_katakana_to_ucs/];
174     }
175 wakaba 1.1
176     package Encode::ISO2022::EightBit::EUCJISX0213;
177     use vars qw/@ISA/;
178     push @ISA, 'Encode::ISO2022::EightBit';
179 wakaba 1.4 __PACKAGE__->Define (qw/euc-jisx0213 x-euc-jisx0213 euc_jisx0213 eucjp0213
180 wakaba 1.5 euc-jp-3 euc-japan-2000 euc-jp-2000 x-euc-jisx0213-packed deckanji2000/);
181 wakaba 1.1
182     =item euc-jisx0213
183    
184