Annotation of nono/util/mkcgrom/bdfcut.php, revision 1.1.1.1

1.1       root        1: <?php
                      2: //
                      3: // BDF ファイルから必要な範囲だけ抜き出す
                      4: // Copyright (C) 2012 [email protected]
                      5: //
                      6: 
                      7: /*
                      8:  * 書式
                      9:  *     bdfcut.php [command] < in.bdf > out.bdf
                     10:  *
                     11:  * 解説
                     12:  *     BDF ファイルから必要な範囲だけを抜き出します。
                     13:  *     標準入力から読み込み、標準出力に書き出します。
                     14:  *
                     15:  *     範囲は command で指定します。今のところ以下が使用できます。
                     16:  *
                     17:  *       h : Unicode の BDF からひらがなのみを抜き出します。
                     18:  *       k : JISX0208 の BDF から非漢字のみを抜き出します。
                     19:  */
                     20: 
                     21:        $opt = $argv[1];
                     22: 
                     23:        $start = -1;
                     24:        $end = -1;
                     25: 
                     26:        /* オプションによって出力範囲を指定 */
                     27:        if ($opt == "h") {
                     28:                /* Unicode のひらがなのみ取り出す */
                     29:                $start = 0x3041;
                     30:                $end   = 0x309f;
                     31:        }
                     32:        if ($opt == "k") {
                     33:                /* JIS X 0208 の非漢字のみ取り出す */
                     34:                $start = 0x2120;
                     35:                $end   = 0x287f;
                     36:        }
                     37: 
                     38:        /* どのオプションもなければ終了 */
                     39:        if ($start == -1) {
                     40:                fprintf(STDERR, "usage: {$argv[0]} [command] < in.bdf > out.bdf\n");
                     41:                fprintf(STDERR, "   h: hiragana only in unicode\n");
                     42:                fprintf(STDERR, "   k: hi-kanji only in JIS X 0208\n");
                     43:                exit(1);
                     44:        }
                     45: 
                     46:        /*
                     47:         * プロパティ部分。
                     48:         * o TTF から縦横比を変えて変換した BDF には QUAD_WIDTH が含まれてない
                     49:         *   ので、ついでにここで追加してやる。
                     50:         */
                     51:        $pixel_size = -1;
                     52:        $quad_width = -1;
                     53:        $res_x = -1;
                     54:        $res_y = -1;
                     55:        while (($buf = fgets(STDIN))) {
                     56:                if (preg_match("/^PIXEL_SIZE (\d+)/", $buf, $m)) {
                     57:                        $pixel_size = $m[1] + 0;
                     58: 
                     59:                } else if (preg_match("/^QUAD_WIDTH (\d+)/", $buf, $m)) {
                     60:                        $quad_width = $m[1] + 0;
                     61: 
                     62:                } else if (preg_match("/^RESOLUTION_X (\d+)/", $buf, $m)) {
                     63:                        $res_x = $m[1] + 0;
                     64: 
                     65:                } else if (preg_match("/^RESOLUTION_Y (\d+)/", $buf, $m)) {
                     66:                        $res_y = $m[1] + 0;
                     67: 
                     68:                } else if (preg_match("/^ENDPROPERTIES/", $buf)) {
                     69:                        /* h モードで QUAD_WIDTH がなければ作成 */
                     70:                        if ($opt == "h" && $quad_width == -1) {
                     71:                                if ($pixel_size > 0 && $res_x > 0 && $res_y > 0) {
                     72:                                        $quad_width = intval($pixel_size * $res_x / $res_y);
                     73:                                        print "QUAD_WIDTH {$quad_width}\n";
                     74:                                } else {
                     75:                                        fprintf(STDERR, "Warning: cannot generate QUAD_WIDTH\n");
                     76:                                }
                     77:                        }
                     78: 
                     79:                        /* ここで自身も出力して終了 */
                     80:                        print $buf;
                     81:                        break;
                     82:                }
                     83:                print $buf;
                     84:        }
                     85: 
                     86:        /* 本体ループ */
                     87:        $body = "";
                     88:        $ischar = false;
                     89:        $num = 0;
                     90:        while (($buf = fgets(STDIN))) {
                     91:                if ($ischar) {
                     92:                        $body .= $buf;
                     93: 
                     94:                        /* ENDCHAR を書き出したら一旦終わり */
                     95:                        if (preg_match("/^ENDCHAR/", $buf)) {
                     96:                                $ischar = false;
                     97:                        }
                     98: 
                     99:                } else if (preg_match("/^STARTCHAR ([\d\w]+)/", $buf, $m)) {
                    100:                        list($code) = sscanf($m[1], "%x");
                    101:                        if ($start <= $code && $code <= $end) {
                    102:                                $body .= $buf;
                    103:                                $ischar = true;
                    104:                                $num++;
                    105:                        }
                    106:                }
                    107:        }
                    108: 
                    109:        /* 文字数とともに残りを出力 */
                    110:        print "CHARS {$num}\n";
                    111:        print "{$body}";
                    112: ?>

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.