パスワードを忘れた? アカウント作成
691585 journal

bluedwarfの日記: 禁則処理探険隊1(今日はほとんどメモ状態になります)

日記 by bluedwarf

これから、多分ソースコードを見て気づいた点を日記に加えていきます。ほとんどメモ状態になるでしょう。久々に、推敲なしで書きまくることになりそう。どんどんツッコミいれてください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を追いかけなくてはいけないんだろうけど。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...