Annotation of embedaddon/php/ext/mbstring/libmbfl/filters/mk_emoji_tbl.pl, revision 1.1

1.1     ! misho       1: #!/usr/bin/perl
        !             2: # script to generate Shift_JIS encoded Emoji to/from Unicode conversion table. 
        !             3: # Rui Hirokawa <hirokawa@php.net>
        !             4: #
        !             5: # usage: mktbl.pl EmojiSources.txt
        !             6: #
        !             7: # Unicoe;DoCoMo;KDDI;SoftBank
        !             8: 
        !             9: @docomo = ();
        !            10: @kddi = ();
        !            11: @softbank = ();
        !            12: 
        !            13: @to_docomo = ();
        !            14: @to_kddi = ();
        !            15: @to_sb = ();
        !            16: 
        !            17: $fname = "emoji2uni.h";
        !            18: open(OUT,">$fname") or die $!;
        !            19: 
        !            20: sub sjis2code {
        !            21:   my @c = unpack("C*", pack("H4", $_[0]));
        !            22: 
        !            23:   # Shift_JIS -> JIS
        !            24:   $c[0] = (($c[0]-($c[0]<160?112:176))<<1)-($c[1]<159?1:0);
        !            25:   $c[1] -= ($c[1]<159?($c[1]>127?32:31):126); 
        !            26: 
        !            27:   $s = ($c[0] - 0x21)*94 + $c[1]-0x21;
        !            28: 
        !            29:   return $s;
        !            30: }
        !            31: 
        !            32: sub show_code {
        !            33:     my @c = @_;
        !            34:     $s = "\t";
        !            35:     for ($i=0; $i<=$#c; $i++) {#
        !            36:        if ($c[$i]) {
        !            37:            @v = split(' ',$c[$i]);
        !            38:            $s .= "0x$v[0], \t";
        !            39:            if ($#v > 0) {
        !            40:                print "$i $v[0] $v[1]\n";
        !            41:            }
        !            42:        } else {
        !            43:            $s .= "0x0000, \t";
        !            44:        }
        !            45:        if ($i % 4 == 3) {
        !            46:            $s .= "\n\t";
        !            47:        }
        !            48:     }
        !            49:     return $s;
        !            50: }
        !            51: 
        !            52: while(<>) {
        !            53:     if ($_ =~ /^\d+/) {
        !            54:        @v = split(/;/,$_);
        !            55:        if ($v[1] =~ /[\dA-F]+/) {
        !            56:            $code = &sjis2code($v[1]);
        !            57:            $docomo{$code} = $v[0];
        !            58:            $to_docomo{$v[0]} = $code;
        !            59:        }
        !            60:        if ($v[2] =~ /[\dA-F]+/) {
        !            61:            $code = &sjis2code($v[2]);
        !            62:            $kddi{$code} = $v[0];
        !            63:            $to_kddi{$v[0]} = $code;
        !            64:        }
        !            65:        if ($v[3] =~ /[\dA-F]+/) {
        !            66:            $code = &sjis2code($v[3]);
        !            67:            $softbank{$code} = $v[0];
        !            68:            $to_sb{$v[0]} = $code;
        !            69:        }
        !            70:     }
        !            71: }
        !            72: 
        !            73: print "DoCoMo\n";
        !            74: 
        !            75: $docomo_min = 10434;
        !            76: $docomo_max = 10434+281;
        !            77: @docomo_v = ();
        !            78: 
        !            79: foreach $key (sort {hex($a) <=> hex($b)} keys(%docomo)) {
        !            80:     $s = $key;
        !            81:     $pos = $s % 94;
        !            82:     $ku = ($s - $pos)/94;
        !            83:     $v = $key - $docomo_min;
        !            84:     #print "$ku:$pos - ". $v ."=> $docomo{$key}\n";
        !            85:     $docomo_v[$key-$docomo_min] = $docomo{$key};
        !            86: }
        !            87: 
        !            88: $to_docomo_min = 10434;
        !            89: 
        !            90: $to_docomo_min1 = 0x0023;
        !            91: $to_docomo_max1 = 0x00AE;
        !            92: $to_docomo_min2 = 0x203C;
        !            93: $to_docomo_max2 = 0x3299;
        !            94: $to_docomo_min3 = 0x1F17F;
        !            95: $to_docomo_max3 = 0x1F6BB;
        !            96: 
        !            97: @r_docomo1_key = ();
        !            98: @r_docomo1_val = ();
        !            99: 
        !           100: @r_docomo2_key = ();
        !           101: @r_docomo2_val = ();
        !           102: 
        !           103: @r_docomo3_key = ();
        !           104: @r_docomo3_val = ();
        !           105: 
        !           106: 
        !           107: foreach $key (sort {hex($a) <=> hex($b)} keys(%to_docomo)) {
        !           108:     $s = $to_docomo{$key};
        !           109: 
        !           110:     $pos = $s % 94;
        !           111:     $ku = ($s - $pos)/94;
        !           112:     $v = $to_docomo{$key} - $to_docomo_min;
        !           113:     $h = sprintf("%x",$s);
        !           114:     #print "$ku:$pos = $h ($v) <= $key\n";
        !           115:     if (hex($key) <= $to_docomo_max1) {
        !           116:        push(@r_docomo1_key, $key);
        !           117:        push(@r_docomo1_val, sprintf("%x", $to_docomo{$key}));
        !           118:     } elsif (hex($key) <= $to_docomo_max2) {
        !           119:        push(@r_docomo2_key, $key);
        !           120:        push(@r_docomo2_val, $h);
        !           121:     } elsif (hex($key) >= $to_docomo_max3) {
        !           122:        push(@r_docomo3_key, $key);
        !           123:        push(@r_docomo3_val, $h);
        !           124:     }
        !           125: }
        !           126: 
        !           127: push(@r_docomo1_key, 0x00);
        !           128: push(@r_docomo1_val, 0x00);
        !           129: push(@r_docomo2_key, 0x00);
        !           130: push(@r_docomo2_val, 0x00);
        !           131: push(@r_docomo3_key, 0x00);
        !           132: push(@r_docomo3_val, 0x00);
        !           133: 
        !           134: print OUT "int mb_tbl_code2uni_docomo_min = $docomo_min;\n"; 
        !           135: print OUT "int mb_tbl_code2uni_docomo_max = $docomo_max;\n\n"; 
        !           136: 
        !           137: print OUT "int mb_tbl_code2uni_docomo[] = {\n";
        !           138: print OUT &show_code(@docomo_v);
        !           139: print OUT "};\n\n";
        !           140: 
        !           141: print OUT "int mb_tbl_uni_docomo2code_min1 = $to_docomo_min1;\n"; 
        !           142: print OUT "int mb_tbl_uni_docomo2code_max1 = $to_docomo_max1;\n"; 
        !           143: print OUT "int mb_tbl_uni_docomo2code_min2 = $to_docomo_min2;\n"; 
        !           144: print OUT "int mb_tbl_uni_docomo2code_max2 = $to_docomo_max2;\n"; 
        !           145: print OUT "int mb_tbl_uni_docomo2code_min3 = $to_docomo_min3;\n"; 
        !           146: print OUT "int mb_tbl_uni_docomo2code_max3 = $to_docomo_max3;\n\n"; 
        !           147: 
        !           148: #print "DOCOMO reverse 1\n";
        !           149: 
        !           150: print OUT "int mb_tbl_uni_docomo2code_key1[] = {\n";
        !           151: print OUT &show_code(@r_docomo1_key),"\n";
        !           152: print OUT "};\n\n";
        !           153: print OUT "int mb_tbl_uni_docomo2code_val1[] = {\n";
        !           154: print OUT &show_code(@r_docomo1_val),"\n";
        !           155: print OUT "};\n\n";
        !           156: 
        !           157: #print "DOCOMO reverse 2\n";
        !           158: 
        !           159: print OUT "int mb_tbl_uni_docomo2code_key2[] = {\n";
        !           160: print OUT &show_code(@r_docomo2_key),"\n";
        !           161: print OUT "};\n\n";
        !           162: print OUT "int mb_tbl_uni_docomo2code_val2[] = {\n";
        !           163: print OUT &show_code(@r_docomo2_val),"\n";
        !           164: print OUT "};\n\n";
        !           165: 
        !           166: print "DOCOMO reverse 3\n";
        !           167: 
        !           168: print OUT "int mb_tbl_uni_docomo2code_key3[] = {\n";
        !           169: print OUT &show_code(@r_docomo3_key),"\n";
        !           170: print OUT "};\n\n";
        !           171: print OUT "int mb_tbl_uni_docomo2code_val3[] = {\n";
        !           172: print OUT &show_code(@r_docomo3_val),"\n";
        !           173: print OUT "};\n\n";
        !           174: 
        !           175: #print "DOCOMO reverse end \n";
        !           176: 
        !           177: $kddi_min1 = 9400;
        !           178: $kddi_max1 = 9400+264;
        !           179: $kddi_min2 = 9400+564;
        !           180: $kddi_max2 = 9400+939;
        !           181: 
        !           182: @kddi_v1 = ();
        !           183: @kddi_v2 = ();
        !           184: 
        !           185: #print "KDDI\n";
        !           186: 
        !           187: foreach $key (sort {hex($a) <=> hex($b)} keys(%kddi)) {
        !           188:     $s = $key;
        !           189:     $pos = $s % 94;
        !           190:     $ku = ($s - $pos)/94;
        !           191:     $v = $key - $kddi_min1;
        !           192:     $h = sprintf("%x",$key);
        !           193:     #print "$ku:$pos :: $v ($h) => $kddi{$key}\n";
        !           194: 
        !           195:     if ($key <= $kddi_max1) {
        !           196:        $kddi_v1[$key-$kddi_min1] = $kddi{$key};
        !           197:     } elsif ($key <= $kddi_max2) {
        !           198:        $kddi_v2[$key-$kddi_min2] = $kddi{$key};
        !           199:     }
        !           200: }
        !           201: 
        !           202: $to_kddi_min = 9660;
        !           203: $to_kddi_min1 = 0x0030;
        !           204: $to_kddi_max1 = 0x00AE;
        !           205: $to_kddi_min2 = 0x2002;
        !           206: $to_kddi_max2 = 0x3299;
        !           207: $to_kddi_min3 = 0x1F004;
        !           208: $to_kddi_max3 = 0x1F6C0;
        !           209: 
        !           210: @r_kddi1_key = (); @r_kddi1_val = ();
        !           211: @r_kddi2_key = (); @r_kddi2_val = ();
        !           212: @r_kddi3_key = (); @r_kddi3_val = ();
        !           213: 
        !           214: foreach $key (sort {hex($a) <=> hex($b)} keys(%to_kddi)) {
        !           215:     $s = $to_kddi{$key};
        !           216: 
        !           217:     $pos = $s % 94;
        !           218:     $ku = ($s - $pos)/94;
        !           219:     $v = $to_kddi{$key} - $to_kddi_min;
        !           220:     $h = sprintf("%x",$s);
        !           221:     #print "$ku:$pos = $h ($v) <= $key\n";
        !           222:     if (hex($key) <= $to_kddi_max1) {
        !           223:        push(@r_kddi1_key, $key);
        !           224:        push(@r_kddi1_val, $h);
        !           225:     } elsif (hex($key) <= $to_kddi_max2) {
        !           226:        push(@r_kddi2_key, $key);
        !           227:        push(@r_kddi2_val, $h);
        !           228:     } else {
        !           229:        push(@r_kddi3_key, $key);
        !           230:        push(@r_kddi3_val, $h);
        !           231:     }
        !           232: }
        !           233: 
        !           234: push(@r_kddi1_key, 0x00);
        !           235: push(@r_kddi1_val, 0x00);
        !           236: push(@r_kddi2_key, 0x00);
        !           237: push(@r_kddi2_val, 0x00);
        !           238: push(@r_kddi3_key, 0x00);
        !           239: push(@r_kddi3_val, 0x00);
        !           240: 
        !           241: print OUT "int mb_tbl_code2uni_kddi1_min = $kddi_min1;\n"; 
        !           242: print OUT "int mb_tbl_code2uni_kddi1_max = $kddi_max1;\n"; 
        !           243: print OUT "int mb_tbl_code2uni_kddi2_min = $kddi_min2;\n"; 
        !           244: print OUT "int mb_tbl_code2uni_kddi2_max = $kddi_max2;\n\n"; 
        !           245: 
        !           246: #print "KDDI 1\n";
        !           247: 
        !           248: print OUT "int mb_tbl_code2uni_kddi1[] = {\n";
        !           249: print OUT &show_code(@kddi_v1);
        !           250: print OUT "};\n\n";
        !           251: 
        !           252: #print "KDDI 2\n";
        !           253: 
        !           254: print OUT "int mb_tbl_code2uni_kddi2[] = {\n";
        !           255: print OUT &show_code(@kddi_v2);
        !           256: print OUT "};\n\n";
        !           257: 
        !           258: print OUT "int mb_tbl_uni_kddi2code_min1 = $to_kddi_min1;\n"; 
        !           259: print OUT "int mb_tbl_uni_kddi2code_max1 = $to_kddi_max1;\n"; 
        !           260: print OUT "int mb_tbl_uni_kddi2code_min2 = $to_kddi_min2;\n"; 
        !           261: print OUT "int mb_tbl_uni_kddi2code_max2 = $to_kddi_max2;\n"; 
        !           262: print OUT "int mb_tbl_uni_kddi2code_min3 = $to_kddi_min3;\n"; 
        !           263: print OUT "int mb_tbl_uni_kddi2code_max3 = $to_kddi_max3;\n\n"; 
        !           264: 
        !           265: #print "KDDI reverse 1\n";
        !           266: 
        !           267: print OUT "int mb_tbl_uni_kddi2code_key1[] = {\n";
        !           268: print OUT &show_code(@r_kddi1_key),"\n";
        !           269: print OUT "};\n\n";
        !           270: print OUT "int mb_tbl_uni_kddi2code_val1[] = {\n";
        !           271: print OUT &show_code(@r_kddi1_val),"\n";
        !           272: print OUT "};\n\n";
        !           273: 
        !           274: #print "KDDI reverse 1\n";
        !           275: 
        !           276: print OUT "int mb_tbl_uni_kddi2code_key2[] = {\n";
        !           277: print OUT &show_code(@r_kddi2_key),"\n";
        !           278: print OUT "};\n\n";
        !           279: print OUT "int mb_tbl_uni_kddi2code_val2[] = {\n";
        !           280: print OUT &show_code(@r_kddi2_val),"\n";
        !           281: print OUT "};\n\n";
        !           282: 
        !           283: #print "KDDI reverse 3\n";
        !           284: 
        !           285: print OUT "int mb_tbl_uni_kddi2code_key3[] = {\n";
        !           286: print OUT &show_code(@r_kddi3_key),"\n";
        !           287: print OUT "};\n\n";
        !           288: print OUT "int mb_tbl_uni_kddi2code_val3[] = {\n";
        !           289: print OUT &show_code(@r_kddi3_val),"\n";
        !           290: print OUT "};\n\n";
        !           291: 
        !           292: 
        !           293: $sb_min1 = 10153;
        !           294: $sb_max1 = 10153+177;
        !           295: $sb_min2 = 10153+376;
        !           296: $sb_max2 = 10153+547;
        !           297: $sb_min3 = 10153+752;
        !           298: $sb_max3 = 10153+901;
        !           299: 
        !           300: @sb_v1 = ();
        !           301: @sb_v2 = ();
        !           302: @sb_v3 = ();
        !           303: 
        !           304: if (1) {
        !           305:     print "SoftBank\n";
        !           306:     
        !           307:     foreach $key (sort {hex($a) <=> hex($b)} keys(%softbank)) {
        !           308:        $s = $key;
        !           309:        $pos = $s % 94;
        !           310:        $ku = ($s - $pos)/94;
        !           311:        $v = $key - $sb_min1;
        !           312:        $h = sprintf("%x",$key);
        !           313:        #print "$ku:$pos :: $v ($h) => $softbank{$key}\n";
        !           314:        if ($key <= $sb_max1) {
        !           315:            $sb_v1[$key-$sb_min1] = $softbank{$key};
        !           316:        } elsif ($key <= $sb_max2) {
        !           317:            $sb_v2[$key-$sb_min2] = $softbank{$key};
        !           318:        } elsif ($key <= $sb_max3) {
        !           319:            $sb_v3[$key-$sb_min3] = $softbank{$key};
        !           320:        }
        !           321:     }
        !           322:    
        !           323: }
        !           324: 
        !           325: $to_sb_min = 10263;
        !           326: $to_sb_min1 = 0x0023;
        !           327: $to_sb_max1 = 0x00AE;
        !           328: $to_sb_min2 = 0x2122;
        !           329: $to_sb_max2 = 0x3299;
        !           330: $to_sb_min3 = 0x1F004;
        !           331: $to_sb_max3 = 0x1F6C0;
        !           332: 
        !           333: @r_sb1_key = (); @r_sb1_val = ();
        !           334: @r_sb2_key = (); @r_sb2_val = ();
        !           335: @r_sb3_key = (); @r_sb3_val = ();
        !           336: 
        !           337: foreach $key (sort {hex($a) <=> hex($b)} keys(%to_sb)) {
        !           338:     $s = $to_sb{$key};
        !           339: 
        !           340:     $pos = $s % 94;
        !           341:     $ku = ($s - $pos)/94;
        !           342:     $v = $to_sb{$key} - $to_sb_min;
        !           343:     $h = sprintf("%x",$s);
        !           344:     #print "$ku:$pos = $h ($v) <= $key\n";
        !           345:     if (hex($key) <= $to_sb_max1) {
        !           346:        push(@r_sb1_key, $key);
        !           347:        push(@r_sb1_val, $h);
        !           348:     } elsif (hex($key) >= $to_sb_min2 && hex($key) <= $to_sb_max2) {
        !           349:        push(@r_sb2_key, $key);
        !           350:        push(@r_sb2_val, $h);
        !           351:     } else {
        !           352:        push(@r_sb3_key, $key);
        !           353:        push(@r_sb3_val, $h);
        !           354:     }
        !           355: }
        !           356: 
        !           357: push(@r_sb1_key, 0x00);
        !           358: push(@r_sb1_val, 0x00);
        !           359: push(@r_sb2_key, 0x00);
        !           360: push(@r_sb2_val, 0x00);
        !           361: push(@r_sb3_key, 0x00);
        !           362: push(@r_sb3_val, 0x00);
        !           363: 
        !           364: 
        !           365: print OUT "int mb_tbl_code2uni_sb1_min = $sb_min1;\n"; 
        !           366: print OUT "int mb_tbl_code2uni_sb1_max = $sb_max1;\n"; 
        !           367: print OUT "int mb_tbl_code2uni_sb2_min = $sb_min2;\n"; 
        !           368: print OUT "int mb_tbl_code2uni_sb2_max = $sb_max2;\n"; 
        !           369: print OUT "int mb_tbl_code2uni_sb3_min = $sb_min3;\n"; 
        !           370: print OUT "int mb_tbl_code2uni_sb3_max = $sb_max3;\n\n"; 
        !           371: 
        !           372: #print "SoftBank 1\n";
        !           373: 
        !           374: print OUT "int mb_tbl_code2uni_sb1[] = {\n";
        !           375: print OUT &show_code(@sb_v1);
        !           376: print OUT "};\n\n";
        !           377: 
        !           378: #print "SoftBank 2\n";
        !           379: 
        !           380: print OUT "int mb_tbl_code2uni_sb2[] = {\n";
        !           381: print OUT &show_code(@sb_v2);
        !           382: print OUT "};\n\n";
        !           383: 
        !           384: #print "SoftBank 3\n";
        !           385: 
        !           386: print OUT "int mb_tbl_code2uni_sb3[] = {\n";
        !           387: print OUT &show_code(@sb_v3);
        !           388: print OUT "};\n\n";
        !           389: 
        !           390: print OUT "int mb_tbl_uni_sb2code_min1 = $to_sb_min1;\n"; 
        !           391: print OUT "int mb_tbl_uni_sb2code_max1 = $to_sb_max1;\n"; 
        !           392: print OUT "int mb_tbl_uni_sb2code_min2 = $to_sb_min2;\n"; 
        !           393: print OUT "int mb_tbl_uni_sb2code_max2 = $to_sb_max2;\n"; 
        !           394: print OUT "int mb_tbl_uni_sb2code_min3 = $to_sb_min3;\n"; 
        !           395: print OUT "int mb_tbl_uni_sb2code_max3 = $to_sb_max3;\n\n"; 
        !           396: 
        !           397: #print "SB reverse 1\n";
        !           398: 
        !           399: print OUT "int mb_tbl_uni_sb2code_key1[] = {\n";
        !           400: print OUT &show_code(@r_sb1_key),"\n";
        !           401: print OUT "};\n\n";
        !           402: print OUT "int mb_tbl_uni_sb2code_val1[] = {\n";
        !           403: print OUT &show_code(@r_sb1_val),"\n";
        !           404: print OUT "};\n\n";
        !           405: 
        !           406: #print "SB reverse 2\n";
        !           407: 
        !           408: print OUT "int mb_tbl_uni_sb2code_key2[] = {\n";
        !           409: print OUT &show_code(@r_sb2_key),"\n";
        !           410: print OUT "};\n\n";
        !           411: print OUT "int mb_tbl_uni_sb2code_val2[] = {\n";
        !           412: print OUT &show_code(@r_sb2_val),"\n";
        !           413: print OUT "};\n\n";
        !           414: 
        !           415: #print "SB reverse 3\n";
        !           416: 
        !           417: print OUT "int mb_tbl_uni_sb2code_key3[] = {\n";
        !           418: print OUT &show_code(@r_sb3_key),"\n";
        !           419: print OUT "};\n\n";
        !           420: print OUT "int mb_tbl_uni_sb2code_val3[] = {\n";
        !           421: print OUT &show_code(@r_sb3_val),"\n";
        !           422: print OUT "};\n\n";
        !           423: 
        !           424: 
        !           425: close(OUT);

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>