# Copyright 2000-2002 Double Precision, Inc. # See COPYING for distribution information. # # $Id: mkibm864.pl,v 1.2 2002/11/18 00:54:22 mrsam Exp $ # # Generate iso-8859* unicode tables my $set=shift; open (U, "UnicodeData.txt") || die "$!\n"; while () { chomp; my @fields= split /;/; my ($code, $uc, $lc, $tc); $code="0x$fields[0]"; eval "\$code=$code;"; $uc=$fields[12]; if ($uc ne "") { eval "\$uc=0x$uc;"; $UC{$code}=$uc; } $lc=$fields[13]; if ($lc ne "") { eval "\$lc=0x$lc;"; $LC{$code}=$lc; } $tc=$fields[14]; if ($tc ne "") { eval "\$tc=0x$tc;"; $TC{$code}=$tc; } } close(U); my @fwd; my $rev; open (SET, $set) || die "$set: $!\n"; while () { chomp; s/\#.*//; my ($code, $unicode)=split /[ \t]+/; next unless $code ne ""; eval "\$code=$code;"; eval "\$unicode=$unicode;"; die if $code < 0 || $code > 255; $fwd[$code]=$unicode; $rev{$unicode}=$code; } close(SET); my $fwdname=shift; print ' /* ** Copyright 2000-2002 Double Precision, Inc. ** See COPYING for distribution information. ** ** $Id: mkibm864.pl,v 1.2 2002/11/18 00:54:22 mrsam Exp $ */ #include "unicode.h" '; print "static const unicode_char $fwdname [256]={\n"; for ($i=0; $i<256; $i++) { my $n=$fwd[$i]; $n=0 unless $n; print "$n"; print "," if $i < 255; print "\n" if ($i % 16) == 15; } print "};\n"; my $ucname=shift; print "static const char $ucname [256]={\n"; for ($i=0; $i<256; $i++) { my $unicode=$fwd[$i]; $unicode=$UC{$unicode} && $rev{$UC{$unicode}} ? $rev{$UC{$unicode}}:$i; printf("(char)0x%02x", $unicode); print "," if $i < 255; print "\n" if ($i % 8) == 7; } print "};\n"; my $lcname=shift; print "static const char $lcname [256]={\n"; for ($i=0; $i<256; $i++) { my $unicode=$fwd[$i]; $unicode=$LC{$unicode} && $rev{$LC{$unicode}} ? $rev{$LC{$unicode}}:$i; printf("(char)0x%02x", $unicode); print "," if $i < 255; print "\n" if ($i % 8) == 7; } print "};\n"; my $tcname=shift; print "static const char $tcname [256]={\n"; for ($i=0; $i<256; $i++) { my $unicode=$fwd[$i]; $unicode=$TC{$unicode} && $rev{$TC{$unicode}} ? $rev{$TC{$unicode}}:$i; printf("(char)0x%02x", $unicode); print "," if $i < 255; print "\n" if ($i % 8) == 7; } my $structname=shift; my $chsetname=shift; print "}; static unicode_char *c2u(const struct unicode_info *u, const char *cp, int *ip) { return (unicode_ibm864_c2u(cp, ip, $fwdname)); } static char *u2c(const struct unicode_info *u, const unicode_char *cp, int *ip) { return (unicode_ibm864_u2c(cp, ip, $fwdname)); } static char *toupper_func(const struct unicode_info *u, const char *cp, int *ip) { return (unicode_iso8859_convert(cp, ip, $ucname)); } static char *tolower_func(const struct unicode_info *u, const char *cp, int *ip) { return (unicode_iso8859_convert(cp, ip, $lcname)); } static char *totitle_func(const struct unicode_info *u, const char *cp, int *ip) { return (unicode_iso8859_convert(cp, ip, $tcname)); } const struct unicode_info $structname = { \"$chsetname\", 0, c2u, u2c, toupper_func, tolower_func, totitle_func}; ";