ルギア君の戯言

雑多な記事。

Linux & OpenTTD

いくらアウトラインフォントが綺麗だからといってもこればっかりはそうも言ってられない。
freetype のシステム自体が問題なのかも知れないが。

small_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
medium_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
large_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
small_size = 8
medium_size = 10
large_size = 16

large の 16 はまあいいとして、中が 10、小が 8。小に関しては 8 でもくっついてしまう。
f:id:lugia:20090713171306p:image
このように、freetype では指定したフォントにおなじサイズのビットマップがある場合、ラスタライズされず、ビットマップが利用される。普通ならこれで使えばいいのではないかと思う。


ビットマップがないフォント、例えば

small_font = /usr/share/fonts/mplus-ipa/M+1P+IPAG.ttf
medium_font = /usr/share/fonts/mplus-ipa/M+1P+IPAG.ttf
large_font = /usr/share/fonts/mplus-ipa/M+1P+IPAG.ttf
small_size = 8
medium_size = 10
large_size = 16

にする。そうすると、
f:id:lugia:20090713172027p:image
となり、読めないことはないが、ラスタライズが汚い。


そこで、どうせビットマップならビットマップを最大限に活用してやろうという企みが働くわけです。
Momonga Linux でも日本語のビットマップフォントは

[lugia@lugia-castle japanese-bitmap]$ ls      
10x20rk.pcf.gz              mplus_f12bi-euro.pcf.gz
10x20rkb.pcf.gz             mplus_f12bi-jisx0201.pcf.gz
10x20rkbi.pcf.gz            mplus_f12bi.pcf.gz         
10x20rki.pcf.gz             mplus_f12i-euro.pcf.gz     
12x24a.pcf.gz               mplus_f12i-jisx0201.pcf.gz 
12x24ab.pcf.gz              mplus_f12i.pcf.gz          
12x24abi.pcf.gz             mplus_h10-euro.pcf.gz      
12x24ai.pcf.gz              mplus_h10-jisx0201.pcf.gz  
12x24rk.pcf.gz              mplus_h10.pcf.gz           
12x24rkb.pcf.gz             mplus_h10b-euro.pcf.gz     
12x24rkbi.pcf.gz            mplus_h10b-jisx0201.pcf.gz 
12x24rki.pcf.gz             mplus_h10b.pcf.gz          
7x14a.pcf.gz                mplus_h10bi-euro.pcf.gz    
7x14ab.pcf.gz               mplus_h10bi-jisx0201.pcf.gz
7x14abi.pcf.gz              mplus_h10bi.pcf.gz         
7x14ai.pcf.gz               mplus_h10i-euro.pcf.gz     
7x14maru.pcf.gz             mplus_h10i-jisx0201.pcf.gz 
7x14rk.pcf.gz               mplus_h10i.pcf.gz          
7x14rkb.pcf.gz              mplus_h12-euro.pcf.gz      
7x14rkbi.pcf.gz             mplus_h12-jisx0201.pcf.gz  
7x14rki.pcf.gz              mplus_h12.pcf.gz           
7x14rkmr.pcf.gz             mplus_h12b-euro.pcf.gz     
8x16a.pcf.gz                mplus_h12b-jisx0201.pcf.gz 
8x16ab.pcf.gz               mplus_h12b.pcf.gz          
8x16abi.pcf.gz              mplus_h12bi-euro.pcf.gz    
8x16ai.pcf.gz               mplus_h12bi-jisx0201.pcf.gz
8x16rk.pcf.gz               mplus_h12bi.pcf.gz         
8x16rkb.pcf.gz              mplus_h12i-euro.pcf.gz     
8x16rkbi.pcf.gz             mplus_h12i-jisx0201.pcf.gz 
8x16rki.pcf.gz              mplus_h12i.pcf.gz          
fonts.alias                 mplus_h12rw-euro.pcf.gz    
fonts.dir                   mplus_h12rw.pcf.gz         
ipa-10x20b.pcf.gz           mplus_j10-iso.pcf.gz       
ipa-10x20m.pcf.gz           mplus_j10-jisx0201.pcf.gz  
jiskan16-1990.pcf.gz        mplus_j10.pcf.gz           
jiskan16-1990b.pcf.gz       mplus_j10b-iso.pcf.gz      
jiskan16-1990bi.pcf.gz      mplus_j10b-jisx0201.pcf.gz 
jiskan16-1990i.pcf.gz       mplus_j10b.pcf.gz          
jiskan16-2000-1.pcf.gz      mplus_j10bi-iso.pcf.gz     
jiskan16-2000-1b.pcf.gz     mplus_j10bi-jisx0201.pcf.gz
jiskan16-2000-1bi.pcf.gz    mplus_j10bi.pcf.gz         
jiskan16-2000-1i.pcf.gz     mplus_j10i-iso.pcf.gz      
jiskan16-2000-2.pcf.gz      mplus_j10i-jisx0201.pcf.gz 
jiskan16-2000-2b.pcf.gz     mplus_j10i.pcf.gz          
jiskan16-2000-2bi.pcf.gz    mplus_j12.pcf.gz           
jiskan16-2000-2i.pcf.gz     mplus_j12b.pcf.gz          
jiskan16.pcf.gz             mplus_j12bi.pcf.gz         
jiskan16b.pcf.gz            mplus_j12i.pcf.gz          
jiskan16bi.pcf.gz           mplus_q06r-euro.pcf.gz     
jiskan16i.pcf.gz            mplus_q06r.pcf.gz          
jiskan24-2000-1.pcf.gz      mplus_s10-euro.pcf.gz      
jiskan24-2000-1b.pcf.gz     mplus_s10.pcf.gz           
jiskan24-2000-1bi.pcf.gz    mplus_s10b-euro.pcf.gz     
jiskan24-2000-1i.pcf.gz     mplus_s10b.pcf.gz          
jiskan24-2000-2.pcf.gz      mplus_s10bi-euro.pcf.gz    
jiskan24-2000-2b.pcf.gz     mplus_s10bi.pcf.gz         
jiskan24-2000-2bi.pcf.gz    mplus_s10i-euro.pcf.gz     
jiskan24-2000-2i.pcf.gz     mplus_s10i.pcf.gz          
jiskan24-2003-1.pcf.gz      shnm6x12a.pcf.gz           
jiskan24-2003-1b.pcf.gz     shnm6x12ab.pcf.gz          
jiskan24-2003-1bi.pcf.gz    shnm6x12abi.pcf.gz         
jiskan24-2003-1i.pcf.gz     shnm6x12ai.pcf.gz          
jiskan24.pcf.gz             shnm6x12r.pcf.gz           
jiskan24b.pcf.gz            shnm6x12rb.pcf.gz          
jiskan24bi.pcf.gz           shnm6x12rbi.pcf.gz         
jiskan24i.pcf.gz            shnm6x12ri.pcf.gz          
jiskano16-1997.pcf.gz       shnm7x14a.pcf.gz           
jiskano16-1997b.pcf.gz      shnm7x14r.pcf.gz           
jiskano16-1997bi.pcf.gz     shnm8x16a.pcf.gz           
jiskano16-1997i.pcf.gz      shnm8x16ab.pcf.gz          
jisksp14.pcf.gz             shnm8x16abi.pcf.gz         
k14-1990.pcf.gz             shnm8x16ai.pcf.gz          
k14-1990b.pcf.gz            shnm8x16r.pcf.gz           
k14-1990bi.pcf.gz           shnm8x16rb.pcf.gz          
k14-1990i.pcf.gz            shnm8x16rbi.pcf.gz         
k14-2000-1.pcf.gz           shnm8x16ri.pcf.gz          
k14-2000-1b.pcf.gz          shnm9x18a.pcf.gz           
k14-2000-1bi.pcf.gz         shnm9x18ab.pcf.gz          
k14-2000-1i.pcf.gz          shnm9x18abi.pcf.gz         
k14-2000-2.pcf.gz           shnm9x18ai.pcf.gz          
k14-2000-2b.pcf.gz          shnm9x18r.pcf.gz           
k14-2000-2bi.pcf.gz         shnm9x18rb.pcf.gz          
k14-2000-2i.pcf.gz          shnm9x18rbi.pcf.gz         
k14-oldkanji.pcf.gz         shnm9x18ri.pcf.gz          
k14-oldkanjib.pcf.gz        shnmk12.pcf.gz             
k14-oldkanjibi.pcf.gz       shnmk12b.pcf.gz            
k14-oldkanjii.pcf.gz        shnmk12bi.pcf.gz           
k14.pcf.gz                  shnmk12i.pcf.gz
k14b.pcf.gz                 shnmk12maru.pcf.gz
k14bi.pcf.gz                shnmk12marub.pcf.gz
k14i.pcf.gz                 shnmk12marubi.pcf.gz
k20.pcf.gz                  shnmk12marui.pcf.gz
k20b.pcf.gz                 shnmk12min.pcf.gz
k20bi.pcf.gz                shnmk12minb.pcf.gz
k20i.pcf.gz                 shnmk12minbi.pcf.gz
knmhn12x.pcf.gz             shnmk12mini.pcf.gz
knmzn12x.pcf.gz             shnmk12p.pcf.gz
maru14.pcf.gz               shnmk12pb.pcf.gz
maru14b.pcf.gz              shnmk12pbi.pcf.gz
maru14bi.pcf.gz             shnmk12pi.pcf.gz
maru14i.pcf.gz              shnmk14.pcf.gz
maru16.pcf.gz               shnmk14b.pcf.gz
maru16b.pcf.gz              shnmk14bi.pcf.gz
maru16bi.pcf.gz             shnmk14i.pcf.gz
maru16i.pcf.gz              shnmk14min.pcf.gz
maru18.pcf.gz               shnmk14minb.pcf.gz
mplus_f10-euro.pcf.gz       shnmk14minbi.pcf.gz
mplus_f10.pcf.gz            shnmk14mini.pcf.gz
mplus_f10b-euro.pcf.gz      shnmk16.pcf.gz
mplus_f10b.pcf.gz           shnmk16b.pcf.gz
mplus_f10bi-euro.pcf.gz     shnmk16bi.pcf.gz
mplus_f10bi.pcf.gz          shnmk16i.pcf.gz
mplus_f10i-euro.pcf.gz      shnmk16min.pcf.gz
mplus_f10i.pcf.gz           shnmk16minb.pcf.gz
mplus_f12-euro.pcf.gz       shnmk16minbi.pcf.gz
mplus_f12-jisx0201.pcf.gz   shnmk16mini.pcf.gz
mplus_f12.pcf.gz            warabi12-2000-1.pcf.gz
mplus_f12b-euro.pcf.gz      warabi12-2000-1b.pcf.gz
mplus_f12b-jisx0201.pcf.gz  warabi12-2000-1bi.pcf.gz
mplus_f12b.pcf.gz           warabi12-2000-1i.pcf.gz
[lugia@lugia-castle japanese-bitmap]$

こんなにいっぱい(?)ある。おおまかにみると、shinonome, mplus, marumoji club, warabi などとなっているが、みてわかるとおり、8px などどこにもない。8px では日本語は表現は無理に近いということになる。さて、10px と 16px だが、10px は mplus にしかないのでそれを使おう。16px は楽しく Marumoji Club のフォントでも使おうか。


freetype ではビットマップフォントも指定できるので、そのまま指定することもできるが、fontforge で開いてもらうとわかるが、(mplus_j10.pcf.gz を開いたところ)
f:id:lugia:20090713174209p:image
英語がない。

したがって、英語を合成しなければいけない。

  1. まず、対応する英文フォントを開く。(この場合、mplus_j10-iso.pcf.gz)
  2. 次に、日本語の方のエンコーディングを Unicode BMP に変更する。
  3. [ファイル]→[フォントを出力]で、アウトラインは TTF、ビットマップに In TTF/OTF を選択してホームディレクトリとかに一度保存。
  4. 開き直す。
  5. で、英語の方から日本語の方にコピー。
  6. もう一度保存。
  7. fontforge で開き直して保存されているか確認する。

f:id:lugia:20090713175142p:image
コピーしたところ。


指定してみる。

small_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
medium_font = /home/lugia/mplus_j10.ttf
large_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
small_size = 8
medium_size = 10
large_size = 16

f:id:lugia:20090713180307p:image
はい。変わりませんね。それで正しいです。sazanami のほうでビットマップ部分に mplus が利用されているためです。


さて、では本番。
Marumoji Club の方も英文がないので、どっかから適当にかっさらって来ましょう。ここでは shnm8x16a.pcf.gz (shnm8x16r.pcf.gz は Shift-JIS) を利用します。
できたら指定します。

small_font = /usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
medium_font = /home/lugia/mplus_j10.ttf
large_font = /home/lugia/maru_16.ttf
small_size = 8
medium_size = 10
large_size = 16

f:id:lugia:20090713182007p:image
うん、すばらしいw

参考 - Osaka を使う

f:id:lugia:20100118150320p:image

16ポイントは残念ながら無いらしい。


しかしさすがにしっかりしたフォントだけのことはあるようだ。