REGEX ECMA Beta.04 Public 4


Beta.4 を公開します。Beta.3 に含まれていたバグ修正と改良および一部新機能が含まれます。Beta.3 との動作互換性について、正規表現に Case-Sensitivity 導入、Filesystem に PathHistory が正式実装され、一部仕様変更に伴い互換性が無くなっています。アイコンもデザインがまだ決まらないため一時的なものがサンプル内にキャッシュされています。


動作サンプルファイルが更に追加されました。イベントを 10 行以内で収まるようなるべく簡潔に作ってあります。

ダウンロード:配布終了

エクステンションの正式名は 「REGEX ECMA 2022」 が検討されています。年度は省略されるかも。これまで行った動作確認はほぼ全て ECMASCript 版 REGEX として、それ以外の文法オプションは試しておらず、ECMAScript REGEX に特化した拡張機能として名前に ECMA を入れて最初からアピールしておいた方がいいかなという判断です。

動作サンプルとしては現在正式に 20 個以上が収録され、正規表現をサポートする拡張機能としての動作サンプルが 15 個と一番多くなっています。Beta.4 では SmartDelimiter と Positive Lookahead の活用例が追加されました。C++ STD::REGEX ECMAScript がサポートする表現はこれでだいたいチェックできている見込み。

注意事項:カウンターオブジェクトを利用する場合

REGEX 2022 動作確認中に発見したバグを検証した結果 Clickteam 製の公式エクステンション「Counter Object」のデフォルト名に何か潜在的エラー要素が含まれている可能性があります。


Counter Object

明確な再現性があるのでバグと判断しましたが、自作のエクステンション動作以外で再現できるのか不明なため現在調査中。報告できるようになったら公式フォーラムにバグとしてレポートします。

対処法としてはカウンターオブジェクトを使っても大丈夫、だけど「デフォルト名」を絶対に利用しないでください。デフォルト名は「Counter」です。

バグは 2 つ以上のフレームを MMF アプリケーションに配置してフレーム間をイベントで移動すると、移動後のフレームでイベントを実行する際にクリティカルなエラーが発生するというもの。前後ふたつのフレームにデフォルト名のまま変更しない「Counter」を配置して、移動先のフレームでイベントから Counter の XY 位置情報を参照するとイベントが正常に実行されなくなります。

例えばカウンターを配置していない正常動作しているフレームに後からデフォルト名のカウンターオブジェクトを追加するだけでもバグが発生します。フレームを移動しないプログラムの場合バグは発生しません。

フレーム間を移動すると移動先のフレームで発生するバグなので気が付きにくいのですが、カウンターオブジェクトを利用する場合にはカウンターのデフォルト名を全て手動で変更してください。

それでは気を取り直して、Beta.4 新機能を紹介します。

アルファベットの大文字と小文字を区別する/しない

Regex 2022::Properties::icase Checkbox

Regex 2022::Properties::icase Checkbox (GIF Animation)

新機能として std::regex_constants::icase に対応、いわゆる Case-Sensitivity です。大文字小文字を区別する・しないをプロパティのチェックボックスから選択可能。一応対応しておこうということで Beta.4 で実装されました。

デフォルト設定ではオフになっていて、オフの場合「大文字小文字を区別する」/オンの場合「区別しない」です。アプリ実行中の設定変更も必要性があれば可能にしますが、現在必要性は感じていません。要望があったら機能実装を検討します。

REGEX::Mismatch Condtion の実装

正規表現が一致しなかった場合に即時実行される 「 Mismatch 」 コンディションを追加。

Regex 2022::Mismatch Condition (GIF Animation)

Regex 2022::Mismatch Condition (GIF Animation)

Beta.3 までは正規表現がエラーを含んでいる場合に即時実行される「エラー・コンディション」はありましたが、エラーではない「ミスマッチ」を判定するコンディションが無かった。Beta.4 では正規表現にエラーが無いけれど一致する表現も無かった場合にそれを条件として実行される「ミスマッチ」が追加されたことで一部イベントがより簡単に作れるよう改善されました。

Beta.3 以前に含まれる動作サンプルでは「ミスマッチ」の実装は Negate Condition で代用されていました。しかし Negate だと「一致している・していない」の合計二回必ず検索することになるためここに無駄が発生しています。まず最初にマッチしているか調べてミスマッチは検索しない仕様へ変更されたので、ここが改善点になります。

従来どおり Negate Condition も使えますが動作互換性のために残してあるだけで利用は推奨しません。

Filesystem::PathHistory の正式実装

Beta.1 から一応実装はされていましたが、循環ループを使った方法は Beta.4 からになります。循環ループ(Ring Buffer)は記録領域の最大に達したら古いデータから消して新しいデータを追加するデータ構造の一種です。

Regex 2022::PathHistory

Regex 2022::PathHistory (GIF Animation)

エクステンションは検索されたディレクトリのパスをエクステンション内部に記録し情報を蓄積しています。記録領域が予め決められているため情報で満杯になったら古いデータを消して空き領域を作りそこに新しい情報を追加します。例としては「最近使ったファイル」とか「ブラウザの閲覧履歴」とか、それらとほぼ同じです。

ただし History Back で古い記録にアクセスしている時にそこから分岐が発生した場合、分岐前の記録を全部消去する機能も含まれているため上記例とは実際の使用感は異なります。
現在の仕様を説明すると

“C:\” >> “C:\Users” >> “F:\” >> “D:\”

と順番にアクセスして、現在のディレクトリ位置が 「D:\ 」の場合、History Back して 「C:\Users」 まで戻りこの時次のパスを選択する際に前回と同じ「F:\」が選択されたら分岐は発生しません、しかし例えば「E:\」というディレクトリが新しく選択された場合分岐が発生するため「C:\Users」までを分岐起点として残しそれ以降のデータが消去されます。すると

“C:\” >> “C:\Users” >> “E:\”

こうなる。
分岐発生前は “F:\” >> “D:\” が記録されていたのは消され代わりに “E:\” が記録されました。循環バッファだとツリー構造は保存できないので分岐が発生した時点で分岐前データは全部消され新しい分岐が記録される、こんなイメージで作られています。

現在は動作テスト中のため記録は 10 件までとなっています。

filesystem::GetPath (expression)の仕様変更

Beta.3 までは GetPath という Expression が同時に履歴のカレント(現在選択されているパス)の設定も兼ねていたのですが、Expression が Action 動作も兼ねるという仕様は奇妙だったので、これを廃止し 「Set Current Index Number (Action)」 と 「Get Current Index Number (Expression)」 を新設しました。Get Path は従来通りパス名取得に使えますがカレントの選択は専用の命令を使って変更します。カレントの要素番号は PathHistory における現在位置を参照します。

日付と時刻の取得

ISO 8601 フォーマットに準じた日付と時刻の取得ができる Expression が新機能として実装されました。Beta.4 ではミリ秒取得が可能になっていますが正式にサポートするかは現在検討中です.

時計を作るつもりは無く、ログ取得の際に必要な日付データを挿入したいから実装した機能なので、「Millseconds (1000 分の 1 秒単位)」取得はあまり拘りません。

Misc.GetDataTimeISO8601_Format (GIF Animation)

Misc.GetDataTimeISO8601_Format (GIF Animation)

Windows OS 11 の「時刻と言語」設定「日付と時刻」から「タイムゾーン」の変更が可能ですが、アプリケーション起動中にこの設定を変えた場合、設定の変更を検出して自動的に適切な時差が計算される仕組みになっています。上記スクリーンショットがアニメーション GIF になっていますのでそちらでも動作を確認できますが、アプリ起動中に変更を検出するとロケール情報と時差が再計算されているのが確認できます。

ISO 8601 フォーマットなのでロケール情報の取得が標準で付属します。ただし ±Bias (数値)だと視覚的な情報として弱いので、ロケール設定に応じた言語で「地域情報」を表示するようになっています。JST(日本標準時) の場合本来は 「Z+09:00」 と書きますが Beta.4 では「Z 東京(標準時間)」とか表示されます。

この仕様は再検討され問題があるようなら将来的に変更されます。

オブジェクトの自動配置機能

オマケ機能として 「 MISC. 」に Objects Align (オブジェクトの整列)機能が実装されています。

スプライト(Active Object)を対象にした自動整列機能として作られています。フレームエディタ上で事前に作成され配置されたオブジェクトをアプリ実行中に一定の間隔で並べたり、模様状に配置したり、グリッドや円など配置パターンが各種プリセットされています。

配置するついでに「連番(通し番号)」も対象オブジェクトの数値型変数に自動で割り振るため、連番を自分で割り振る必要がありません。

Beta.4 では予め作成しておいたオブジェクトを自動で配置するだけですが、Beta.5 以降では配置したオブジェクトを指定位置まで自動移動させたり移動方向を自動で設定する機能などを追加する予定。ただし公式機能では無いため REGEX ECMA の正式版からはおそらく削除される機能です。ベータ版限定のお試し機能として使ってください。

Beta.5 について

正規表現を扱うエクステンションとしては予定通り Beta.4 でほぼ完成したため、今後はなるべく動作互換性を維持したいと考えています。Beta.4 を評価しながら正式版として公開できるか検討され、公式の新機能追加はしばらく予定無くセキュリティやバグフィックスが中心のマイナーアップデート版が暫時アップロードされます。Beta.5 は途中に細かいリビジョンを振られた Beta.5.x が出ます。

正規表現と連携できるため公式機能として実装された filesystem ですが、Beta.4 で Path History が実装されて作者的には「もういいか」感が出てきたため、必要になるまで追加機能は無く Beta.5 で新機能追加は無い予定。

HWND は公式オマケ機能で、これは拡張機能制作の際、必要に応じて暫時追加されてきましたが今後は追加機能の予定はありません。

MISC. は更にオマケ機能ですが、REGEX との連携で何かできないか考えながら作っている実験的・非公式機能です。公式ではなく非公式機能なのは現時点で正規表現と全く関係無く、連携させることもできるか分からないから。

MISC. の「Objects Align」はパターンを増やせれば実際の制作で役に立つ気がするので、まず Beta.5 上で整列のパターンを増やしながら最終的に REGEX と全く連携できない場合には別エクステンションとして分離独立させます。Regex のメンテを継続する都合上、まだ正規表現と全く関係ない機能ですがしばらくこの機能は REGEX ECMA 2022 と同居します。(正規表現と連携させることができれば正式機能に格上げ


Senda へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

4 thoughts on “REGEX ECMA Beta.04 Public

  • Senda

    Beta4の制作・更新お疲れ様です!
    正規表現に関する知識はほとんどないのですが、単純な正規表現でも非常に強力に動作しますので、非常に役立ちそうです。
    コメント行の削除や余分なデータの削除、置換なども無駄なく実装できますので非常に便利です、素晴らしいエクステンションを作って下さってありがとうございます!

    Objects Align機能に関しては非常に可能性を感じました。ライフゲージ的なものを作るのにも便利ですし、円型配置は角度を変更させられるなら、丸型のアイテムインベントリを作ったりするのにも利用できるかもしれませんね!

    • J0hn Post author

      コメントありがとうございます>>Senda
      正規表現は便利なので必要に応じて覚えると重宝しますがゲーム用というより実用アプリ向けとして作っています。

      現代の正規表現は多くの拡張表現によって複雑化している部分もあり、必要な範囲内で簡単にまず使って慣れていくのが正道です。正規表現の達人になる必要は無いので、時短に使える便利機能として各自PCアプリケーションをデザインし作り公開できるよう、あるいはそれをサポートするのが本エクステの目的です。

      Objects Alignについて、「円型配置は角度を変更させられる」というのは「指定された任意の角度でオブジェクトを配置する」という意味でしょうか?Beta.05A が近日公開されるので、間に合ったらそれで実装してみます。

  • Senda

    返信ありがとうございます!
    正規表現は様々な環境で実装されているので、ここで覚えておけば色々な実行環境やエディターで利用できるので、CF25で楽しく触りつつ勉強していこうと思います!

    角度についてですが、イメージ的にはこんな感じですね…
    ttps://katakuriko.site/cool-ui-part1/
    円の半径が広がっていくのは余分として、オブジェクトの配置位置角度を変えられると見栄え的にも良さそうです。
    もちろん、難しそうであったり面倒であれば構いませんので、ご検討下さい!

    • J0hn Post author

      サンプルを見てみましたがほぼ同じ動作を 1 action で実装できそうです。
      計算とか全部エクステに任せて動かせたら楽だし面白そうなので、実験的にこれまるごとパクってみようかと思っています。
      Objects Control の領域なので今作っている単純な整列とは違うのでジャンルは分けますが、昔作った Circle Rotation Menu のロジックを C++ で再現したかったのでちょうどいいタイミングでした。
      Beta.5A には間に合わないので 5B までの宿題とさせてください。5A は速ければ来週に出ます。

      Beta.05A 更新履歴|仕様変更など >> http://prester.org/cf2.5/?p=14426