添付ファイルの情報



[添付ファイル一覧] [全ページの添付ファイル一覧]

fileCommentOutCBlock.js
格納ファイル名:attach/4D6163726F2FC5EAB9C62F313936_436F6D6D656E744F757443426C6F636B2E6A73
ページ:Macro/投稿/196
格納ファイル名:attach/4D6163726F2FC5EAB9C62F313936_436F6D6D656E744F757443426C6F636B2E6A73
MD5ハッシュ値:7e15ccba4216b46df0d2c4d8de56bfe5
サイズ:7.4KB (7622 bytes)
Content-type:application/octet-stream
登録日時:2014/05/31 22:43:46
アクセス数:582
MD5ハッシュ値:7e15ccba4216b46df0d2c4d8de56bfe5
fileCommentOutCBlock.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/*
 [概要]
	選択範囲を "/*" と "*/" でコメントアウトします。
	
	選択範囲の開始位置に "/*" を、終了位置に "*/" を挿入します。
	範囲選択されていない場合、カーソルのある行をコメントアウトします。
	
	コメント文字列はデフォルトでC/C++スタイルですが、
	ファイルの拡張子、及び 現在適用されているタイプ別設定 により変わります。
	(対応:sakura:1.6.5.0以降)
 [変更履歴]
	2014/05/24	新規
*/
 
// 選択範囲の先頭や末尾の文字が空白類(スペースやタブ、改行)では無い場合、
// コメント開始・終了文字列を "/* ", " */" (スペース有り)にするか。
//		true=スペース有りにする / false=スペースを付加しない
var bADD_SPACE_AROUND_NONWHITESPACE    = true;
 
 
 
//--------------
// メイン
Main();
 
function Main()
{
    var sExt;                    // ファイル名の拡張子。(ピリオドを含まない)
    var sTypeExtAry;            // 現在適用されているタイプ別設定の拡張子。(「基本」は除く)
    var sKey, sTypeExt;
    var sCommentHead;            // コメント開始文字列 "/*"
    var sCommentTail;            // コメント終了文字列 "*/"
    var sNewline;
    var s;
    var sSrc;                    // 選択文字列。
    var s1, s2;
    
    // エディタがビューモード(読み取り専用)なら終了。
    if( Editor.ExpandParameter("${R?読専$:$:$}") == "読専" ) return;
    
    // ファイル名の拡張子に応じてコメント文字列を変える。
    //		HTMLでもCSS(<style>要素内)でCスタイルのコメントを使いたい場合がありそう。
    //		他にも、ASPXでHTMLスタイルのコメントを使いたい等々…。
    sExt = Editor.ExpandParameter("$f").replace( /^(.*\.|.*)/, "" ).toLowerCase();
    
    // 現在適用されているタイプ別設定(タイプ別設定の一時適用)に対応。
    // ファイル名の拡張子より優先させる。(但し「基本」のタイプ別設定は除く。)
    //		例1: .logファイル(「テキスト」「TeX」に登録)で、「TeX」を一時適用。
    //				→ 拡張子を "tex" に。
    //		例2: .logファイルで、「基本」を一時適用。
    //				→ 拡張子は "log" のまま。(「基本」は除く。)
    //		IsSameTypeExt("xxx","<N/A>"):拡張子 "xxx" がタイプ別設定「基本」かを調べる。
    //			タイプ別設定に登録されていない拡張子は「基本」扱いになるので
    //			"xxx" が「基本」(未登録)なら1、「基本」以外なら0が返る(はず)。
    sTypeExtAry = [
        // デフォルト。
        "txt",        "c",        "html",        "sql",        "cbl",
        "java",        "asm",        "awk",        "bat",        "dpr",
        "tex",        "cgi",        "bas",        "rtf",        "ini",
        // ユーザーが追加。(拡張子が未登録(=「基本」)なら無視される。)
        "mac",
        "ppa",
        "js",
    ];
    for( sKey in sTypeExtAry ){
        sTypeExt = sTypeExtAry[ sKey ];
        if( (Editor.IsCurTypeExt( sTypeExt )) && (!Editor.IsSameTypeExt( sTypeExt, "<N/A>" )) ){
            sExt = sTypeExt.toLowerCase();
            break;
        }
    }
    
    // 拡張子毎のコメント開始・終了文字列。(case "xxx" のxxxは必ず小文字で。)
    switch( sExt ){
    case "asp":    
    case "html":    case "htm":    
    case "hta":
    case "php":
    case "shtml":    case "shtm":    case "shm":
    case "wsf":
    case "xhtml":    case "xhtm":    case "xht":
    case "xml":
        // HTMLスタイル。
        sCommentHead = "<!--";
        sCommentTail = "-->";
        break;
    
    case "aspx":
    case "jsp":    case "jspf":
    case "psp":
        // JSPスタイル。(サーバサイドのコメント)
        sCommentHead = "<%--";
        sCommentTail = "--%>";
        break;
    
    case "dpr":    case "pas":
        // Pascalスタイル。
        //sCommentHead = "(*";
        //sCommentTail = "*)";
        sCommentHead = "{";
        sCommentTail = "}";
        break;
    
    //tex,ltx,sty,bib,log,blg,aux,bbl,toc,lof,lot,idx,ind,glo
    case "tex":
        //sCommentHead = "\\if0" +"\n";
        //sCommentTail = "\\fi"  +"\n";
        // ↓\usepackage{comment} 宣言が必要らしい。
        sCommentHead = "\\begin{comment}" +"\n";
        sCommentTail = "\\end{comment}"   +"\n";
        break;
    
    case "":
    default:
        // Cスタイル。
        //sCommentHead = "#if 0"  +"\n";
        //sCommentTail = "#endif" +"\n";
        sCommentHead = "/*";
        sCommentTail = "*/";
        break;
    }
    
    sNewline = ["\r\n", "\r", "\n"][ Editor.GetLineCode() ];
    if( sNewline == undefined ){
        sNewline = (Editor.GetLineStr( 1 ).match( /(\r\n|\r|\n)/ )) ? RegExp.$1 : "\r\n";
    }
    sCommentHead = sCommentHead.replace( /\r\n|\r|\n/g, sNewline );
    sCommentTail = sCommentTail.replace( /\r\n|\r|\n/g, sNewline );
    
    s1 = sCommentHead;
    s2 = sCommentTail;
    if( !(s1 + s2).match( /[\r\n]/ ) ){
        // コメント文字列が改行文字を含まなければ、通常処理。
        
        // 非選択状態ならカーソル行を選択。(改行は含まない。)
        if( Editor.IsTextSelected() == 0 ){
            s = Editor.GetLineStr( 0 );        // カーソル行の文字列。
            // EOFのみの行 または 改行のみの空行 なら選択せずそのまま。
            if( (s.length > 0) && (!s.match( /^(\r\n|\r|\n)$/ )) ){
                // 改行以外の文字が1個以上。
                Editor.SelectLine(0);        // 1行選択。
                if( s.match( /[\r\n]/ ) ){
                    // EOFのある行(ファイルの最終行で、改行で終わらない)ではない。
                    Editor.Left_Sel();
                }
            }
        }else if( Editor.IsTextSelected() == 2 ){
            // 矩形選択状態なら、選択範囲の行全体を通常選択する。
            SelectLinesOnSelectedRange();
        }
        sSrc = Editor.GetSelectedString(0);
        if( (sSrc.length == 0) && bADD_SPACE_AROUND_NONWHITESPACE ){
            // EOFのみの行 または 改行のみの空行。
            sSrc = "  ";        // スペース2個。結果を "/*  */" にする。
        }
        if( sSrc.match( /^\S/ ) && bADD_SPACE_AROUND_NONWHITESPACE ) s1 = s1 + " ";
        if( sSrc.match( /\S$/ ) && bADD_SPACE_AROUND_NONWHITESPACE ) s2 = " " + s2;
        // 範囲末尾が改行で終わる場合、最後に改行を入れる。
        // (選択範囲の次の行に "*/" の1行を挿入する形になる。)
        if( sSrc.match( /(\r\n|\r|\n)$/ ) ) s2 += RegExp.$1;
    }else{
        // コメント文字列が改行文字を含む場合、行単位のディレクティブの形式とする。
        // 選択範囲前後に、コメント開始の行・終了の行を新規に挿入。スペース付加無し。
        
        // カーソル行(非選択時) または 選択範囲の行すべてを範囲選択する。
        SelectLinesOnSelectedRange();
        sSrc = Editor.GetSelectedString(0);
        // EOFのある行(ファイルの最終行で、改行で終わらない)なら改行付加。
        if( sSrc.match( /[^\r\n]$/ ) ) s2 = sNewline + s2;
    }
    Editor.InsText( s1 + sSrc + s2 );
    Editor.ReDraw();
}
 
 
//--------------------------------------------------------------
// カーソル行(非選択時) または 選択範囲の行すべてを範囲選択する。
// 選択範囲の開始桁、終了桁は行の途中でも可。(行全体を選択していなくても可。)
// EOFのみの行(行番号が表示されない行)だと何も選択されない(非選択状態)。
function SelectLinesOnSelectedRange()
{
    var nIsTextSelected;
    var row1, row2, col2;
    var y1, y2, x2;
    
    nIsTextSelected = Editor.IsTextSelected();
    if( nIsTextSelected == 0 ){
        // カーソルのある行を1行選択。
        Editor.SelectLine(0);
    }else{
        // 選択範囲の開始行(の行頭)から終了行(の行末)までを選択。
        
        row1 = Editor.GetSelectLineFrom();        // 選択開始行(折り返し単位)
        row2 = Editor.GetSelectLineTo();        // 選択終了行(折り返し単位)
        col2 = Editor.GetSelectColmTo();        // 選択終了桁(折り返し単位)
        // 選択状態の取り消し。(範囲選択開始(F6)、矩形範囲選択開始(Shift+F6)の取り消し。)
        Editor.CancelMode();
        // 選択開始行の行頭(改行単位)へ移動。
        Editor.Jump( row1, 0 );                    // 折り返し単位
        Editor.GoLineTop( 1<<3|1<<0 );            // 行頭(改行単位)
        y1 = Editor.ExpandParameter("$y") -0;    // 行位置(改行単位)、文字列→数値
        // 範囲選択開始。
        Editor.BeginSelect();
        // 選択終了行の、次の行の行頭へ移動。
        Editor.Jump( row2, 0 );                    // 折り返し単位
        y2 = Editor.ExpandParameter("$y") -0;    // 行位置(改行単位)、文字列→数値
        x2 = Editor.ExpandParameter("$x") -0;    // 桁位置(改行単位)、文字列→数値
        if( (nIsTextSelected != 2)
            && ((col2 == 1) && (x2 == 1))        // 選択終了位置は行頭(改行単位)だった。
            && (Editor.GetSelectLineTo() >= row2)    // 最終行選択や、選択開始行=終了行だと偽。
        ){
            //y2 = y2;	そのまま。
        }else{
            y2++;    // 選択終了行の行末まで(次の行の行頭まで)を選択。(EOF行なら最後まで。)
        }
        Editor.Jump( y2, 1 );                    // 改行単位
        // 範囲選択終了 しておく。
        Editor.BeginSelect();
    }
}




    


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS