|
おはようございます。fzok4234 です。
さて、searchdown 文などの検索 / 置換 / GREP 用の関数で検索文字列を正規表現で
指定する際に、
自動生成させる正規表現パターンの内容がどうしても「動作環境」で設定した正規表
現 DLL に
依存したものになってしまいます。このため、正規表現を使用したマクロの環境依存
性を排除できないため、
近い将来、作成したマクロを「マクロライブラリ」ページなどに公開する際の妨げに
なることが
想定されます。
具体的には、現状では
1. マクロ内で現在のコンテキストで適用されている正規表現 DLL の名前やフル
パスを取得できない。
2. マクロを実行中にそのコンテキストに適用する正規表現 DLL を、「動作環
境」で設定したものとは
別のものに適宜切り替えることができない。
となっていて、マクロ内で正規表現 DLL の情報取得 / 切り替えを動的に行えないた
め、「動作環境」の
設定に依存しないマクロの作成が困難となっています。
上記 1. に関しては、レジストリの
HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Env
キーの
JreDll64
REG_SZ 値を getregstr 関数などで参照することで強引に取得することは一応可能で
す。しかし、このレジストリの
直接参照には
・将来の秀丸エディタのアップデートによってレジストリの書式が変更される可能
性がある。
・ストアアプリ版や持ち出しキット使用時には環境設定の保存方式が異なるためこ
の方法が使えない。
・そもそもレジストリをエンドユーザーが直接操作すること自体、システムやユー
ザーアカウントの情報を
破壊する恐れがあるため危険を伴う。このため、職場のマシンなどでは無断でレ
ジストリ操作することは
当然倫理面から問題となる。職場の管理者からレジストリ操作が明示的に禁止さ
れていることもあり得る。
といった問題があるため、最適な方法とは言えません。
また、上記 2. については正規表現 DLL として HmJreSelect.dll を指定することで
好みの正規表現 DLL に
リダイレクトすることが可能なため、ある程度は問題の緩和策となります。しかし、
この方法にも
・初めから「動作環境」で正規表現 DLL を HmJreSelect.dll に設定しておくこと
が大前提である。マクロから
現在の実行コンテキストの正規表現 DLL が何であるかを取得できない以上、HmJ
reSelect.dll を使用しているか
どうかを判別すること自体が不可能となっている。
・予め秀丸エディタと同じディレクトリに HmJreSelect.dll 本体と .HmJreSelec
t 設定ファイルをインストールして
おかなければならない。当然、秀丸エディタのインストールディレクトリを操作
するため管理者権限が必要に
なってしまう。このため、職場のマシンなどではマクロユーザーが対処できない
可能性が高い。
という問題があります。
このような実情から、要望としてマクロ上で正規表現 DLL の情報取得 / 切り替えを
行うための新しいマクロ関数の
用意をご検討いただければ幸いです。どうかよろしくお願いします。
以下、思いついた関数の実装の具体例を列挙しておきます。
regulardllpath キーワード :
説明 : 現在のマクロ実行コンテキストに適用されている正規表現 DLL を取得する。
書式 : $dllPath = regulardllpath ;
戻り値 : 正規表現 DLL のフルパス。setregulardll 文など
で適用したものが取得できる。
defaultregulardllpath キーワード :
説明 : 「動作環境」で指定 / 列挙されている正規表現 DLL を取得する。
書式 : $dllPath = defaultregulardllpath[ #index ] ;
戻り値 : 正規表現 DLL のファイル名またはフルパス。setre
gulardll 文などの実行に
かかわらず常に「動作環境」で指定 / 列挙されて
いるものを返す。角括弧囲みの
#index を省略したときは「動作環境」で指定され
ているデフォルトの正規表現 DLL の
フルパスを返す。#index で「動作環境」で列挙さ
れたものの番号を指定すると
そのファイル名のみを返す。
#index : 「動作環境」の「正規表現の DLL 」ダイアログで
利用可能な候補として列挙されている
インストール済みの正規表現 DLL を、0 ベースの
インデックス番号で指定する。
列挙されている個数以上の数値を指定すると、戻り
値は長さ 0 の空文字列となる。
regulardllstatus キーワード :
説明 : 現在のマクロ実行コンテキストでの正規表現 DLL の状態を取得する。
書式 : #status = regulardllstatus ;
戻り値 : 以下の値のビット論理和となる。
#mode 関係 : setregulardll 文や setdefaultr
egulardll 文での #mode の状態。
0x00000000 : #mode == 0 のとき。または se
tregulardll 文などは未実行。
0x00000001 : #mode == 1 のとき。
0x00000002 : #mode == 2 のとき。
実行状態 : setregulardll 文や setdefaultr
egulardll 文を実行しているかどうか。
0x00000000 : setregulardll 文も setdefaul
tregulardll 文も未実行。または
clearregulardll 文でのクリア
後。
0x00000010 : setregulardll 文で任意の正規
表現 DLL を使用している。
0x00000020 : setdefaultregulardll 文でデ
フォルトの正規表現 DLL を明示的に
使用している。
isregulardll 関数 :
説明 : 指定したファイルが正規表現 DLL として使用可能かどうかを判別する。
書式 : #isRegularDll = isregulardll( $dllPath , #checkCodeSign ) ;
戻り値 : 正規表現 DLL として使用可能かどうかの真偽値。
$dllPath : 調べるファイルのパス。ファイル名のみの場合は秀
丸エディタのインストールディレクトリ内の
ものとなる。フルパスの場合は任意のディレクトリ
内のものとなる。
#checkCodeSign : DLL ファイルのデジタル署名も確認して本物の正規
表現 DLL かどうかの判別も行うか
どうかの真偽値。
setregulardll 文 :
説明 : 任意の正規表現 DLL を現在のマクロ実行コンテキストに適用する。実行
すると、setregularcache 文で溜められた
正規表現キャッシュはクリアされる。
書式 : setregulardll $dllPath , #mode ;
$dllPath : 新しく適用する正規表現 DLL のパス。ファイル名
のみの場合は秀丸エディタの
インストールディレクトリ内のものを使用し、フル
パスの場合は任意のディレクトリ内の
ものが使用できる。
#mode : マクロ終了後の振る舞い。
0 : マクロ終了と同時に「動作環境」で指定し
たデフォルトの正規表現 DLL に戻る。
終了時に setregularcache 文によるキャ
ッシュはクリアされ、また、再実行した
マクロでは regulardllstatus キーワード
は 0 に戻る。
1 : マクロ終了後も正規表現 DLL の指定は保
持される。同じプロセスで再度実行した
マクロで再利用可能で、setregularcache
文によるキャッシュも保持されたままと
なる。ただし、マクロ終了後の通常の GUI
操作による検索などのダイアログや
強調表示などには一切影響が無い。
2 : マクロ終了後も正規表現 DLL の指定は保
持される。同じプロセスで再度実行した
マクロで再利用可能で、setregularcache
文によるキャッシュも保持されたままと
なる。マクロ終了後の同じ秀丸エディタの
ウィンドウ / タブでの検索などの
ダイアログや強調表示などの通常の GUI
操作にも正規表現 DLL の指定は反映される。
setdefaultregulardll 文 :
説明 : 「動作環境」で指定されたデフォルトの正規表現 DLL を現在のマクロ実
行コンテキストに明示的に適用する。
実行すると、setregularcache 文で溜められた正規表現キャッシュはクリ
アされる。
書式 : setdefaultregulardll #mode ;
#mode : setregulardll 文の #mode と全く同じ。
clearregulardll 文 :
説明 : setregulardll 文や setdefaultregulardll 文で切り替えた正規表現 DLL
の指定を全てクリアして、「動作環境」で
指定されたデフォルトの正規表現 DLL に戻す。#mode = 1 or 2 で設定さ
れたマクロ終了後の指定保持も全て
クリアされる。setregularcache 文で溜められた正規表現キャッシュもク
リアされる。
書式 : clearregulardll ;
|
|