目次
はじめに
hmonig.dllは、鬼雲を使用した、hmjre.dll 互換の正規表現検索DLLです。 渡された文字列 (Shift_JIS) を、DLL の内部で Unicode(UTF-16LE) に変換し、処理を行っています。 その為、hmjre.dllと比較し、メモリ消費量は多くなり、遅くなると思います。
圧縮ファイルの内容
COPYING_Onigmo_Oniguruma :鬼車・鬼雲ライセンス条文
hmonig.dll :32bit DLL(Windows Vista以降用)
hmonig.html :説明ファイル
x64 :フォルダ
└hmonig.dll :64bit DLL(Windows Vista以降用)
XP-32 :フォルダ
└hmonig.dll :Windowx XP 32bit用 DLL
XP-64 :フォルダ
└hmonig.dll :Windowx XP 64bit用 DLL
- Ver.0.7.4.0 から、Vista以降用と、XP用でDLLが分かれています。 Windows XPで使用する場合は、XP-32/XP-64フォルダ内のDLLを使用してください。 一部マクロ関数が動作しない制限がありますが、通常の検索での違いはありません。
- 32ビット版はWindows Vista/10で動作確認しています。
64ビット版はWindows10 で動作確認しています。XP 64bit用DLL もありますが、動作確認してません。
インストール・アンインストール
秀丸エディタで使用するには、メニューの「その他」→「動作環境」→「環境」→「正規表現」で、設定を行います。
秀丸メールで使用する場合には、メニューの「設定」→「秀丸エディタの動作環境」→「環境」→「正規表現」になります。
インストール
秀丸エディタ(秀丸メール)本体と同じ場所に、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
jre32.dll については、以下の URL を参照して下さい。
http://www.yamada-labs.com/software/spec/jre/
hmjre.dll 互換 API
hmjre.dll と互換性のある、以下の API をサポートしています。
- Jre2SetCodePage
- Jre2GetMatchInfo_HmJre
- JreGetTagPosition
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/x24816.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-2016 K.Kosako)
鬼車は BSD ライセンスとなっています。添付ファイルの COPYING_Onigmo_Oniguruma を参照してください。
鬼車に関しては、以下のURLを参照してください。
https://github.com/kkos/oniguruma
鬼雲は、K.Takata 氏の作成です。((C) 2009-2016 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
- (x64のみ) 鬼車Ver.5.9.2を更新。
x64で、「fail to memory allocation」が出る場合があるので対処 (OnigStackIndex long → LONG_PTR へ変更)
- 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
- “\f”使用時に正常に動作しないので対処。
Jre2SetCodePage が呼ばれない場合があり、その場合はShift_JISとして、動作するように修正。
- 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
-
- 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)
関数リファレンス
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(LPJRE2 pJre, LPSTR pszTarget, int xEnd);
- 機 能
- 検索を行い、その結果をJRE2構造体へ格納する
- 引 数
- pJre
- JRE2構造体へのポインタ
- pszTarget
- 検索対象文字列
- xEnd
- 検索対象文字列の長さ
- 戻り値
(BOOL)
TRUE マッチ
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
- (数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
- 戻り値
- (文字) 置換後の文字列
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
- その他
- 置換文字列には“\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
- (数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
- 戻り値
- (文字) 置換後の文字列。
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
- その他
- 置換文字列には“\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
- (数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
- 戻り値
- (文字) 置換後の文字列
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
- その他
- 置換文字列には“\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
- (数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
- 戻り値
- (文字) 置換後の文字列。
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
- その他
- 置換文字列には“\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
- (数字) インデックス
- 戻り値
- (文字) インデックスに対応する名前
wcslen2
- 関数名
- wcslen2
- 機 能
- Unicode(UTF-16LE)文字列の長さを返す。(サロゲートペアも1文字とカウント)
- 書 式
- #num = dllfuncw(“wcslen2”, $TargetStr)
- 引 数
- $TargetStr
- (文字) 対象文字列
- 戻り値
- (数字) 文字列の長さ
CheckSurrogatePair
- 関数名
- CheckSurrogatePair
- 機 能
- Unicode(UTF-16LE)文字列にサロゲートペアが含まれているか調べる
- 書 式
- #num dllfuncw(“CheckSurrogatePair”, $TargetStr)
- 引 数
- $TargetStr
- (文字) 対象文字列
- 戻り値
(数字) 文字列中に含まれるサロゲートペアの数
0 サロゲートペアなし
1以上 サロゲートペアの数
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
を返します。
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の場合は、""を返します。
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
(文字) 結果を格納する文字列配列名
結果を代入する秀丸マクロの文字列配列変数名
- $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配列で分割結果を取得可能。
hmonig.dll LICENSE
hmonig.dll のライセンスは、修正 BSD ライセンスとします。 バイナリ配布のみで、ソースの公開は行っていません。 (秀丸エディタ内部で使用している、独自コード(Unicode)の情報を含むため、ソースは公開できません。)
/*-
* Copyright (c) 2009-2019 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.
*/