Annotation of nono/util/mkcgrom/bdfcut.php, revision 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.