カッコをはずす

提供: MeryWiki
移動先: 案内検索

選択範囲の "最初の1文字" と "最後の1文字" が「対になるカッコ」のとき、カッコ囲いをはずします。
それにくわえて

  • 「カッコをはずす」マクロでは、選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときにも、カッコ囲いをはずします。
  • 「カッコを削除/追加」マクロでは、選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、「さいごに削除(または追加)したカッコ」と同種のカッコで選択範囲を囲います。
  • 「カッコを追加/削除」マクロは、両者の機能を統合したものです。

削除できるカッコの種類はソースコード内で定義したもののみ(開き/閉じカッコはそれぞれ「1文字」ずつのペアで)。

カッコの種類
  • 各種のカッコ(半角/全角/縦書き)
 ( ) 「 」 < > [ ] { } ⦅ ⦆
( ) 「 」 『 』 < > [ ] { } 【 】 〖 〗 ⦅ ⦆ 〚 〛 〔 〕 〘 〙 〈 〉 《 》
﹁﹂ ﹃﹄ ︵︶ ︿﹀ ︽︾ ︹︺ ︷︸ ︻︼ ︗︘
  • 各種の引用符(半角/全角)
" "  ' '  ” ”  ’ ’  〝 〞  〝 〟  ‘ ’  “ ”
  • ーダーシー、〜波ダーシ〜、~全角チルダ~
  • ␣半角空白␣も含めてあるので、選択単語の左右の半角空白も削除できます。
※ソースコード内に。各種の記号や諸外国後で使用される引用符などのペアを用意してあります。任意で追加してご利用下さい。

カッコを追加する機能は「さいごに削除したカッコ」を記憶しておくことと更新することができるので、ソースコードや散文の校正のさいに使うと便利です。


c.f. カッコで囲う」マクロ: ポップアップメニューから任意のカッコを追加する
   「引用符を追加/削除」マクロ: 特定のカッコまたは引用符の追加/削除トグル



ダウンロード: ファイル:カッコを削除/追加.zip(アイコン入り) 2019/05/03 更新


カッコをはずす[編集]

選択範囲の "最初の1文字" と "最後の1文字" が「対になるカッコ」のとき、または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」のときに、カッコ囲いをはずします。


  • 1回の実行につき1組のカッコ囲いをはずします(※内側の両端が優先。半角空白のペアも除去対象)。
例. 以下の行で [ "hoge" ] を範囲選択して連続で実行した場合、次のように作用します。
( [ "hoge" ] )	// 元の文字列(下線部が選択範囲)

(  "hoge"  )	// 1回目 実行後: [  と  ] を削除しました。
( "hoge" )	// 2回目 実行後: ␣ と ␣ を削除しました。
( hoge )	// 3回目 実行後: "  と  " を削除しました。
(hoge)		// 4回目 実行後: ␣ と ␣ を削除しました。	※選択範囲の外部
hoge		// 5回目 実行後: (  と  ) を削除しました。	※選択範囲の外部
( [ "hoge" ] ) 全体を範囲選択して連続で実行した場合は選択範囲内の外側から、
( [ "hoge" ] ) の hoge だけを範囲選択して連続で実行した場合は選択範囲外の内側から
順にカッコ囲いを解除します。


  • 選択範囲(複数行)の各行の行頭/行末からカッコを除去したい場合は、「カッコで囲う(ポップアップメニュー)」マクロや「テキスト整形」マクロの削除系コマンドをご利用ください。


ソースコード[編集]

#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();
}
else {
  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 );
      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 );
        s.SetActivePos( bp + c.length, true );
        st = s.Text;
        s.Text = st.slice( o.length, - c.length );
        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 です。
( <カッコを削除/追加> の部分はこのマクロのファイル名と同一になります )
  • 定義されたカッコのペアを削除したときに「さいごに 追加/削除 したカッコ」を更新します。
  • カッコの追加に使用する前に、一度「使いたいカッコ」の削除を実行して、設定ファイルの「さいごに 追加/削除 したカッコ」を更新する必要があります。
      e.g. "削除" → "追加" → "追加" …… (削除) → (追加) → (追加) ……
  • 両端が " " で囲われた文字列を範囲選択して、外側を ( ) などで囲うことはできません。
      ∵ " " のペアもカッコの定義にあるので「削除」が優先。
  • おなじ選択範囲のまま連続で実行すると、削除 ⇔ 追加 の繰り返しになります。


ソースコード[編集]

#title="カッコを削除/追加"
#tooltip="対になるカッコを削除/追加する"
#include "include/IO.js"

/**
 * ------------------------------------------------------------
 * カッコを削除/追加 (2019/03/18 - 2019/03/19, sukemaru) 
 * ------------------------------------------------------------
 * 選択範囲の先頭と末尾が「対になるカッコ」のときは、カッコ囲いをはずします。
 * 選択範囲の先頭と末尾が「対になるカッコ」でなかったときは、
 * 「さいごに 追加/削除 したカッコ」と同種のカッコで囲います。
 */


// ▼「対になるカッコ」の種類 (始)+(終) を列挙する ▼ 
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ

var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜  ";

// 削除対象に ▼各種記号のペア▼ を追加する場合は、コメントアウトを解除する
// brackets += "++--**//##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__";


var setting = {};

// JSON ファイルから「最後に使用したカッコ」を読み込む
setting = IO.Deserialize( setting );

var d = document;
if ( d.ReadOnly ) {
  Status = " ドキュメントは書き換え禁止です。";
}

else {
  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;

  // ループ処理で「対になるカッコ」と一致するかチェック
  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;

      if ( o != setting.openBracket || c != setting.closeBracket ) {
        setting.openBracket = o;
        setting.closeBracket = c;
        IO.Serialize( setting );
      }
      break;
    }
  }

  // 選択範囲内の先頭と末尾が「対になるカッコ」ではなかったとき
  if ( ! del ) {
    // 「最後に使用したカッコ」
    o = setting.openBracket ? setting.openBracket : "(";
    c = setting.closeBracket ? 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 , "␣" ) + "  で囲いました。";
  }
}


カッコを追加/削除[編集]

マクロライブラリで公開・配布されている pizz 氏作成の "GetKeyState" も利用して、「カッコをはずす」マクロと「カッコを削除/追加」マクロの機能を統合してあります。

  • マクロ実行時に Ctrl キー が押されているときは、選択範囲を「さいごに 削除/追加 したカッコ」で囲います(→ 詳細は「カッコを削除/追加」マクロの項を参照)。
  • マクロ実行時に Ctrl キーが押されていないとき、選択範囲の最初の1文字と最後の1文字が「対になるカッコ」の場合か、または選択範囲の外側 (前と後) の各1文字が「対になるカッコ」の場合には、カッコ囲いをはずします(→ 詳細は「カッコをはずす」マクロの項を参照)。


  • 外部実行ファイル GetKeyState.exe を利用して Ctrl キー押し下げ判定をします。
あらかじめ "GetKeyState.zip" をダウンロードして、書庫内の "GetKeyState.exe" を Macros フォルダに配置してください。
  • includeライブラリ を利用して「さいごに 追加/削除 したカッコ」を外部ファイルに保存します。
あらかじめ "includeライブラリを" Macros フォルダに配置してください。
外部ファイルの保存場所は Mery\Macros\MacroSettings\<カッコを追加/削除>.json
または  %AppData%\Mery\MacroSettings\<カッコを追加/削除>.json です。
( <カッコを追加/削除> の部分はこのマクロのファイル名と同一になります )
  • Ctrl キーの押し下げ状態でカッコの「追加/削除」の機能を切り替えるので、このマクロにショートカットキーを割り当てる場合は、 Ctrl キーをふくむキーパターンと Ctrl キーをふくまないキーパターンの2つを登録する必要があります。
e.g. Ctrl+F8 と F8  /  Ctrl+8 と Alt+8  など
※ F8 だけを登録しした場合、 Ctrl+F8 での「カッコの追加」はできません。
  • ツールバーにアイコンを置いて実行する場合、アイコンをクリックするときの Ctrl キーの押し下げ状態(Ctrl+クリックか、ただのクリックか)で機能を切り替えます
  • [マクロ]メニューや右クリックメニュー内から実行する場合も、実行するときの Ctrl キーの押し下げ状態(Ctrl+クリック or ただの左クリック、または Ctrl+Enter or Enter)で機能を切り替えます
  • 外部リソースからの読み込みコストがあるため、Ctrl+F8 キーなどや Ctrl+クリックが速すぎると Ctrl キーの押し下げ状態を正しく取得できないことがあります。
    「カッコの追加」がうまく機能しないときは、Ctrl キーを放すタイミングを遅らせてください
    (マクロが発動するまで、またはマクロの処理が終了するまで Ctrl キーを押し下げたままにする)。
  • Ctrl キーを押していないときで、選択範囲がカッコで囲われていない場合はなにもしません。


カスタマイズ
  • ソースコード内の "Ctrl", "ctrl", "control""shift" に書き換えれば、カッコの「追加」用のトリガーを Shift キーに変更できます。
  • ソースコード内の if ( $ctrl == 1 )if ( $ctrl == 0 ) に書き換えれば、
      Ctrl キーの押し下げありで「カッコを削除」
      Ctrl キーの押し下げなしで「カッコを追加」
    に変更できます。
  • 「カッコの種類」の定義に "<!-- " と " -->" など「複数文字の文字列のペア」を追加したい場合は、ページ末尾の「カスタマイズ」の項のサンプルコードを参考にカスタマイズしてください。


ソースコード[編集]

#title="カッコを追加/削除"
#tooltip="対になるカッコを追加/削除する"
#include "include/IO.js"

var start = new Date();

// Ctrl キーの状態を取得する
var WshShell = new ActiveXObject( 'WScript.Shell' );
var getKeyState = '"' + editor.FullName.replace( /mery\.exe$/i , 'Macros\\' )
                + 'GetKeyState.exe "';
// GetKeyState.exe + 引数 control
var $ctrl = WshShell.Run( getKeyState + "control", 0, true );

/**
 * ------------------------------------------------------------
 * カッコを追加/削除 (2019/03/19 - 2019/05/02, sukemaru) 
 * ------------------------------------------------------------
 * ※ このマクロの実行には、以下の外部ライブラリと実行ファイルが必要です。
 *
 *  ・ks 氏作成の "includeライブラリ" を Macros フォルダに配置してください。
 *  	https://www.haijin-boys.com/wiki/include%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
 * 
 *  ・pizz 氏作成の "GetKeyState.exe" を Macros フォルダに配置してください。
 *  	https://www.haijin-boys.com/wiki/GetKeySatate.exe%28%E3%82%AD%E3%83%BC%E7%8A%B6%E6%85%8B%E5%8F%96%E5%BE%97%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%29
 * ------------------------------------------------------------
 *
 */

// ▼「対になるカッコ」の種類 (始)と(終) のペアを列挙する ▼ 
// ※ 開き/閉じカッコはそれぞれ「1文字」でないとダメ

var brackets = "()「」<>[]{}\"\"''()「」『』<>[]{}【】〖〗﹁﹂﹃﹄︵︶︿﹀︽︾︹︺︷︸︻︼︗︘⦅⦆⦅⦆〚〛〔〕〘〙〈〉《》””’’〝〞〝〟‘’“”――~~〜〜  ";

brackets += "++--**\/\/##==%%::::@@@@※※○○●●□□■■◇◇◆◆▽▽▼▼△△▲▲☆☆★★††||←→→←↑↓↓↑←←→→↑↑↓↓……¿?¡!‚‘‚’„“„”“„‘‚‹››‹«»»«——‐‐--␣␣__";


// ■ 選択範囲の『外側』(前と後ろ) の各1文字がカッコのときも除去する? ■ 
// (※ 選択範囲の前後を1文字ずつ拡張してカッコを除去する)
var removeOuterBracketsEnable = true;	// true:する / false:しない


var d = document;
if ( d.ReadOnly ) {
  Status = " ドキュメントは書き換え禁止です。";
}

else if ( $ctrl == -1 ) {
  Status = " GetKeyState.exe エラー ";
}

else {
  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 $add = false;	// 追加フラグ
  var o, c;
  var setting = {};

  // JSON ファイルから「最後に使用したカッコ」を読み込む
  setting = IO.Deserialize( setting );

  // Ctrl キーが押されているときは、選択範囲を「最後に使用したカッコ」で囲う
  if ( $ctrl == 1 ) {
    AddBrackets( st );
  }

  // Ctrl キーが押されていないとき
  else {
    // 選択範囲の先頭と末尾から「対になるカッコ」を削除する
    DeleteBrackets( st );

    // 選択範囲内の先頭と末尾が「対になるカッコ」ではなかったとき
    if ( removeOuterBracketsEnable && ! $del ) {
      // 選択範囲の外側(前と後ろ)にある「対になるカッコ」を削除する
      RemoveOuterBrackets( st );
    }
  }

  // 終了ステータス
  var end = new Date();
  if ( $add ) {
    Status = " " +  o.replace( /[ ]+/g , "␣" )  + " カッコ "
           + c.replace( /[ ]+/g , "␣" ) + "  で囲いました。"
           + TimerElapsed( end, start );
  }
  else if ( $del ) {
    Status = " " + o.replace( /[ ]+/g , "␣" ) + "  と  "
           + c.replace( /[ ]+/g , "␣" ) + "  を削除しました。"
           + TimerElapsed( end, start );
  }
  else {
    Status = " カッコがありません。"
           + TimerElapsed( end, start );
  }
}

// ------------------------------------------------------------
// 以下、各関数では基本的にグローバルスコープの変数を継承する
// ------------------------------------------------------------

/**
 * 関数 TimerElapsed( end, start )
 * start からの経過時間を [ s.sss 秒 ] で返す
 */
function TimerElapsed( end, start ) {
  var elapsed = end - start;
  return "  [ "
       + ( ( elapsed / 1000 ) + "000" ).replace( /(\.)(\d{3})(0*)$/, "$1 $2" )
       + " sec. ]";
}

/**
 * 関数 AddBrackets( st )
 * 選択範囲をカッコで囲う
 */
function AddBrackets( st ) {
  // 追加するカッコ =「最後に使用したカッコ」
  o = setting.openBracket ? setting.openBracket : "(";
  c = setting.closeBracket ? setting.closeBracket : ")";

  s.Text = o + st + c;
  s.SetAnchorPos( tp );	
  $add = true;
}

/**
 * 関数 DeleteBrackets( st )
 * 選択範囲の先頭と末尾からカッコを削除する
 */
function DeleteBrackets( st ) {
  // ループ処理で「対になるカッコ」と一致するかチェック
  for ( var i = 0, len = brackets.length; i < len; i ++ ) {
    if ( i % 2 == 1 ) {
      continue;
    }
    o = brackets[ i ];	
    c = brackets[ i + 1 ];

    // 選択範囲内の先頭と末尾が「対になるカッコ」のとき
    if ( st.length >= o.length + c.length
        && st.slice( 0, o.length ) == o
        && st.slice( - c.length ) == c ) {
      s.Text = st.slice( o.length, - c.length );
      s.SetAnchorPos( tp );
      $del = true;

      if ( o != setting.openBracket || c != setting.closeBracket ) {
        setting.openBracket = o;
        setting.closeBracket = c;
        IO.Serialize( setting );
      }
      break;
    }
  }
}

/*
 * 関数 RemoveOuterBrackets( st )
 * 選択範囲の外側(前と後ろ)にあるカッコを削除する
 */
function RemoveOuterBrackets( st ) {
  // ループ処理で選択範囲の外側が「対になるカッコ」と一致するかチェック
  for ( var i = 0, len = brackets.length; i < len; i ++ ) {
    if ( i % 2 == 1 ) {
      continue;
    }
    o = brackets[ i ];
    c = brackets[ i + 1 ];

    // 選択範囲の外側 (前と後)がカッコのとき
    if ( d.Text.slice( tp - o.length, tp ) == o
        && d.Text.slice( bp, bp + c.length ) == c ) {
      s.SetAnchorPos( tp - o.length );	
      s.SetActivePos( bp + c.length, true );

      s.Text = s.Text.slice( o.length, - c.length );
      s.SetAnchorPos( tp - o.length );	
      $del = true;

      if ( o != setting.openBracket || c != setting.closeBracket ) {
        setting.openBracket = o;
        setting.closeBracket = c;
        IO.Serialize( setting );
      }
      break;
    }
  }
}

カスタマイズ[編集]

  • 注釈では「開きカッコ/閉じカッコの指定は 各1文字 ずつ」としてありますが、削除ループのコードは「任意の複数文字の文字列」を扱えるようにしてあります。
    変数 blackets の最初の代入値を配列形式にすれば、 (始)と(終) のペアは「任意の複数文字の文字列」も追加できます。
e.g. var brackets = [ "(" , ")" , "<!-- " , " -->" , "<" , " />" , "<" , ">" ];
※ZIP 書庫の JS ファイル内末尾には var brackets = [ "(" , ")" , "<" , ">" , "<!-- " , " -->" , "<" , " />" ]; と記述していますが間違いです。 < , > のように短いパターンのペアが先にマッチすると "<!-- " , " -->" はヒットしなくなります。
  • カッコの定義文字列に "\n" を含めることを想定していません(問題ないはずですが動作検証していません)。



  • (2019/03/19 sukemaru)
既存の var brackets = " …… "; 文字列部分を配列形式に変換してから、「任意の複数文字の文字列」のペアを追加することもできます。
ソースコード内では正規表現による文字列の検索・置換処理をしていないので「 " 」以外の文字をエスケープ( \ での退避修飾)する必要はありません。


サンプルコード
// brackets += " …… "; の行のしたに追加する
// brackets を配列形式に変換する
brackets = brackets.split( "" );


// ① 配列の末尾にカッコの種類を追加する ※(始) (終) の順
brackets[ brackets.length ] = "≪";
brackets[ brackets.length ] = "≫";

/**
 * "<!-- " , " -->" や "<" , "/>" のように
 * (始) & (終) が複数文字のペアで、(始)の先頭/(終)の末尾 の文字が
 * 既存の「カッコの種類」に含まれている(この例では < > のペア)ものは、
 * ・unshift() メソッドで配列の先頭に追加するか
 * ・別の配列に列挙してから concat() メソッドで brackets と統合する
 */

// ② unshift() メソッドでカッコの種類を配列の先頭に追加する場合は
//   brackets.unshift("終"); brackets.unshift("始"); の順にすること
brackets.unshift( " -->" );
brackets.unshift( "<!-- " );

// ③ 別の配列に (始),(終),(始),(終) の順に列挙して brackets と統合する
brackets2 = [ "<b>", "</b>", "<u>", "</u>", "</", ">", "<", "/>", "/*\n", "\n */", "/* ", " */", "/*", "*/" ];
brackets = brackets2.concat( brackets );


// 配列 brackets の中身をアウトプットバーに出力する
// OutputBar.Writeln(brackets.toString().replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[ ]/g,"▯"));
// OutputBar.Writeln( ( brackets.length / 2 ) + " pairs\n" );
アウトプットの出力結果(半角空白は ▯ で表示)
<b>,</b>,<i>,</i>,<u>,</u>,</,>,<,/>,<!--▯,▯-->,/**▯\n,\n▯*/,/**▯\n,\n*/,/**\n,\n▯*/,/**\n,\n*/,/*▯\n,\n▯*/,/*▯\n,\n*/,/*\n,\n▯*/,/*\n,\n*/,/**▯,▯*/,/*▯,▯*/,<!--,-->, (,),「,」,<,>,[,],{,},",",',',(,),「,」,『,』,<,>,[,],{,},【,】,〖,〗,﹁,﹂,﹃,﹄,︵,︶,︿,﹀,︽,︾,︹,︺,︷,︸,︻,︼,︗,︘,⦅,⦆,⦅,⦆,〚,〛,〔,〕,〘,〙,〈,〉,《,》,”,”,’,’,〝,〞,〝,〟,‘,’,“,”,―,―,~,~,〜,〜,▯,▯,+,+,-,-,*,*,/,/,#,#,=,=,%,%,:,:,:,:,@,@,@,@,※,※,○,○,●,●,□,□,■,■,◇,◇,◆,◆,▽,▽,▼,▼,△,△,▲,▲,☆,☆,★,★,†,†,|,|,←,→,→,←,↑,↓,↓,↑,←,←,→,→,↑,↑,↓,↓,…,…,¿,?,¡,!,‚,‘,‚,’,„,“,„,”,“,„,‘,‚,‹,›,›,‹,«,»,»,«,—,—,‐,‐,-,-,␣,␣,_,_,≪,≫
111 pairs

これで「カッコをはずす」や「カッコを追加」の操作で <!-- と --> や /* と */ などのペアも扱えるようになります。
※正規表現には対応していないので、必要に応じて半角空白つき差分なども追加してください。


メモ[編集]

  • (2019/04/07 sukemaru)
Quit() メソッドを削除して ZIP を更新(ソースコード内の年月日の表記はまま)
  • (2019/05/03 sukemaru)
「カッコを追加/削除」の変数の記述ミスによるエラーを修正
ZIP を更新
スポンサーリンク