「対応する括弧に移動」の版間の差分
スペースからタブに変更 |
SyntaxHighlightにcopyの追加 |
||
| (同じ利用者による、間の4版が非表示) | |||
| 1行目: | 1行目: | ||
このマクロは[https://www.haijin-boys.com/software/mery/mery-3-6-0#17 Mery Ver 3.6.1]で追加されたコマンド「対応する括弧へ移動」と同機能です。 | このマクロは[https://www.haijin-boys.com/software/mery/mery-3-6-0#17 Mery Ver 3.6.1]で追加されたコマンド「対応する括弧へ移動」と同機能です。 | ||
== | == Kuro, kurama 版 == | ||
対応する括弧に移動します。「shift」変数を「true」に設定した場合は選択しながら移動します。 | |||
<syntaxhighlight lang="javascript" copy> | |||
<syntaxhighlight lang="javascript"> | |||
// ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||
// 対応する括弧に移動 | // 対応する括弧に移動 | ||
| 25行目: | 22行目: | ||
// ステータスバーを消去 | // ステータスバーを消去 | ||
Status = ""; | Status = ""; | ||
// Selection オブジェクトを取得 | |||
var sel = document.selection; | |||
// カーソル位置を保存 | |||
var ax = sel.GetActivePointX(mePosLogical); | |||
var ay = sel.GetActivePointY(mePosLogical); | |||
// スクロール位置を保存 | |||
var sx = ScrollX; | |||
var sy = ScrollY; | |||
// カーソル位置を復元 | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
// 単語を選択 | |||
sel.SelectWord(); | |||
// 現在位置の括弧を取得 | |||
var c1 = sel.Text; | |||
// 選択範囲を解除 | |||
sel.Collapse(); | |||
var l = lp.indexOf(c1); | |||
var r = rp.indexOf(c1); | |||
var st = 0; | |||
if (l > -1) { | |||
// 対応する括弧の種類を取得 | |||
var c2 = rp.charAt(l); | |||
sel.EndOfDocument(true); | |||
var s = sel.Text; | |||
// カーソル位置を復元 | // カーソル位置を復元 | ||
SetActivePoint(mePosLogical, ax, ay, false); | sel.SetActivePoint(mePosLogical, ax, ay, false); | ||
// | // スクロール位置を復元 | ||
ScrollX = sx; | |||
ScrollY = sy; | |||
var x = ax; | |||
var y = ay; | |||
for (var i = 0; i < s.length; i++) { | |||
x++; | |||
if (s.charAt(i) == c1) { | |||
st++; | |||
} | } | ||
if (s.charAt(i) == c2) { | |||
st--; | |||
} | |||
if (st == 0) { | |||
y = sel.GetActivePointY(mePosLogical); | |||
// カーソル位置を復元 | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
sel.SetActivePoint(mePosLogical, x, y, shift); | |||
// 左に戻る | |||
sel.CharLeft(shift, 1); | |||
break; | |||
} | |||
if (s.charAt(i) == "\n") { | |||
x = 1; | |||
y = sel.GetActivePointY(mePosLogical) + 1; | |||
sel.SetActivePoint(mePosLogical, x, y, false); | |||
sel.StartOfLine(false, mePosLogical); | |||
x = sel.GetActivePointX(mePosLogical); | |||
} | } | ||
} | } | ||
if (st | } else if (r > -1) { | ||
// 対応する括弧の種類を取得 | |||
var c2 = lp.charAt(r); | |||
sel.CharRight(false, 1); | |||
sel.StartOfDocument(true); | |||
var s = sel.Text; | |||
// カーソル位置を復元 | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
// スクロール位置を復元 | |||
ScrollX = sx; | |||
ScrollY = sy; | |||
var x = ax; | |||
for (var i = s.length - 1; i >= 0; i--) { | |||
x--; | |||
if (s.charAt(i) == c1) { | |||
st++; | |||
} | |||
if (s.charAt(i) == c2) { | |||
st--; | |||
} | |||
if (st == 0) { | |||
y = sel.GetActivePointY(mePosLogical); | |||
// カーソル位置を復元 | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
sel.SetActivePoint(mePosLogical, x, y, shift); | |||
// 右に進む | |||
sel.CharRight(shift, 1); | |||
break; | |||
} | |||
if (s.charAt(i) == "\n") { | |||
x = 1; | |||
y = sel.GetActivePointY(mePosLogical) - 1; | |||
sel.SetActivePoint(mePosLogical, x, y, false); | |||
sel.EndOfLine(false, mePosLogical); | |||
x = sel.GetActivePointX(mePosLogical); | |||
} | |||
} | } | ||
} else { | |||
// 括弧が無い場合は元の位置に戻す | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
Status = "カーソル位置に括弧が見つかりませんでした"; | |||
} | |||
if (st != 0) { | |||
sel.SetActivePoint(mePosLogical, ax, ay, false); | |||
Status = "対応する括弧が見つかりませんでした"; | |||
} | } | ||
// 描画開始 | // 描画開始 | ||
| 131行目: | 128行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == masme 版 == | ||
* ステータスバーに括弧間の文字数を表示するようにしました。 | * ステータスバーに括弧間の文字数を表示するようにしました。 | ||
* Kuro, kurama 版の不安定な挙動を調整しました。 | * Kuro, kurama 版の不安定な挙動を調整しました。 | ||
| 147行目: | 144行目: | ||
=== ソースコード === | === ソースコード === | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
//■対応する括弧に移動 | //■対応する括弧に移動 | ||
// 2014-02-05 - 2019-04-12 | // 2014-02-05 - 2019-04-12 | ||
スポンサーリンク