[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:12263] Re: wmaker i18n
久保田です。
From: Tomohiro KUBOTA <kubota@xxxxxxxxxxxxxxxxxxxxx>
Subject: [debian-devel:12151] wmaker i18n
Date: Tue, 25 Apr 2000 20:46:07 +0900
> Window Maker はすでに国際化されていますが、実際に日本語環境で
> 使うには調整が必要でした。そこで、それを不要にしました。
これの研究をやってました。要するに、XCreateFontSet() に与える
フォントパターンに追加する文字列をどう与えるか、ということに
尽きるのですが。
# 目標としては、オリジナルの指定フォントパターンに一番近い
# 太さ、斜体、サイズのものを選ぶようなアルゴリズムを目指して
# いろいろ実験していました。サイズを最優先し、できれば太さや
# 斜体も合わせる、と。そして、もちろん、日本語だけではなく
# たとえばロシア語でもうまく働くように。upstream への還元を
# 前提に作業しているので。
# ついでに、XFontStruct() を使う国際化していないアプリケーション
# に対するラッパーも作って、すべてのウィンドウマネージャーを
# 一気に国際化してしまおう、というつもりでいます。こっちの
# ほうは、http:/www.on.cs.keio.ac.jp/~yasu/japanese.html に
# すばらしい仕事があるので、簡単に実現できました。
いろいろと試していると、XCreateFontSet() が非常に時間を食う
場合があることに気がつきました。PentiumMMX-233 で、10 秒くらいは
待たされる場合がありました。こんなものを例えば IceWM に組み込むと、
IceWM は起動時に大量のフォントセットを作るので、1分以上も待たされて
しまうということになります。(実際にやってみて、これは使えないと
思いました)。
待たされる原因として、以下のふたつがあるようです。
・スケーラブルフォント、とくに xfs-xtt + TrueType font を使う場合。
・フォントパターンがある程度長くて (3つ程度)、かつ、それぞれの
フォントパターンが「きちんと」XLFD に合致するように指定している
場合。
・フォントパターンのワイルドカードが XLFD に「きちんと」は合致
しない場合で、フォントパターンが非常に長い場合 (7つ程度以上)。
「きちんと」というのは、言葉ではうまく言えないですが、
たとえば、「-*-*-medium-r-*-*-14-*-*-*-*-*-*-*」は「きちんと」した
指定、「-*-medium-r-*-14-*」は「きちんと」していない指定、という
ふうな意味で書きました。
スケーラブルフォントを使う場合に遅くなるのは仕方がないとして、
(というか、これも、なんとかなればいいなと思うのですが)、
2番目と3番目の差はいったい何だろう、という問題があります。
これは、どうやら、「きちんと」した指定ではスケーラブルフォントも
サーチするが、「きちんと」していない指定ではスケーラブルフォントは
サーチしない、という違いが原因らしい、ということが分かりました。
# フォントを自前で完全にサーチして、完全な XLFD のリストを作って
# しまってから XCreateFontSet() に渡す、というのも試したのですが、
# 自前サーチは一瞬で終わるのに、XCreateFontSet() が何秒もかかる、
# という結果になりました。
というわけで、現在抱えている問題は、
(1) スケーラブルフォントや xfs-xtt + TrueType は、なぜ XCreateFontSet
があんなに遅いのか。これはなんとかならないのか。
(2) それがなんとかならないのなら、スケーラブルフォントを使うかどうかを
ユーザーが指定できるようにすればいいと思うが、フォント指定が
「きちんと」しているかどうかでスケーラブルフォントが選択されるか
否か、という動作は、仕様なのか、それとも、将来変更される
可能性があるのか。
(3) XCreateFontSet に与えるフォントパターンを長くしすぎないで、
指定したサイズに最も近いサイズのフォントを選択するにはどうしたら
いいか。(たとえば、与えられたフォントパターンが "lucidasans-10"
なら、日本語フォントとしては 16 ドットよりは 14 ドット、
それよりも 12 ドット (a12k12) や 10 ドット (naga10) が選択される、
ということ)。
どなたか、こういう問題に詳しい人はいませんか?
---
Tomohiro KUBOTA <kubota@debian.or.jp>
http://surfchem0.riken.go.jp/~kubota/