トップ 最新

ただのにっき

2002-12-07(土) [長年日記]

イミダスに「アレゲビル」という項目が載っているのを発見するという夢を見た。しかし、内容は覚えていないというオチ。役立たず……。

左利きカーソル(6)

ずるいって言われてもなぁ……。でもまぁ、使っているとまだ問題が残っていることが判明してはいるのだ。例えばGaleonでリンクの上にカーソルを持ってくると指をさすカーソルに変わるんだけど、これが左向き。これは「hand2」というグリフだけど、逆向きの「hand1」はデザインが違うのでそのまま使うのは気が引ける。

あと、やはりGaleonのバックグラウンド処理中を示す矢印+砂時計のカーソルは、cursor.bdfの中にはないようだ。これはどうしようもない。

左利きカーソル(7)

ずるいと言われたらやらねばなるまい(違)。もっとも、↑を書いた直後に、かずひこさんからbdf2binやbin2bdfと組み合わせて使う反転ツールと、反転済みのcursor.bdfを送ってもらってしまったので(左利きでもないのにありがたいことです)、使うだけならここまでやる必要はない。

が、bdf2bin/bin2bdfが必要なのもなんだかしゃくにさわるというか、できるだけ標準的なツールだけでできるようにしておきたいというのもあり。Ruby onlyなツールを書いた。ホットスポットの変換は、かずひこさんの計算そのままである。

元のcursor.bdfにはゴミのような謎のピクセルが混じっていて、素直に2進数にして反転してもうまくいかないので、それを取り除いてやるためにあまりに汚いソースになってしまったが、まぁ動けば正義だ。

#!/usr/bin/env ruby
#
# reverse-font.rb
#
bitmap = []
while gets
   chomp
   if /^BBX ([\d-]+) ([\d-]+) ([\d-]+) ([\d-]+)/ then
      width = $1.to_i
      puts "BBX #$1 #$2 #{-($1.to_i + $3.to_i - 1)} #$4"
   elsif /^[0-9a-f]+$/ then
      xwidth = $_.length
      bin = ("%0#{width}b" % eval( "0x#{$_}" )).reverse
      bitmap << bin
   elsif /^ENDCHAR$/
      max = width
      bitmap.each do |bin|
         max = bin.length if bin.length > max
      end
      bitmap.each do |bin|
         bin = bin + ('0' * (max - bin.length))
         bin = bin[max - width,width] + ('0' * (max - width))
         printf( "%0#{xwidth}x\n" % eval( "0b#{bin}" ) )
      end
      puts "ENDCHAR"
      bitmap = []
   else
      puts $_
   end
end

元のcursor.bdfを食わせて、標準出力に出てきたのが反転済みのbdfファイルである。あとはbdftopcfをして、mkfontdirして云々……は昨日のとおり。これで、Mozilla独自カーソル以外は幸せになれた。

しっかし、cursor.bdf見てると、歴史的な経緯があるとは言え、あまりに無駄なカーソルばかりで頭が痛くなるぞ。「埴輪の形のカーソル」なんて、何に使うんだよ(笑)。肝心なのは入ってないしさ。

いずれにしても、今回はかずひこさんに助けられっぱなしであった。もちろん、ずんだあんさんにも。感謝。