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

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
「masme版」追加。見出しの追加や<script>の使用など、外見部分(レイアウト)に手を加えました。
手石 (トーク | 投稿記録)
編集の要約なし
1行目: 1行目:
= 手石 版 (2013/03) =
= 手石 版 (2014/03) =
コメントマークの付け外しをするマクロです。<br>
コメントマークの付け外しをするマクロです。<br>
js 以外の拡張子に対応させる時は、最後の関数に追加してください。
js 以外の拡張子に対応させる時は、最後の関数に追加してください。
6行目: 6行目:
* 2013/03/28
* 2013/03/28
** 無題のときに対応しました。
** 無題のときに対応しました。
 
* 2014/03/22
** できるだけ短くしてみました。
== ソースコード ==
== ソースコード ==
<source lang="javascript">
<source lang="javascript">
// コメントマーク.js
// コメントマーク.js
// 行頭コメントマーク( cMark )を付けたり外したり。
// 行頭コメントマークを付けたり外したり。
// 空白文字の後ろには対応するけど、つけるときは行頭。
// 空白文字の後ろにあっても外す。つけるときは行頭に。


var cMark = commentMark( Editor.ActiveDocument.name );
var reg = new RegExp( "^[ \\t]*" + cMark )
var sel = Editor.ActiveDocument.Selection;
var sel = Editor.ActiveDocument.Selection;
var ty = sel.GetTopPointY( mePosLogical )
var ty = sel.GetTopPointY( mePosLogical );
var bx = sel.GetBottomPointX( mePosLogical )
var bx = sel.GetBottomPointX( mePosLogical );
var by = sel.GetBottomPointY( mePosLogical )
var by = sel.GetBottomPointY( mePosLogical );
sel.SetActivePoint( mePosLogical,  1, ty, false )
if ( bx == 1 && ty != by ){ by--; };
if ( ( bx == 1 ) && ( ty != by ) ){ by--; }
sel.SetActivePoint( mePosLogical, 1, ty, false );
sel.SetActivePoint( mePosLogical, bx, by, true )
sel.SetActivePoint( mePosLogical, 1, by+1, true );
sel.EndOfLine( true, mePosLogical );
// 上二行とどちらがいいか?
//sel.SetActivePoint( mePosLogical, document.GetLine( by, 0 ).length + 1, by, true );
 


var ary = sel.Text.split( "\n" );
var mark = commentMark();
var s = new Array();
var reg = new RegExp( "^(\\s*" + mark + "\\s?)?(?=.)", "mg" );
for ( var i = 0; i < ary.length; i++ ) {
mark += " ";
    var ai = ary[ i ]
    if ( reg.test( ai )) {
        s.push( ai.replace( cMark, "" ) )
    } else {
        s.push( cMark + ai )
    }
}
sel.Text = s.join( "\n" );
sel.SetActivePoint( mePosLogical, 1, ty, false )


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


function commentMark( filename ){
function commentMark(){
    if ( filename == "" ){ return "//" }
switch( Document.Mode.toLowerCase() ){
    var f = filename.split( "\\" ).pop().split( "." );
case "txt" : return "//";
    var fext = ( f.length >= 2 ) ? f.slice( -1 ).join( "" ).toLowerCase() : "" ;
case "javascript" : return "//";
    switch( fext ){
case "tex" : return "%";
    case "js" : return "//";
case "ruby" : return "#";
    default : "//";
default : return Prompt( "コメントマーク?", "//");
    }
};
}
};
</source>
</source>



2014年3月22日 (土) 22:32時点における版

手石 版 (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( "^(\\s*" + mark + "\\s?)?(?=.)", "mg" );
mark += " ";

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

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

masme 版 (2014/02)

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

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

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

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

with (Document.Selection) {
  var meP = mePosLogical;
  var ty = GetTopPointY(meP);
  var by = GetBottomPointY(meP);
  var bx = GetBottomPointX(meP);
  if (ty!=by && bx==1) by--;	//行選択時、次行を含めないよう対策
  SetActivePoint(meP, 1, by+1);
  SetAnchorPoint(meP, 1, ty);
  var re = new RegExp("^(?=[ \t]*$)|^("+$indent+")"+$comment); //空白行orコメント行
  var ln = Text.split("\n");
  for (var i=0; i<ln.length; i++) {
    ln[i] = ln[i].match(re)? ln[i].replace(re,"$1"): $comment+ln[i];
  }
  Text = ln.join("\n");
  SetActivePoint(meP, 1, by+1);
  SetAnchorPoint(meP, 1, ty);
}
スポンサーリンク