Created
June 16, 2026 18:57
-
-
Save andy0130tw/6ab6839f10696b8ddeaac81fe64af8b3 to your computer and use it in GitHub Desktop.
BDF mkbold -- https://web.archive.org/web/20200220111011/https://hp.vector.co.jp/authors/VA013391/tools/#mkbold#mkbold
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| = 太BDF計画 = | |
| Programmed by NAGAO, Sadakazu | |
| -- 目 次 ---------------------------------------------------------------------- | |
| 1. 概要 ... 16(行目) | |
| 2. 仕組 ... 25 | |
| 3. 使用法 ... 64 | |
| 4. 使用条件 ... 80 | |
| 5. その他 ... 85 | |
| ------------------------------------------------------------------------------- | |
| 1. 概要 | |
| BDFフォントを、*ドット潰れがなるべく生じないように* 横に1ドット太くす | |
| るツールです。1ドットずらしたデータと単純に OR を取るよりも、格段に可 | |
| 読性が上がります。 | |
| ツール自体は Perl5 で書いてあります。 | |
| 2. 仕組 | |
| 単に横1ドットずらしたデータと OR を取るだけではドット潰れが生じます。 | |
| (例) | |
| 1) 元データ oo ooo o o oo | |
| 2) 右にずらす oo ooo o o oo | |
| 3) (1)or(2) ooo oooooooo ooo | |
| ~~~~ ←潰れてしまった | |
| そこで、元データの *ドットのつながりの切目* に着目し、その切目を、 | |
| OR を取ったデータに反映させます。 | |
| 切目を抽出する方法は、2通りあります。 | |
| (例1) | |
| 1) 元データ oo ooo o o oo | |
| 2) (1)の *左端* の切目 ^ ^ ^ ^ ^ | |
| 3) (1)を右にずらす oo ooo o o oo | |
| 4) (1)or(3) ooo oooooooo ooo | |
| 5) (4)から(2)を除く ooo ooo o oo ooo | |
| ~~~~~ ←潰れが無くなる | |
| (例2) | |
| 1) 元データ oo ooo o o oo | |
| 2) (1)を右にずらす oo ooo o o oo | |
| 3) (2)の *右端* の切目 ^ ^ ^ ^ ^ | |
| 4) (1)or(2) ooo oooooooo ooo | |
| 5) (4)から(3)を除く ooo oooo o o ooo | |
| ~~~~~ ←潰れが無くなる | |
| この例では分りにくいかも知れませんので、試してみてください。 | |
| また、右端と左端のどちらの切目を選ぶかによって、見た目の印象が変わって | |
| きます。実際に見比べてみるといいでしょう。 | |
| 3. 使用法 | |
| % mkbold [option...] <bdffile> | |
| 標準出力に、変換された bdf ファイルが出力されます。 | |
| option は、 | |
| -l ... 左にずらしたデータをORの対象とする (default) | |
| -r ... 右にずらしたデータをORの対象とする | |
| -L ... 左端の切目を用いて潰れをなくす | |
| -R ... 右端の切目を用いて潰れをなくす (default) | |
| ※ フォント名 (-misc-fixed-... など) は変更されません。 | |
| 注意してください。 | |
| 4. 使用条件 | |
| 改造したり、流用したり、再配布したり、自由に使ってください。 | |
| しかも無保証です。:) | |
| 5. その他 | |
| この方式は、昔のPC88用のゲーム(何だったかは忘れた)で文字表示に使われて | |
| いた(と思われる)方法を参考にしました。「太い文字なのにちゃんと読め | |
| る!」という驚きから、自分でその実現方法を考えたという経緯です。 | |
| ------------------------------------------------------------------------------- | |
| 作者 : 永尾 制一 (ながお さだかず) | |
| E-mail: snagao@cs.titech.ac.jp, snagao@tkb.att.ne.jp | |
| WWW : http://gondow-www.cs.titech.ac.jp/~snagao/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/local/bin/perl5 | |
| # | |
| # -- makes BDF font bold | |
| # programmed by NAGAO, Sadakazu <snagao@cs.titech.ac.jp> | |
| # * public domain * | |
| # | |
| $bdir = 1; # left | |
| $pile = 0; # right | |
| for $opt (@ARGV) { | |
| if ($opt =~ /^-/) { # option | |
| $bdir = 0 if $opt eq '-r'; # right | |
| $bdir = 1 if $opt eq '-l'; # left | |
| $pile = 0 if $opt eq '-R'; # right | |
| $pile = 1 if $opt eq '-L'; # left | |
| next; | |
| } else { | |
| $file = $opt; | |
| last; | |
| } | |
| } | |
| die unless $file; | |
| open F, $file || die; | |
| while (<F>) { | |
| if (/^BITMAP/) { | |
| $bitmap = 1; | |
| print; | |
| next; | |
| } | |
| if (/^ENDCHAR/) { | |
| $bitmap = 0; | |
| print; | |
| next; | |
| } | |
| if ($bitmap) { | |
| chop; | |
| $l = (length($_) / 2) - 1; | |
| if ($bdir) { # left | |
| for $i (0..$l) { | |
| $d[$i] = hex(substr($_, $i*2, 2)); | |
| } | |
| shl(\@bold, \@d, $l); | |
| } else { | |
| for $i (0..$l) { # right | |
| $bold[$i] = hex(substr($_, $i*2, 2)); | |
| } | |
| shr(\@d, \@bold, $l); | |
| } | |
| if ($pile) { # left | |
| shl(\@tmp, \@bold, $l); | |
| bitcalc(\@d, \@tmp, \@d, \@bold, $l); | |
| } else { # right | |
| shr(\@tmp, \@d, $l); | |
| bitcalc(\@d, \@tmp, \@bold, \@d, $l); | |
| } | |
| for $i (0..$l) { | |
| printf "%02x", $d[$i]; | |
| } | |
| print "\n"; | |
| next; | |
| } | |
| print; | |
| } | |
| close F; | |
| exit 0; | |
| sub shl { | |
| my ($dout, $din, $size) = @_; | |
| my $c = 0, $d, $i; | |
| for ($i = $size; $i >= 0; $i--) { | |
| $d = $c; | |
| $c = ($din->[$i] & 0x80) >> 7; | |
| $dout->[$i] = (($din->[$i] << 1) & 0xff) | $d; | |
| } | |
| } | |
| sub shr { | |
| my ($dout, $din, $size) = @_; | |
| my $c = 0, $d, $i; | |
| for $i (0..$size) { | |
| $d = $c; | |
| $c = ($din->[$i] & 0x01) << 7; | |
| $dout->[$i] = ($din->[$i] >> 1) | $d; | |
| } | |
| } | |
| sub bitcalc { | |
| my ($out, $d1, $d2, $d3, $size) = @_; | |
| for $i (0..$size) { | |
| $out->[$i] = ~$d1->[$i] & $d2->[$i] | $d3->[$i]; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment