#col = 75; // 1行の文字数 #comstart = 41; // コメント開始カラム位置 golineend; // 行末に飛ぶ #le = x; // 行末を記憶 if(#le == 0){ // 改行のみの行なら insert "/*\t\t"; // 行頭からコメント endmacro; // マクロ終了 } golinetop; // 行頭に飛ぶ #comf = 0; // コメントフラグクリア while(x < #le){ if(#comf == 0){ // コメント始まっていないなら if(code != 0x2f){ // '/'じゃないなら right; // 右へ }else{ right; // 一文字右へ if(code == 0x2a){ // 次の文字が'*'なら #comf = 1; // コメントの開始 } } }else{ // コメントが始まっているなら if(code != 0x2a){ // '*'じゃないなら right; // 右へ }else{ right; if(code == 0x2f){ // 次の文字が'/'なら #comf = 0; // コメント終了 } } } } golineend; // 行末に飛ぶ if(#comf == 1){ call itab #col-2; insert "*/"; if(y >= linecount-1){ // 最終行なら insertreturn; // 改行挿入 }else{ down; golinetop; } }else{ if(#le > #comstart){ // すでにコメント開始位置以降 insert "\n"; // なら次の行にコメント } call itab #comstart; // コメント開始位置までタブ insert "/* "; } endmacro; // マクロ終了 itab: while(x < ##1-1){ insert "\t"; } return;