You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.0 KiB
48 lines
1.0 KiB
2 months ago
|
#!/usr/bin/perl
|
||
|
#
|
||
|
# Generate C Language Table for UniCode Data
|
||
|
# (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
||
|
#
|
||
|
|
||
|
$name=$ARGV[0];
|
||
|
$type=$ARGV[1];
|
||
|
|
||
|
while (<STDIN>) {
|
||
|
chomp;
|
||
|
/^#/ && next;
|
||
|
/^\s*$/ && next;
|
||
|
s/^0x//;
|
||
|
($i,$j) = split/\s+/;
|
||
|
($i =~ /^(..)(..)$/) || die "Syntax error at $i";
|
||
|
$table{$1} = "$name" . "_$1";
|
||
|
die if defined $val{$i};
|
||
|
$val{$i} = $j;
|
||
|
}
|
||
|
|
||
|
print "/* Generated automatically by gentab. Please don't edit. */\n\n";
|
||
|
|
||
|
for($i=0; $i<256; $i++) {
|
||
|
$x = sprintf("%02X", $i);
|
||
|
if (defined($table{$x})) {
|
||
|
print "static const $type $table{$x}\[256\] = \{\n";
|
||
|
for($j=0; $j<256; $j++) {
|
||
|
$y = $x . sprintf("%02X", $j);
|
||
|
if ($val{$y}) { print $val{$y}; }
|
||
|
else { print "0"; }
|
||
|
if ($j != 255) { print ","; }
|
||
|
if ($j % 16 == 15) { print "\n"; }
|
||
|
}
|
||
|
print "\};\n\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
print "const $type \*$name\[256\] = \{\n";
|
||
|
for($j=0; $j<256; $j++) {
|
||
|
$y = sprintf("%02X", $j);
|
||
|
if (defined $table{$y}) { print $table{$y}; }
|
||
|
else { print "NULL"; }
|
||
|
if ($j != 255) { print ","; }
|
||
|
if ($j % 16 == 15) { print "\n"; }
|
||
|
}
|
||
|
print "\};\n";
|