「利用者:黄身」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
黄身 (トーク | 投稿記録)
編集の要約なし
黄身 (トーク | 投稿記録)
編集の要約なし
1行目: 1行目:
思いつくままに作ってるので、役に立つかどうかは二の次三の次。
=KL=
=覚え書き=
;OnDocumentCloseで閉じたタブをもう一度開こうとすると
以下のNewFileで開いたタブを閉じるとき、定期的?にonDocumentCloseが呼ばれない。またOpenFileは何回かに一回しか成功しない。
<source lang="javascript" style="word-wrap:break-word;">
var file="";
Editor.NewFile();
Editor.OpenFile(file,meEncodingUTF16LE,false);
</source>
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後も更新されない。
<source lang="javascript" style="word-wrap:break-word;">
Editor.ActiveDocument.NewFile();
Alert(Document.Text);
</source>
;Editor.FindInFiles
*ディレクトリ名は最後を"\\"か"\\*"にする。
*アクティブな文書が結果表示で乗っ取られる。
;PopupMenu.Track
*引数無しだとエラー。0でキャレット位置に表示。mePosMouseは1。
*キャンセルした場合の返り値は0。
*返り値を変数に入れるなりOutputするなりしないとメニューは表示されない。
*領域外をクリックしてキャンセルした場合、続けてTrackしていても実行されない。Escでだとされる。
<source lang="javascript" style="word-wrap:break-word;">
var p=CreatePopupMenu();
p.Add("1");
var x=p.Track(0); //ここでキャンセル
if(x==0){
  x=p.Track(0);
}
</source>
;Selection.Replace
検索オプションを何も付けたくない場合はflagに0を指定する。
<source lang="javascript" style="word-wrap:break-word;">
//正規表現を使わず、大文字と小文字を区別せず、カーソル位置の次の一つだけ、単語の途中でもマッチする
Selection.Replace("x","y",0);
</source>


検索文字列が0x000aから始まるとき、meFindReplaceRegExpを指定しないと、meReplaceAllがおかしい。
==ダウンロード==
<source lang="javascript" style="word-wrap:break-word;">
準備中。
Selection.Replace("\n","",meReplaceAll); //文書全体の最初の1つだけ処理される
Selection.Replace(";\n","",meReplaceAll); //全て処理される
Selection.Replace("\n;","",meReplaceAll); //文書全体の最初の1つだけ処理される
</source>
;Document.Text
代入する場合、設定上の改行コードに関わらず、改行記号は文字列中の改行によって変わる。これがSelection.Textだと変わらない。
<source lang="javascript" style="word-wrap:break-word;">
Document.Text=Document.Text; //改行記号はLFになる
Selection.SelectAll();
Selection.Text=Selection.Text; //元のまま
</source>
;Selection.CharLeft,CharRight,LineUp,LineDown
Countが0の時は1と同じ。負の場合、逆方向に移動。
;Selection.Find
正規表現の時meFindReplaceOnlyWordは無効。
 
 
=マクロファイル=
全て[https://bitbucket.org/kimigatame/merymacro BitBucket]で公開中。
たいていの場合Exesフォルダに実行用ファイルがあるので、Meryからはそちらを登録すること。


==概要==
新版のライブラリ。Chakraの使用を前提にkiliを作り直したもの。
{| class="wikitable"
{| class="wikitable"
!マクロ
!マクロ
!中身とか注意事項とか
!中身とか注意事項とか
|-
|-
|[[#KILI.js|KILI]]
|KL.js
|KILI.js KILI.code.js ArrayEx.js StringEx.js NumberEx.js WidePop.js MouseEmurator.js
|Selection/Document/Editorの拡張。旧版と異なり、それぞれのラッパオブジェクトとなっているので、Mery組み込みの機能と独自の機能を同じ方法で呼び出せる。
|-
|Commentize.js
|コメント化もしくはコメント解除する。
|-
|LoopyBookmark.js
|最後のブックマークまで来たら最初のブックマークへ移動する。
|-
|-
|FillSearch.js
|polyfill.js
|選択文字列をテンプレートにはめ込んで検索する。
|Chakraで実装されていないメソッドなどの拡張。
|-
|-
|MoveSelection.js
|ArrExt.js<br />StrExt.js<br />MathExt.js
|選択文字列を移動する。
|それぞれのオブジェクトの拡張。
|-
|-
|[[#InsetText.js|InsetText.js]]
|WidePop.js
|キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。
|旧版に同じ。
|-
|-
|[[#Event関連マクロファイル群|Event]]
|ComText.js
|[https://bitbucket.org/kimigatame/merymarco_event BitBucket]
|旧版のInsetText.jsからマッチング部分だけ抜き出したもの。
|}
 
=KILI.js=
グローバルに用意しているのはこの「KILI」名前空間と次の項に挙げたいくつかのみ。
 
==クラス==
;Point
:座標を表す。今のところx,yが含まれているだけ。
;Range
:選択範囲を表す。
;Direction
:選択方向を表す。
;Coordinate
:座標系を表す。
;LineMode
:単位として扱う行を表す。
 
==グローバルなもの==
あまりにもよく使ってるので特別にグローバルに用意。よほどの事がない限りこれ以上増やさない。
{| class="wikitable"
|GDO||Documentを取得。
|-
|-
|GEO||Editorを取得。
|InsertOption.js
|旧版のInsetText.jsに相当。ComText.jsを使って実現する為のもの。
|-
|-
|GSO||Selectionを取得。
|InsetSearch.js
|旧版のFillSearch.jsをComText.jsを使って作り直したもの。
|-
|-
|O||OutputBar.Writeln()へのショートカット。
|MouseEmurator.js
|旧版に同じ。
|-
|-
|Seiko||時間を計測する。
|Commentize.js
|旧版に同じ。
|-
|-
|meGetLineLogical||有りそうで無い変数。
|MoveSelection.js
|旧版に同じ。
|-
|-
|mePosCaret||有りそうで無い変数。
|Exes
|旧版に同じ。
|}
|}


==KILI.selex==
=kili=
Selection拡張。KILI.editと違い、文書は編集されない。
 
;位置を判定するもの
==ダウンロード==
[https://bitbucket.org/kimigatame/merymacro BitBucket]
 
==概要==
旧版のライブラリ。
{| class="wikitable"
{| class="wikitable"
|atLogicalHead||論理行頭
!マクロ
!中身とか注意事項とか
|-
|-
|atLogicalEnd||論理行末
|KILI.js
|Selection/Documentの拡張がメイン。その他座標などを表す簡易なオブジェクトやグローバルな関数/変数を含む。<br />グローバルなもの以外はKILIオブジェクト下に存在する。
|-
|-
|atViewHead||表示行頭
|KILI.code.js
|文字・コードポイントの相互変換とその表現を扱う。Unicodeのみが対象。
|-
|-
|atViewEnd||表示行末
|ArrayEx.js<br />StringEx.js<br />NumberEx.js
|それぞれのオブジェクトの拡張。
|-
|-
|atEOF||文末
|WidePop.js
|}
|ポップアップ拡張。
;位置を取得するもの
{| class="wikitable"
|getRange||選択範囲
|-
|-
|getBottomPos||文末側位置
|InsetText.js
|キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。
|-
|-
|getTopPos||文頭側位置
|MouseEmurator.js
|マウスの操作。
|-
|-
|getAnchorPoint||選択終了位置
|Commentize.js
|コメント化もしくはコメント解除する。
|-
|-
|getActivePoint||選択開始位置
|LoopyBookmark.js
|最後のブックマークまで来たら最初のブックマークへ移動する。
|-
|-
|getBottomPoint||文末側位置
|FillSearch.js
|選択文字列をテンプレートにはめ込んで検索する。
|-
|-
|getTopPoint||文頭側位置
|MoveSelection.js
|-
|選択文字列を移動する。
|getLogicalHeadPos||全ての論理行頭
|-
|getLogicalEndPos||全ての論理行末
|-
|-
|getWrapPos||全ての折り返し位置
|Exes
|-
|マクロの実行用ファイル。
|getViewHeadPos||全ての表示行頭
|-
|getViewEndPos||全ての表示行末
|}
;文字列を取得するもの
{| class="wikitable"
|getLeft||選択範囲より左
|-
|getRight||選択範囲より右
|}
;座標を変換するもの
{| class="wikitable"
|logicalToView||論理行→表示行
|-
|logicalToPos||論理行→文頭から
|-
|posToLogical||文頭から→論理行
|-
|posToView||文頭から→表示行
|-
|viewToLogical||表示行→論理行
|-
|viewToPos||表示行→文頭から
|}
;選択するもの
{| class="wikitable"
|selectLine||複数行
|-
|selectLines||複数行
|-
|selectIfEmpty||選択されていなければ選択
|-
|setRange||範囲
|-
|reverse||反転
|-
|excludeBreak||改行を除外
|}
;選択状態を判定するもの
{| class="wikitable"
|inline||行内
|-
|multiline||複数行
|-
|wholeLines||行全体
|-
|getDirection||選択方向
|}
;検索するもの
{| class="wikitable"
|search||検索
|-
|searchTextLines||行を検索
|-
|count||マッチ数
|}
==KILI.edit==
Selection拡張。KILI.selexと違い、文書は編集される。
{| class="wikitable"
|duplicate||二重化
|-
|sort||並べ替え
|-
|deleteLines||行削除
|-
|deleteAll||文字列を全て削除
|-
|deleteAllTextLines||文字列を含む行を削除
|-
|breakAll||文字列を改行に変換
|}
==KILI.docex==
Document拡張。Editorの領分と思われるものも含む。<br />
あまり仕様が固まってないので激変の可能性あり。
{| class="wikitable"
|all||全て取得
|-
|newFile||新規作成
|-
|clone||複製
|-
|cloneStyle||スタイルを指定して複製
|-
|getINI||設定ファイルを取得
|-
|forceClose||強制的に閉じる
|-
|getScroll||スクロール位置を取得
|-
|setScroll||スクロール位置を指定
|-
|getBreakCode||改行コードを取得
|}
=KILI.code.js=
文字・コードポイントの相互変換とその表現を扱う。Unicodeのみが対象。<br />
{| class="wikitable"
|decode||文字列→コードポイント
|-
|encode||コードポイント→文字列
|-
|decodeAll||全ての形式→文字列
|-
|decodeSurrogate||サロゲートペア→コードポイント
|-
|encodeSurrogate||コードポイント→サロゲートペア
|-
|fromCharCode||0x10000以上にも対応したString.fromCharCode
|-
|fromEntity||数値実体参照→文字列
|-
|toEntity||文字列→数値実体参照
|-
|fromOnig||鬼車形式→文字列
|-
|toOnig||文字列→鬼車形式
|-
|fromRegex||正規表現形式→文字列
|-
|toRegex||文字列→正規表現形式
|-
|fromUnicode||Unicode形式→文字列
|-
|toUnicode||文字列→Unicode形式
|}
=組み込みオブジェクト拡張=
名前の衝突に注意。特にStringExはincludeライブラリのStringExと衝突しています。
==Array==
{| class="wikitable"
|clone||値渡し
|-
|compact||空白、null、undefinedを削除
|-
|remove||削除
|-
|indexOf||検索
|-
|insert||挿入
|-
|last||最後の要素を取得
|-
|select||条件指定して検索
|-
|selectIndex||条件指定してインデックスを検索
|-
|pickup||インデックス指定で取り出す
|-
|siblings||指定したプロパティの値を取得
|-
|unique||重複削除
|}
==Number==
{| class="wikitable"
|clamp||範囲内に収める
|-
|within||範囲内にあるか判定
|-
|padding||桁揃え
|-
|toHexString||十六進数表記
|}
==String==
{| class="wikitable"
|crlf||改行コード変換
|-
|cut||分割
|-
|unhead||文字列で始まらないようにする
|-
|untail||文字列で終わらないようにする
|-
|dquote||「"」で囲む
|-
|squote||「'」で囲む
|-
|enclose||囲む
|-
|enclosed||文字列で囲まれているか判定
|-
|insert||挿入
|-
|repeat||繰り返し
|-
|startsWith||文字列で始まっているか判定
|-
|endsWith||文字列で終わっているか判定
|-
|escape||エスケープ
|-
|unescape||エスケープを戻す
|-
|escapeRegExp||正規表現用エスケープ
|-
|unescapeRegExp||正規表現用エスケープを戻す
|-
|head||文字列で始まるようにする
|-
|tail||文字列で終わるようにする
|-
|onigFind||鬼車で検索(KILI.js内に記載)
|}
|}


=InsetText.js=
==WidePop.js==
拡張PopupMenu。機能は以下の通り。
*配列のみでのメニュー定義
*チェックボックス
*ラジオボタン
*チェック、有効・無効の切り換え
*サブメニュー
*選択時にコマンド実行
*MouseEmurator.jsを利用してメニューの位置を一定にする
 
e.g.
<source lang="javascript" style="word-wrap:break-word;">
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)
</source>
 
==InsetText.js==
キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。
キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。
SSnippet.js・Blockize.js・SmartBreak.jsを統合して一から作り直したもの。
SSnippet.js・Blockize.js・SmartBreak.jsを統合して一から作り直したもの。
393行目: 148行目:
<source lang="javascript" style="word-wrap:break-word;">
<source lang="javascript" style="word-wrap:break-word;">
{
{
"entries": [
  "entries": [
{
    {
"name":"for",
      "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}",
      "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,
      "indent":true,
"modes":["JavaScript","C#","C++","Java"],
      "modes":["JavaScript","C#","C++","Java"],
"conditions":[
      "conditions":[
{
        {
"type":14,
          "type":14,
"text":"for[ijk]$"
          "text":"for[ijk]$"
}
        }
],
      ],
"range":"0"
      "range":"0"
}
    }
],
  ],
"sub":{
  "sub":{
"name":"sub",
    "name":"sub",
"comment":"一致するものが無ければ単純に改行する",
    "comment":"一致するものが無ければ単純に改行する",
"template":"\n"
    "template":"\n"
}
  }
}
}
</source>
</source>
421行目: 176行目:
var g=new InsetText("insettext.json").match(false).generated[0];
var g=new InsetText("insettext.json").match(false).generated[0];
if(g){
if(g){
g.insert();
  g.insert();
}
}
</source>
</source>
# この時InsetTextはJSONファイルのentriesをリスト化し、現在の編集モードが"modes"にあればそのエントリーを検索に使用する。
# この時InsetTextはJSONファイルのentriesをリスト化し、現在の編集モードが"modes"にあればそのエントリーを検索に使用する。
# 検索するメソッドは"InsetText#match"。
# 検索するメソッドは"InsetText#match"。
433行目: 189行目:
# テキストの挿入は"InsetText#generated#insert"で行う。挿入位置は"range"で指定する。指定方法はテンプレートの範囲指定と同じだが、ここでは省略してconditionsのインデックス「0」だけを指定しているので、挿入位置は「conditionsの0番目のマッチ位置全体」になる。
# テキストの挿入は"InsetText#generated#insert"で行う。挿入位置は"range"で指定する。指定方法はテンプレートの範囲指定と同じだが、ここでは省略してconditionsのインデックス「0」だけを指定しているので、挿入位置は「conditionsの0番目のマッチ位置全体」になる。
# "indent"を指定していれば、挿入する文字列が複数行の場合に、1行目に合わせてインデントを追加する。これで上のテキストは次の様になる。
# "indent"を指定していれば、挿入する文字列が複数行の場合に、1行目に合わせてインデントを追加する。これで上のテキストは次の様になる。
  [Tab]for(var i=0;i<.length;i++){
  [Tab]for(var i=0;i<.length;i++){
  [Tab][Tab]
  [Tab][Tab]
  [Tab]}
  [Tab]}
なお、テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。ここでは「{s}」のみ指定しているので、「.length」の前にキャレットが移動する。
なお、テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。ここでは「{s}」のみ指定しているので、「.length」の前にキャレットが移動する。
どのエントリーもマッチしなかった場合、"sub"に指定したテンプレートから文字列を作成してInsetText#generatedに追加する。"sub"が存在しなければInsetText#generatedは空になり、挿入できる文字列は何もないという事になる。
どのエントリーもマッチしなかった場合、"sub"に指定したテンプレートから文字列を作成してInsetText#generatedに追加する。"sub"が存在しなければInsetText#generatedは空になり、挿入できる文字列は何もないという事になる。


=WidePop.js=
==MouseEmulator.js==
拡張PopupMenu。機能は以下の通り。
Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/<nowiki />)を利用してマウスの操作や座標の取得をする。
*配列のみでのメニュー定義
 
*チェックボックス
==古いもの・非推奨==
*ラジオボタン
;KeyList.js
*チェック、有効・無効の切り換え
:簡単なJSON形式のファイル読み書き。あまり汎用には使えない。
*サブメニュー
*選択時にコマンド実行
*MouseEmurator.jsを利用してメニューの位置を一定にする


e.g.
===InsetText.jsに統合したもの===
<source lang="javascript" style="word-wrap:break-word;">
;SSnippet.js
var menu=[
:キャレット直前の文字列をキーとして補完する。
["a",1,function(pop,me){Alert(me.tags[0]);},null,["A","a"]],
;Blockize.js
[], //区切り線
:選択部分をテンプレートにはめ込んだブロックを挿入する。
["b",20], //チェック&グループ開始
;SmartBreak.js
["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)
</source>


=MouseEmulator.js=
===WidePop.jsに統合したもの===
Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/<nowiki />)を利用してマウスの操作や座標の取得をする。
;SimplePM.js
:テキストと実行コマンドのみからなる単純なPopupMenu。
;WidePM.js
:いろいろできるPopupMenu。


=Event関連マクロファイル群=
==Events==
イベントマクロを使いやすく(?)したもの。
イベントマクロを使いやすく(?)したもの。
大体のメリットとしては、
大体のメリットとしては、
492行目: 236行目:
:イベント用に作った関数。
:イベント用に作った関数。


=古いもの・非推奨=
===ダウンロード===
[https://bitbucket.org/kimigatame/merymarco_event BitBucket]


;KeyList.js
=覚え書き=
:簡単なJSON形式のファイル読み書き。あまり汎用には使えない。
;OnDocumentCloseで閉じたタブをもう一度開こうとすると
以下のNewFileで開いたタブを閉じるとき、定期的?にonDocumentCloseが呼ばれない。またOpenFileは何回かに一回しか成功しない。
<source lang="javascript" style="word-wrap:break-word;">
var file="";
Editor.NewFile();
Editor.OpenFile(file,meEncodingUTF16LE,false);
</source>
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後も更新されない。
<source lang="javascript" style="word-wrap:break-word;">
Editor.ActiveDocument.NewFile();
Alert(Document.Text);
</source>
;Editor.FindInFiles
*ディレクトリ名は最後を"\\"か"\\*"にする。
*アクティブな文書が結果表示で乗っ取られる。
;PopupMenu.Track
*引数無しだとエラー。0でキャレット位置に表示。mePosMouseは1。
*キャンセルした場合の返り値は0。
*返り値を変数に入れるなりOutputするなりしないとメニューは表示されない。
*領域外をクリックしてキャンセルした場合、続けてTrackしていても実行されない。Escでだとされる。
<source lang="javascript" style="word-wrap:break-word;">
var p=CreatePopupMenu();
p.Add("1");
var x=p.Track(0); //ここでキャンセル
if(x==0){
  x=p.Track(0);
}
</source>
;Selection.Replace
検索オプションを何も付けたくない場合はflagに0を指定する。
<source lang="javascript" style="word-wrap:break-word;">
//正規表現を使わず、大文字と小文字を区別せず、カーソル位置の次の一つだけ、単語の途中でもマッチする
Selection.Replace("x","y",0);
</source>


==[[#InsetText.js|InsetText.js]]に統合したもの==
検索文字列が0x000aから始まるとき、meFindReplaceRegExpを指定しないと、meReplaceAllがおかしい。
;SSnippet.js
<source lang="javascript" style="word-wrap:break-word;">
:キャレット直前の文字列をキーとして補完する。
Selection.Replace("\n","",meReplaceAll); //文書全体の最初の1つだけ処理される
;Blockize.js
Selection.Replace(";\n","",meReplaceAll); //全て処理される
:選択部分をテンプレートにはめ込んだブロックを挿入する。
Selection.Replace("\n;","",meReplaceAll); //文書全体の最初の1つだけ処理される
;SmartBreak.js
</source>
:ちょっと賢く改行する。
;Document.Text
 
代入する場合、設定上の改行コードに関わらず、改行記号は文字列中の改行によって変わる。これがSelection.Textだと変わらない。
==[[#WidePop.js|WidePop.js]]に統合したもの==
<source lang="javascript" style="word-wrap:break-word;">
;SimplePM.js
Document.Text=Document.Text; //改行記号はLFになる
:テキストと実行コマンドのみからなる単純なPopupMenu。
Selection.SelectAll();
;WidePM.js
Selection.Text=Selection.Text; //元のまま
:いろいろできるPopupMenu。
</source>
;Selection.CharLeft,CharRight,LineUp,LineDown
Countが0の時は1と同じ。負の場合、逆方向に移動。
;Selection.Find
正規表現の時meFindReplaceOnlyWordは無効。

2019年12月7日 (土) 18:05時点における版

KL

ダウンロード

準備中。

概要

新版のライブラリ。Chakraの使用を前提にkiliを作り直したもの。

マクロ 中身とか注意事項とか
KL.js Selection/Document/Editorの拡張。旧版と異なり、それぞれのラッパオブジェクトとなっているので、Mery組み込みの機能と独自の機能を同じ方法で呼び出せる。
polyfill.js Chakraで実装されていないメソッドなどの拡張。
ArrExt.js
StrExt.js
MathExt.js
それぞれのオブジェクトの拡張。
WidePop.js 旧版に同じ。
ComText.js 旧版のInsetText.jsからマッチング部分だけ抜き出したもの。
InsertOption.js 旧版のInsetText.jsに相当。ComText.jsを使って実現する為のもの。
InsetSearch.js 旧版のFillSearch.jsをComText.jsを使って作り直したもの。
MouseEmurator.js 旧版に同じ。
Commentize.js 旧版に同じ。
MoveSelection.js 旧版に同じ。
Exes 旧版に同じ。

kili

ダウンロード

BitBucket

概要

旧版のライブラリ。

マクロ 中身とか注意事項とか
KILI.js Selection/Documentの拡張がメイン。その他座標などを表す簡易なオブジェクトやグローバルな関数/変数を含む。
グローバルなもの以外はKILIオブジェクト下に存在する。
KILI.code.js 文字・コードポイントの相互変換とその表現を扱う。Unicodeのみが対象。
ArrayEx.js
StringEx.js
NumberEx.js
それぞれのオブジェクトの拡張。
WidePop.js ポップアップ拡張。
InsetText.js キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。
MouseEmurator.js マウスの操作。
Commentize.js コメント化もしくはコメント解除する。
LoopyBookmark.js 最後のブックマークまで来たら最初のブックマークへ移動する。
FillSearch.js 選択文字列をテンプレートにはめ込んで検索する。
MoveSelection.js 選択文字列を移動する。
Exes マクロの実行用ファイル。

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)

InsetText.js

キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。 SSnippet.js・Blockize.js・SmartBreak.jsを統合して一から作り直したもの。 検索条件やテンプレートはJSONで指定する。

機能
  • 複数条件での検索
    • 検索範囲をキャレット行・キャレット位置に基づいて指定可能
  • 編集モードによる絞り込み
  • テンプレートへの検索マッチやキャレット前後・選択部分などの埋め込み
    • 一部分だけも可能
  • インデントの考慮
  • 選択範囲とは違う範囲への挿入
  • 挿入後の選択範囲指定
  • 一致するエントリーが無い場合の代替テンプレート
検索方法
  • (先頭・末尾/選択位置の直前・直後)に一致
  • (選択位置の前後/選択文字列)に(一致/含まれる/長さが一致)
  • 行全体に(含まれる/長さが一致)
  • (選択位置の前後/選択文字列/行全体)を正規表現検索
  • 上記それぞれの否定検索

e.g. 仮に以下の様なinsettext.jsonを用意する。

{
  "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"
  }
}

Mery上で

[Tab]fori

というテキストの末尾にキャレットがある時、次のマクロを実行する。

var g=new InsetText("insettext.json").match(false).generated[0];
if(g){
  g.insert();
}
  1. この時InsetTextはJSONファイルのentriesをリスト化し、現在の編集モードが"modes"にあればそのエントリーを検索に使用する。
  2. 検索するメソッドは"InsetText#match"。
  3. 検索条件は"conditions"で指定する。複数指定できるが、全てにマッチした時のみそのエントリーがマッチしたとみなす。検索範囲は現在の行に限る。
  4. "type"は検索方法を指定する。14であれば「選択位置より前の文字列を正規表現検索」する。(この番号はInsetText.SearchTypesを参照)
  5. "text"は検索文字列で、ここでは正規表現パターンになる。「選択位置より前の文字列」が検索範囲で「$」を指定しているので、選択範囲の直前がfori/forj/forkのいずれかであればマッチは成功となる。
  6. マッチが成功すれば、"template"から挿入する文字列を作成する。「{0:8-1,0:8}」は元のテキストの範囲を表し、その部分のテキストをテンプレートに埋め込んで文字列を作成できる。「,」の前は開始位置、後は終了位置を表す。「:」の前はconditionsのインデックスを表す(0始まり)。「:」の後の数字はテキスト中での位置を表す(InsetText.RangeTypes)。「8」はマッチ終了位置を意味する。「-1」はその位置からの差分を表す。なので「{0:8-1,0:8}」は「conditionsの0番目のマッチ終了位置より1文字遡った位置から、conditionsの0番目のマッチ終了位置」までの文字列を表す事になる。つまりマッチした最後の1文字「i」になる。これがテンプレートに埋め込まれて文字列が完成する。
  7. こうして作成された文字列は他の情報と共にInsetText#generatedに追加される。複数のエントリーがマッチする事もあるが、マクロで「match(true)」とすれば1つのエントリーがマッチした時点で強制終了する。どちらにせよInsetText#generatedは配列なのでそこから必要なものを選ぶことになる。
  8. テキストの挿入は"InsetText#generated#insert"で行う。挿入位置は"range"で指定する。指定方法はテンプレートの範囲指定と同じだが、ここでは省略してconditionsのインデックス「0」だけを指定しているので、挿入位置は「conditionsの0番目のマッチ位置全体」になる。
  9. "indent"を指定していれば、挿入する文字列が複数行の場合に、1行目に合わせてインデントを追加する。これで上のテキストは次の様になる。
[Tab]for(var i=0;i<.length;i++){
[Tab][Tab]
[Tab]}

なお、テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。ここでは「{s}」のみ指定しているので、「.length」の前にキャレットが移動する。 どのエントリーもマッチしなかった場合、"sub"に指定したテンプレートから文字列を作成してInsetText#generatedに追加する。"sub"が存在しなければInsetText#generatedは空になり、挿入できる文字列は何もないという事になる。

MouseEmulator.js

Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/)を利用してマウスの操作や座標の取得をする。

古いもの・非推奨

KeyList.js
簡単なJSON形式のファイル読み書き。あまり汎用には使えない。

InsetText.jsに統合したもの

SSnippet.js
キャレット直前の文字列をキーとして補完する。
Blockize.js
選択部分をテンプレートにはめ込んだブロックを挿入する。
SmartBreak.js
ちょっと賢く改行する。

WidePop.jsに統合したもの

SimplePM.js
テキストと実行コマンドのみからなる単純なPopupMenu。
WidePM.js
いろいろできるPopupMenu。

Events

イベントマクロを使いやすく(?)したもの。 大体のメリットとしては、

  • ポップアップ地獄を回避。
  • イベント編集に必要なファイルは1つだけ。
  • 同じ様な処理にファイルを分けなくていい。
Event.js
イベントを実行するクラス。イベント名に応じてEventMain.jsの関数を呼び出す。また例外メッセージをアウトプットに投げている。
EventMain.js
イベントで実行される関数のファイル。イベントの編集はこのファイルをいじるだけでいい。
EventTemplate.js
1つのファイルで通常とイベントと両方のマクロに利用できるようするテンプレート。
「On~」で始まるファイル
Meryでイベントとして登録するファイル。Event.executeを呼び出すだけ。
EventMethod.js
イベント用に作った関数。

ダウンロード

BitBucket

覚え書き

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は無効。

スポンサーリンク