top >秀丸エディタマクロ >マクロで使うDLL
目次
はじめに
hmonig.dllは、鬼雲を使用した、hmjre.dll 互換の正規表現検索DLLです。渡された文字列 (Shift_JIS) を、DLL の内部で Unicode(UTF-16LE) に変換し、処理を行っています。その為、hmjre.dllと比較し、メモリ消費量は多くなり、遅くなると思います。
圧縮ファイルの内容
COPYING_Onigmo_Oniguruma :鬼車・鬼雲ライセンス条文
hmonig.dll :32bit DLL(Windows Vista以降用)
hmonig.html :説明ファイル
HidemaruMacroInstaller.lst:HidemaruMacroInstaller用スクリプト
hmonig_dictionary.txt :hmonig.dllマクロ用関数の単語補完用辞書ファイル
x64 :フォルダ
└hmonig.dll :64bit DLL(Windows Vista以降用)
32ビット版/64ビット版 ともにWindows 10で動作確認しています。
インストール・アンインストール
秀丸エディタで使用するには、メニューの「その他」→「動作環境」→「環境」→「正規表現」で、設定を行います。
秀丸メールで使用する場合には、メニューの「設定」→「秀丸エディタの動作環境」→「環境」→「正規表現」になります。
インストール
秀丸エディタ(秀丸メール)本体と同じ場所に、hmonig.dll を配置して、「DLLの変更」ボタンから、「hmonig.dll」を指定してください。
アンインストール
使用しない場合は「DLLの変更」ボタンから、デフォルトの「hmjre.dll」を指定してください。 hmonig.dll が不要なら削除して下さい。レジストリ等は使用していません。
機能の説明
hmonig.dll は、受け取った文字列を、Unicode(UTF-16LE) に変換し、処理しています。 Jre2SetCodePage で、UTF-8を指定した場合は、例外的にUTF-16LEへの変換は行わずに処理を行います。 (秀丸エディタ/秀丸メールでは、UTF-8 を指定される事はないです。)
内部処理がUnicodeになることによる、hmjre.dllとの違い。
\x{...}は、Unicode のコードポイントを指定する必要があります。 Shift_JISのコードポイントを指定しないで下さい。
Character Property が、全て使用可能です。(\p{Alnum}等)
内部処理がUnicodeなので、Shift_JIS で漢字の範囲を示す[亜-黑]という表現では、漢字のみを対象にする事はできません。\p{Han} を使用してください。
正規表現について
鬼車の基本的な正規表現については、鬼車のドキュメントを参照してください。
鬼雲で拡張された正規表現については、鬼雲のドキュメントを参照してください。
hmjre.dll の互換性から、"\<"、"\>"、"\g{n}"は使用可能です。
hmjre.dll 独自の、ヒットした扱いにするタグ指定(?)も、使用可能ですが、指定したタグが存在しない場合の動作が hmjre.dll と異なります。 hmjre.dll では、タグ設定が無効になり全体がマッチしますが、hmonig.dll では、マッチしない事になります。
Unicode で処理を行っていますが、\d、\s、\wは、ASCII の範囲内のみ対象となります。 (\D、\S、\Wも同様に変更になります。)
全角文字等を対象に含めたい場合は、Character Property を使用してください。 (\p{Digit}で、全角を含む数字にマッチします。)
Ver.0.5.9.0 以降から、正規表現の中に、(?a)、(?u) オプションが指定でき、マッチする内容を切り替えることが可能です。
(?a):\w, \d, \s, POSIXブラケットは、非ASCII文字にマッチしない。
(?u):\w, \d, \s, POSIXブラケットは、非ASCII文字にマッチする。
hmjre.dll との互換性から、ブラケット「[ ]」内では、「\uxxxx」、「\u{xx}」が使用できますが、なるべく\x{...}を使用してください。
(\uxxxxを指定する場合は、必ず4桁指定してください。)
オプション的な機能について
BRegIf.dll の拡張機能のうち、"パターンの否定"が、使用できます。 BRegIf.dll と同じく、正規表現の先頭に、"!"を追加してください。拡張機能を無効化したい場合は、"\"でエスケープする(\!)か、ブラケットを使用して([!])ください。
秀丸エディタVer.8からは、grepでは、"ヒットしない行"という条件が追加されているので、 grepではこれを使う方法もあります。
あいまい検索は Ver.0.5.6 から、hmjre.dll を使用することで可能になっています。 (あまり、テストしていませんが。)あいまい検索を行うには、hmonig.dll と同じ場所に、hmjre.dllが必要です。あいまい検索は、Unicode(UTF-8、UTF-16LE)を直接扱うことは出来ません。その為、ワイド文字APIでは、あいまい検索は使用できません。
また、あいまい検索実行時、検索文字列内に、POSIX ブラケットがある場合、エラーになります。
他の検索用エンジンとの違い
hmjre.dll との違い
正規表現が多少異なります。
前方一致指定/前方不一致指定では、固定長のみ有効です。
hmjre.dll と同様の、マクロ用関数も使用できます。
全ての関数は実装していません。
Shift_JIS 範囲外の Unicode 文字を含む場合は、dllfuncw/dllfuncstrw を使用してください。従来の dllfunc/dllfuncstr では、Shift_JIS 範囲外の Unicode 文字は検索できません。
BRegIf.dll + bregonig.dll との違い
hmonig.dll 単独で動作する。
鬼雲を静的リンクしています。あいまい検索を行うには、hmjre.dll が必要です。)
鬼雲の正規表現はデフォルト(ruby)の仕様になっている。
BRegIf.dll の独自拡張のうち、"!"(パターンの否定)のみ使用可能。
BRegIf.dll 独自のマクロ関数は、実装していない。
\wは、英数字, "_" のみにマッチします。
bregonig.dll の独自拡張は使用できません。
その他・制限事項など
後方参照(タグ参照)は、\nの形式では、1~9までが指定可能です。 \k<n>、\k'n'の形式では、10以上も指定可能ですが、秀丸エディタの置換で、置換後の文字列に16以上を指定しても、正しく処理されません。
\z(入力文字列の終端)について。
秀丸エディタは、検索時に行単位でデータを渡しますが、正規表現に "\n" が含まれる場合は、 "\n"の数+1行を渡す事になり、入力の終端は2行目以降になります。秀丸エディタ側の制限として、最初の改行以降にヒットするような検索文字列の場合は、ヒットしないようになっています。(秀丸エディタの仕様) その為、複数行が入力される状況では、"\z"はマッチしません。 Ver.8以降では、(?#fulllinematch)、という埋め込みオプション(?)があり、二行目以降もマッチ対象にすることも可能になっています。
現状では、結合文字(合成文字?)を正しく扱うことはできません。
名前付き捕獲式集合(ネームキャプチャ)について
デフォルト(ruby)仕様なので、名前付き捕獲式集合と括弧による捕獲式集合の混在はできません。 (オプションを指定すれば可能ですが、その手段は提供していません。)
名前付き捕獲式集合を使用した場合、括弧による捕獲式集合は無効。また、名前付き捕獲式集合を、番号で参照/呼び出しもできません。
例) 正規表現:(?<x>hmonig)(\\.dll) \k<x>\2
\k<x>
hmonig(名前付き捕獲式集合を、名前で読み出し)
\k<x>を、\1 で参照
エラー。numbered backref/call is not allowed. (use name)
名前付き捕獲式集合を、参照/呼び出しは不可
(\.dll)を \2 で参照
エラー。numbered backref/call is not allowed. (use name)
名前付き捕獲式集合が指定された場合は、括弧による捕獲式集合は無効。
置換時の参照について hmjre.dll が名前付き捕獲式集合に対応していないので、名前による参照は出来ませんが、番号による参照は可能です。名前付き捕獲式集合の、左側から順に番号が付与されます。
DLLの関数について
マクロ用関数について
マクロ用関数の説明は、この文書の最後にある関数リファレンス に記載しています。マクロ用関数は、hmjre.dll 互換関数と、hmonig.dll 独自の関数があります。
互換関数
独自関数
独自関数(ワイド文字対応版)
互換関数では、Unicode 文字を扱うことはできません。 Unicode を扱う場合または、扱う可能性がある場合は、独自関数を使用してください。 (ワイド文字対応版を使用すること)
文字変数内に、Unicode 文字が含まれるかどうかの、チェック方法がマクロヘルプに記載されているので、変数内に、Unicode 文字が含まれているかどうか、チェックすることは可能です。 (秀丸エディタ Ver.8 charindex_to_byteindex)
jre32.dll / hmjre.dll 互換 API
jre32.dll 互換 API
jre32.dll と互換性のある、以下の API をサポートしています。
Jre2Open
Jre2Compile
Jre2GetMatchInfo
Jre2Close
JreGetVersion
GetJreMessage
hmjre.dll 互換 API
hmjre.dll と互換性のある、以下の API をサポートしています。
Jre2SetCodePage
Jre2GetMatchInfo_HmJre
JreGetTagPosition
Jre2GetMatchInfo_V318
Jre2GetMatchInfo_V500
hmjre.dll 互換API については、以下の URL を参照して下さい。
hmjre.dll 互換あいまい検索 API
hmjre.dll 互換というより、hmjre.dllをロードして、そのまま処理を丸投げしています。
Fuzzy_Open
Fuzzy_Close
Fuzzy_ConvertFindString
Fuzzy_ConvertTarget
Fuzzy_FindPos2RealPos
Fuzzy_FindArea2RealArea
Fuzzy_RealPos2FindPos
Fuzzy_GetFuzzyDataInJre
Fuzzy_OptionDialog
あいまい検索に関しては、以下の URL を参照して下さい。
https://log.maruo.co.jp/hidesoft/hidesoft_2/x0824816.html
hmonig.dll 独自 API
jre32.dll / hmjre.dll 互換 API / hmonig.dll 独自 APIの使い方
基本的には、以下の順でAPIを呼び出して下さい。
Jre2Open
検索開始(構造体初期化)
Jre2SetCodePage
検索に使用するコードページを設定省略可能で、省略した場合には、デフォルトで以下のコードページを使用します。
通常版API :Shift_JIS(932)
Unicode版API :UTF-16LE
Jre2Compile
正規表現のコンパイル
Jre2GetMatchInfo/Jre2GetMatchInfo_HmJre
検索の実行
Jre2Close
検索終了(各種メモリ解放)
Unicode版APIの場合、Jre2SetCodePageW で、コードページを指定しても、内部処理には使用しません。 UTF-16LE固定なので、Jre2SetCodePageW は省略可能です。
Jre2SetCodePage で各種コードページが指定可能ですが、確認したのは、
Shift_JIS(932)
UTF-8(65001)
のみです。他のコードページに関しては、確認していません。
jre32.dll / hmjre.dll で初期化/使用した、Jre2構造体を、hmonig.dllで使用しないで下さい。確実に誤動作します。
その他・免責事項、ライセンス等
このプログラムの動作保証はありません。動作確認を行っていますが、プログラムの実行環境や、プログラムの不具合などによって、問題が生じる場合があります。それにより損害が生じても、損害に対する保証は出来かねますので、あらかじめ、ご了承ください。
不具合をなくす意志はありますが、実力が伴っていないので、治らないかもしれません。
hmonig.dll のライセンスは、修正 BSD ライセンスとします。バイナリ配布のみで、ソースの公開は行っていません。 (秀丸エディタ内部で使用している、独自コード(Unicode)の情報を含むため、ソースは公開できません。)
マクロ用関数を使用する場合は、秀丸エディタ Ver.8 以降を推奨します。
hmonig.dll は、正規表現ライブラリとして 鬼車/鬼雲 を使用しています。
鬼車は、K.Kosako 氏の作成です。(Copyright (c) 2002-2018 K.Kosako)
鬼車は BSD ライセンスとなっています。添付ファイルの COPYING_Onigmo_Oniguruma を参照してください。
鬼車に関しては、以下のURLを参照してください。
https://github.com/kkos/oniguruma
鬼雲は、K.Takata 氏の作成です。((C) 2009-2019 K.Takata)
鬼雲は BSD ライセンスとなっています。添付ファイルの COPYING_Onigmo_Oniguruma を参照してください。
鬼雲に関しては、以下のURLを参照してください。
https://github.com/k-takata/Onigmo
有用なライブラリの公開、ありがとうございます。
変更履歴
2009/07/12 Ver.0.1.0
BRegIf.dll+bregonig.dll相当となったので、テスト目的で公開。
2009/07/25 Ver.0.1.1
ヒットした扱いにするタグ指定が正常に動作していないバグの修正。通常の検索 :最後のタグが指定できない。マクロ用関数:指定が有効にならない。
バージョン番号が間違っていたので修正。
2009/11/23
2009/12/06 Ver.0.1.2
正規表現コンパイルに失敗した場合、クラッシュするバグの修正。
2009/12/25 Ver.0.1.3
鬼車で、(a){2}z が、"aaz"にマッチしないバグの修正。
https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26143
https://twitter.com/nalsh/statuses/6888780175
2010/01/11 Ver.0.1.4
2010/01/13 Ver.0.1.4.1
2010/01/14 Ver.0.1.4.2
鬼車Ver.5.9.2を更新(x86/x64のソースを統合)。
2010/01/28 Ver.0.2.0
2010/01/30
エラーメッセージ取得時に、クラッシュする場合があるので対処。
鬼車API呼び出し時に、エラーコードだけでなく、onig_new()のerr_infoが、必要な場合がある。秀丸側からはエラーコードのみで、JRE構造体が指定されないため、識別ができない。多少メッセージが不親切になるが、鬼車APIを修正。
(エラーメッセージ取得時にerr_infoを使用しない関数を追加し対応。エラー発生時にメッセージを取得し保存しておく方法も考えたが、エラーの発生順とエラーメッセージ取得順が同じになるとは限らないので、メッセージの保存は行わない。)
2010/01/31
2010/02/03
バイト-文字変換部で、データ終端の認識に失敗するバグの修正。
Hidemarnet Explorer で、言語の異なるページに移動する場合、最初は元のコードページで検索が行われる。(タイトルタグの内容が、元のコードページで検索が行われる。表示後は、正常なコードページで検索)実際と異なるコードページで変換した場合、マルチバイトデータ終端の認識に失敗して、オーバーランしていた。終端位置と、マルチバイト文字のチェックを強化)
2010/02/06
マクロ用関数のワイド文字バージョンを追加。
マクロ関数のバッファを10KB固定から可変へ変更(最大は 4M まで対応)
2010/02/09
\dが全角の数字にもマッチしてしまうので修正。(https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24544)
\w も直るはずだが、マッチ範囲がおかしいので、未対応へ。
\d、\sのみ対処、\wは要調査。
2010/02/10
\d、\sへの対応を、一度無効する。
\dの対応もうまくいっていない。何故か漢字にもマッチする。
2010/02/11
パッチ適応後に、\d、\w、\sが、誤判定する件に対処。
鬼車はアスキーコード範囲内のデータに対して、属性をテーブルで保持している。
\w等は、ビット割り付け (ONIGENC_CTYPE_W) をおこなっていて、その属性を持つ範囲に、ビットを立てたテーブルを作成。マッチ時にテーブルにアクセスし、ビットをチェックし、判定を行っている。その為、UTF-16LEの下位ビットが、アスキーコード範囲内だと、誤判定していた。コードポイント値を取得して、ASCIIコード範囲内であることを確認後、チェックするように修正。
map_search、map_search_backward(regexec.c)
match_at(regexec.c)
2010/02/12 Ver.0.5.0
バージョン番号のみ変更。
秀丸独自コード未対応版との、バージョン番号を離すだけ。
2010/02/17 Ver.0.5.1
2010/02/18
マッチしなかった場合、マッチ位置と長さを明示的に0(zero)を設定するようにした。
2010/02/19
2010/02/25
マクロ用関数で、"\uxxxx"を扱えるようにした。
検索ダイアログを開いたまま、ウィンドウの切替を行うと、エラーとなる場合があるので対処。
検索ダイアログを開いたまま、ウィンドウの切替を行うと、
JreGetVersion、Jre2Open、Jre2Compile、Jre2Close
が呼び出される。
hmonig.dllでは、正規表現文字列がない場合、エラーにしていたが、チェックをしないようにした。(単純に、検索ダイアログを表示させると空文字がセットされるので、エラーチェックで引っかかっていた。)
2010/02/26
Jre2Compileのエラー処理部を変更
Jre2Compile が false を返した場合、Jre2Close を呼ぶのを期待していたが、 Jre2Compile内で後始末を行うようにした。
鬼車(Unicode)
"。\Z"が、"です。\n"にマッチしないので、修正。 map_search、map_search_backward(regexec.c) 場当たり的対処なので、そのうち破綻するかも。
2010/02/27
鬼車(Unicode)
"\d\Z"が、"2\n"にマッチしないので、修正。まだ、マッチしない場合もあるが、"$"を使えばいいので、取りあえずここまでにしておく。
2010/03/02
鬼車(Unicode)
"\w\db\Z"が、"a2b\n"にマッチしないので、修正。
forward_search_range、onig_search(regexec.c)
2010/03/03 Ver.0.5.1.1
鬼車(Unicode)
\s、\d、\wの変更を、rubyの変更をベースに、Unicodeのみ、別途テーブルを定義することで対応。場当たり的な対処を、元に戻した。最初から、この方法でやれば、いろいろ苦労しなくて、すんだのだが、この状態にならないと、まじめに鬼車のソースを追いかけなかったし、動作も理解できなかった。
testc、testuも修正。testuはUTF-16LEへ変更。
2010/03/05 Ver.0.5.2.0
Jre2GetMatchInfo_Mainで、対象文字列が""の場合は、falseを返していたが、空文字にマッチする正規表現もあるので、チェックを行わないようにした。
2010/03/06 Ver.0.5.3.0
マクロ用関数
FindRegular~で、-2を返さないといけないのに、0を返していたので修正。メモリ確保に失敗した場合、戻り値が間違っていた。
マクロ用関数
通常関数とワイド文字対応関数で、GetLast~関数の戻り値が異なっていたのであわせる。検索でマッチしなかった場合の戻り値が異なっていた。
2010/03/12 Ver.0.5.4.0
(?\tag-number) ヒットした扱いにするタグ指定の動作が、おかしかったので修正。 (マクロ関数も修正)
タグ指定ありでタグに対するマッチ範囲がない場合、Trueを返していたので修正。 (falseを返す。)
正規表現:(.+)\\t|$(?\\1)
対象文字:\\n
上記場合だと、正規表現にはマッチするが、\1には、マッチしていない状態もある。
2010/03/14
マクロ用関数でクラッシュするバグの修正。
FindRegular → ReplaceRegular の順で実行すると、クラッシュする場合があるので対処。
2010/03/16 Ver.0.5.5.0
各関数のメモリ確保部分を見直し。
マクロ用関数でエラーがあった場合に、メモリの解放を行っていない箇所があったので、対処。
タグ取得関数で、マッチしていないタグを指定した場合に、明示的にマッチしていない状態を返すよう変更。
動的にメモリを確保している箇所があったが、動的である必要がないので、変更。
2010/03/24 Ver.0.5.5.1
マクロ関数の最大バッファサイズを変更(4M → 1M)
秀丸独自コード変換時に、最大で1バイトが4バイトまで増加するが、非対応DLLでは、独自コードで入力される事がないので1Mに変更。
2010/06/05 Ver.0.5.6.0
hmjre.dllを使用し、あいまい検索を可能にした。
2010/07/07 Ver.0.5.6.1
マクロ用関数の修正
GetLastMatchLength、GetLastMatchTagLengthで、文字列の先頭にマッチした場合、戻り値が-2になってしまうバグの修正(colder氏からの連絡による。)
2010/07/09
マクロ用関数の修正
ReplaceRegularW、ReplaceRegularNoCaseSenseW関数で、置換文字列にタグ参照を使用した場合、クラッシュする場合があるのを修正。
2010/07/15 Ver.0.5.7.0
2011/04/30 Ver.0.5.7.1
2011/05/28 Ver.0.5.8.0
hmjre.dll V3.38対応 キャラクタクララス内の\u{xxxxx}
hmjre.dll V3.39対応
ReplaceRegular/ReplaceRegularNoCaseSense関数の変更に対応
ReplaceRegular(W)/ReplaceRegularNoCaseSense(W)で、全置換時、マッチしていない場合、対象文字列を返していたが、""を返すように修正。(hmjre.dllに合わせる)
意図的ではないこと、全置換でない場合と動作が一致しないので、修正。
2011/09/03 Ver.0.5.9.0(β1)
正規表現エンジンを、鬼車(Ver.5.9.2) → 鬼雲(Ver.5.11.0) へ変更。
2011/09/09 Ver.0.5.9.1(β2)
正規表現エンジンを、鬼雲(Ver.5.11.0) → 鬼雲(Ver.5.11.1) へ変更。
2011/09/10 Ver.0.5.9.2(β3)
正規表現エンジンを、鬼雲(Ver.5.11.1) → 鬼雲(Ver.5.11.2) へ変更。
2011/09/18 Ver.0.5.9.3(β4)
正規表現エンジンを、鬼雲(Ver.5.11.2) → 鬼雲(Ver.5.11.3) へ変更。
2011/10/04 Ver.0.5.9.4(β5 未公開)
Unicode版の関数を追加 char を WCHAR に変更しただけ。
hmjre.dllが対応していないので、Unicodeでの、あいまい検索は出来ません。ほとんどテストしていない状態です。
JreGetVersionW
Jre2OpenW
Jre2SetCodePageW
Jre2CompileW
Jre2GetMatchInfoW
Jre2GetMatchInfo_HmJreW
Jre2CloseW
JreGetTagPositionW
GetJreMessageW
GetDllVersionStrW
2011/10/18 Ver.0.5.9.5(β6)
正規表現エンジンを、鬼雲(Ver.5.11.3) → 鬼雲(Ver.5.11.4) へ変更。
ソースの整理
2011/10/22
コンパイラを変更 VCEE 2008 → 2010 へ
2011/10/25 Ver.0.5.9.6(β7 未公開)
バージョン情報をリソースから取得するように変更。
GetDllVersionStr(W)を修正 DLLロード時に文字列を生成するように修正。
2011/11/03 Ver.0.5.9.7(β8)
通常版APIで、UTF-8文字列が、有効になるよう修正。
UT-F8を使用する場合は、Jre2SetCodePage で、65001(Unicode (UTF-8))を、指定すること。
2011/11/05 Ver.0.5.9.8(正式版)
2011/11/08 Ver.0.6.0.0(β1)
マクロ用関数を修正
GetDllVersionStr(W)で、64bitOSの場合、"(x64)"と表示するようにした。
wcslen2、CheckSurrogatePairを追加
2011/11/20
マクロ用関数を修正
ReplaceRegular/ReplaceRegularW マッチ箇所が幅がない場合、検索がループしてしまいバッファがあふれてしまうバグの修正。(colder氏からの連絡による。)
2011/12/10 Ver.0.6.0.1(β2)
2011/12/13 Ver.0.6.0.2(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.11.4 + bug fix) → 鬼雲(Ver.5.12.0)
2011/12/20 Ver.0.6.1.0(β1)
検索時のデフォルトオプション指定を、直接指定を止めて HMONIG_DEF_OPTION を定義し、指定するように変更。
2011/12/29
正規表現エンジンを更新。鬼雲(Ver.5.12.0) → 鬼雲(Ver.5.12.1) へ変更。
2011/12/31
API(名前付き捕獲式集合用)を追加
JreNameToTags
JreNameToTagsW
2012/01/04
ReplaceRegular(W)/ReplaceRegularNoCaseSense(W) でバッファの確保に失敗する場合があったので、対処。
マクロ用関数の追加
GetLastMatchNameToTagCnt
GetLastMatchNameToTagCntW
GetLastMatchNameToTags
2012/01/06 Ver.0.6.1.1(β2)
#defineでスペルが間違っていた箇所があったので修正
2012/01/07
UTF-8 を設定した場合、JreNameToTags が正常に動作しなかったバグの修正。 (内部処理をUTF-16LEで、動作させている為。)
API(名前付き捕獲式集合用)を追加
2012/01/09
APIを追加
マクロ用関数を追加
GetLastMatchNameCnt
GetLastMatchNameCode
GetLastMatchName
GetLastMatchNameW
2012/01/11
GetLastMatchNameW で、クラッシュする場合があったので修正。
2012/01/21 Ver.0.6.1.2(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.12.1) → 鬼雲(Ver.5.13.0) へ変更。
2012/02/05 Ver.0.6.2.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.0) → 鬼雲(Ver.5.13.1) へ変更。
2012/03/31 Ver.0.6.3.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.1) → 鬼雲(Ver.5.13.2) へ変更。
2012/05/30 Ver.0.6.4.0(正式版)
hmjre.dllの解放し忘れがあったので、修正。
2012/06/03
2012/06/29 Ver.0.6.5.0(正式版)
正規表現エンジンを更新。
鬼雲(Ver.5.13.2) + Ruby r35724 + r36070 + r36072へ変更
マクロ用関数の修正
ReplaceRegular(W)/ReplaceRegularNoCaseSense(W)で、正規表現に複数回マッチする場合、後方参照が正常に行われなかったバグの修正
2012/11/03 Ver.0.6.6.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.2) → 鬼雲(Ver.5.13.3) へ変更。
2013/03/17 Ver.0.6.7.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.3) → 鬼雲(Ver.5.13.4) へ変更。
2013/04/18 Ver.0.6.8.0(未公開)
正規表現エンジンを更新。鬼雲(Ver.5.13.4) → 鬼雲(Ver.5.13.4) + #8210 fix へ変更。
2013/05/30 Ver.0.6.8.1(正式版)
正規表現エンジンを更新。
鬼雲(Ver.5.13.4) + #8210 fix + Merge pull request #17 へ
ドキュメント修正
2013/06/11 Ver.0.6.9.0(正式版)
正規表現エンジンを更新。
鬼雲(Ver.5.13.4) + 2013/05/31までの変更内容
Jre2GetMatchInfo/Jre2GetMatchInfo_HmJre 修正検索開始位置が、対象文字列の最後だった場合に、先頭から検索してしまっていたバグの修正。 (UTF-16LEへの変換時のバグ)
2013/07/06 Ver.0.7.0.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.4) + bug fix → 鬼雲(Ver.5.13.5) へ変更。
2013/09/07 Ver.0.7.1.0(β1)
エラーメッセージが取得できない場合があったのを修正。
Jre2Compile/Jre2CompileW で 正規表現文字列が空かどうかのチェックを有効にした。
以前は、検索ダイアログを開いたまま、ウィンドウの切替を行うと、検索文字列がなくても、 JreGetVersion、Jre2Open、Jre2Compile、Jre2Close が呼び出された。 hmonig.dllでは、正規表現文字列が空だとエラーにしていた為、ウィンドウを切り替えるたびにエラーダイアログが表示されてしまうので、チェックを無効化していた。秀丸エディタVer.8.32では、正規表現文字列が空の場合、JreGetVersion のみ呼び出されるように変更になっていた為、チェックを有効にした。
2013/09/16
正規表現エンジンを更新。コンパイルスイッチを変更。(USE_COMBINATION_EXPLOSION_CHECK を有効化) トラックバックが多くなる場合でも、遅くならないようにした。
2014/02/04
ドキュメント変更のみ(ヘルプファイルサイトのURL変更)
2014/04/12 Ver.0.7.1.1(β2)
正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.13.5) + Apr 12, 2014 までの fix へ変更。
2014/04/20
正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.13.5) + Apr 20, 2014 までの fix へ変更。
2014/07/01 Ver.0.7.1.2(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.14.1)
2014/07/27 Ver.0.7.2.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.14.1) → 鬼雲(Ver.5.14.2)
2014/09/13 Ver.0.7.3.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.14.2) → 鬼雲(Ver.5.15.0)
2015/01/31 Ver.0.7.4.0(β1)
2015/05/02 Ver.0.7.4.1(正式版/未公開)
開発環境を変更
"Visual Studio 2010 Express Edtion" から "Visual Studio Community 2013" へ
2015/12/19 Ver.0.7.4.2(正式版)
正規表現エンジンを更新。鬼雲(Ver.5.15.0) + Oniguruma 5.9.6更新分 + Unicode 8.0.0対応
2016/01/25 Ver.0.7.4.2a(正式版)
ドキュメント hmonig.html の修正
ドキュメント作成を rd(rdtool) から、Markdown(Pandoc)に変更した事による、各種記述ミスの修正。
2016/03/05 Ver.0.7.5.0(β1)
2016/03/12 Ver.0.7.5.1(β2)
未公開関数で、バッファオーバーランする可能性があったので修正。
マクロ用関数 ReplaceRegular~ でも、\g{n}を使えるようにした。
2016/07/01 Ver.0.7.5.2(正式版)
マクロ用関数 FindRegular、FindRegularNoCaseSense、 FindRegularW、FindRegularNoCaseSenseW で、マッチした位置を正常に返さない場合があったのを修正。(\K使用時にマッチ位置がおかしい)
2016/10/21 Ver.0.7.6.0(β1)
マクロ用関数の追加(要秀丸エディタVer.8.66β7以降)
SplitRegular(正規表現を使用した文字列分割)
2016/10/26
正規表現エンジンを更新。鬼雲(Ver.5.15.0 master branch 2016/10/26取得分まで)
2016/11/01 Ver.0.7.6.1(β2)
2016/11/02
正規表現エンジンを更新。鬼雲(Ver.5.15.0 master branch 2016/11/02取得分まで)
2016/12/10 Ver.0.7.6.2(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.0.0)
2017/01/17 Ver.0.7.7.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.1.0)
2017/01/29 Ver.0.7.8.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.1.1)
2017/05/16 Ver.0.7.9.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.1.2)
2017/09/28 Ver.0.8.0.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.1.3 + master branch 2017/09/28取得分まで)
2017/10/06 Ver.0.8.0.0a(正式版)
ドキュメント修正。
ドキュメント作成を rd(rdtool) から、Markdown(Pandoc)に変更した事による、各種記述ミスの修正。
2017/11/05 Ver.0.8.0.0b(正式版)
ドキュメント修正。
Pandoc のバージョンアップによる仕様変更への対応と、 JreGetTagPositionの説明を修正。
2018/03/02 Ver.0.8.0.0c(正式版)
ドキュメント修正。
過去ログサイト、ヘルプファイルサイトのURLを変更。
2018/04/17 Ver.0.8.0.0d(正式版)
2019/01/31 Ver.0.8.1.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.2.0 + Jan 31, 2019 までの修正)
2019/07/03 Ver.0.8.2.0(β1 未公開)
マクロ関数 SplitRegular で、バッファーオーバーランが起きる場合があったので対処。 (バッファサイズのチェックミス)
2019/07/04 Ver.0.8.2.1(正式版)
2019/07/06
freedll時に、マクロ関数用の戻り値を格納する文字列バッファをゼロクリアしてから解放するようにした。
ドキュメント修正。(http://www.yamada-labs.com/software/spec/jre/ へのリンクを削除)
2019/08/25 Ver.0.8.3.0(正式版)
正規表現エンジンを更新。鬼雲(Ver.6.2.0 + master branch 2019/08/25取得分まで)
2020/03/22 Ver.0.8.3.0a(正式版)
2020/04/11 Ver.0.8.4.0(β1)
Jre2SetCodePage を呼び出さなかった場合、Shift_JIS で動作するようにしていた箇所を見直し。初期化の位置を変更、引数チェック部分も見直し。
Jre2GetMatchInfo_V318、Jre2GetMatchInfo_V500 に対応。ただし、あいまい検索用の引数、構造体は無視します。
ドキュメントの修正。(関数名 Jre2GetMatchInfo -> Jre2GetMatchInfo_HmJre)
XPを動作対象外へ。
2020/04/20 Ver.0.8.4.1(正式版)
検索の内部関数 Jre2GetMatchInfo_Main で、明示的に型変換を行うように修正。
2020/04/25
鬼車への対応を修正(Ver.6.8.2 -> Ver.6.9.5)
2020/05/03
2020/06/13 Ver.0.8.4.2(正式版)
あいまい検索の「設定」が開けなくなっていたのを修正。
2020/07/17 Ver.0.8.5.0(正式版)
Jre2GetMatchInfo_V500 を修正。秀丸エディタ本体で、「選択した範囲」が「文字単位」の場合、ヒットしない場合があるので対処。
2020/07/19
2021/02/20 Ver.0.8.6.0(正式版)
検索の内部関数 Jre2GetMatchInfo_Main で、UTF-16LEとShift_JISの位置情報変換に失敗する場合があったのを修正。検索対象文字列よりマッチ範囲を狭くした場合、位置情報変換に失敗する場合があった。
2021/04/28 Ver.0.8.6.0a(正式版)
ドキュメント修正。
変更履歴でおかしな箇所(2011/12/29変更分)があったので修正。
2021/07/20 Ver.0.8.7.0(正式版)
関数リファレンス
jre32.dll 互換API
Jre2Open
関数名
BOOL WINAPI Jre2Open(LPJRE2 lpjre);
機 能
JRE2構造体を初期化する
引 数
lpjre
JRE2構造体へのポインタ
戻り値
(BOOL)
TRUE 成功
FALSE 失敗
Jre2Compile
関数名
BOOL WINAPI Jre2Compile(LPJRE2 lpjre, LPSTR lpszRe);
機 能
検索パターンをコンパイルする
引 数
lpjre
JRE2構造体へのポインタ
lpszRe
検索パターン
戻り値
(BOOL)
TRUE コンパイル成功
FALSE コンパイル失敗
Jre2GetMatchInfo
関数名
BOOL WINAPI Jre2GetMatchInfo(LPJRE2 lpjre, LPSTR lpszRe);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
lpjre
JRE2構造体へのポインタ
lpszStr
検索対象文字列
戻り値
(BOOL)
TRUE マッチ
FALSE マッチしない
Jre2Close
関数名
BOOL WINAPI Jre2Close(LPJRE2 lpjre);
機 能
JRE2構造体の使用終了を宣言する
引 数
lpjre
JRE2構造体へのポインタ
戻り値
(BOOL)
TRUE 成功
FALSE 失敗
JreGetVersion
関数名
WORD WINAPI JreGetVersion(void)
機 能
DLLのバージョンを取得する
引 数
なし
戻り値
(WORD)
DLLのバージョンを0x100倍した値
GetJreMessage
関数名
int WINAPI GetJreMessage(int nMessageType, int nLanguage, LPSTR lpszBuff, int cbBuff);
機 能
エラー番号からエラーメッセージの文字列を取得する。
引 数
nMessageType
エラー番号
nLanguage
メッセージの言語(未使用)
lpszBuff
メッセージを格納するバッファ
cbBuff
メッセージを格納するバッファサイズ
戻り値
(int) メッセージのバイト数
0以上 コピーしたメッセージのバイト数
-1 エラー
hmjre.dll 互換API
Jre2SetCodePage
関数名
BOOL WINAPI Jre2SetCodePage(LPJRE2 pJre, UINT cp);
機 能
HmOnigInfo構造体の初期化、検索文字列および検索対象文字列のコードページを指定します。
引 数
lpjre
JRE2構造体へのポインタ
cp
コードページ
437 :OEM United States
28591 :ISO 8859-1 Latin 1; Western European (ISO)
28592 :ISO 8859-2 Central European; Central European (ISO)
28593 :ISO 8859-3 Latin 3
28594 :ISO 8859-4 Baltic
28595 :ISO 8859-5 Cyrillic
28596 :ISO 8859-6 Arabic
28597 :ISO 8859-7 Greek
28598 :ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
28599 :ISO 8859-9 Turkish
28603 :ISO 8859-13 Estonian
28605 :ISO 8859-15 Latin 9
65001 :Unicode (UTF-8)
1201 :Unicode UTF-16, big-endian byte order
1200 :Unicode UTF-16, little-endian byte order
12001 :Unicode UTF-32, big-endian byte order
12000 :Unicode UTF-32, little-endian byte order
51932 :EUC_JP
20000 :EUC_TW;
51949 :EUC Korean
51936 :EUC_CN;
932 :Shift_JIS
20866 :KOI8-R
1251 :ANSI Cyrillic
950 :BIG5
54936 :GB18030
戻り値
(BOOL)
TRUE 成功
FALSE 失敗
Jre2GetMatchInfo_HmJre
関数名
BOOL WINAPI Jre2GetMatchInfo_HmJre(LPJRE2 pJre, LPSTR pszTarget, int xEnd);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
pJre
JRE2構造体へのポインタ
pszTarget
検索対象文字列
xEnd
検索対象文字列の長さ
戻り値
(BOOL)
TRUE マッチ
FALSE マッチしない
Jre2GetMatchInfo_V318
関数名
BOOL WINAPI Jre2GetMatchInfo_V318(LPJRE2 pJre, LPSTR pszTarget, int xEnd, BOOL fWordFuzzyMatch, JREFUZZYDATA* pFuzzyData);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
pJre
JRE2構造体へのポインタ
pszTarget
検索対象文字列
xEnd
検索対象文字列の長さ
fWordFuzzyMatch
JREFUZZYDATA構造体が有効かどうかのフラグ
pFuzzyData
JREFUZZYDATA構造体へのポインタ
戻り値
(BOOL)
TRUE マッチ
FALSE マッチしない
その他
hmonig.dll では、fWordFuzzyMatch と pFuzzyData は無視します。
Jre2GetMatchInfo_V500
関数名
BOOL WINAPI Jre2GetMatchInfo_V500(LPJRE2 pJre, LPSTR pszTarget, int xEnd, BOOL fWordFuzzyMatch, JREFUZZYDATA* pFuzzyData, int xEndHitable);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
pJre
JRE2構造体へのポインタ
pszTarget
検索対象文字列
xEnd
検索対象文字列の長さ
fWordFuzzyMatch
JREFUZZYDATA構造体が有効かどうかのフラグ
pFuzzyData
JREFUZZYDATA構造体へのポインタ
xEndHitable
マッチさせる範囲の長さ。(xEndHitable <= xEnd) マッチさせる範囲の先頭は、pJre->nStart になる。
戻り値
(BOOL)
TRUE マッチ
FALSE マッチしない
その他
hmonig.dll では、fWordFuzzyMatch と pFuzzyData は無視します。
なぜか、xEnd より大きい値で、pJre->nStart、xEndHitable が指定されている場合あり。
xEnd < xEndHitable の場合、xEndHitable は xEnd と同じ値に補正。
xEnd < pJre->nStart の場合は、FALSE を返す。
JreGetTagPosition
関数名
int WINAPI JreGetTagPosition( LPJRE2 pJre, char chTagWantGet, int* pcchMatch );
機 能
タグ付き正規表現で検索した時に、\1、\2等に相当する部分の桁位置および長さを返す。
引 数
pJre
JRE2構造体へのポインタ
chTagWantGet
'1'~'9'の文字を指定。
pcchMatch
マッチしたタグ部分の位置を格納するポインタ
戻り値
(int)
0以上 マッチしたタグ部分の長さ
-1 マッチしていない
hmonig.dll 独自API
関数名
int WINAPI JreNameToTags(LPJRE2 lpjreJre, LPSTR CaptureName, int** NumList)
機 能
指定された名前に対する捕獲式集合のグループ番号リストを返す。
引 数
lpjreJre
Jre2構造体へのポインタ
CaptureName
捕獲式集合の名前
NumList
番号リスト
戻り値
(int) 指定された名前に対するグループ数
0以上 グループ数
-1 名前に対する捕獲式集合がない場合
例
正規表現:(?<x>hmonig)(?<y>\\.dll) (?<x>hmonig)(?<y>\\.dll)
n = JreNameToTags(lpjreJre, "x", NumList)
n -> 2 (名前に対する捕獲式集合の数)
NumList[0] -> 1 (グループ番号その1)
NumList[1] -> 3 (グループ番号その2)
n = JreNameToTags(lpjreJre, "z", NumList)
n -> -1 (名前に対する捕獲式集合の数)
関数名
int WINAPI JreNameToTagsW(LPJRE2 lpjreJre, LPWSTR CaptureName, int** NumList)
機 能
JreNameToTagsのワイド文字対応版
CaptureName がワイド文字であること以外は、JreNameToTags と同じ。
JreGetCaptureList
関数名
int WINAPI JreGetCaptureList(LPJRE2 lpjreJre, NameCaptureInfo** CaptureInfo)
機 能
全ての名前付き捕獲式集合の情報を取り出す。
引 数
lpjreJre
Jre2構造体へのポインタ
CaptureInfo
捕獲式集合用構造体のリスト
戻り値
(int) 名前付き捕獲式集合の数
異常終了の場合は、-1を返す。例
正規表現:(?<x>hmonig)(?<y>\\.dll) (?<x>hmonig)(?<y>\\.dll)
n = JreGetCaptureList(lpjreJre, "x", CaptureInfo)
n -> 2 (名前に対する捕獲式集合の数)
CaptureInfo[0] -> 名前付き捕獲式集合その1 の情報
CaptureInfo[1] -> 名前付き捕獲式集合その2 の情報
捕獲式集合用構造体
typedef struct tagNameCapture {
UINT CodeFlg; //UTF16LEの場合は1
char * Name; //開始アドレス
char * NameEnd; //終了アドレス
int CaptureCnt; //参照数
int * List; //タグ番号リスト
} NameCaptureInfo;
NameCaptureInfo.CaptureCnt は JreNameToTags の戻り値と同じ。
NameCaptureInfo.List は JreNameToTags の NumList と同じ。
NameCaptureInfo.CodeFlg は、Name が、UTF-16LEの場合に 1となる。
hmonig.dll は UTF-8 使用時以外は、内部処理を UTF-16LE で行っているため、通常は 1 となる。
JreGetTagCnt
関数名
int WINAPI JreGetTagCnt(LPJRE2 lpjreJre)
機 能
捕獲式集合の数を返す。
引 数
lpjreJre
Jre2構造体へのポインタ
戻り値
(int) 捕獲式集合の数
-1 異常終了
hmjre.dll互換マクロ用関数
注意事項
Unicodeには対応していません。ブラケット内での、\uxxxxは使用できません。
"!"による、パターンの否定は使用できません。
FindRegular
関数名
FindRegular
機 能
正規表現を使った検索
書 式
#num = dllfunc("FindRegular", $RegexpStr, $TargetStr, #StartPos)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値
(数字) マッチした位置($TargetStrの先頭からのバイト数)
-1 マッチしない
-2 正規表現のエラー等
その他
"パターンの否定"は使えません。
FindRegularNoCaseSense
関数名
FindRegularNoCaseSense
機 能
正規表現を使った検索(大文字小文字を無視する)
書 式
#num = dllfunc("FindRegularNoCaseSense", $RegexpStr, $TargetStr, #StartPos)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値
(数字) マッチした位置($TargetStrの先頭からのバイト数)
-1 マッチしない
-2 正規表現のエラー等
その他
"パターンの否定"は使えません。
ReplaceRegular
関数名
ReplaceRegular
機 能
正規表現を使った置換
書 式
$str = dllfuncstr("ReplaceRegular", $RegexpStr, $TargetStr, #StartPos, $ReplaceStr, #Mode)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStr
(文字) 置換文字列
#Mode
(数字)
0 最初にヒットした箇所のみ
1 全置換の場合
2 マッチしなかった場合、$TargetStr で指定された文字列を返す。
戻り値
(文字) 置換後の文字列
マッチしなかった場合で #Mode が 2 以外の場合、正規表現のエラーの場合は、""を返す。
その他
置換文字列には"\1"等の、タグ参照を指定できます。
\nの形式は、nは1~9 までです。
\k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。
ReplaceRegularNoCaseSense
関数名
ReplaceRegularNoCaseSense
機 能
正規表現を使った置換(大文字小文字を無視する)
書 式
$str = dllfuncstr("ReplaceRegularNoCaseSense", $RegexpStr, $TargetStr, #StartPos, $ReplaceStr, #Mode)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStr
(文字) 置換文字列
#Mode
(数字)
0 最初にヒットした箇所のみ
1 全置換の場合
2 マッチしなかった場合、$TargetStr で指定された文字列を返す。
戻り値
(文字) 置換後の文字列。
マッチしなかった場合で #Mode が 2 以外の場合、正規表現のエラーの場合は、""を返す。
その他
置換文字列には"\1"等の、タグ参照を指定できます。
\nの形式は、nは1~9 までです。
\k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。
GetLastMatchLength
関数名
GetLastMatchLength
機 能
直前の検索でマッチした文字列の長さを返す
書 式
#num = dllfunc("GetLastMatchLength")
引 数
なし
戻り値
(数字) マッチした文字列の長さ。
直前に実行した関数により、バイト数または、文字数を返します。
-1 マッチしていない
-2 その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。
GetLastMatchTagLength
関数名
GetLastMatchTagLength(#tagNum)
機 能
直前の検索で指定されたタグにマッチした文字列の長さを返す
引 数
#tagNum
(数字) タグの番号
戻り値
(数字) タグにマッチした文字列の長さ
直前に実行した関数により、バイト数または、文字数を返します。
-1 マッチしていない
-2 その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。
GetLastMatchTagPosition
関数名
GetLastMatchTagPosition(#tagNum)
機 能
直前の検索で指定されたタグにマッチした文字列の先頭位置を返す
書 式
#num = dllfunc("GetLastMatchTagPosition", #tagNum)
引 数
#tagNum
(数字) タグの番号
戻り値
(数字)タグにマッチした文字列の先頭位置
直前に実行した関数により、バイト数または、文字数を返します。
-1 マッチしていない
-2 その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。
JreGetVersion
関数名
JreGetVersion
機 能
バージョン番号を返す。
書 式
#num = dllfunc("JreGetVersion")
引 数
なし
戻り値
(数字) バージョン番号
hmonig.dll独自のマクロ用関数
GetErrorMessage
関数名
GetErrorMessage
機 能
エラーメッセージを返す。
書 式
$str = dllfuncstr("GetErrorMessage")
引 数
なし
戻り値
(文字) エラーメッセージ
GetDllVersionStr
関数名
GetDllVersionStr
機 能
バージョン番号と読み込んでいる鬼雲のバージョンを返す。
書 式
$str = dllfuncstr("GetDllVersionStr")
引数
なし
戻り値
(文字) バージョン情報文字列
GetLastMatchNameToTagCnt
関数名
GetLastMatchNameToTagCnt
機 能
指定された名前に対する捕獲式集合のグループ数を返す。
書 式
#num = dllfunc("GetLastMatchNameToTagCnt", $CaptureName)
引 数
$CaptureName
(文字) 捕獲式集合の名前
戻り値
(数字) グループ数
指定された名前がない場合や、検索を実行していない場合などは、-1を返す。
その他
通常関数(FindRegular/FindRegularNoCaseSense)使用時に、名前参照を使った場合のみ、有効です。 Unicode関数(FindRegularW/FindRegularNoCaseSenseW) 使用時に、この関数を使用しても、失敗するので注意してください。
使い方
GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW 関数で 名前参照のグループ数を取得
GetLastMatchNameToTags 関数で、捕獲グループ(タグの番号)を取得
GetLastMatchTagPosition/GetLastMatchTagLength で位置と長さを取得
$target_1 = "hmonig.dll hmonig.dll";
#n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
if(#n > -1){
#n1 = dllfunc("GetLastMatchNameToTagCnt", "x1");
message "x1:" + str(#n1);
#cnt = 0;
while(#cnt < #n1){
#t = dllfunc("GetLastMatchNameToTags" ,#cnt);
#p = dllfunc("GetLastMatchTagPosition", #t);
#l = dllfunc("GetLastMatchTagLength", #t);
message "No." + str(#cnt) + ":" + str(#t) + "\n" +
"見つかった場所:" + str(#p) + "\n" +
"見つかった長さ:" + str(#l) + "\n" +
"見つかった文字:" + midstr($target_1, #p, #l);
#cnt = #cnt + 1;
}
}
関数名
GetLastMatchNameToTags
機 能
GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW の実行結果を取り出す。
書 式
#num = dllfunc("GetLastMatchNameToTags", #group)
引 数
#group
(数字) 名前に対する捕獲式集合のグループ番号
戻り値
(数字) 名前に対するタグの番号
検索を実行していない場合や、GetLastMatchNameToTagCnt(W)を実行していない場合には、-1を返す。
GetLastMatchNameCnt
関数名
GetLastMatchNameCnt
機 能
FindRegular系関数実行時に、名前付き捕獲式集合を使用していた場合、名前の数を返す。
書 式
#num = dllfunc("GetLastMatchNameCnt")
引 数
なし
戻り値
(数字) 名前付き捕獲式集合の数を返す。
異常または、FindRegular系関数を実行していない場合は、-1を返す。
その他
GetLastMatchNameCnt/GetLastMatchNameCode/GetLastMatchName の使い方
$target_1 = "hmonig.dll hmonig.dll";
#n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
if(#n > -1){
#n1 = dllfunc("GetLastMatchNameCnt");
#n2 = dllfunc("GetLastMatchNameCode");
#cnt = 0;
$out = "";
while(#cnt < #n1){
if(#n2 == 0){
$name = dllfuncstr("GetLastMatchName" ,#cnt);
}else{
$name = dllfuncstrw("GetLastMatchNameW" ,#cnt);
}
$out = $out + "$name[" + str(#cnt) + "] = " + $name + "\n";
#cnt = #cnt + 1;
}
message $out;
}
GetLastMatchNameCode
関数名
GetLastMatchNameCode
機 能
GetLastMatchNameCnt 実行後、得られる名前の文字種類を返す。
書 式
#num = dllfunc("GetLastMatchNameCode")
引 数
なし
戻り値
(数字) 名前の文字種類が、UTF-16LEの場合は、1を、それ以外は、0を返す。
異常または、GetLastMatchNameCntを実行していない場合は、-1を返す。
0の場合は、dllfuncstr("GetLastMatchName", #index)
1の場合は、dllfuncstrw("GetLastMatchNameW", #index)
を使用し、名前を取得すること。
GetLastMatchName
関数名
GetLastMatchName
機 能
名前付き捕獲式集合で使用された名前を返す。
書 式
$str = dllfuncstr("GetLastMatchName", #index)
引 数
#index
(数字) インデックス
戻り値
(文字) インデックスに対応する名前
hmonig.dll独自のマクロ用関数(ワイド文字対応)
dllfuncw/dllfuncstrw を使用して呼び出して下さい。
FindRegularW
関数名
FindRegularW
機 能
正規表現を使った検索
書 式
#num = dllfuncw("FindRegularW", $RegexpStrW, $TargetStrW, #StartPos)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値
(数字) マッチした位置($TargetStrの先頭からの文字数)
-1 マッチしない
-2 正規表現のエラー等
その他
"パターンの否定"は使えません。
FindRegularNoCaseSenseW
関数名
FindRegularNoCaseSenseW
機 能
正規表現を使った検索(大文字小文字を無視する)
書 式
#num = dllfuncw("FindRegularNoCaseSenseW", $RegexpStrW, $TargetStrW, #StartPos)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値
(数字) マッチした位置($TargetStrの先頭からの文字数)
-1 マッチしない
-2 正規表現のエラー等
その他
"パターンの否定"は使えません。
ReplaceRegularW
関数名
ReplaceRegularW
機 能
正規表現を使った置換
書 式
$str = dllfuncstrw("ReplaceRegularW", $RegexpStrW, $TargetStrW, #StartPos, $ReplaceStrW, #Mode)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStrW
(文字) 置換文字列
#Mode
(数字)
0 最初にヒットした箇所のみ
1 全置換の場合
2 マッチしなかった場合、$TargetStr で指定された文字列を返す。
戻り値
(文字) 置換後の文字列
マッチしなかった場合で #Mode が 2 以外の場合、正規表現のエラーの場合は、""を返す。
その他
置換文字列には"\1"等の、タグ参照を指定できます。
\nの形式は、nは1~9 までです。
\k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。
ReplaceRegularNoCaseSenseW
関数名
ReplaceRegularNoCaseSenseW
機 能
正規表現を使った置換(大文字小文字を無視する)
書 式
$str = dllfuncstrw("ReplaceRegularNoCaseSenseW", $RegexpStrW, $TargetStrW, #StartPos, $ReplaceStrW, #Mode)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStrW
(文字) 置換文字列
#Mode
(数字)
0 最初にヒットした箇所のみ
1 全置換の場合
2 マッチしなかった場合、$TargetStr で指定された文字列を返す。
戻り値
(文字) 置換後の文字列。
マッチしなかった場合で #Mode が 2 以外の場合、正規表現のエラーの場合は、""を返す。
その他
置換文字列には"\1"等の、タグ参照を指定できます。
\nの形式は、nは1~9 までです。
\k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。
GetLastMatchNameToTagCntW
関数名
GetLastMatchNameToTagCntW
機 能
指定された名前に対する捕獲式集合のグループ数を返す。
書 式
#num = dllfuncw("GetLastMatchNameToTagCntW", $CaptureName)
引 数
$CaptureName
(文字) 捕獲式集合の名前
戻り値
(数字) グループ数
指定された名前がない場合や、検索を実行していない場合などは、-1を返す。
その他
Unicode対応の関数(FindRegularW/FindRegularNoCaseSenseW)使用時に、名前参照を使った場合のみ、有効です。通常関数(FindRegular/FindRegularNoCaseSense)使用時にこの関数を使用しても、失敗します。
使い方
GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW 関数で 名前参照のグループ数を取得
GetLastMatchNameToTags 関数で、捕獲グループ(タグの番号)を取得
GetLastMatchTagPosition/GetLastMatchTagLength で位置と長さを取得
$target_1 = "hmonig.dll hmonig.dll";
#n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
if(#n > -1){
#n1 = dllfunc("GetLastMatchNameToTagCnt", "x1");
message "x1:" + str(#n1);
#cnt = 0;
while(#cnt < #n1){
#t = dllfunc("GetLastMatchNameToTags" ,#cnt);
#p = dllfunc("GetLastMatchTagPosition", #t);
#l = dllfunc("GetLastMatchTagLength", #t);
message "No." + str(#cnt) + ":" + str(#t) + "\n" +
"見つかった場所:" + str(#p) + "\n" +
"見つかった長さ:" + str(#l) + "\n" +
"見つかった文字:" + midstr($target_1, #p, #l);
#cnt = #cnt + 1;
}
}
GetLastMatchNameW
関数名
GetLastMatchNameW(#num)
機 能
名前付き捕獲式集合で使用された名前を返す。
書 式
$str = dllfuncstrw("GetLastMatchNameW", #index)
引 数
#index
(数字) インデックス
戻り値
(文字) インデックスに対応する名前
GetDllVersionStrW
関数名
GetDllVersionStrW
機 能
バージョン番号と読み込んでいる鬼雲のバージョンを返す。
書 式
$str = dllfuncstrw("GetDllVersionStrW")
引数
なし
戻り値
(文字) バージョン情報文字列
GetNormalizeString
関数名
GetNormalizeString
機 能
Unicode(UTF-16LE)を、正規化して返す
書 式
$str = dllfuncstrw("GetNormalizeString", #NOFRM, $TargetStr)
引 数
#NOFRM
(数字) 正規化形式の指定
0x1:正規化形式 D (NFD) :正規分解
0x2:正規化形式 C (NFC) :正規分解のあと正規合成を適用したもの
0x5:正規化形式 KD (NFKD) :互換分解
0x6:正規化形式 KC (NFKC) :互換分解のあと正規合成を適用したもの
$TargetStr
(文字) 対象文字列
戻り値
(文字) 指定した正規化形式に変換した文字列
引数が不正の場合は、""を返します。
Windows XP用DLLの場合は、""を返します。
CheckSurrogatePair
関数名
CheckSurrogatePair
機 能
Unicode(UTF-16LE)文字列にサロゲートペアが含まれているか調べる
書 式
#num dllfuncw("CheckSurrogatePair", $TargetStr)
引 数
$TargetStr
(文字) 対象文字列
戻り値
(数字) 文字列中に含まれるサロゲートペアの数
0 サロゲートペアなし
1以上 サロゲートペアの数
IsNormalized
関数名
IsNormalized
機 能
Unicode(UTF-16LE)文字列の、正規化形式をチェックする
書 式
#num = dllfuncw("IsNormalized", #NOFRM, $TargetStr)
引 数
#NOFRM
(数字) チェックする正規化形式の指定
0x1:正規化形式 D (NFD) :正規分解
0x2:正規化形式 C (NFC) :正規分解のあと正規合成を適用したもの
0x5:正規化形式 KD (NFKD) :互換分解
0x6:正規化形式 KC (NFKC) :互換分解のあと正規合成を適用したもの
$TargetStr
(文字) 対象文字列
戻り値
(数値) 指定した正規化形式の場合は 1、そうでない場合は 0
引数が不正の場合は、0を返します。
Windows XP用DLLの場合は、0を返します。
SplitRegular
関数名
SplitRegular
機 能
指定された正規表現パターンで、文字列を分割する。
書 式
#num = dllfuncw("SplitRegular", $Regexp, $TargetStr, $SetVariable, $RegexpOption)
引 数
$Regexp
(文字) 分割する正規表現パターン
$TargetStr
(文字) 対象文字列
$SetVariable
(文字) 結果を格納する文字列配列名
結果を代入する秀丸マクロの文字列配列変数名
"$"はなくてもかまいません。省略した場合は先頭に"$"を追加しグローバル変数としてセットします。 "$"、"$$"がある場合はそのままセットします。
アルファベット(A~Z、a~z)と"_"アンダーバー以外は指定できません。 (先頭にある"$"、"$$"は問題ないです。)
split --> $split グローバル変数へ
$split --> $split (グローバル変数)
$$split --> $$split (ローカル変数)
split# --> NG(英数字以外)
変数 --> NG(英数字以外)
$RegexpOption
(文字) 正規表現に対するオプション
i:大文字小文字を無視する
m:"."を改行にマッチさせる
戻り値
(数値) 分割数
引数が不正の場合は、0を返します。
分割する正規表現パターンにマッチしない場合は、対象文字列をそのまま、要素数1の配列で返します。
分割文字列は、指定した変数名の配列にセットします。
その他
使い方
loaddll "hmonig.dll";
$target_1 = "秀丸\tエディタ";
#n = dllfuncw("SplitRegular", "\\t", $target_1, "split", "");
if(#n > 0){
$out = "";
while(#n > #cnt){
$out = $out + $split[#cnt] + "\n";
#cnt = #cnt + 1;
}
message $out;
}
文字列配列名に "split" を指定しているので、$split配列で分割結果を取得可能。
wcslen2
関数名
wcslen2
機 能
Unicode(UTF-16LE)文字列の長さを返す。(サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcslen2", $TargetStr)
引 数
$TargetStr
(文字) 対象文字列
戻り値
(数字) 文字列の長さ
wcsleftstr2
関数名
wcsleftstr2
機 能
Unicode(UTF-16LE)文字列の左側から指定された文字数の文字を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncw("wcsleftstr2", $TargetStr, #len)
引 数
$TargetStr
(文字) 対象文字列
#len
(数字) 文字数
戻り値
(文字) 指定された文字数の文字列
TargetStrの長さが、lenよりも小さい場合は、TargetStrをそのまま返す。
wcsrightstr2
関数名
wcsrightstr2
機 能
Unicode(UTF-16LE)文字列の右側から指定された文字数の文字を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncstrw("wcsrightstr2", $TargetStr, #len)
引 数
$TargetStr
(文字) 対象文字列
#len
(数字) 文字数
戻り値
(文字) 指定された文字数の文字列。
TargetStrの長さが、lenよりも小さい場合は、TargetStrをそのまま返す。
wcsmidstr2
関数名
wcsmidstr2
機 能
Unicode(UTF-16LE)文字列の左側から指定された位置から、指定された文字数の文字列を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncstrw("wcsmidstr2", $TargetStr, #pos, #len)
引 数
$TargetStr
(文字) 対象文字列
#pos
(数字) 位置("0(zero)"スタート)
#len
(数字) 文字数
戻り値
(文字) 指定された長さの文字列
#posが、対象文字列より大きい場合は、""を返します。
#lenが、対象文字列より大きい場合は、#pos以降の全ての文字列を返します。
wcsstrstr2
関数名
wcsstrstr2
機 能
Unicode(UTF-16LE)文字列から、指定された文字列を最初に見つけた位置を返す。 (サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcsstrstr2", $TargetStr, $SearchStr, #pos)
引 数
$TargetStr
(文字) 対象文字列
$SearchStr
(文字) 検索文字列
#pos
(数字) 検索開始位置("0(zero)"スタート)
戻り値
(数字) 検査文字列をみつけた位置(文字数)("0(zero)"スタート)
見つからない場合は、-1
引数が不正の場合は、-2
を返します。
wcsstrrstr2
関数名
wcsstrrstr2
機 能
Unicode(UTF-16LE)文字列から、指定された文字列を最後に見つけた位置を返す。 (サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcsstrrstr2", $TargetStr, $SearchStr, #pos)
引 数
$TargetStr
(文字) 対象文字列
$SearchStr
(文字) 検索文字列
#pos
(数字) 検索開始位置("0(zero)"スタート)
戻り値
(数字) 検査文字列をみつけた位置(文字数)("0(zero)"スタート)
見つからない場合は、-1
引数が不正の場合は、-2
を返します。
hmonig.dll LICENSE
hmonig.dll のライセンスは、修正 BSD ライセンスとします。バイナリ配布のみで、ソースの公開は行っていません。 (秀丸エディタ内部で使用している、独自コード(Unicode)の情報を含むため、ソースは公開できません。)
/*-
* Copyright (c) 2009-2020 h-tom <QYT00713@nifty.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/