diff -r 000000000000 -r 1918ee327afb util/unicode/x11/makeencodings --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/util/unicode/x11/makeencodings Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,135 @@ +#!/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 () { + 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;