1 # Copyright 2000-2002 Double Precision, Inc.
2 # Changed 2006 by Serhij Dubyk
4 # $Id: mkkoi8u.pl,v 1.1 2006/03/25 14:24:43 mrsam Exp $
6 # Generate iso-8859* unicode tables
8 open (U
, "UnicodeData.txt") || die "$!\n";
14 my @fields= split /;/;
16 my ($code, $uc, $lc, $tc);
49 open (SET
, "koi8-u.txt") || die "koi8-u.txt: $!\n";
55 my ($code, $unicode)=split /[ \t]+/;
57 next unless $code ne "";
60 eval "\$unicode=$unicode;";
62 die if $code < 0 || $code > 255;
69 my $fwdname="koi8u_tab";
73 ** Copyright 2000-2002 Double Precision, Inc.
74 ** Changed 2006 by Serhij Dubyk
76 ** $Id: mkkoi8u.pl,v 1.1 2006/03/25 14:24:43 mrsam Exp $
83 print "static const unicode_char $fwdname [128]={\n";
85 for ($i=0; $i<128; $i++)
87 die "Unicode map not US-ASCII: $i\n" unless $fwd[$i] == $i;
90 for ($i=128; $i<256; $i++)
97 print "," if $i < 255;
98 print "\n" if ($i % 16) == 15;
103 my $ucname="koi8u_uc";
105 print "static const char $ucname [256]={\n";
107 for ($i=0; $i<256; $i++)
109 my $unicode=$fwd[$i];
111 $unicode=$UC{$unicode} && $rev{$UC{$unicode}} ?
$rev{$UC{$unicode}}:$i;
113 printf("(char)0x%02x", $unicode);
114 print "," if $i < 255;
115 print "\n" if ($i % 8) == 7;
120 my $lcname="koi8u_lc";
122 print "static const char $lcname [256]={\n";
124 for ($i=0; $i<256; $i++)
126 my $unicode=$fwd[$i];
128 $unicode=$LC{$unicode} && $rev{$LC{$unicode}} ?
$rev{$LC{$unicode}}:$i;
130 printf("(char)0x%02x", $unicode);
131 print "," if $i < 255;
132 print "\n" if ($i % 8) == 7;
137 my $tcname="koi8u_tc";
139 print "static const char $tcname [256]={\n";
141 for ($i=0; $i<256; $i++)
143 my $unicode=$fwd[$i];
145 $unicode=$TC{$unicode} && $rev{$TC{$unicode}} ?
$rev{$TC{$unicode}}:$i;
147 printf("(char)0x%02x", $unicode);
148 print "," if $i < 255;
149 print "\n" if ($i % 8) == 7;
152 my $structname="unicode_KOI8U";
153 my $chsetname="KOI8-U";
158 static unicode_char *c2u(const struct unicode_info *u, const char *cp, int *ip)
160 return (unicode_iso8859_c2u(cp, ip, $fwdname));
163 static char *u2c(const struct unicode_info *u, const unicode_char *cp, int *ip)
165 return (unicode_iso8859_u2c(cp, ip, $fwdname));
168 static char *toupper_func(const struct unicode_info *u, const char *cp, int *ip)
170 return (unicode_iso8859_convert(cp, ip, $ucname));
173 static char *tolower_func(const struct unicode_info *u, const char *cp, int *ip)
175 return (unicode_iso8859_convert(cp, ip, $lcname));
178 static char *totitle_func(const struct unicode_info *u, const char *cp, int *ip)
180 return (unicode_iso8859_convert(cp, ip, $tcname));
183 const struct unicode_info $structname = {
185 UNICODE_HEADER_BASE64 | UNICODE_BODY_BASE64,