|
KDEと戯れた記録2003/09/22: このページの内容は今となってはかなり古いので,あまり参考にならないと思います.某所でもすでにこのパッチは使っていません.(代わりに未公開の別のパッチを使っています.) KDE-3.0.3/Qt-3.0.5 ベース リンクパッチQt-3.0.5 へのパッチです.
ダウンロード
Konquerorのフォント日本語の True Type Font では,アクセントがついた文字(Á等)が表示できないので,ブラウザのフォントは Nimbus Sans l [Xft] のようなフォントにしておき,qtrc で Nimbus Sans l [Xft]=Dfggothicpw5^e
のようにするのが吉かと. 吉かと思ったが,こうすると一部の日本語フォントが出ないことが判明.ここを表示させると分かる. →上記のパッチで解消 Qt一般の Unicode フォントは Unicode のすべての文字が揃っているわけではない.このため,Qtは表示しようとしている文字が,ある Unicode フォントで表示できるかどうかを以下のように判定している(らしい).
Qt-3.0.5の実装では,U+00XX は Latin というスクリプトに属す.Latin の代表文字は U+0030 (数字の "0").ダイナウェアやリコー等の日本語フォントは,U+0030 の文字は存在するので,Qt は Latin に含まれる文字全てがこれらのフォントで表示できると思い込む. しかし,これらの日本語フォントでは U+0080〜U+00FF の間の文字のほとんど(ウムラウトやアクセントのついた文字)は存在しないので,これらの文字を表示させると空白になる.また,Qtのフォント置換機構も効かない. 音符(♪,U+266A)は MiscellaneousSymbols というスクリプトに属する.これは通常の日本語フォントで表示できるはずだが,MiscellaneousSymbolsの代表文字がU+2600(お日様マーク?)で,これは通常の日本語フォントには含まれない.このため,Qt は日本語フォントでは♪は表示できないと思い込んでしまう. ダッシュ(―, JIS 0x213d)とハイフン(‐, JIS 0x213e) はそれぞれ U+2015 (Horizontal Bar) と U+2010 (Hyphen) にマップされている.XFree86付属の Nimbus Sans L のような Type1 フォントでは,この位置は空で,代わりに U+2013 (EN dash),U+2014 (EM dash) に似たような文字が入っている. Qtでは,大ざっぱなことにUnicodeフォントならば U+2000〜U+206f の文字を表示できると仮定しているため,Nimbus Sans Lをフォントに指定した場合,Substitute Fontを指定しても,空白が表示されてしまう. →上記のパッチで解消 QtとビットマップフォントGothic [Shinonome] で菱形(◆, JIS 0x2221, U+25C6)が□になってしまう原因. 菱形は GeometricSymbols というスクリプトに属する.Qtは,まずUnicode エンコードされた Shinonome [Gothic] フォントがあるかをチェックする.ない場合,QFontPrivate::findFont から呼び出される QFontPrivate::bestFamilyMember あたりで使用するフォントを探すことになる. Qtはスクリプト毎に XLFD で使われる "jisx0208.1983-0" のようなエンコーディングを保持していて,GeometricSymbols に対応するエンコーディングはempty_encodings になっている.empty_encodings の場合,どのフォントも使用できない(多分).ちなみに,スクリプト毎に複数のエンコーディングを保持できる. GeometricSymbolsのエンコーディング候補に "jisx0208.1983-0" 等を突っ込んでおけば,菱形が表示できる. →上記のパッチで解消 Konquerorのフォント 其の2qtrcでBitstream の Cyberbit font のようなUnicodeフォントをフォールバックフォントにしておけば,韓国語や中国語も表示できる. ついでに Cyberbit font は 1 user でしか使えないので,別のフリーなフォントを探す必要がある. freetypeとDynalabフォントdynalabフォントの固定幅フォントには,freetypeで表示させると半角部分も全角部分と同じ幅になってしまうものが存在する(例えば,dfgothic) これは,フォントファイル中に PostScript hint 情報として固定幅フォントフラグが設定してあるため.設定してあるかどうかは freetype のユーティリティ ftdump で確認できる.バイナリエディタでこのフラグを0に変更すると,ちゃんと表示できる. Konquerorのスタイルシート"font-family: Helvetica" のようなスタイルシートでは,Helvetica というフォントを探す.フォントが無い場合,デフォルトのフォントにフォールバックする. XftConfig でフォントの別名をつければどうにかなると思ったが,うまくいかなかったので Qt 側で対処. フォールバックするフォントは Qt で決まるが,Anti Alias フォントは選ばれない模様.src/kernel/qfont_x11.cpp の ソースをhackしなくても,QtのFont Substitutionを使うとなんとかできる.qtconfigでは,存在しないフォントを置換する設定ができないので,qtconfig を使わずに手で設定ファイルを書く. Helvetica=Nimbus Sans l [Xft]^eDfggothicpw5^e
と書いておくと,Helvetica が要求されたときに Nimbus Sans l [Xft] を使い,Nimbus Mono l [Xft] にないグリフ(日本語等)はDfggothicpw5 を使うようになる.ちなみに,^e は ^ と e の2文字. konsoleフォントを選べば普通に使っている分にはきれいに表示できるが,バイナリファイルやUnicodeのファイルをcatしたりするとゴミが残って消えない. konsole and VJEVJEをinput methodとして使っている場合,konsole上のttyに出力があると,env XMODIFIERS= xemacs で起動しているXEmacsからフォーカスを奪っていく.
ここから emacs や mule を削除して vje を再起動すれば OK. freetype issuesフォントサイズによってはdynafontの→や◆が□に化ける.freetypeの埋め込みビットマップを無効にすれば直る.
kateセーブ,ロード時にエンコーディングを指定できる.自動判別はないらしい. khelpcenter issuesUNIXマニュアルを見ると "まだアイデアすらありません" と出る.英文は"no idea yet". kdebase/kioslave/man/kio_man.cpp を読むと whatis データベースを参照している模様.Redhatの場合は/var/cache/man/whatis を読むが,kio_man が期待しているフォーマットとはちょっと違うらしい. |