「コメントマーク付け外し」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
マクロ再修正
Masme (トーク | 投稿記録)
Masme版マクロ修正
40行目: 40行目:
</source>
</source>


= masme 版 (2014/02) =
= masme 版 =
マクロ「[[テキスト整形]]」の「行頭 // を付加/削除」を独立・改造したバージョンです。<br>
マクロ「[[テキスト整形]]」の「行頭 // を付加/削除」を独立・改造したバージョンです。<br>
行頭(論理行)にコメント文字が有れば削除(アンコメント)し、無ければ付加(コメントアウト)します。
行頭(論理行)にコメント文字が有れば削除(アンコメント)し、無ければ付加(コメントアウト)します。


* 空白行(改行/半角空白/水平タブのみの行)はコメントアウトしないようにしました。
* 空白行(改行/半角空白/水平タブのみの行)はコメントアウトしないようにしました。
* 初期設定では、インデントされたコメント文字には対応していません。<br>「$indent」変数を「false」から「true」に書き換えると、手石 版のように行頭空白後のコメント文字も削除するようになります。<br>インデントへの対応は、手石 版と同様に削除限定です。付加するときは行頭(論理行)になります。
* 初期設定では、インデントされたコメント文字には対応していません。<br>「indent」変数を「false」から「true」に書き換えると、手石 版のように行頭空白後のコメント文字も削除するようになります。<br>インデントへの対応は、手石 版と同様に削除限定です。付加するときは行頭(論理行)になります。
* 編集モードによる定義切替は、マクロ「[[Eclipse風コメントアウト]]」を参考にしました。
* 編集モードによる定義切替は、マクロ「[[Eclipse風コメントアウト]]」を参考にしました。


== 更新履歴 ==
== 更新履歴 ==
* 2016/02/28
** 編集モードによる定義切替が正常に機能していないミスを修正。
* 2015/02/14
* 2015/02/14
** 特殊文字の対処にミスがあったのを修正。
** 特殊文字の対処にミスがあったため再修正。
* 2015/02/14
* 2015/02/14
** 「行コメント文字の定義」に正規表現の特殊文字があると誤動作する不具合を修正。
** 「行コメント文字の定義」に正規表現の特殊文字があると誤動作する不具合を修正。
61行目: 63行目:
<source lang="javascript">
<source lang="javascript">
//■行コメントのアン・アウト
//■行コメントのアン・アウト
// 2014/02/22-2015/02/14
// 2014/02/11-2016/02/28
//・行頭にコメント文字が有れば削除し、無ければ付加する。空白行には付加しない。
//・行頭にコメント文字が有れば削除し、無ければ付加する。空白行には付加しない。


//■行コメント文字の定義 ●初期値="//"
//■行コメント文字の定義 ●初期値="//"
var $comment = "//";
var comment = "//";
//■インデントされたコメント文字も削除(true:する/false:しない) ●初期値=false
//■インデントされたコメント文字も削除(true:する/false:しない) ●初期値=false
var $indent = false ? "[ \t]*" : "";
var indent = false ? "[ \t]*" : "";


//▼編集モードによる定義切替
//▼編集モードによる定義切替
switch (Document.Mode.toLowerCase()) {
comment = (function(){
case "bat":
  switch (Document.Mode.toLowerCase()) {
  $comment = "::"; break;
  case "bat":
case "c#" || "c++" || "javascript":
    return "::";
  $comment = "//"; break;
  case "c#":
case "ini" || "python" || "ruby":
  case "c++":
  $comment = "#"; break;
  case "javascript":
case "visualbasic" || "vbscript":
    return "//";
  $comment = "'"; break;
  case "ini":
}
  case "python":
  case "ruby":
    return "#";
  case "visualbasic":
  case "vbscript":
    return "'";
  default:
    return comment;
  }
})();


with (Document.Selection) {
var Sel = Document.Selection;
  var ty = GetTopPointY(mePosLogical);
var ty = Sel.GetTopPointY(mePosLogical);
  var by = GetBottomPointY(mePosLogical);
var by = Sel.GetBottomPointY(mePosLogical);
  var bx = GetBottomPointX(mePosLogical);
var bx = Sel.GetBottomPointX(mePosLogical);
  var br =(Text.match(/\n/g)||[]).length;
var br =(Sel.Text.match(/\n/g)||[]).length;
  if (bx==1 && by-ty==br && br) by--; //次行行頭を含めないよう対策
if (bx===1 && by-ty===br && br) by--; //下端行頭を含めないよう対策
  SetActivePoint(mePosLogical, 1, by+1);
Sel.SetActivePoint(mePosLogical,1,by+1);
  SetAnchorPoint(mePosLogical, 1, ty);
Sel.SetAnchorPoint(mePosLogical,1,ty);
  //コメント行なら文字削除 | 空白行以外なら文字付加
Sel.Text = Sel.Text.replace(
  Text = Text.replace(new RegExp("^("+$indent+")"+$comment.replace(/([$()*+.?[\\\]^{|}])/g,"\\$1")+"|^(?![ \t]*$)","gm"),
  new RegExp("^("+indent+")"+comment.replace(/[$()*+.?[\\\]^{|}]/g,"\\$&")+"|^(?![ \t]*$)","gm"),
    function(s,s1){return (s)? s1: $comment});
  function($0,$indent){return $0? $indent : comment}
  SetActivePoint(mePosLogical, 1, by+1);
); //コメント行ならコメント文字削除 | 空白行でない行頭なら文字付加
  SetAnchorPoint(mePosLogical, 1, ty);
Sel.SetActivePoint(mePosLogical,1,by+1);
}
Sel.SetAnchorPoint(mePosLogical,1,ty);
</source>
</source>

2016年2月28日 (日) 12:23時点における版

手石 版 (2014/03)

コメントマークの付け外しをするマクロです。
js 以外の拡張子に対応させる時は、最後の関数に追加してください。

更新履歴

  • 2013/03/28
    • 無題のときに対応しました。
  • 2014/03/22
    • できるだけ短くしてみました。

ソースコード

// コメントマーク.js
// 行頭コメントマークを付けたり外したり。
// 空白文字の後ろにあっても外す。つけるときは行頭に。

var sel = Editor.ActiveDocument.Selection;
var ty = sel.GetTopPointY( mePosLogical );
var bx = sel.GetBottomPointX( mePosLogical );
var by = sel.GetBottomPointY( mePosLogical );
if ( bx == 1 && ty != by ){ by--; };
sel.SetActivePoint( mePosLogical, 1, ty, false );
sel.SetActivePoint( mePosLogical, 1, by+1, true );

var mark = commentMark();
var reg = new RegExp( "^([ \t]*" + mark + "\\s?)?(?=.)", "mg" );
mark += " ";

sel.Text = sel.Text.replace( reg, function( s0, s1 ){ return ( s1 == undefined )? mark : "" } );

function commentMark(){
	switch( Document.Mode.toLowerCase() ){
	case "text" : return "//";
	case "javascript" : return "//";
	case "tex" : return "%";
	case "ruby" : return "#";
	default : return Prompt( "コメントマーク?", "//");
	};
};

masme 版

マクロ「テキスト整形」の「行頭 // を付加/削除」を独立・改造したバージョンです。
行頭(論理行)にコメント文字が有れば削除(アンコメント)し、無ければ付加(コメントアウト)します。

  • 空白行(改行/半角空白/水平タブのみの行)はコメントアウトしないようにしました。
  • 初期設定では、インデントされたコメント文字には対応していません。
    「indent」変数を「false」から「true」に書き換えると、手石 版のように行頭空白後のコメント文字も削除するようになります。
    インデントへの対応は、手石 版と同様に削除限定です。付加するときは行頭(論理行)になります。
  • 編集モードによる定義切替は、マクロ「Eclipse風コメントアウト」を参考にしました。

更新履歴

  • 2016/02/28
    • 編集モードによる定義切替が正常に機能していないミスを修正。
  • 2015/02/14
    • 特殊文字の対処にミスがあったため再修正。
  • 2015/02/14
    • 「行コメント文字の定義」に正規表現の特殊文字があると誤動作する不具合を修正。
    • 矩形選択(始点or終点が左下かつ論理行頭)時、下端の行が範囲から漏れる不具合を修正。
    • テキストの処理方法を変更。
  • 2014/02/22
    • 初版公開。

ソースコード

//■行コメントのアン・アウト
// 2014/02/11-2016/02/28
//・行頭にコメント文字が有れば削除し、無ければ付加する。空白行には付加しない。

//■行コメント文字の定義 ●初期値="//"
var comment = "//";
//■インデントされたコメント文字も削除(true:する/false:しない) ●初期値=false
var indent = false ? "[ \t]*" : "";

//▼編集モードによる定義切替
comment = (function(){
  switch (Document.Mode.toLowerCase()) {
  case "bat":
    return "::";
  case "c#":
  case "c++":
  case "javascript":
    return "//";
  case "ini":
  case "python":
  case "ruby":
    return "#";
  case "visualbasic":
  case "vbscript":
    return "'";
  default:
    return comment;
  }
})();

var Sel = Document.Selection;
var ty = Sel.GetTopPointY(mePosLogical);
var by = Sel.GetBottomPointY(mePosLogical);
var bx = Sel.GetBottomPointX(mePosLogical);
var br =(Sel.Text.match(/\n/g)||[]).length;
if (bx===1 && by-ty===br && br) by--; //下端行頭を含めないよう対策
Sel.SetActivePoint(mePosLogical,1,by+1);
Sel.SetAnchorPoint(mePosLogical,1,ty);
Sel.Text = Sel.Text.replace(
  new RegExp("^("+indent+")"+comment.replace(/[$()*+.?[\\\]^{|}]/g,"\\$&")+"|^(?![ \t]*$)","gm"),
  function($0,$indent){return $0? $indent : comment}
); //コメント行ならコメント文字削除 | 空白行でない行頭なら文字付加
Sel.SetActivePoint(mePosLogical,1,by+1);
Sel.SetAnchorPoint(mePosLogical,1,ty);
スポンサーリンク