Reform_Findstr() 関数
文書整形の対象となる文字列を1行分(1論理行分)ずつ受け取り、その文字列を検索した結果を返す関数です。
int WINAPI Reform_Findstr(
hfwnd, *
preform )
HWND hfwnd;
struct REFORMDATA *preform;
{
}
パラメータ
- hfwnd
- フレームウィンドウのハンドル。
- *preform
- 文書整形用データ。
戻り値
文書整形の対象となる文字列を1行分(1論理行分)ずつ受け取ります。
そして、受け取った1行の文字列(preform->oldstr[ ])を検索し、以下のいずれかの結果を返します。
- 現在の行位置で文書整形を中止させたい場合には -1 を返します。
- 文字列の置き換え場所が見つからない場合には 0 を返します。
次回のこの関数で受け取る文字列は、次の行の行頭から行末までの文字列(すなわち次の行全体)になります。
- 文字列の置き換え場所(または削除場所)が見つかった場合には、関数値に 1 を返します。
この時、次の順に各値をセットします。
- 受け取った文字列(preform->oldstr[])の中の置き換え位置(配列先頭からのオフセット、すなわち受け取った文字列の何バイト目かという値(先頭が0))を preform->findpos にセット
- 置き換え前の文字列のバイト数を preform->findsize にセット
- 置き換える文字列を preform->newstr[] にセット
- 置き換える文字列のバイト数を preform->newsize にセット
- 文字列置き換え場所(または削除場所)が見つかった場合で、受け取った文字列全体(すなわち行全体)を、指定の文字列で一度に置き換えたい場合には、関数値に 2 を返します。
この時、置き換え後(または削除後)の行全体の文字列を preform->newstr[] に、そのバイト数をreform->newsizeにセットする。
行全体を削除したい場合には preform->newsize に 0 をセットします。
次回のこの関数で受け取る文字列は、次の行の行頭から行末までの文字列(すなわち次の行全体)になります。
解説
【注意1】
他の行との関連で置き換え後の文字列が決定するような場合には、受け取った行の内容を一時ファイルなどに保存しておき、この関数では行全体を削除しておきます。
そして、対象範囲のすべての行のデータを受け取った後、最後に、Reform_Getdata() 関数により、置き換え後のすべての行のデータをまとめてMIFES側に返すようにしてください。
【注意2】
この関数に渡される文字列は、現在のカーソル位置からその行(論理行)の行末まで(改行文字まで)の文字列になる。
ただし、この文字列が 2000バイト以上の場合には、2000 バイトに達した最初の文字までの文字列になります。
【注意3】
受け取った文字列が行全体であるかどうか(あるいは論理行末までの文字列であるかどうか)は、受け取った文字列の最後の1バイトがLFコード(0x0a)であるかどうかで判断してください。
なお、文字列の最後をヌルコード(0x00)ではなく、必ず preform->oldsize やpreform->newsize の値で判断してください。
この資料の内容は予告なしに変更されることがあります。
いかなる場合でも、この資料の内容およびその運用の結果に関しては一切の責任を負いません。
この資料に記載されている会社名、製品名は、各社の登録商標または商標です。
この資料の一部または全部を無断で使用、複製することはできません。
Copyright(C) MEGASOFT Inc.