--- nono/util/mkcgrom/bdfcut.php 2026/04/29 17:04:28 1.1.1.1 +++ nono/util/mkcgrom/bdfcut.php 2026/04/29 17:05:16 1.1.1.2 @@ -4,50 +4,51 @@ // Copyright (C) 2012 isaki@NetBSD.org // -/* - * 書式 - * bdfcut.php [command] < in.bdf > out.bdf - * - * 解説 - * BDF ファイルから必要な範囲だけを抜き出します。 - * 標準入力から読み込み、標準出力に書き出します。 - * - * 範囲は command で指定します。今のところ以下が使用できます。 - * - * h : Unicode の BDF からひらがなのみを抜き出します。 - * k : JISX0208 の BDF から非漢字のみを抜き出します。 - */ +// 書式 +// bdfcut.php [command] < in.bdf > out.bdf +// +// 解説 +// BDF ファイルから必要な範囲だけを抜き出します。 +// 標準入力から読み込み、標準出力に書き出します。 +// +// 範囲は command で指定します。今のところ以下が使用できます。 +// +// h : Unicode の BDF からひらがなのみを抜き出します。 +// r : Unicode の BDF からひらがな、カタカナのみを抜き出します。 +// k : JISX0208 の BDF から非漢字のみを抜き出します。 $opt = $argv[1]; - $start = -1; - $end = -1; + $range = array(); - /* オプションによって出力範囲を指定 */ + // オプションによって出力範囲を指定 if ($opt == "h") { - /* Unicode のひらがなのみ取り出す */ - $start = 0x3041; - $end = 0x309f; - } - if ($opt == "k") { - /* JIS X 0208 の非漢字のみ取り出す */ - $start = 0x2120; - $end = 0x287f; + // Unicode のひらがなのみ取り出す + $range[] = array(0x3041, 0x309f); + } else if ($opt == "r") { + // Unicode のひらがな、カタカナを取り出す + $range[] = array(0x3041, 0x30fc); + // 、。 + $range[] = array(0x3001, 0x3002); + // 「」 + $range[] = array(0x300c, 0x300d); + } else if ($opt == "k") { + // JIS X 0208 の非漢字のみ取り出す + $range[] = array(0x2120, 0x287f); } - /* どのオプションもなければ終了 */ - if ($start == -1) { + // どのオプションもなければ終了 + if (count($range) < 1) { fprintf(STDERR, "usage: {$argv[0]} [command] < in.bdf > out.bdf\n"); fprintf(STDERR, " h: hiragana only in unicode\n"); - fprintf(STDERR, " k: hi-kanji only in JIS X 0208\n"); + fprintf(STDERR, " r: hira and katakana in unicode\n"); + fprintf(STDERR, " k: non-kanji only in JIS X 0208\n"); exit(1); } - /* - * プロパティ部分。 - * o TTF から縦横比を変えて変換した BDF には QUAD_WIDTH が含まれてない - * ので、ついでにここで追加してやる。 - */ + // プロパティ部分。 + // o TTF から縦横比を変えて変換した BDF には QUAD_WIDTH が含まれてない + // ので、ついでにここで追加してやる。 $pixel_size = -1; $quad_width = -1; $res_x = -1; @@ -66,7 +67,7 @@ $res_y = $m[1] + 0; } else if (preg_match("/^ENDPROPERTIES/", $buf)) { - /* h モードで QUAD_WIDTH がなければ作成 */ + // h モードで QUAD_WIDTH がなければ作成 if ($opt == "h" && $quad_width == -1) { if ($pixel_size > 0 && $res_x > 0 && $res_y > 0) { $quad_width = intval($pixel_size * $res_x / $res_y); @@ -76,14 +77,14 @@ } } - /* ここで自身も出力して終了 */ + // ここで自身も出力して終了 print $buf; break; } print $buf; } - /* 本体ループ */ + // 本体ループ $body = ""; $ischar = false; $num = 0; @@ -91,14 +92,14 @@ if ($ischar) { $body .= $buf; - /* ENDCHAR を書き出したら一旦終わり */ + // ENDCHAR を書き出したら一旦終わり if (preg_match("/^ENDCHAR/", $buf)) { $ischar = false; } } else if (preg_match("/^STARTCHAR ([\d\w]+)/", $buf, $m)) { list($code) = sscanf($m[1], "%x"); - if ($start <= $code && $code <= $end) { + if (inrange($code)) { $body .= $buf; $ischar = true; $num++; @@ -106,7 +107,20 @@ } } - /* 文字数とともに残りを出力 */ + // 文字数とともに残りを出力 print "CHARS {$num}\n"; print "{$body}"; ?> +