bluedwarfの日記: 禁則処理探険隊1(今日はほとんどメモ状態になります)
これから、多分ソースコードを見て気づいた点を日記に加えていきます。ほとんどメモ状態になるでしょう。久々に、推敲なしで書きまくることになりそう。どんどんツッコミいれてくださいm(..)m
# 晩飯はカレーらしくて、まだコトコトやっているらしい...
それにしても、ソースコード探検をしても目的の禁則処理のバグフィックスができなかったりして。まぁ、そのときはMr.Frankに頭を下げて頼むことにしよう。
というわけで、ビートルズの赤盤をかけてLet's Go!
♪ Help! I need somebody... っと、JASRACにイチャモンつけられそうだ。むかつくなぁ。JASRAC。
まずは、とにかく${SRC_ROOT}/sw/source/core/text/(OO643C)以下をいろいろ見てみることに。
まず、Portionの概念が良く分からないのでいくら探検しても解決しそうにないけれど、とりあえずSwLinePortionにはPaintやらnLineLengthがあるとのことなので、ここから始めることに。sw/source/core/textでは、por*というのは*Portionを表しているようなので、それからさらに推測してporlin.cxxを開きました。ドンピシャ!
# しかし、ポーリンとはまた粋な名前だこと(ポ
ついでにporlin.hxxを開くと
virtual SwLinePortion *Compress();
を見付けたので、こいつを追っかけてみることに。内容は
SwLinePortion *SwLinePortion::Compress()
{
return GetLen() || Width() ? this : 0;
}
となっている。これはちゃんと実装していると言えるのだろうか?所詮、仮想関数ということでよいのかな?ということでここは飛ばすことに。それよりも、Compressを使用しているところを探そう。
というわけで、このディレクトリで
grep Compress *
とすると、うじゃうじゃでてきますね。そこで目を引いたのが
// Feature: Kana Compression
これはなんだ!ということで、この元であるinftxt.hxxへ。
すると、
//
// Feature: Kana Compression
//
inline const MSHORT GetKanaIdx() const { return nKanaIdx; }
inline void ResetKanaIdx(){ nKanaIdx = 0; }
inline void SetKanaIdx( MSHORT nNew ) { nKanaIdx = nNew; }
inline void IncKanaIdx() { ++nKanaIdx; }
inline void SetKanaComp( SvUShorts *pNew ){ pKanaComp = pNew; }
inline SvUShorts* GetpKanaComp() const { return pKanaComp; }
inline const USHORT GetKanaComp() const
{ return ( pKanaComp && nKanaIdx Count() )
? (*pKanaComp)[nKanaIdx] : 0; }
これは、日本語の文字間隔を詰めるメソッドがまだ未実装ということか?それでも、とりあえず使えているんだけどなぁ...禁則処理にそういうオプションがあったから、そのオプションを使えば確かにCompressionはしてくれるんだよねぇ。
と、こんなところで実は自分が追いかけるべきはCompressではなくて、LineBreakだということに気づいたうえ、カレーもできたようなので一度中断。
でも、LineBreakを見付けたら、またCompressを追いかけなくてはいけないんだろうけど。
禁則処理探険隊1(今日はほとんどメモ状態になります) More ログイン