「カッコをはずす」の版間の差分
ナビゲーションに移動
検索に移動
細 →ソースコード |
「カッコをはずす」を更新、「カッコを削除/追加」を追加 |
||
| 1行目: | 1行目: | ||
= カッコをはずす = | |||
選択範囲の "最初の1文字" と "最後の1文字" が「'''対になるカッコ'''」のとき、または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときに、カッコ囲いをはずします。 | |||
* カッコの種類はソースコード内で定義したもののみ <br>(開き/ | |||
* カッコの種類はソースコード内で定義したもののみ <br>(開き/閉じカッコはそれぞれ「1文字」ずつのペアで)。 | |||
* カッコの種類 | * カッコの種類 | ||
:* | :* 各種のカッコ(半角/全角/縦書き) | ||
:* | :: () 「」 <> [] {} ⦅⦆ <br> () 「」 『』 <> [] {} 【】 〖〗 ⦅⦆ 〚〛 〔〕 〘〙 〈〉 《》 <br> ﹁﹂ ﹃﹄ ︵︶ ︿﹀ ︽︾ ︹︺ ︷︸ ︻︼ ︗︘ | ||
:* | :* 各種の引用符(半角/全角) | ||
:* ''' | :: " " ' ' ” ” ’ ’ 〝 〞 〝 〟 ‘ ’ “ ” | ||
:* ーダーシー、〜波ダーシ〜、~全角チルダ~ | |||
:* '''␣半角空白␣'''も含んでいるので、選択単語の左右の半角空白も削除できます。 | |||
<br> | |||
* 1回の実行につき1組のカッコ囲いをはずします。 | * 1回の実行につき1組のカッコ囲いをはずします。 | ||
:: 例. 以下の行で <u>'''[ "hoge" ]'''</u> | :: 例. 以下の行で <u>'''[ "hoge" ]'''</u> を範囲選択して連続で実行した場合、次のように作用します。(※内側の両端が優先) | ||
( <u>[ "hoge" ]</u> ) // 元の文字列 | ( <u>[ "hoge" ]</u> ) // 元の文字列 | ||
( <u> "hoge" </u> ) // | ( <u> "hoge" </u> ) // 1回目 実行後: ''[ と ] を削除しました。'' | ||
( <u>"hoge"</u> ) // | ( <u>"hoge"</u> ) // 2回目 実行後: ''␣ と ␣ を削除しました。'' | ||
( <u>hoge</u> ) // | ( <u>hoge</u> ) // 3回目 実行後: ''" と " を削除しました。'' | ||
(<u>hoge</u>) // | (<u>hoge</u>) // 4回目 実行後: ''␣ と ␣ を削除しました。'' ※選択範囲の外側 | ||
<u>hoge</u> // | <u>hoge</u> // 5回目 実行後: ''( と ) を削除しました。'' ※選択範囲の外側 | ||
* 選択範囲(複数行)の各行の行頭/行末からカッコを除去したい場合は、「[[カッコで囲う]](ポップアップメニュー)」マクロや「[[テキスト整形]]」マクロの削除系コマンドをご利用ください。 | |||
| 28行目: | 33行目: | ||
/** | /** | ||
* | * ------------------------------------------------------------ | ||
* | * カッコをはずす (2019/03/14 - 2019/03/18, sukemaru) | ||
* ------------------------------------------------------------ | |||
* 選択範囲の最初の1文字と最後の1文字が「対になるカッコ」のとき、 | |||
* または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときに、 | |||
* カッコ囲いをはずします。 | |||
* ※「外側」オプションが有効な場合でも、 | |||
* 選択範囲"内側"の先頭/末尾のカッコの削除が優先されます。 | |||
*/ | */ | ||
// ▼「対になるカッコ」の種類 (始)+(終) を列挙する ▼ | |||
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ | |||
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜 "; | |||
// | // 削除対象に ▼各種記号のペア▼ を追加する場合は、コメントアウトを解除する | ||
// | // brackets += "++--**//##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__"; | ||
// ■ | // ■ 選択範囲の『外側』(前と後ろ) の各1文字がカッコのときも除去する? ■ | ||
// (※ 選択範囲の前後を1文字ずつ拡張してカッコを除去する) | // (※ 選択範囲の前後を1文字ずつ拡張してカッコを除去する) | ||
var removeOuterBracketsEnable = true; // true:する / false:しない | var removeOuterBracketsEnable = true; // true:する / false:しない | ||
| 44行目: | 58行目: | ||
var d = document; | var d = document; | ||
var s = | if ( d.ReadOnly ) { | ||
Status = " ドキュメントは書き換え禁止です。"; | |||
Quit(); | |||
} | |||
var s = document.selection; | |||
var st = s.Text; // 選択範囲の文字列 | var st = s.Text; // 選択範囲の文字列 | ||
var act = s.GetActivePos(); | var act = s.GetActivePos(); | ||
var anc = s.GetAnchorPos(); | var anc = s.GetAnchorPos(); | ||
var | var tp = ( anc < act ) ? anc : act; // 選択範囲の先頭位置 | ||
var | var bp = ( anc < act ) ? act : anc; // 選択範囲の末尾位置 | ||
var del = false; | var del = false; | ||
var o, c; | |||
// 選択範囲内の最初と最後の各1文字がカッコのとき | // 選択範囲内の最初と最後の各1文字がカッコのとき | ||
for ( var i = 0 | for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) { | ||
o = brackets[ i ]; // 開きカッコ | |||
c = brackets[ i + 1 ] // 閉じカッコ | |||
if ( st.length > | if ( st.length >= o.length + c.length && i % 2 == 0 | ||
&& st. | && st.slice( 0, o.length ) == o | ||
&& st. | && st.slice( - c.length ) == c ) { | ||
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾の各1文字ずつを削除 | s.Text = st.slice( o.length, - c.length );// 先頭と末尾の各1文字ずつを削除 | ||
s.SetAnchorPos( | s.SetAnchorPos( tp ); // 選択範囲を復帰する | ||
del = true; | del = true; | ||
break; | break; | ||
| 70行目: | 88行目: | ||
// 選択範囲の外側 (前と後) の各1文字がカッコのとき | // 選択範囲の外側 (前と後) の各1文字がカッコのとき | ||
if ( removeOuterBracketsEnable && ! del ) { | if ( removeOuterBracketsEnable && ! del ) { | ||
for ( var i = 0 | for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) { | ||
o = brackets[ i ]; // 開きカッコ | |||
c = brackets[ i + 1 ] // 閉じカッコ | |||
if ( i % 2 == 0 | if ( i % 2 == 0 | ||
&& d.Text. | && d.Text.slice( tp - o.length, tp ) == o | ||
&& d.Text. | && d.Text.slice( bp, bp + c.length ) == c ) { | ||
s.SetAnchorPos( | s.SetAnchorPos( tp - o.length ); // 選択範囲の先頭を1文字拡張 | ||
s.SetActivePos( | s.SetActivePos( bp + c.length, true ); // 選択範囲の末尾を1文字拡張 | ||
st = s.Text; | st = s.Text; | ||
s.Text = st.slice( o.length, - c.length ); // | s.Text = st.slice( o.length, - c.length );// 先頭と末尾の各1文字を削除 | ||
s.SetAnchorPos( | s.SetAnchorPos( tp - o.length ); // 選択範囲を復帰する | ||
del = true; | |||
break; | break; | ||
} | } | ||
} | } | ||
} | |||
// 終了ステータス | |||
if ( del ) { | |||
Status = " " + ( o == " " ? "␣" : o ) + " と " | |||
+ ( c == " " ? "␣" : c ) + " を削除しました。"; | |||
} | |||
else { | |||
Status = " カッコがありません。" | |||
} | } | ||
</source> | </source> | ||
= カッコを削除/追加 = | |||
選択範囲の先頭と末尾が「対になるカッコ」のときは、カッコ囲いをはずします。<br> | |||
選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、「さいごに 追加/削除 したカッコ」と同種のカッコで選択範囲を囲います。 | |||
* '''※[[includeライブラリ]]を利用して「さいごに 追加/削除 したカッコ」を外部ファイルに保存します。''' | |||
<div id="注1" class="warningbox"> | |||
: あらかじめ [[includeライブラリ]] を Macros フォルダにインストールしてください。 | |||
:: 外部ファイルの保存場所は Mery\Macros\MacroSettings\<カッコを削除/追加>.json <br> または %AppData%\Mery\MacroSettings\<カッコを削除/追加>.json です。 <br>( <カッコを削除/追加> の部分はこのマクロのファイル名と同一になります ) | |||
</div> | |||
* 「対になるカッコ」の定義は「[[カッコをはずす]]」マクロとおなじです。 | |||
* 定義されたカッコのペアを削除したときに「さいごに 追加/削除 したカッコ」を更新します。 | |||
* カッコの追加に使用する前に、一度「使いたいカッコ」の削除を実行して、設定ファイルの「さいごに 追加/削除 したカッコ」を更新する必要があります。<br> e.g. "削除" → "追加" → "追加" …… (削除) → (追加) → (追加) …… | |||
* 両端が '''" "''' で囲われた文字列を範囲選択して、外側を '''( )''' などで囲うことはできません。<br> ∵ '''" "''' のペアもカッコの定義にあるので「削除」が優先。 | |||
* おなじ選択範囲のまま連続で実行すると、削除 ⇔ 追加 の繰り返しになります。 | |||
== ソースコード == | |||
<source lang="javascript"> | |||
#title="カッコを削除/追加" | |||
#tooltip="対になるカッコを削除/追加する" | |||
#icon="code_slashed.ico" | |||
#include "include/IO.js" | |||
/** | |||
* ------------------------------------------------------------ | |||
* カッコを削除/追加 (2019/03/18, sukemaru) | |||
* ------------------------------------------------------------ | |||
* 選択範囲の先頭と末尾が「対になるカッコ」のときは、カッコ囲いをはずします。 | |||
* 選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、 | |||
* さいごに 追加/削除 したカッコと同種のカッコで囲います。 | |||
*/ | |||
// ▼「対になるカッコ」の種類 (始)+(終) を列挙する ▼ | |||
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ | |||
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜 "; | |||
// 削除対象に ▼各種記号のペア▼ を追加する場合は、コメントアウトを解除する | |||
// brackets += "++--**//##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__"; | |||
var d = document; | |||
if ( d.ReadOnly ) { | |||
Status = " ドキュメントは書き換え禁止です。"; | |||
Quit(); | |||
} | |||
var setting = {}; | |||
// JSON ファイルから「最後に使用したカッコ」を読み込む | |||
setting = IO.Deserialize( setting ); | |||
var s = document.selection; | |||
var st = s.Text; // 選択範囲の文字列 | |||
var act = s.GetActivePos(); | |||
var anc = s.GetAnchorPos(); | |||
var tp = ( anc < act ) ? anc : act; // 選択範囲の先頭位置 | |||
var bp = ( anc < act ) ? act : anc; // 選択範囲の末尾位置 | |||
var o = setting.openBracket ? setting.openBracket : "("; | |||
var c = setting.closeBracket ? setting.closeBracket : ")"; | |||
var del = false; | |||
// ループ処理で「対になるカッコ」と一致するかチェック | |||
for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) { | |||
o = brackets[ i ]; // 開きカッコ | |||
c = brackets[ i + 1 ] // 閉じカッコ | |||
// 選択範囲内の先頭と末尾が「対になるカッコ」のとき | |||
if ( st.length > o.length + c.length && i % 2 == 0 | |||
&& st.slice( 0, o.length ) == o | |||
&& st.slice( - c.length ) == c ) { | |||
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾のカッコを削除 | |||
s.SetAnchorPos( tp ); // 選択範囲を復帰する | |||
del = true; | |||
setting.openBracket = o; | |||
setting.closeBracket = c; | |||
IO.Serialize( setting ); // ヒットしたカッコを保存する | |||
break; | |||
} | |||
} | |||
// 選択範囲内の先頭と末尾が「対になるカッコ」ではなかったとき | |||
if ( ! del ) { | |||
// 「最後に使用したカッコ」 | |||
var o = setting.openBracket; | |||
var c = setting.closeBracket; | |||
s.Text = o + st + c; // 先頭と末尾にカッコを追加 | |||
s.SetAnchorPos( tp ); // 選択範囲を復帰する | |||
} | |||
// 終了ステータス | |||
if ( del ) { | |||
Status = " " + o.replace( /[ ]+/g , "␣" ) + " と " | |||
+ c.replace( /[ ]+/g , "␣" ) + " を削除しました。"; | |||
} | |||
else { | |||
Status = " " + o.replace( /[ ]+/g , "␣" ) + " カッコ " | |||
+ c.replace( /[ ]+/g , "␣" ) + " で囲いました。"; | |||
} | |||
</source> | |||
= メモ = | |||
* 注釈では「開きカッコ/閉じカッコの指定は '''各1文字''' ずつ」としてありますが、削除ループのコードは「複数文字」の文字列を扱えるようにしてあります。<br> 変数 blackets の最初の代入値を配列形式にすれば、 (始)と(終) のペアは「任意の複数文字の文字列」も追加できます。<br> e.g. ''var brackets = [ "(" , ")" , "<" , ">" , "<nowiki><!-- " , " --></nowiki>" , "<" , " />" ];'' | |||
* カッコの定義文字列に "\n" を含めることを想定していません(問題ないはずですが動作検証していません)。 | |||
2019年3月18日 (月) 19:31時点における版
カッコをはずす
選択範囲の "最初の1文字" と "最後の1文字" が「対になるカッコ」のとき、または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときに、カッコ囲いをはずします。
- カッコの種類はソースコード内で定義したもののみ
(開き/閉じカッコはそれぞれ「1文字」ずつのペアで)。 - カッコの種類
- 各種のカッコ(半角/全角/縦書き)
- () 「」 <> [] {} ⦅⦆
() 「」 『』 <> [] {} 【】 〖〗 ⦅⦆ 〚〛 〔〕 〘〙 〈〉 《》
﹁﹂ ﹃﹄ ︵︶ ︿﹀ ︽︾ ︹︺ ︷︸ ︻︼ ︗︘
- 各種の引用符(半角/全角)
- " " ' ' ” ” ’ ’ 〝 〞 〝 〟 ‘ ’ “ ”
- ーダーシー、〜波ダーシ〜、~全角チルダ~
- ␣半角空白␣も含んでいるので、選択単語の左右の半角空白も削除できます。
- 1回の実行につき1組のカッコ囲いをはずします。
- 例. 以下の行で [ "hoge" ] を範囲選択して連続で実行した場合、次のように作用します。(※内側の両端が優先)
( [ "hoge" ] ) // 元の文字列 ( "hoge" ) // 1回目 実行後: [ と ] を削除しました。 ( "hoge" ) // 2回目 実行後: ␣ と ␣ を削除しました。 ( hoge ) // 3回目 実行後: " と " を削除しました。 (hoge) // 4回目 実行後: ␣ と ␣ を削除しました。 ※選択範囲の外側 hoge // 5回目 実行後: ( と ) を削除しました。 ※選択範囲の外側
ソースコード
#title="カッコをはずす"
#tooltip="対になるカッコを除去する"
/**
* ------------------------------------------------------------
* カッコをはずす (2019/03/14 - 2019/03/18, sukemaru)
* ------------------------------------------------------------
* 選択範囲の最初の1文字と最後の1文字が「対になるカッコ」のとき、
* または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときに、
* カッコ囲いをはずします。
* ※「外側」オプションが有効な場合でも、
* 選択範囲"内側"の先頭/末尾のカッコの削除が優先されます。
*/
// ▼「対になるカッコ」の種類 (始)+(終) を列挙する ▼
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜 ";
// 削除対象に ▼各種記号のペア▼ を追加する場合は、コメントアウトを解除する
// brackets += "++--**//##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__";
// ■ 選択範囲の『外側』(前と後ろ) の各1文字がカッコのときも除去する? ■
// (※ 選択範囲の前後を1文字ずつ拡張してカッコを除去する)
var removeOuterBracketsEnable = true; // true:する / false:しない
var d = document;
if ( d.ReadOnly ) {
Status = " ドキュメントは書き換え禁止です。";
Quit();
}
var s = document.selection;
var st = s.Text; // 選択範囲の文字列
var act = s.GetActivePos();
var anc = s.GetAnchorPos();
var tp = ( anc < act ) ? anc : act; // 選択範囲の先頭位置
var bp = ( anc < act ) ? act : anc; // 選択範囲の末尾位置
var del = false;
var o, c;
// 選択範囲内の最初と最後の各1文字がカッコのとき
for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) {
o = brackets[ i ]; // 開きカッコ
c = brackets[ i + 1 ] // 閉じカッコ
if ( st.length >= o.length + c.length && i % 2 == 0
&& st.slice( 0, o.length ) == o
&& st.slice( - c.length ) == c ) {
s.Text = st.slice( o.length, - c.length );// 先頭と末尾の各1文字ずつを削除
s.SetAnchorPos( tp ); // 選択範囲を復帰する
del = true;
break;
}
}
// 選択範囲の外側 (前と後) の各1文字がカッコのとき
if ( removeOuterBracketsEnable && ! del ) {
for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) {
o = brackets[ i ]; // 開きカッコ
c = brackets[ i + 1 ] // 閉じカッコ
if ( i % 2 == 0
&& d.Text.slice( tp - o.length, tp ) == o
&& d.Text.slice( bp, bp + c.length ) == c ) {
s.SetAnchorPos( tp - o.length ); // 選択範囲の先頭を1文字拡張
s.SetActivePos( bp + c.length, true ); // 選択範囲の末尾を1文字拡張
st = s.Text;
s.Text = st.slice( o.length, - c.length );// 先頭と末尾の各1文字を削除
s.SetAnchorPos( tp - o.length ); // 選択範囲を復帰する
del = true;
break;
}
}
}
// 終了ステータス
if ( del ) {
Status = " " + ( o == " " ? "␣" : o ) + " と "
+ ( c == " " ? "␣" : c ) + " を削除しました。";
}
else {
Status = " カッコがありません。"
}
カッコを削除/追加
選択範囲の先頭と末尾が「対になるカッコ」のときは、カッコ囲いをはずします。
選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、「さいごに 追加/削除 したカッコ」と同種のカッコで選択範囲を囲います。
- ※includeライブラリを利用して「さいごに 追加/削除 したカッコ」を外部ファイルに保存します。
- あらかじめ includeライブラリ を Macros フォルダにインストールしてください。
- 外部ファイルの保存場所は Mery\Macros\MacroSettings\<カッコを削除/追加>.json
または %AppData%\Mery\MacroSettings\<カッコを削除/追加>.json です。
( <カッコを削除/追加> の部分はこのマクロのファイル名と同一になります )
- 外部ファイルの保存場所は Mery\Macros\MacroSettings\<カッコを削除/追加>.json
- 「対になるカッコ」の定義は「カッコをはずす」マクロとおなじです。
- 定義されたカッコのペアを削除したときに「さいごに 追加/削除 したカッコ」を更新します。
- カッコの追加に使用する前に、一度「使いたいカッコ」の削除を実行して、設定ファイルの「さいごに 追加/削除 したカッコ」を更新する必要があります。
e.g. "削除" → "追加" → "追加" …… (削除) → (追加) → (追加) ……
- 両端が " " で囲われた文字列を範囲選択して、外側を ( ) などで囲うことはできません。
∵ " " のペアもカッコの定義にあるので「削除」が優先。
- おなじ選択範囲のまま連続で実行すると、削除 ⇔ 追加 の繰り返しになります。
ソースコード
#title="カッコを削除/追加"
#tooltip="対になるカッコを削除/追加する"
#icon="code_slashed.ico"
#include "include/IO.js"
/**
* ------------------------------------------------------------
* カッコを削除/追加 (2019/03/18, sukemaru)
* ------------------------------------------------------------
* 選択範囲の先頭と末尾が「対になるカッコ」のときは、カッコ囲いをはずします。
* 選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、
* さいごに 追加/削除 したカッコと同種のカッコで囲います。
*/
// ▼「対になるカッコ」の種類 (始)+(終) を列挙する ▼
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜 ";
// 削除対象に ▼各種記号のペア▼ を追加する場合は、コメントアウトを解除する
// brackets += "++--**//##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__";
var d = document;
if ( d.ReadOnly ) {
Status = " ドキュメントは書き換え禁止です。";
Quit();
}
var setting = {};
// JSON ファイルから「最後に使用したカッコ」を読み込む
setting = IO.Deserialize( setting );
var s = document.selection;
var st = s.Text; // 選択範囲の文字列
var act = s.GetActivePos();
var anc = s.GetAnchorPos();
var tp = ( anc < act ) ? anc : act; // 選択範囲の先頭位置
var bp = ( anc < act ) ? act : anc; // 選択範囲の末尾位置
var o = setting.openBracket ? setting.openBracket : "(";
var c = setting.closeBracket ? setting.closeBracket : ")";
var del = false;
// ループ処理で「対になるカッコ」と一致するかチェック
for ( var i = 0, len = brackets.length - 1; i < len; i ++ ) {
o = brackets[ i ]; // 開きカッコ
c = brackets[ i + 1 ] // 閉じカッコ
// 選択範囲内の先頭と末尾が「対になるカッコ」のとき
if ( st.length > o.length + c.length && i % 2 == 0
&& st.slice( 0, o.length ) == o
&& st.slice( - c.length ) == c ) {
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾のカッコを削除
s.SetAnchorPos( tp ); // 選択範囲を復帰する
del = true;
setting.openBracket = o;
setting.closeBracket = c;
IO.Serialize( setting ); // ヒットしたカッコを保存する
break;
}
}
// 選択範囲内の先頭と末尾が「対になるカッコ」ではなかったとき
if ( ! del ) {
// 「最後に使用したカッコ」
var o = setting.openBracket;
var c = setting.closeBracket;
s.Text = o + st + c; // 先頭と末尾にカッコを追加
s.SetAnchorPos( tp ); // 選択範囲を復帰する
}
// 終了ステータス
if ( del ) {
Status = " " + o.replace( /[ ]+/g , "␣" ) + " と "
+ c.replace( /[ ]+/g , "␣" ) + " を削除しました。";
}
else {
Status = " " + o.replace( /[ ]+/g , "␣" ) + " カッコ "
+ c.replace( /[ ]+/g , "␣" ) + " で囲いました。";
}
メモ
- 注釈では「開きカッコ/閉じカッコの指定は 各1文字 ずつ」としてありますが、削除ループのコードは「複数文字」の文字列を扱えるようにしてあります。
変数 blackets の最初の代入値を配列形式にすれば、 (始)と(終) のペアは「任意の複数文字の文字列」も追加できます。
e.g. var brackets = [ "(" , ")" , "<" , ">" , "<!-- " , " -->" , "<" , " />" ]; - カッコの定義文字列に "\n" を含めることを想定していません(問題ないはずですが動作検証していません)。
スポンサーリンク