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