MURAOKA Taro
koron****@tka*****
2003年 11月 21日 (金) 16:43:41 JST
村岡です。 > これの意図がよく分からないのですが。 > ・スクリプトから SetPanose() が呼び出されるたびごとに、pfminfo > を初期化する > ・SetPanose() が一度でも呼び出された場合には、(何かのタイミング、 > おそらくは保存時に) pfminfo を初期化する > のどちらの意味でしょうか? また、初期化する時の値はどこから > 持って来るのでしょうか? 対象はtottf.c:SFDefaultOS2Info()です。 オリジナルのコードの意図は私にも検討がつかなかったのですが、動作は 1. _sfがセット(pfmset)されていればpfminfoを_sf->pminfoで上書する。 (但しpfminfoと_sf->pminfoが同じ場合、無駄なコピーは避けている) 2. pfminfoがセット(pfmset)されていれば、pfminfoをクリアしてフォント 名等からそれらしい値を決定し初期値とする。 3. どちらもセットされていない場合には何もしない。 という風になっていました。 実際の使用ではSFDefaultOS2Infoの最初の呼び出しのほとんどのケースでpminfo と_sf->pminfoが同じもの、かつpfmsetされてない状態で呼ばれるので3となり何 も実行されません。しかしSetPanose()ではscripting.c:bSetPanose()で SFDefaultOS2Info()を呼んだ直後にpfmset=1しています。そのためSetPanose() を繰り返しても初めは3、あとは1だけが実行されるだけで2は実質実行されない のです。 ここでちゃんと考えてみると2の「pfminfoをクリアしてフォント名等からそれら しい値を決定し初期値とする」というのはフォントのpfminfoが全く設定されて いない時にこそ意味があるものですから、条件の「pfminfoがセット(pfmset)さ れていれば」は間違いで正しくは「pfminfoがセットされていなければ」が正し いのではないかと推測しました。 どうでしょう? ---- MURAOKA Taro <koron****@tka*****>