「対応する括弧に移動」の版間の差分

MSY-07 (トーク | 投稿記録)
スペースからタブに変更
MSY-07 (トーク | 投稿記録)
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」に設定した場合は選択しながら移動します。


「shift」変数を「true」に書き換えると、選択しながら移動します。
<syntaxhighlight lang="javascript" copy>
 
== Kuro, Kurama 版 ==
<syntaxhighlight lang="javascript">
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// 対応する括弧に移動
// 対応する括弧に移動
25行目: 22行目:
// ステータスバーを消去
// ステータスバーを消去
Status = "";
Status = "";
with (document.selection) {
// Selection オブジェクトを取得
// カーソル位置を保存
var sel = document.selection;
var ax = GetActivePointX(mePosLogical);
// カーソル位置を保存
var ay = GetActivePointY(mePosLogical);
var ax = sel.GetActivePointX(mePosLogical);
// スクロール位置を保存
var ay = sel.GetActivePointY(mePosLogical);
var sx = ScrollX;
// スクロール位置を保存
var sy = ScrollY;
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);
// 単語を選択
// スクロール位置を復元
SelectWord();
ScrollX = sx;
// 現在位置の括弧を取得
ScrollY = sy;
var c1 = Text;
var x = ax;
// 選択範囲を解除
var y = ay;
Collapse();
for (var i = 0; i < s.length; i++) {
var l = lp.indexOf(c1);
x++;
var r = rp.indexOf(c1);
if (s.charAt(i) == c1) {
var st = 0;
st++;
if (l > -1) {
// 対応する括弧の種類を取得
var c2 = rp.charAt(l);
EndOfDocument(true);
var s = Text;
// カーソル位置を復元
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 = GetActivePointY(mePosLogical);
// カーソル位置を復元
SetActivePoint(mePosLogical, ax, ay, false);
SetActivePoint(mePosLogical, x, y, shift);
// 左に戻る
CharLeft(shift, 1);
break;
}
if (s.charAt(i) == "\n") {
x = 1;
y = GetActivePointY(mePosLogical) + 1;
SetActivePoint(mePosLogical, x, y, false);
StartOfLine(false, mePosLogical);
x = GetActivePointX(mePosLogical);
}
}
}
} else if (r > -1) {
if (s.charAt(i) == c2) {
// 対応する括弧の種類を取得
st--;
var c2 = lp.charAt(r);
}
CharRight(false, 1);
if (st == 0) {
StartOfDocument(true);
y = sel.GetActivePointY(mePosLogical);
var s = Text;
// カーソル位置を復元
// カーソル位置を復元
sel.SetActivePoint(mePosLogical, ax, ay, false);
SetActivePoint(mePosLogical, ax, ay, false);
sel.SetActivePoint(mePosLogical, x, y, shift);
// スクロール位置を復元
// 左に戻る
ScrollX = sx;
sel.CharLeft(shift, 1);
ScrollY = sy;
break;
var x = ax;
}
for (var i = s.length - 1; i >= 0; i--) {
if (s.charAt(i) == "\n") {
x--;
x = 1;
if (s.charAt(i) == c1) {
y = sel.GetActivePointY(mePosLogical) + 1;
st++;
sel.SetActivePoint(mePosLogical, x, y, false);
}
sel.StartOfLine(false, mePosLogical);
if (s.charAt(i) == c2) {
x = sel.GetActivePointX(mePosLogical);
st--;
}
if (st == 0) {
y = GetActivePointY(mePosLogical);
// カーソル位置を復元
SetActivePoint(mePosLogical, ax, ay, false);
SetActivePoint(mePosLogical, x, y, shift);
// 右に進む
CharRight(shift, 1);
break;
}
if (s.charAt(i) == "\n") {
x = 1;
y = GetActivePointY(mePosLogical) - 1;
SetActivePoint(mePosLogical, x, y, false);
EndOfLine(false, mePosLogical);
x = GetActivePointX(mePosLogical);
}
}
}
} else {
// 括弧が無い場合は元の位置に戻す
SetActivePoint(mePosLogical, ax, ay, false);
Status = "カーソル位置に括弧が見つかりませんでした";
}
}
if (st != 0) {
} else if (r > -1) {
SetActivePoint(mePosLogical, ax, ay, false);
// 対応する括弧の種類を取得
Status = "対応する括弧が見つかりませんでした";
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 版 ==
== 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
スポンサーリンク