| #!/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; |