# 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 (<U>)
{
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 (<SET>)
{
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};
";
syntax highlighted by Code2HTML, v. 0.9.1