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 |
$VERSION=do{my @r=(q$Revision: 1.5 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
17 |
use base qw(Encode::Encoding); |
18 |
require Encode::ISO2022; |
19 |
|
20 |
sub encode ($$;$) { |
21 |
my ($obj, $str, $chk) = @_; |
22 |
$_[1] = '' if $chk; |
23 |
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 |
$str = &Encode::ISO2022::internal_to_iso2022 ($str, $obj->__2022_encode); |
30 |
$str; |
31 |
} |
32 |
|
33 |
sub decode ($$;$) { |
34 |
my ($obj, $str, $chk) = @_; |
35 |
$_[1] = '' if $chk; |
36 |
$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 |
} |
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 |
sub __encode_map ($) { |
74 |
[]; |
75 |
} |
76 |
sub __decode_map ($) { |
77 |
[]; |
78 |
} |
79 |
|
80 |
sub __clone ($) { |
81 |
my $self = shift; |
82 |
bless {%$self}, ref $self; |
83 |
}; |
84 |
|
85 |
package Encode::ISO2022::EightBit::EUCJapanOldDefinition; |
86 |
use vars qw/@ISA/; |
87 |
push @ISA, 'Encode::ISO2022::EightBit'; |
88 |
__PACKAGE__->Define (qw/ujis x-ujis euc-jp-1983 euc-japan-1983 deckanji/); |
89 |
|
90 |
=item ujis |
91 |
|
92 |
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 |
|
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 |
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 |
|
113 |
package Encode::ISO2022::EightBit::EUCJapan; |
114 |
use vars qw/@ISA/; |
115 |
push @ISA, 'Encode::ISO2022::EightBit'; |
116 |
__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 |
japanese-iso-8bit cp51932 japanese_euc |
121 |
ajec eucjp-open ibm-eucjp cp33722 33722 sdeckanji/); |
122 |
|
123 |
=item euc-japan |
124 |
|
125 |
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 |
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 |
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 |
|
176 |
package Encode::ISO2022::EightBit::EUCJISX0213; |
177 |
use vars qw/@ISA/; |
178 |
push @ISA, 'Encode::ISO2022::EightBit'; |
179 |
__PACKAGE__->Define (qw/euc-jisx0213 x-euc-jisx0213 euc_jisx0213 eucjp0213 |
180 |
euc-jp-3 euc-japan-2000 euc-jp-2000 x-euc-jisx0213-packed deckanji2000/); |
181 |
|
182 |
=item euc-jisx0213 |
183 |
|
184 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Japanese |
185 |
with JIS X 0213:2000, defined by JIS X 0213:2000. |
186 |
(Alias: x-euc-jisx0213, euc_jisx0213, eucjp0213, euc-jp-3, |
187 |
euc-japan-2000, euc-jp-2000) |
188 |
|
189 |
=cut |
190 |
|
191 |
sub __2022__common ($) { |
192 |
my $C = shift->SUPER::__2022__common; |
193 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{O}; ## JIS X 0213:2000 plane 1 |
194 |
$C->{G2} = $Encode::ISO2022::CHARSET{G94}->{I}; ## JIS X 0201 Katakana |
195 |
$C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{P}; ## JIS X 0213:2000 plane 2 |
196 |
$C; |
197 |
} |
198 |
sub __encode_map ($) { |
199 |
[qw/ucs_to_ascii ucs_to_jisx0213_2000_1 ucs_to_jisx0213_2000_2 ucs_to_jisx0201_katakana/]; |
200 |
} |
201 |
sub __decode_map ($) { |
202 |
[qw/jisx0213_2000_1_to_ucs jisx0212_0213_to_ucs jisx0201_katakana_to_ucs/]; |
203 |
} |
204 |
|
205 |
package Encode::ISO2022::EightBit::EUCJISX0213Plane1; |
206 |
use vars qw/@ISA/; |
207 |
push @ISA, 'Encode::ISO2022::EightBit'; |
208 |
__PACKAGE__->Define (qw/euc-jisx0213-plane1/); |
209 |
|
210 |
=item euc-jisx0213-plane1 |
211 |
|
212 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Japanese |
213 |
with JIS X 0213:2000 plane 1, defined by JIS X 0213:2000 |
214 |
|
215 |
=cut |
216 |
|
217 |
sub __2022__encode ($) { |
218 |
my $C = shift->SUPER::__2022__common; |
219 |
$C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{"\x7E"}; ## empty |
220 |
$C; |
221 |
} |
222 |
sub __encode_map ($) { |
223 |
[qw/ucs_to_ascii ucs_to_jisx0213_2000_1 ucs_to_jisx0201_katakana/]; |
224 |
} |
225 |
sub __decode_map ($) { |
226 |
[qw/jisx0213_2000_1_to_ucs jisx0212_0213_to_ucs jisx0201_katakana_to_ucs/]; |
227 |
} |
228 |
|
229 |
package Encode::ISO2022::EightBit::EUCCHINA; |
230 |
use vars qw/@ISA/; |
231 |
push @ISA, 'Encode::ISO2022::EightBit'; |
232 |
__PACKAGE__->Define (qw/euc-china euc-cn euccn euc-gb |
233 |
cn-gb cn-gb-2312 chinese-iso-8bit ugb |
234 |
gb2312 csgb2312 x-euc-cn cp51936 ibm-euccn CP1383 1383/); |
235 |
|
236 |
=item euc-china |
237 |
|
238 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Chinese. |
239 |
(Alias: euc-cn (emacsen), euccn, euc-gb, cn-gb (RFC 1922), cn-gb-2312 (RFC 1922), |
240 |
chinese-iso-8bit (emacsen), ugb (locale), gb2312 (IANA), csgb2312 (IANA), |
241 |
x-euc-cn, CP51936 (M$)) |
242 |
|
243 |
=cut |
244 |
|
245 |
sub __2022__common ($) { |
246 |
my $C = shift->SUPER::__2022__common; |
247 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{A}; ## GB 2312 |
248 |
$C; |
249 |
} |
250 |
sub __encode_map ($) { |
251 |
[qw/ucs_to_ascii ucs_to_gb2312_1980/]; |
252 |
} |
253 |
sub __decode_map ($) { |
254 |
[qw/gb2312_1980_to_ucs/]; |
255 |
} |
256 |
|
257 |
package Encode::ISO2022::EightBit::EUCCHINA165; |
258 |
use vars qw/@ISA/; |
259 |
push @ISA, 'Encode::ISO2022::EightBit'; |
260 |
__PACKAGE__->Define (qw/cn-gb-isoir165 iso-ir-165/); |
261 |
|
262 |
=item cn-gb-isoir165 |
263 |
|
264 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Chinese |
265 |
with ISO-IR 165. (Alias: cn-gb-isoir165 (RFC 1922), |
266 |
ISO-IR-165) |
267 |
|
268 |
=cut |
269 |
|
270 |
sub __2022__common ($) { |
271 |
my $C = shift->SUPER::__2022__common; |
272 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{"\x45"}; ## ISO-IR 165 |
273 |
$C; |
274 |
} |
275 |
sub __encode_map ($) { |
276 |
[qw/ucs_to_ascii ucs_to_iso_ir_165/]; |
277 |
} |
278 |
sub __decode_map ($) { |
279 |
[qw/iso_ir_165_to_ucs/]; |
280 |
} |
281 |
|
282 |
package Encode::ISO2022::EightBit::EUCcwnn; |
283 |
use vars qw/@ISA/; |
284 |
push @ISA, 'Encode::ISO2022::EightBit'; |
285 |
__PACKAGE__->Define (qw/euc-cwnn cwnn-iso-8bit/); |
286 |
|
287 |
=item euc-cwnn |
288 |
|
289 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Chinese |
290 |
with GB 2312, used by cwnn input system (Alias: cwnn-iso-8bit). |
291 |
See <http://www.tomo.gr.jp/users/wnn/9912ml/msg00088.html>. |
292 |
|
293 |
=cut |
294 |
|
295 |
sub __2022__common ($) { |
296 |
my $C = shift->SUPER::__2022__common; |
297 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{A}; ## GB 2312 |
298 |
$C->{G2} = $Encode::ISO2022::CHARSET{G94}->{'0'}; # omron_udc_zh (sisheng) |
299 |
## TODO: Implement by private set support |
300 |
$C; |
301 |
} |
302 |
sub __encode_map ($) { |
303 |
[qw/ucs_to_ascii ucs_to_gb2312_1980 ucs_to_omron_udc_zh/]; |
304 |
} |
305 |
sub __decode_map ($) { |
306 |
[qw/gb2312_1980_to_ucs omron_udc_zh_to_ucs/]; |
307 |
} |
308 |
|
309 |
## cn-gb-12345, gb12345, euc-gb12345 |
310 |
|
311 |
package Encode::ISO2022::EightBit::EUCKorea; |
312 |
use vars qw/@ISA/; |
313 |
push @ISA, 'Encode::ISO2022::EightBit'; |
314 |
__PACKAGE__->Define (qw/euc-korea euc-kr euckr cp970 cp51949 ibm-euckr x-euc-kr |
315 |
cseuckr korean-iso-8bit/); |
316 |
|
317 |
=item euc-korea |
318 |
|
319 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Korean |
320 |
(Alias: euc-kr (IANA), euckr, cp970, cp51949 (M$), ibm-euckr, |
321 |
x-euc-kr, cseuckr (IANA), korean-iso-8bit (emacsen)) |
322 |
|
323 |
=cut |
324 |
|
325 |
sub __2022__common ($) { |
326 |
my $C = shift->SUPER::__2022__common; |
327 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{C}; ## KS X 1001 |
328 |
$C; |
329 |
} |
330 |
sub __encode_map ($) { |
331 |
[qw/ucs_to_ascii ksx1001_1992_katakana/]; |
332 |
} |
333 |
sub __decode_map ($) { |
334 |
[qw/ksx1001_1992_to_ucs/]; |
335 |
} |
336 |
|
337 |
package Encode::ISO2022::EightBit::EUCTaiwan; |
338 |
use vars qw/@ISA/; |
339 |
push @ISA, 'Encode::ISO2022::EightBit'; |
340 |
__PACKAGE__->Define (qw/euc-taiwan euc-tw euctw x-euc-tw cns11643 cseuctw |
341 |
ibm-euctw cp964/); |
342 |
|
343 |
=item euc-taiwan |
344 |
|
345 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Chinese |
346 |
with CNS 11643. (Alias: euc-tw, euctw, x-euc-tw, cseuctw, cns11643) |
347 |
|
348 |
=cut |
349 |
|
350 |
sub __2022__common ($) { |
351 |
my $C = shift->SUPER::__2022__common; |
352 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{G}; ## plane 1 |
353 |
#$C->{G2} = ## BUG: does not support plane 2-16 yet |
354 |
$C->{G2} = $Encode::ISO2022::CHARSET{G94n}->{' `'}; # 3byte DRCS (temporary) |
355 |
$C; |
356 |
} |
357 |
sub __encode_map ($) { |
358 |
[qw/ucs_to_ascii ucs_to_cns11643_1 ucs_to_cns11643_2 ucs_to_cns11643_3 ucs_to_cns11643_4 ucs_to_cns11643_5 ucs_to_cns11643_6 ucs_to_cns11643_7 ucs_to_cns11643_8 ucs_to_cns11643_9 ucs_to_cns11643_10 ucs_to_cns11643_11 ucs_to_cns11643_12 ucs_to_cns11643_13 ucs_to_cns11643_14 ucs_to_cns11643_15 ucs_to_cns11643_16/]; |
359 |
} |
360 |
sub __decode_map ($) { |
361 |
[qw/cns11643_1_to_ucs cns11643_2_to_ucs cns11643_3_to_ucs cns11643_4_to_ucs cns11643_5_to_ucs cns11643_6_to_ucs cns11643_7_to_ucs cns11643_8_to_ucs cns11643_9_to_ucs cns11643_10_to_ucs cns11643_11_to_ucs cns11643_12_to_ucs cns11643_13_to_ucs cns11643_14_to_ucs cns11643_15_to_ucs cns11643_16_to_ucs/]; |
362 |
} |
363 |
|
364 |
package Encode::ISO2022::EightBit::EUCtwnn; |
365 |
use vars qw/@ISA/; |
366 |
push @ISA, 'Encode::ISO2022::EightBit'; |
367 |
__PACKAGE__->Define (qw/euc-twnn twnn-iso-8bit/); |
368 |
|
369 |
=item euc-twnn |
370 |
|
371 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Chinese |
372 |
with CNS 11643, used by twnn input system (Alias: twnn-iso-8bit) |
373 |
See <http://www.tomo.gr.jp/users/wnn/9912ml/msg00088.html>. |
374 |
|
375 |
=cut |
376 |
|
377 |
sub __2022__common ($) { |
378 |
my $C = shift->SUPER::__2022__common; |
379 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{G}; ## plane 1 |
380 |
$C->{G2} = $Encode::ISO2022::CHARSET{G94}->{'0'}; # omron_udc_zh (sisheng) |
381 |
## TODO: Implement by private set support |
382 |
$C->{G3} = $Encode::ISO2022::CHARSET{G94n}->{H}; ## plane 2 |
383 |
$C; |
384 |
} |
385 |
sub __encode_map ($) { |
386 |
[qw/ucs_to_ascii ucs_to_cns11643_1 ucs_to_cns11643_2 ucs_to_omron_udc_zh/]; |
387 |
} |
388 |
sub __decode_map ($) { |
389 |
[qw/cns11643_1_to_ucs cns11643_2_to_ucs omron_udc_zh_to_ucs/]; |
390 |
} |
391 |
|
392 |
package Encode::ISO2022::EightBit::EUCKPS9566; |
393 |
use vars qw/@ISA/; |
394 |
push @ISA, 'Encode::ISO2022::EightBit'; |
395 |
__PACKAGE__->Define (qw/euc-kps9566/); |
396 |
|
397 |
=item euc-kps9566 |
398 |
|
399 |
EUC (ISO/IEC 2022 based 8-bit encoding) for Korean |
400 |
with KPS 9566-97 |
401 |
|
402 |
=cut |
403 |
|
404 |
sub __2022__common ($) { |
405 |
my $C = shift->SUPER::__2022__common; |
406 |
$C->{G1} = $Encode::ISO2022::CHARSET{G94n}->{N}; ## KPS 9566-97 |
407 |
$C; |
408 |
} |
409 |
sub __encode_map ($) { |
410 |
[qw/ucs_to_ascii ucs_to_kps9566_1997/]; |
411 |
} |
412 |
sub __decode_map ($) { |
413 |
[qw/kps9566_1997_to_ucs/]; |
414 |
} |
415 |
|
416 |
package Encode::ISO2022::EightBit::SS2; |
417 |
use vars qw/@ISA/; |
418 |
push @ISA, 'Encode::ISO2022::EightBit'; |
419 |
__PACKAGE__->Define (qw/iso-2022-8bit-ss2/); |
420 |
|
421 |
=item iso-2022-8bit-ss2 |
422 |
|
423 |
ISO/IEC 2022 based 8-bit encoding using SS2 for 96-charset |
424 |
|
425 |
=cut |
426 |
|
427 |
sub __2022__common ($) { |
428 |
my $C = Encode::ISO2022->new_object; |
429 |
$C->{option}->{designate_to}->{G96}->{default} = 2; |
430 |
$C->{option}->{designate_to}->{G96n}->{default} = 2; |
431 |
$C->{option}->{G94n_designate_long} = 1; |
432 |
$C->{option}->{Ginvoke_by_single_shift}->[2] = 1; |
433 |
$C->{option}->{Ginvoke_to_left}->[2] = 0; |
434 |
$C->{option}->{C1invoke_to_right} = 1; |
435 |
$C; |
436 |
} |
437 |
|
438 |
package Encode::ISO2022::EightBit::CompoundText; |
439 |
use vars qw/@ISA/; |
440 |
push @ISA, 'Encode::ISO2022::EightBit'; |
441 |
__PACKAGE__->Define (qw/compound-text compound_text |
442 |
x-compound-text ctext x-ctext ct/); |
443 |
|
444 |
=item compound-text |
445 |
|
446 |
ISO/IEC 2022 based 8-bit encoding used in inter-client |
447 |
communication of X Window System (Alias: ctext (emacsen), x-ctext (emacsen), |
448 |
compound_text, x-compound-text, ct (loacle)) |
449 |
|
450 |
Strictly, x-ctext, extended compound text (X Compound Text |
451 |
based encoding for unknown ISO/IEC 2022 based encoding) is a |
452 |
different coding system from X Compound Text. See |
453 |
[mule-jp:7455] <mid:rsqsoa5s2hr.fsf@crane.jaist.ac.jp> and |
454 |
[mule-jp:7457] <mid:rsq4smlky85.fsf@crane.jaist.ac.jp>. |
455 |
Mule's ctext allows private final bytes and 96^n sets. |
456 |
|
457 |
XFree86 extended compound text allows to use UTF-8 |
458 |
with ESC 02/05 04/06. See |
459 |
<http://cvsweb.xfree86.org/cvsweb/xc/doc/specs/CTEXT/ctext.tbl.ms>. |
460 |
|
461 |
=cut |
462 |
|
463 |
## TODO: separate mule ctext and xfree86 ctext |
464 |
|
465 |
sub __2022__common ($) { |
466 |
my $C = Encode::ISO2022->new_object; |
467 |
$C->{option}->{designate_to}->{C0}->{default} = -1; |
468 |
$C->{option}->{designate_to}->{C1}->{default} = -1; |
469 |
$C->{option}->{designate_to}->{G94}->{I} = 1; ## JIS X 0201 Katakana |
470 |
$C->{option}->{designate_to}->{G96}->{default} = 1; |
471 |
$C->{option}->{designate_to}->{G96n}->{default} = -1; |
472 |
for my $t (qw/G94 G96 G94n/) { |
473 |
for (0x30..0x3F) { |
474 |
my $F = chr $_; |
475 |
#$C->{option}->{designate_to}->{$t}->{$F} = -1; |
476 |
$C->{option}->{designate_to}->{$t}->{'!'.$F} = -1; |
477 |
$C->{option}->{designate_to}->{$t}->{'"'.$F} = -1; |
478 |
$C->{option}->{designate_to}->{$t}->{'#'.$F} = -1; |
479 |
$C->{option}->{designate_to}->{$t}->{' '.$F} = -1; |
480 |
} |
481 |
for (0x40..0x7E) { |
482 |
$C->{option}->{designate_to}->{$t}->{' '.chr $_} = -1; |
483 |
} |
484 |
} |
485 |
$C->{option}->{G94n_designate_long} = 1; |
486 |
$C->{option}->{Ginvoke_to_left}->[1] = 0; |
487 |
$C->{option}->{C1invoke_to_right} = 1; |
488 |
$C->{option}->{reset}->{Ginvoke} = 0; |
489 |
$C->{option}->{use_revision} = 0; |
490 |
## XFree86 extension |
491 |
$C->{option}->{designate_to}->{G94n}->{"\x42\x40"} = 0; ## JIS X 0208-1990 |
492 |
$C->{option}->{designate_to}->{coding_system}->{"\x40"} = 1; ## ISO/IEC 2022 |
493 |
$C->{option}->{designate_to}->{coding_system}->{"\x47"} = 1; ## UTF-8 |
494 |
$C; |
495 |
} |
496 |
sub __2022_decode ($) { |
497 |
my $C = shift->__2022__common; |
498 |
## Emacsen's x-ctext |
499 |
$C->{G1} = $Encode::ISO2022::CHARSET{G96}->{A}; ## ISO/IEC 8859-1 |
500 |
$C; |
501 |
} |
502 |
sub __encode_map ($) { |
503 |
[qw/ucs_to_ascii ucs_to_isoiec8859_1 ucs_to_isoiec8859_2 ucs_to_isoiec8859_3 ucs_to_isoiec8859_4 ucs_to_isoiec8859_5 ucs_to_isoiec8859_6 ucs_to_isoiec8859_7 ucs_to_isoiec8859_8 ucs_to_isoiec8859_9 ucs_to_gb2312_1980 ucs_to_jisx0208_1983 ucs_to_ksx1001_1992 ucs_to_jisx0212_1990 ucs_to_jisx0201_latin ucs_to_jisx0201_katakana/]; |
504 |
} |
505 |
sub __decode_map ($) { |
506 |
[qw/isoiec8859_2_to_ucs isoiec8859_3_to_ucs isoiec8859_4_to_ucs isoiec8859_5_to_ucs isoiec8859_6_to_ucs isoiec8859_7_to_ucs isoiec8859_8_to_ucs isoiec8859_9_to_ucs gb2312_1980_to_ucs jisx0208_1983_to_ucs ksx1001_1992_to_ucs jisx0212_1990_to_ucs/]; |
507 |
} |
508 |
|
509 |
|
510 |
1; |
511 |
__END__ |
512 |
|
513 |
=back |
514 |
|
515 |
=head1 LICENSE |
516 |
|
517 |
Copyright 2002 Wakaba <w@suika.fam.cx> |
518 |
|
519 |
This library is free software; you can redistribute it |
520 |
and/or modify it under the same terms as Perl itself. |
521 |
|
522 |
=cut |
523 |
|
524 |
# $Date: 2002/10/12 07:27:01 $ |
525 |
### SevenBit.pm ends here |