あいまい検索API(リファレンス編)(Ver5.34対応版)
 JreFuzzy.hをincludeするとして、その関数の説明だけします。
BOOL WINAPI Fuzzy_Open( JREFUZZYDATA* pData, BOOL fDummy = FALSE );
 JREFUZZYDATAを初期化します。fDummyにはFALSEを入れておいてください。
 JREFUZZYDATAのdwSizeメンバーには、構造体のサイズを入れてから呼び出してください。

 構造体のサイズが適当でない場合(大きい場合はいいけども、小さい場合)は初期化に失敗し、FALSEを返します。初期化に成功した場合はTRUEを返します。

Fuzzy_Open後のフラグの書き換え

 Fuzzy_Openすると、JREFUZZYDATA構造体中のメンバーが初期化されます。特に、flagsメンバーに、現在のあいまい検索オプションが設定されます。

 JREFUZZYDATA構造体中のメンバー変数は基本的には呼び出し元が書き換えてはいけませんが、flagsメンバーは例外的に、呼び出し元で書き換えることができます。呼び出し元で書き換えたい場合は、Fuzzy_ConvertFindStringおよびFuzzy_ConvertTargetを呼び出す前にしてください。

 flagsメンバー変数の中での具体的なフラグについては、JreFuzzy.hの中で、「FUZZYOPTION_xxxx」のような形で定義されています。詳しくはそちらを参照ください。


BOOL WINAPI Fuzzy_Close( JREFUZZYDATA* pData );
 JREFUZZYDATA構造体を終了化します。具体的には、HmJre.dll側が動的に確保したメモリを解放します。これを呼ばないでおくと、いわゆるメモリリークが発生します。
 失敗したらFALSEを返す作りになってますが、たぶんTRUEしか返しません。なので、デバッグ目的でない限り、返り値は無視してかまいません。


BOOL WINAPI Fuzzy_ConvertFindString( JREFUZZYDATA* pData, const char* pszSrc, BOOL fRegular );
 検索文字列をあいまい検索用に変換します。
 pszSrcには検索文字列を指定してください。
 検索文字列が正規表現の式になっている場合は、fRegularに1を指定してください。
 検索文字列が正規表現の式になっていないけども、正規表現で検索したい場合は、fRegularに2を指定してください。
 検索文字列が正規表現の式になってなくて、検索自体も普通にやりたい場合は、fRegularに0を指定してください。ただし、こうするとあいまい検索の一部が無効になります。

 変換した結果は、JREFUZZYDATA構造体中のpszFindConvedメンバーに設定されます。文字列の長さ(末尾のNULL文字は含まず)はcchFindConvedに設定されます。

 変換した結果の文字列の長さが0になってしまった場合はFALSEを返します。例えば「空白を無視する」となっている場合に空白だけを検索しようとするとFALSEが返ります。


BOOL WINAPI Fuzzy_ConvertTarget( JREFUZZYDATA* pData, const char* pszSrc );
 検索対象の文字列をあいまい検索用に変換します。

 変換した結果は、JREFUZZYDATA構造体中のpszTargetConvedメンバーに設定されます。文字列の長さ(末尾のNULL文字は含まず)はcchTargetConvedに設定されます。


int WINAPI Fuzzy_FindPos2RealPos( JREFUZZYDATA* pData, int x );
 あいまい検索用に変換した文字列から検索を実行し、何かヒットしたとして、そのヒットした位置から変換前の文字列での位置を計算して返します。


int WINAPI Fuzzy_FindArea2RealArea( JREFUZZYDATA* pData, int x, int* pcchMatch );
 あいまい検索用に変換した文字列から検索を実行し、何かヒットしたとして、そのヒットした位置と長さから、変換前の文字列での位置と長さを計算して返します。

 xには位置、*pcchMatchには長さを指定して呼び出すと、返り値として変換前の位置、*pcchMatchには変換前の長さが入ります。

 例えば空白を無視する設定で検索した時、検索でヒットした文字列の前後の空白を除去した形で値を返します。


int WINAPI Fuzzy_RealPos2FindPos( JREFUZZYDATA* pData, int x );
 あいまい検索用に変換する前の文字列の特定の位置が、あいまい検索用に変換した文字列中のどの位置に相当するかを返します。

 変換した文字列の途中から検索を開始したい場合に必要な関数です。


JREFUZZYDATA* WINAPI Fuzzy_GetFuzzyDataInJre( JRE2* pJre );
 JRE2構造体中のwTranslateに1を設定してJre2Open関数を呼び出した時の、HmJre.dllが内部的に生成したJREFUZZYDATA構造体のアドレスを返します。
 wTranslateに1を設定してJre2Openを呼び出すよりは、wTranslateは常に0にして、JREFUZZYDATA構造体を別に用意して検索しないと、事実上正しい検索は出来ないと思います。なので、この関数はたぶん不要です。(でもなぜか用意してある)


BOOL _cdecl Fuzzy_OptionDialog( HWND hwndParent, UINT flagsDummy );
 あいまい検索の設定ダイアログボックスを呼び出します。

 flagsDummyは今のところ使ってません。0を指定してください。

 Fuzzy_Openした後でこの関数を呼び出しても、Fuzzy_Openした側のJREFUZZYDATAには設定内容は反映されません。このFuzzy_OptionDialog関数を呼び出した後に、その設定が有効であるかのように動作させるには、必ずFuzzy_Openしなおす必要があります。


int WINAPI JreGetTagPosition( LPJRE2 pJre, char chTagWantGet, int* pcchMatch );
 タグ付き正規表現で検索した時に、\1、\2等に相当する部分の桁位置および長さを返します。
 返り値は桁位置で、*pcchMatchにマッチした長さを返します。
 chTagWantGetには、'1'〜'9'の文字を指定してください。
 chTagWantGetにマッチする部分が無い場合は-1を返します。

 この関数はVersion1.50から追加されています。