ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/gentables
(Generate patch)

Comparing rxvt-unicode/src/gentables (file contents):
Revision 1.1 by pcg, Mon Nov 24 17:28:08 2003 UTC vs.
Revision 1.12 by root, Wed Jun 16 23:07:11 2021 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2 2
3# the generated tables mostly have NOT been chcked so far! 3# the generated tables mostly have NOT been checked so far!
4
5# apt install libencode-hanextra-perl libencode-jis2k-perl
4 6
5use v5.8.2; 7use v5.8.2;
6use utf8; 8use utf8;
7use Encode; 9use Encode;
10use Encode::JP;
11use Encode::CN;
12use Encode::KR;
13use Encode::HanExtra;
14use Encode::JIS2K;
8 15
9my $gen; 16my $gen;
17
18$TO_UNICODE = 0; # also generate to_unicode tables
10 19
11sub linear { 20sub linear {
12 my ($a, $l, $h, $b) = @_; 21 my ($a, $l, $h, $b) = @_;
13 for ($l .. $h) { 22 for ($l .. $h) {
14 return unless defined $a->[$_] && $a->[$_] == $_ + ($b - $l); 23 return unless defined $a->[$_] && $a->[$_] == $_ + ($b - $l);
86 $fun .= sprintf "if (· == 0x%04x) return 0x%04x;\n", $b + $_, $enc->[$b + $_]; 95 $fun .= sprintf "if (· == 0x%04x) return 0x%04x;\n", $b + $_, $enc->[$b + $_];
87 } 96 }
88 } elsif (linear $enc, $b + $l, $b + $h, $enc->[$b + $l]) { 97 } elsif (linear $enc, $b + $l, $b + $h, $enc->[$b + $l]) {
89 my $dif = $enc->[$b + $l] - ($b + $l); 98 my $dif = $enc->[$b + $l] - ($b + $l);
90 $dif = $dif < 0 ? sprintf "- 0x%04x", -$dif : sprintf "+ 0x%04x", $dif; 99 $dif = $dif < 0 ? sprintf "- 0x%04x", -$dif : sprintf "+ 0x%04x", $dif;
91 $fun .= sprintf "if (· <= 0x%04x && 0x%04x <= ·) return · %s;\n", $b + $l, $b + $h, $dif; 100 $fun .= sprintf "if (· >= 0x%04x && 0x%04x >= ·) return · %s;\n", $b + $l, $b + $h, $dif;
92 } elsif ($map2[$p] <= 5) { # defunct 101 } elsif ($map2[$p] <= 5) { # defunct
93 $fun .= "switch (·)\n {\n"; 102 $fun .= "switch (·)\n {\n";
94 for ($l .. $h) { 103 for ($l .. $h) {
95 next unless defined $enc->[$b + $_]; 104 next unless defined $enc->[$b + $_];
96 $fun .= sprintf " case 0x%04x: return 0x%04x;\n", $b + $_, $enc->[$b + $_]; 105 $fun .= sprintf " case 0x%04x: return 0x%04x;\n", $b + $_, $enc->[$b + $_];
213 $enc1[$_] = $code; 222 $enc1[$_] = $code;
214 $enc2[$code] = $_ unless defined $enc2[$code]; 223 $enc2[$code] = $_ unless defined $enc2[$code];
215 } 224 }
216 } 225 }
217 226
227 my ($tab1, $fun1);
228 my ($tab2, $fun2);
229
218 my ($tab1, $fun1) = gen \@enc1, "$base\_f", "unicode"; 230 ($tab1, $fun1) = gen \@enc1, "$base\_f", "unicode";
219 my ($tab2, $fun2) = gen \@enc2, "$base\_t", "enc"; 231 ($tab2, $fun2) = gen \@enc2, "$base\_t", "enc" if $TO_UNICODE;
220 232
221 #$tab1 =~ s/^/ /gm;
222 #$tab2 =~ s/^/ /gm;
223 $fun1 =~ s/^/ /gm; 233 $fun1 =~ s/^/ /gm;
224 $fun2 =~ s/^/ /gm; 234 $fun2 =~ s/^/ /gm;
225 235
226 print "$base\n"; 236 print "$base\n";
227 open OUT, ">table/$base.h" or die; 237 open OUT, ">table/$base.h" or die;
231// AUTOMATICALLLY GENERATED by gentables 241// AUTOMATICALLLY GENERATED by gentables
232// 242//
233#ifdef ENCODING_$group 243#ifdef ENCODING_$group
234 244
235$tab1$tab2 245$tab1$tab2
236struct rxvt_codeset_conv_$base : rxvt_codeset_conv { 246static uint32_t cs_$base\_from_unicode (unicode_t unicode) {
237 uint32_t from_unicode (uint32_t unicode) const {
238$fun1 } 247$fun1}
239 uint32_t to_unicode (uint32_t enc) const { 248EOF
249
250if ($TO_UNICODE) {
251 print OUT <<EOF
252#if ENCODING_TO_UNICODE
253static unicode_t cs_$base\_to_unicode (uint32_t enc) {
240$fun2 } 254$fun2}
241} rxvt_codeset_conv_$base; 255#endif
256EOF
257}
258
259print OUT <<EOF;
242 260
243#else 261#else
244 262
245#define rxvt_codeset_conv_$base rxvt_codeset_conv_unknown 263#define cs_$base\_from_unicode cs_unknown_from_unicode
264#define cs_$base\_to_unicode cs_unknown_to_unicode
246 265
247#endif 266#endif
248EOF 267EOF
249 268
250 close OUT; 269 close OUT;
251} 270}
252 271
253__DATA__ 272__DATA__
254VN viscii viscii 273VN viscii viscii
255KR ksc5601_1987_0 ksc5601-raw 274KR ksc5601_1987_0 ksc5601-raw
256CN gb2312_1980_0 gb2312-raw 275ZH gb2312_1980_0 gb2312-raw
276ZH gbk_0 gbk
257CN_EXT cns11643_1992_1 cns11643-1 277ZH_EXT cns11643_1992_1 cns11643-1
258CN_EXT cns11643_1992_2 cns11643-2 278ZH_EXT cns11643_1992_2 cns11643-2
259CN_EXT cns11643_1992_3 cns11643-3 279ZH_EXT cns11643_1992_3 cns11643-3
260CN_EXT cns11643_1992_4 cns11643-4 280ZH_EXT cns11643_1992_4 cns11643-4
261CN_EXT cns11643_1992_5 cns11643-5 281ZH_EXT cns11643_1992_5 cns11643-5
262CN_EXT cns11643_1992_6 cns11643-6 282ZH_EXT cns11643_1992_6 cns11643-6
263CN_EXT cns11643_1992_7 cns11643-7 283ZH_EXT cns11643_1992_7 cns11643-7
264CN_EXT cns11643_1992_f cns11643-f 284ZH_EXT cns11643_1992_f cns11643-f
285ZH big5 big5
265CN_EXT big5_ext big5ext 286ZH_EXT big5_ext big5ext
266CN_EXT big5_plus big5plus 287ZH_EXT big5_plus big5plus
267EU koi8_r koi8-r 288EU koi8_r koi8-r
268EU koi8_u koi8-u 289EU koi8_u koi8-u
269DEFAULT iso8859_1 iso-8859-1 290DEFAULT iso8859_1 iso-8859-1
270EU iso8859_2 iso-8859-2 291EU iso8859_2 iso-8859-2
271EU iso8859_3 iso-8859-3 292EU iso8859_3 iso-8859-3
276EU iso8859_8 iso-8859-8 297EU iso8859_8 iso-8859-8
277EU iso8859_9 iso-8859-9 298EU iso8859_9 iso-8859-9
278EU iso8859_10 iso-8859-10 299EU iso8859_10 iso-8859-10
279EU iso8859_11 iso-8859-11 300EU iso8859_11 iso-8859-11
280EU iso8859_13 iso-8859-13 301EU iso8859_13 iso-8859-13
281EU iso8859_14 iso-8859-14 302EU iso8859_14 iso-8859-14
282DEFAULT iso8859_15 iso-8859-15 303DEFAULT iso8859_15 iso-8859-15
283EU iso8859_16 iso-8859-16 304EU iso8859_16 iso-8859-16
284JP jis0201_1976_0 jis0201-raw 305JP jis0201_1976_0 jis0201-raw
285JP jis0208_1983_0 jis0208-raw 306JP jis0208_1990_0 jis0208-raw
286JP jis0212_1990_0 jis0212-raw 307JP jis0212_1990_0 jis0212-raw
287JP_EXT jis0213_1 jis0213-1-raw 308JP_EXT jis0213_1 jis0213-1-raw
288JP_EXT jis0213_2 jis0213-2-raw 309JP_EXT jis0213_2 jis0213-2-raw

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines