「カッコをはずす」の版間の差分
ナビゲーションに移動
検索に移動
ページを新規作成 |
細 →ソースコード |
||
| 31行目: | 31行目: | ||
* 選択範囲の外側 (前と後) の各1文字がカッコのときも、カッコをはずせます。 | * 選択範囲の外側 (前と後) の各1文字がカッコのときも、カッコをはずせます。 | ||
*/ | */ | ||
// ▼「対になるカッコ」の種類を列挙する ▼ | // ▼「対になるカッコ」の種類を列挙する ▼ | ||
// (※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ) | // (※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ) | ||
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〟‘’“”――~~〜〜 "; | var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〟‘’“”――~~〜〜 "; | ||
// ■ 選択範囲の外側 (前と後) の各1文字がカッコのときも除去する? ■ | // ■ 選択範囲の外側 (前と後) の各1文字がカッコのときも除去する? ■ | ||
| 69行目: | 71行目: | ||
if ( removeOuterBracketsEnable && ! del ) { | if ( removeOuterBracketsEnable && ! del ) { | ||
for ( var i = 0; i < brackets.length - 1; i ++ ) { | for ( var i = 0; i < brackets.length - 1; i ++ ) { | ||
var o = brackets[ i ]; // 開きカッコ | var o = brackets[ i ]; // 開きカッコ | ||
var c = brackets[ i + 1 ] // 閉じカッコ | var c = brackets[ i + 1 ] // 閉じカッコ | ||
if ( i % 2 == 0 | if ( i % 2 == 0 | ||
&& d.Text.charAt( tPos - o.length ) == o | && d.Text.charAt( tPos - o.length ) == o | ||
&& d.Text.charAt( bPos ) == c ) { | && d.Text.charAt( bPos ) == c ) { | ||
s.SetAnchorPos( tPos - o.length ); // | s.SetAnchorPos( tPos - o.length ); // 選択範囲の先頭を1文字拡張 | ||
s.SetActivePos( bPos + c.length, true ); // | s.SetActivePos( bPos + c.length, true ); // 選択範囲の末尾を1文字拡張 | ||
st = s.Text; | st = s.Text; | ||
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾の各1文字ずつ削除 | s.Text = st.slice( o.length, - c.length ); // 先頭と末尾の各1文字ずつ削除 | ||
2019年3月14日 (木) 20:59時点における版
選択範囲の "最初の1文字" と "最後の1文字" が「対になるカッコ」のとき、カッコ囲いをはずします。
- 選択範囲の "外側 (前と後) の各1文字" が「対になるカッコ」のときも、カッコをはずせます。
- カッコの種類はソースコード内で定義したもののみ
(開き/閉じカッコはそれぞれ「1文字」ずつのセットで)。 - カッコの種類
- 各種のカッコ(全角/半角/縦書き)
- 各種の引用符(全角/半角)
- ダーシ、波ダーシ、チルダ (全角)
- 半角空白も含んでいるので、選択単語の左右の半角空白も削除できます。
- 1回の実行につき1組のカッコ囲いをはずします。
- 例. 以下の行で [ "hoge" ] を範囲選択して連続で実行した場合、次のように作用します。
( [ "hoge" ] ) // 元の文字列 ( "hoge" ) // 1回 実行後: [ と ] を削除しました。 ( "hoge" ) // 2回 実行後: ␣ と ␣ を削除しました。 ( hoge ) // 3回 実行後: " と " を削除しました。 (hoge) // 4回 実行後: ␣ と ␣ を削除しました。 hoge // 5回 実行後: ( と ) を削除しました。
ソースコード
#title="カッコをはずす"
#tooltip="対になるカッコを除去する"
/**
* 選択範囲の最初の1文字と最後の1文字が「対になるカッコ」のとき、カッコ囲いをはずします。
* 選択範囲の外側 (前と後) の各1文字がカッコのときも、カッコをはずせます。
*/
// ▼「対になるカッコ」の種類を列挙する ▼
// (※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ)
var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〟‘’“”――~~〜〜 ";
// ■ 選択範囲の外側 (前と後) の各1文字がカッコのときも除去する? ■
// (※ 選択範囲の前後を1文字ずつ拡張してカッコを除去する)
var removeOuterBracketsEnable = true; // true:する / false:しない
var d = document;
var s = d.selection;
var st = s.Text; // 選択範囲の文字列
var act = s.GetActivePos();
var anc = s.GetAnchorPos();
var tPos = ( anc < act ) ? anc : act; // 選択範囲の先頭位置
var bPos = ( anc < act ) ? act : anc; // 選択範囲の末尾位置
var del = false;
// 選択範囲内の最初と最後の各1文字がカッコのとき
for ( var i = 0; i < brackets.length - 1; i ++ ) {
var o = brackets[ i ]; // 開きカッコ
var c = brackets[ i + 1 ] // 閉じカッコ
if ( st.length > 1 && i % 2 == 0
&& st.charAt( 0 ) == o
&& st.charAt( st.length - c.length ) == c ) {
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾の各1文字ずつを削除
s.SetAnchorPos( tPos ); // 選択範囲を復帰する
Status = " " + ( o == " " ? "␣" : o ) + " と "
+ ( c == " " ? "␣" : c ) + " を削除しました。";
del = true;
break;
}
}
// 選択範囲の外側 (前と後) の各1文字がカッコのとき
if ( removeOuterBracketsEnable && ! del ) {
for ( var i = 0; i < brackets.length - 1; i ++ ) {
var o = brackets[ i ]; // 開きカッコ
var c = brackets[ i + 1 ] // 閉じカッコ
if ( i % 2 == 0
&& d.Text.charAt( tPos - o.length ) == o
&& d.Text.charAt( bPos ) == c ) {
s.SetAnchorPos( tPos - o.length ); // 選択範囲の先頭を1文字拡張
s.SetActivePos( bPos + c.length, true ); // 選択範囲の末尾を1文字拡張
st = s.Text;
s.Text = st.slice( o.length, - c.length ); // 先頭と末尾の各1文字ずつ削除
s.SetAnchorPos( tPos - o.length ); // 選択範囲を復帰する
Status = " " + ( o == " " ? "␣" : o ) + " と "
+ ( c == " " ? "␣" : c ) + " を削除しました。";
break;
}
}
}
スポンサーリンク