「利用者:黄身」の版間の差分
編集の要約なし |
編集の要約なし |
||
| 2行目: | 2行目: | ||
==ダウンロード== | ==ダウンロード== | ||
[https://bitbucket.org/kimigatame/mery_kl BitBucket] | [https://bitbucket.org/kimigatame/mery_kl BitBucket] | ||
==概要== | ==概要== | ||
{| class="wikitable" | {| class="wikitable" | ||
!マクロ | !マクロ | ||
!中身とか注意事項とか | !中身とか注意事項とか | ||
|- | |- | ||
|KL.js | |KL.js | ||
| | |Mery組み込みオブジェクトの拡張。 | ||
|- | |||
|global.js | |||
|グローバルなメソッドや変数。 | |||
|- | |- | ||
|polyfill.js | |polyfill.js | ||
| 20行目: | 24行目: | ||
|- | |- | ||
|WidePop.js | |WidePop.js | ||
| | |リッチなポップアップ。 | ||
|- | |- | ||
|ComText.js | |ComText.js | ||
| | |マッチ結果とテンプレートから文字列を作成する。 | ||
|- | |- | ||
|InsertOption.js | |InsertOption.js | ||
| | |ComText.jsによって作成した文字列を挿入する。 | ||
|- | |- | ||
|InsetSearch.js | |InsetSearch.js | ||
| | |ComText.jsによって作成した文字列で検索する。 | ||
|- | |- | ||
|MouseEmurator.js | |MouseEmurator.js | ||
| | |マウスの操作。 | ||
|- | |- | ||
|Commentize.js | |Commentize.js | ||
| | |コメント化もしくはコメント解除する。 | ||
|- | |- | ||
|MoveSelection.js | |MoveSelection.js | ||
| | |選択文字列を移動する。 | ||
|- | |- | ||
|Exes | |Exes | ||
| | |マクロの実行用ファイル。 | ||
|} | |} | ||
==KL.js== | ==KL.js== | ||
KLを名前空間として独自のオブジェクトとMery組み込みオブジェクトの拡張を含む。 | KLを名前空間として独自のオブジェクトとMery組み込みオブジェクトの拡張を含む。 | ||
===オブジェクト=== | ===オブジェクト=== | ||
;KL. | |||
;KL.Range | |||
:範囲を表す。座標系は<code>KL.Point</code>で指定する。 | :範囲を表す。座標系は<code>KL.Point</code>で指定する。 | ||
;KL. | ;KL.Coord | ||
:座標系posをserialに変更。logicalとviewは<code>mePosView</code>と<code>mePosLogical</code>に数値を合わせた。 | :座標系posをserialに変更。logicalとviewは<code>mePosView</code>と<code>mePosLogical</code>に数値を合わせた。 | ||
;KL. | ;KL.Dir | ||
:選択方向。 | :選択方向。 | ||
;KL.Point(<= KILI.Point) | ;KL.Point(<= KILI.Point) | ||
| 58行目: | 64行目: | ||
===メソッド=== | ===メソッド=== | ||
;KL.GetScroll/KL.SetScroll | ;KL.GetScroll/KL.SetScroll | ||
:スクロール位置の取得/設定。 | :スクロール位置の取得/設定。 | ||
===組み込みオブジェクトの拡張=== | ===組み込みオブジェクトの拡張=== | ||
Selection/Document/Editorのラッパ。Mery組み込みのメソッドやプロパティと追加したものを同じ方法で呼び出せる。また一部は組み込みのものを拡張している。 | |||
e.g. | e.g. | ||
<source lang="javascript" style="word-wrap:break-word;"> | <source lang="javascript" style="word-wrap:break-word;"> | ||
let $s=KL.Selection(); | let $s=KL.Selection(); | ||
$s.Reverse(); | |||
$s.Text=$s.GetLeft(); | $s.Text=$s.GetLeft(); | ||
</source> | </source> | ||
組み込みのSelectionを直接呼び出すには<code>KL.Selection#Original</code>か、global.jsの<code>GSO()</code>を使う。 | |||
====KL.Editor==== | ====KL.Editor==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|Original | |Original | ||
| 82行目: | 87行目: | ||
|- | |- | ||
|Documents | |Documents | ||
|KL. | |KL.Documents。組み込みのDocumentsではない。 | ||
|- | |- | ||
|ActiveDocument | |ActiveDocument | ||
| 96行目: | 101行目: | ||
====KL.Documents==== | ====KL.Documents==== | ||
他に合わせて用意しているだけで追加したメソッドは存在しない。 | 他に合わせて用意しているだけで追加したメソッドは存在しない。 | ||
====KL.Document==== | ====KL.Document==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|Original | |Original | ||
| 107行目: | 114行目: | ||
|- | |- | ||
|Selection | |Selection | ||
|KL. | |KL.Selectionを取得。組み込みのSelectionではない。 | ||
|- | |- | ||
|LineEndingChar | |LineEndingChar | ||
| 148行目: | 155行目: | ||
====KL.Selection==== | ====KL.Selection==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|Original | |Original | ||
| 245行目: | 253行目: | ||
==global.js== | ==global.js== | ||
グローバルに確保したメソッドや変数。KL名前空間下には含まれない。 | |||
{| class="wikitable" | {| class="wikitable" | ||
| 272行目: | 281行目: | ||
==polyfill.js== | ==polyfill.js== | ||
ECMAScriptにありChakraでは使用できないものの補完。 | ECMAScriptにありChakraでは使用できないものの補完。 | ||
| 303行目: | 313行目: | ||
===ArrExt.js=== | ===ArrExt.js=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|unique | |unique | ||
| 313行目: | 324行目: | ||
===StrExt.js=== | ===StrExt.js=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|bracket | |bracket | ||
| 318行目: | 330行目: | ||
|- | |- | ||
|quote | |quote | ||
|「'」で囲む。 | |「'...'」で囲む。 | ||
|- | |- | ||
|parens | |parens | ||
|「()」で囲む。 | |「(...)」で囲む。 | ||
|- | |- | ||
|braces | |braces | ||
|「[]」で囲む。 | |「[...]」で囲む。 | ||
|- | |- | ||
|curls | |curls | ||
|「{}」で囲む。 | |「{...}」で囲む。 | ||
|- | |- | ||
|crlf | |crlf | ||
| 350行目: | 362行目: | ||
===MathExt.js=== | ===MathExt.js=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|within | |within | ||
| 359行目: | 372行目: | ||
|} | |} | ||
== | ==WidePop.js== | ||
リッチなPopupMenu。機能は以下の通り。 | |||
* 配列のみでのメニュー定義 | |||
* チェックボックス | |||
* ラジオボタン | |||
* チェック、有効・無効の切り換え | |||
* サブメニュー | |||
* 選択時にコマンド実行 | |||
* MouseEmurator.jsを利用してメニューの位置を一定にする | |||
*配列のみでのメニュー定義 | |||
*チェックボックス | |||
*ラジオボタン | |||
*チェック、有効・無効の切り換え | |||
*サブメニュー | |||
*選択時にコマンド実行 | |||
*MouseEmurator.jsを利用してメニューの位置を一定にする | |||
e.g. | e.g. | ||
| 467行目: | 406行目: | ||
</source> | </source> | ||
== | ==ComText.js== | ||
キャレット行をマッチした情報から条件を満たすテンプレートを取得し、文字列を作成する。 | |||
===テンプレート=== | |||
<source lang="javascript" style="word-wrap:break-word;"> | <source lang="javascript" style="word-wrap:break-word;"> | ||
{ | { | ||
| 516行目: | 436行目: | ||
} | } | ||
</source> | </source> | ||
;entries | |||
:entry(検索条件とテンプレートのセット)の配列。 | |||
;name | |||
:entryの名前。 | |||
;template | |||
:テンプレート。「{...}」で囲まれた部分にマッチ結果から文字列を埋め込む事ができる。 | |||
;indent | |||
:文字列の挿入時にインデントするかどうか。 | |||
;modes | |||
:entryを使用する編集モード | |||
;conditions | |||
:検索条件の配列。 | |||
;type | |||
:検索方法(<code>ComText.SearchTypes</code>のいずれか)。 | |||
;text | |||
:検索文字列。 | |||
;range | |||
:文字列の挿入位置。 | |||
;sub | |||
:代替entry。 | |||
====文字列の埋め込み==== | |||
テンプレートの「{<開始位置>,<終了位置>}」は元のテキストの範囲を表し、マッチ結果を利用してその範囲の文字列を埋め込む。 | |||
<開始位置>と<終了位置>は共に「<インデックス>:<位置><差分>」「<インデックス>:<位置>」「<位置><差分>」「<位置>」の形式を取る。 | |||
<インデックス>はマッチした''entry''の''conditions''のインデックスを表す。省略した場合は0。 | |||
<位置>はマッチした文字列中での位置を表す。<code>ComText.RangeTypes</code>のいずれかを指定する。 | |||
<差分>は<インデックス>と<位置>で特定された位置からの差分を「+<数値>」「-<数値>」の形式で表す。省略した場合は0。 | |||
「{<インデックス>}」の形式も使用できる。この場合はマッチ位置の全体を表す。 | |||
e.g. | |||
<source lang="javascript" style="word-wrap:break-word;"> | |||
{0:8-1,0:8} | |||
</source> | |||
この場合、開始位置は0番目の''condition''(0)のマッチ終了位置(8)から1文字戻った(-1)位置を表す。 | |||
終了位置は0番目の''condition''(0)のマッチ終了位置(8)を表す。 | |||
''range''の範囲指定も同じ記法を用いる(「{...}」で囲む必要はない)。 | |||
===使用例=== | |||
ここでは上記のJSONを使うものとする。 | |||
<source lang="javascript" style="word-wrap:break-word;"> | |||
let os=new ComText(path,option).match(); | |||
</source> | |||
# ComTextのコンストラクタはpathに指定したJSONファイルのentriesをリスト化し、現在の編集モードが''modes''にあればそのエントリーを検索に使用する。 | |||
# <code>ComText#match</code>で検索を実行する。検索範囲は現在の行に限る。引数に<code>true</code>を指定すると1つのエントリーがマッチした時点で強制終了する。 | |||
# ''conditions''の全ての条件にマッチした時のみ、そのエントリーがマッチしたとみなす。''type''が14なので「選択位置より前の文字列を正規表現検索」する。''text''は検索パターンになる。 | |||
# マッチが成功すれば、マッチ結果などがコンストラクタの引数<code>option</code>のインスタンスとして<code>ComText#options</code>に追加される。<code>option</code>には<code>ComText.Option</code>かそれを継承したオブジェクトを指定する。 | |||
# <code>option</code>のインスタンスは必要になった時にマッチ結果と''template''から文字列を作成する。「{0:8-1,0:8}」の部分には元のテキストの「0番目のconditionsのマッチ終了位置より1文字遡った位置から、conditionsの0番目のマッチ終了位置」までの文字列が埋め込まれる。 | |||
# どのエントリーもマッチしなかった場合は代わりに''sub''から<code>option</code>のインスタンスを作成する。''sub''が存在しなければ<code>ComText#options</code>は空になる。 | |||
デフォルトの<code>ComText.Option</code>は文字列の作成までしか行わないので、文字列の利用には別の関数に渡す([[InsetSearch.js]])か、<code>ComText.Option</code>を継承・拡張する([[InsertOption.js]])必要がある。 | |||
==InsertOption.js== | |||
<code>ComText.Option</code>の拡張。作成した文字列を挿入するメソッドを持つ。 | |||
e.g | |||
<source lang="javascript" style="word-wrap:break-word;"> | <source lang="javascript" style="word-wrap:break-word;"> | ||
let os=new ComText(path,InsertOption).match().options; | |||
if( | if(os.length){ | ||
os[0].insert(); | |||
} | } | ||
</source> | </source> | ||
# | # <code>ComText.Option</code>はマッチしたエントリーの情報も保持しているので、挿入位置は''range''を使用する。上記のJSONでは「0」だけを指定しているので、「0番目のconditionsのマッチ位置全体」に挿入(上書き)する。 | ||
# 文字列が複数行の場合に''indent''を指定していると、2行目以降に1行目に合わせてインデントを追加する。 | |||
# テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。 | |||
# | ==InsetSearch.js== | ||
# | |||
ComText.jsを利用して選択文字列から作成した文字列で検索する。<code>ComText</code>の引数<code>option</code>はデフォルトのままで、<code>ComText</code>を継承する事で処理を追加している。 | |||
e.g | |||
<source lang="javascript" style="word-wrap:break-word;"> | |||
let os=new InsetSearch(path,option).execute(); | |||
</source> | |||
==MouseEmulator.js== | ==MouseEmulator.js== | ||
Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/<nowiki />)を利用してマウスの操作や座標の取得をする。 | Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/<nowiki />)を利用してマウスの操作や座標の取得をする。 | ||
= | =kili= | ||
旧版。非推奨。 | |||
=== | ==ダウンロード== | ||
[https://bitbucket.org/kimigatame/merymacro BitBucket] | |||
=Events= | |||
イベントマクロを使いやすく(?)したもの。 | イベントマクロを使いやすく(?)したもの。 | ||
大体のメリットとしては、 | 大体のメリットとしては、 | ||
*ポップアップ地獄を回避。 | |||
*イベント編集に必要なファイルは1つだけ。 | * ポップアップ地獄を回避。 | ||
*同じ様な処理にファイルを分けなくていい。 | * イベント編集に必要なファイルは1つだけ。 | ||
* 同じ様な処理にファイルを分けなくていい。 | |||
;Event.js | ;Event.js | ||
| 582行目: | 551行目: | ||
:イベント用に作った関数。 | :イベント用に作った関数。 | ||
==ダウンロード== | |||
[https://bitbucket.org/kimigatame/merymarco_event BitBucket] | [https://bitbucket.org/kimigatame/merymarco_event BitBucket] | ||
2021年4月24日 (土) 00:05時点における版
KL
ダウンロード
概要
| マクロ | 中身とか注意事項とか |
|---|---|
| KL.js | Mery組み込みオブジェクトの拡張。 |
| global.js | グローバルなメソッドや変数。 |
| polyfill.js | Chakraで実装されていないメソッドなどの拡張。 |
| ArrExt.js StrExt.js MathExt.js |
それぞれのオブジェクトへのメソッドの追加。 |
| WidePop.js | リッチなポップアップ。 |
| ComText.js | マッチ結果とテンプレートから文字列を作成する。 |
| InsertOption.js | ComText.jsによって作成した文字列を挿入する。 |
| InsetSearch.js | ComText.jsによって作成した文字列で検索する。 |
| MouseEmurator.js | マウスの操作。 |
| Commentize.js | コメント化もしくはコメント解除する。 |
| MoveSelection.js | 選択文字列を移動する。 |
| Exes | マクロの実行用ファイル。 |
KL.js
KLを名前空間として独自のオブジェクトとMery組み込みオブジェクトの拡張を含む。
オブジェクト
- KL.Range
- 範囲を表す。座標系は
KL.Pointで指定する。 - KL.Coord
- 座標系posをserialに変更。logicalとviewは
mePosViewとmePosLogicalに数値を合わせた。 - KL.Dir
- 選択方向。
- KL.Point(<= KILI.Point)
- 座標系を指定できる様に変更。
メソッド
- KL.GetScroll/KL.SetScroll
- スクロール位置の取得/設定。
組み込みオブジェクトの拡張
Selection/Document/Editorのラッパ。Mery組み込みのメソッドやプロパティと追加したものを同じ方法で呼び出せる。また一部は組み込みのものを拡張している。
e.g.
let $s=KL.Selection();
$s.Reverse();
$s.Text=$s.GetLeft();
組み込みのSelectionを直接呼び出すにはKL.Selection#Originalか、global.jsのGSO()を使う。
KL.Editor
| Original | 組み込みのEditor。 |
| Documents | KL.Documents。組み込みのDocumentsではない。 |
| ActiveDocument | アクティブな文書のKL.Document。組み込みのActiveDocumentではない。 |
| NewFile | 文書を新規作成する。 |
| GetDocument | Documentオブジェクトを取得する。 |
KL.Documents
他に合わせて用意しているだけで追加したメソッドは存在しない。
KL.Document
| Original | 組み込みのDocument。 |
| Close | 文書を閉じる。組み込みのを追加拡張している。 |
| Selection | KL.Selectionを取得。組み込みのSelectionではない。 |
| LineEndingChar | 改行文字を取得する。 |
| ToSerial | 座標を文頭からの位置に変換する。 |
| ToLogical | 座標を論理行座標に変換する。 |
| ToView | 座標を表示行座標に変換する。 |
| LogicalToView | 論理行座標を表示行座標に変換する。 |
| LogicalToSerial | 論理行座標を文頭からの位置に変換する。 |
| SerialToLogical | 文頭からの位置を論理行座標に変換する。 |
| SerialToView | 文頭からの位置を表示行座標に変換する。 |
| ViewToLogical | 表示行座標を論理行座標に変換する。 |
| ViewToSerial | 表示行座標を文書先頭からの位置に変換する。 |
| Clone | 文書のクローンを作成する。 |
| Lines | 行を取得する。 |
KL.Selection
| Original | 組み込みのDocument。 |
| OriginalParent | 親となる組み込みのDocument。 |
| Parent | 親となるKL.Documentオブジェクト。 |
| SelectLines | 複数の行を選択する。 |
| SelectLineRange | 複数の行を選択する。 |
| SelectIfEmpty | 選択されていなければ選択する。 |
| IsLogicalStart | 論理行頭かどうか判定する。 |
| IsLogicalEnd | 論理行末かどうか判定する。 |
| IsViewStart | 表示行頭かどうか判定する。 |
| IsViewEnd | 表示行末かどうか判定する。 |
| IsEOF | 文末かどうか判定する。 |
| Inline | 行内選択かどうか判定する。 |
| Multiline | 複数行に渡る選択かどうか判定する。 |
| WholeLines | 行の全体を選択しているかどうか判定する。 |
| GetRange | 選択範囲を取得する。 |
| SetRange | 範囲選択する。 |
| GetDirection | テキスト選択方向を取得する。 |
| SetDirection | テキスト選択方向を設定する。 |
| Reverse | 選択範囲を反転する。 |
| GetBottomPos | 選択範囲の文末側の位置を取得する。 |
| GetTopPos | 選択範囲の文頭側の位置を取得する。 |
| GetAnchorPoint | カーソル位置を取得する。 |
| GetActivePoint | 選択範囲の開始位置を取得する。 |
| GetBottomPoint | 選択範囲の文末側の位置を取得する。 |
| GetTopPoint | 選択範囲の文頭側の位置を取得する。 |
| GetLeft | 選択範囲より左の文字列を取得する。 |
| GetRight | 選択範囲より右の文字列を取得する。 |
| Exclude | 選択部分から文末側の改行を除外する。 |
| Duplicate | テキスト二重化。 |
| Sort | 選択範囲の行または文字列をソートする。 |
| DeleteLines | 行を削除する。 |
global.js
グローバルに確保したメソッドや変数。KL名前空間下には含まれない。
| meGetLineLogical | 論理座標で指定するフラグ。 |
| mePosCaret | キャレット位置で指定するフラグ。 |
| GEO | 組み込みのEditorオブジェクトを取得する。 |
| GDO | 組み込みのDocumentオブジェクトを取得する。 |
| GSO | 組み込みのSelectionを取得する。 |
| O | OutputBar.Writeへのショートカット。 |
| RelativePath | 実行中のスクリプトから相対的にファイルパスを取得する |
polyfill.js
ECMAScriptにありChakraでは使用できないものの補完。
- Array.from()
- Array.of()
- Array.prototype.copyWithin()
- Array.prototype.fill()
- Array.prototype.find()
- Array.prototype.findIndex()
- Array.prototype.flat()
- Array.prototype.flatMap()
- Array.prototype.includes()
- Math.trunc()
- Number.isFinite()
- Number.isInteger()
- Number.isNaN()
- Number.parseFloat()
- Number.parseInt()
- Object.is()
- String.fromCodePoint()
- String.prototype.codePointAt()
- String.prototype.endsWith()
- String.prototype.includes()
- String.prototype.padEnd()
- String.prototype.padStart()
- String.prototype.repeat()
- String.prototype.startsWith()
- String.prototype.trimEnd()
Chakraへの追加
ArrExt.js
| unique | 配列から重複を削除する。 |
| last | 配列の最後の要素。 |
StrExt.js
| bracket | 文字列の前後に文字列を挿入する。 |
| quote | 「'...'」で囲む。 |
| parens | 「(...)」で囲む。 |
| braces | 「[...]」で囲む。 |
| curls | 「{...}」で囲む。 |
| crlf | 改行コードを変換する。 |
| insert | 文字列を挿入する。 |
| escapeRe | 正規表現で使用される文字をエスケープする。 |
| unescapeRe | エスケープされた正規表現で使用される文字を戻す。 |
| cpcount | サロゲートペアを考慮して文字列の長さを取得する。 |
| cpsplit | サロゲートペアを考慮して文字列を分割する。 |
MathExt.js
| within | n以上m以下であるか判定する。 |
| clamp | 数値を範囲内に収める。 |
WidePop.js
リッチなPopupMenu。機能は以下の通り。
- 配列のみでのメニュー定義
- チェックボックス
- ラジオボタン
- チェック、有効・無効の切り換え
- サブメニュー
- 選択時にコマンド実行
- MouseEmurator.jsを利用してメニューの位置を一定にする
e.g.
var menu=[
["a",1,function(pop,me){Alert(me.tags[0]);},null,["A","a"]],
[], //区切り線
["b",20], //チェック&グループ開始
["c",4], //"b"がチェック済みなのでチェックされない
["d",4], //次のflagが0なのでここでグループ終了
["e",1,function(pop,me){return this.caption},[
["-a",2,"e-a"], //チェックボックス
["-b",1,function(pop,me){return pop.getItemById(me.parent).command()+me.caption}],
["-c",1,"unalbled"]
]],
["f",0] //無効になっている
];
var p=new WidePop(menu);
p.getItemFromPosition(5,2).enabled=false;
p.check(1,function(pos,me){return me.caption=="-a"});
p.create().track(0,true);
Alert(p.getResult().value)
ComText.js
キャレット行をマッチした情報から条件を満たすテンプレートを取得し、文字列を作成する。
テンプレート
{
"entries": [
{
"name":"for",
"template":"for(var {0:8-1,0:8}=0;{0:8-1,0:8}<{s}.length;{0:8-1,0:8}++){\n\t\n}",
"indent":true,
"modes":["JavaScript","C#","C++","Java"],
"conditions":[
{
"type":14,
"text":"for[ijk]$"
}
],
"range":"0"
}
],
"sub":{
"name":"sub",
"comment":"一致するものが無ければ単純に改行する",
"template":"\n"
}
}
- entries
- entry(検索条件とテンプレートのセット)の配列。
- name
- entryの名前。
- template
- テンプレート。「{...}」で囲まれた部分にマッチ結果から文字列を埋め込む事ができる。
- indent
- 文字列の挿入時にインデントするかどうか。
- modes
- entryを使用する編集モード
- conditions
- 検索条件の配列。
- type
- 検索方法(
ComText.SearchTypesのいずれか)。 - text
- 検索文字列。
- range
- 文字列の挿入位置。
- sub
- 代替entry。
文字列の埋め込み
テンプレートの「{<開始位置>,<終了位置>}」は元のテキストの範囲を表し、マッチ結果を利用してその範囲の文字列を埋め込む。
<開始位置>と<終了位置>は共に「<インデックス>:<位置><差分>」「<インデックス>:<位置>」「<位置><差分>」「<位置>」の形式を取る。
<インデックス>はマッチしたentryのconditionsのインデックスを表す。省略した場合は0。
<位置>はマッチした文字列中での位置を表す。ComText.RangeTypesのいずれかを指定する。
<差分>は<インデックス>と<位置>で特定された位置からの差分を「+<数値>」「-<数値>」の形式で表す。省略した場合は0。
「{<インデックス>}」の形式も使用できる。この場合はマッチ位置の全体を表す。
e.g.
{0:8-1,0:8}
この場合、開始位置は0番目のcondition(0)のマッチ終了位置(8)から1文字戻った(-1)位置を表す。 終了位置は0番目のcondition(0)のマッチ終了位置(8)を表す。
rangeの範囲指定も同じ記法を用いる(「{...}」で囲む必要はない)。
使用例
ここでは上記のJSONを使うものとする。
let os=new ComText(path,option).match();
- ComTextのコンストラクタはpathに指定したJSONファイルのentriesをリスト化し、現在の編集モードがmodesにあればそのエントリーを検索に使用する。
ComText#matchで検索を実行する。検索範囲は現在の行に限る。引数にtrueを指定すると1つのエントリーがマッチした時点で強制終了する。- conditionsの全ての条件にマッチした時のみ、そのエントリーがマッチしたとみなす。typeが14なので「選択位置より前の文字列を正規表現検索」する。textは検索パターンになる。
- マッチが成功すれば、マッチ結果などがコンストラクタの引数
optionのインスタンスとしてComText#optionsに追加される。optionにはComText.Optionかそれを継承したオブジェクトを指定する。 optionのインスタンスは必要になった時にマッチ結果とtemplateから文字列を作成する。「{0:8-1,0:8}」の部分には元のテキストの「0番目のconditionsのマッチ終了位置より1文字遡った位置から、conditionsの0番目のマッチ終了位置」までの文字列が埋め込まれる。- どのエントリーもマッチしなかった場合は代わりにsubから
optionのインスタンスを作成する。subが存在しなければComText#optionsは空になる。
デフォルトのComText.Optionは文字列の作成までしか行わないので、文字列の利用には別の関数に渡す(InsetSearch.js)か、ComText.Optionを継承・拡張する(InsertOption.js)必要がある。
InsertOption.js
ComText.Optionの拡張。作成した文字列を挿入するメソッドを持つ。
e.g
let os=new ComText(path,InsertOption).match().options;
if(os.length){
os[0].insert();
}
ComText.Optionはマッチしたエントリーの情報も保持しているので、挿入位置はrangeを使用する。上記のJSONでは「0」だけを指定しているので、「0番目のconditionsのマッチ位置全体」に挿入(上書き)する。- 文字列が複数行の場合にindentを指定していると、2行目以降に1行目に合わせてインデントを追加する。
- テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。
InsetSearch.js
ComText.jsを利用して選択文字列から作成した文字列で検索する。ComTextの引数optionはデフォルトのままで、ComTextを継承する事で処理を追加している。
e.g
let os=new InsetSearch(path,option).execute();
MouseEmulator.js
Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/)を利用してマウスの操作や座標の取得をする。
kili
旧版。非推奨。
ダウンロード
Events
イベントマクロを使いやすく(?)したもの。 大体のメリットとしては、
- ポップアップ地獄を回避。
- イベント編集に必要なファイルは1つだけ。
- 同じ様な処理にファイルを分けなくていい。
- Event.js
- イベントを実行するクラス。イベント名に応じてEventMain.jsの関数を呼び出す。また例外メッセージをアウトプットに投げている。
- EventMain.js
- イベントで実行される関数のファイル。イベントの編集はこのファイルをいじるだけでいい。
- EventTemplate.js
- 1つのファイルで通常とイベントと両方のマクロに利用できるようするテンプレート。
- 「On~」で始まるファイル
- Meryでイベントとして登録するファイル。Event.executeを呼び出すだけ。
- EventMethod.js
- イベント用に作った関数。
ダウンロード
覚え書き
- OnDocumentCloseで閉じたタブをもう一度開こうとすると
以下のNewFileで開いたタブを閉じるとき、定期的?にonDocumentCloseが呼ばれない。またOpenFileは何回かに一回しか成功しない。
var file="";
Editor.NewFile();
Editor.OpenFile(file,meEncodingUTF16LE,false);
OnModifiedなどでは問題ない。
- コマンドラインオプションからマクロ実行
Window.PromptとWindow.Confirmは実行できない。
- Document.GetLine
デフォルトでは表示行を取得。meGetLineLogicalが未定義なので0を指定する。
- 最初の数
- 行:1 (Document.GetLine)
- 文頭からの位置:0 (Selection.GetActivePos)
- 桁:1 (Selection.GetActivePointX)
- Editor,Document:0 (Editors.Item.Documents.Item)
- Window.Document
Document.NewFile後も更新されない。
Editor.ActiveDocument.NewFile();
Alert(Document.Text);
- Editor.FindInFiles
- ディレクトリ名は最後を"\\"か"\\*"にする。
- アクティブな文書が結果表示で乗っ取られる。
- PopupMenu.Track
- 引数無しだとエラー。0でキャレット位置に表示。mePosMouseは1。
- キャンセルした場合の返り値は0。
- 返り値を変数に入れるなりOutputするなりしないとメニューは表示されない。
- 領域外をクリックしてキャンセルした場合、続けてTrackしていても実行されない。Escでだとされる。
var p=CreatePopupMenu();
p.Add("1");
var x=p.Track(0); //ここでキャンセル
if(x==0){
x=p.Track(0);
}
- Selection.Replace
検索オプションを何も付けたくない場合はflagに0を指定する。
//正規表現を使わず、大文字と小文字を区別せず、カーソル位置の次の一つだけ、単語の途中でもマッチする
Selection.Replace("x","y",0);
検索文字列が0x000aから始まるとき、meFindReplaceRegExpを指定しないと、meReplaceAllがおかしい。
Selection.Replace("\n","",meReplaceAll); //文書全体の最初の1つだけ処理される
Selection.Replace(";\n","",meReplaceAll); //全て処理される
Selection.Replace("\n;","",meReplaceAll); //文書全体の最初の1つだけ処理される
- Document.Text
代入する場合、設定上の改行コードに関わらず、改行記号は文字列中の改行によって変わる。これがSelection.Textだと変わらない。
Document.Text=Document.Text; //改行記号はLFになる
Selection.SelectAll();
Selection.Text=Selection.Text; //元のまま
- Selection.CharLeft,CharRight,LineUp,LineDown
Countが0の時は1と同じ。負の場合、逆方向に移動。
- Selection.Find
正規表現の時meFindReplaceOnlyWordは無効。