qtbase-opensource-src/util/unicode/x11/makeencodings

136 lines
2.8 KiB
Plaintext
Raw Normal View History

2022-05-14 17:39:13 +08:00
#!/usr/bin/perl
use strict;
open IN, "encodings.in"
or die "Can't open in\n";
open out, ">encodings.c"
or die "Can't open out\n";
my @qwritingSystems = (
"Any",
"Latin",
"Greek",
"Cyrillic",
"Armenian",
"Hebrew",
"Arabic",
"Syriac",
"Thaana",
"Devanagari",
"Bengali",
"Gurmukhi",
"Gujarati",
"Oriya",
"Tamil",
"Telugu",
"Kannada",
"Malayalam",
"Sinhala",
"Thai",
"Lao",
"Tibetan",
"Myanmar",
"Georgian",
"Khmer",
"SimplifiedChinese",
"TraditionalChinese",
"Japanese",
"Korean",
"Vietnamese",
"Yi",
"Tagalog",
"Hanunoo",
"Buhid",
"Tagbanwa",
"Limbu",
"TaiLe",
"Braille",
"Other"
);
my $writingSystemsCount = @qwritingSystems;
my $num = 0;
my @xlfd = ();
my @mib = ();
my @writingSystems = ();
my $i;
while (<IN>) {
chomp;
s/#.*//;
if ( index( $_, ' ' ) > -1 ) {
chomp;
my @line = split( / /, $_ );
$xlfd[$num] = $line[0];
$mib[$num] = $line[1];
$writingSystems[$num] = $line[2];
$num = $num + 1;
}
}
print out "#define make_tag( c1, c2, c3, c4 ) \\\n";
print out " ((((unsigned int)c1)<<24) | (((unsigned int)c2)<<16) | \\\n";
print out " (((unsigned int)c3)<<8) | ((unsigned int)c4))\n\n";
print out "struct XlfdEncoding {\n const char *name;\n int id;\n";
print out " int mib;\n unsigned int hash1;\n unsigned int hash2;\n};\n\n";
print out "static const XlfdEncoding xlfd_encoding[] = {\n";
$i = 0;
while( $i < $num ) {
my $x = $xlfd[$i];
my $hash1 = "make_tag('".substr($x,0,1)."','".substr($x,1,1)."','".substr($x,2,1)."','".substr($x,3,1)."')";
if( index( $x, "*" ) > -1 && index( $x, "*" ) < 4 ) {
$hash1 = "0";
}
my $idx = length( $x ) - 4;
my $hash2 = "make_tag('".substr($x,$idx,1)."','".substr($x,$idx+1,1)."','".substr($x,$idx+2,1)."','".substr($x,$idx+3,1)."')";
if( index( $x, "*", $idx ) > -1 ) {
$hash2 = "0";
}
print out " { \"".$xlfd[$i]."\", ".$i.", ".$mib[$i].
", ".$hash1.", ".$hash2." },\n";
$i = $i + 1;
}
print out " { 0, 0, 0, 0, 0 }\n};\n\n";
print out "static const char writingSystems_for_xlfd_encoding[".$num."][".$writingSystemsCount.
"] = { \n";
$i = 0;
while( $i < $num ) {
my $j = 0;
my @s = split( /,/, $writingSystems[$i] );
print out " // ".$xlfd[$i]."\n";
print out " { ";
while( $j < $writingSystemsCount ) {
if( grep( /^$qwritingSystems[$j]$/, @s ) ) {
print out "1";
} else {
print out "0";
}
$j = $j + 1;
if ( $j < $writingSystemsCount ) {
print out ", ";
if ( !(($j) % 10) ) {
print out "\n ";
}
}
}
$i = $i + 1;
if ( $i < $num ) {
print out " },\n";
} else {
print out " }\n";
}
}
print out "\n};\n\n";
close out;