// // hilighters-high.mac // // author : nzawa // created : 2016-03-27 // modified : - // revision : 1.0 // // 秀丸エディタの強調表示定義ファイルの編集支援マクロです。 // 編集したい行にカーソルを移動してマクロを実行することで、 // メニューが表示され、定義内容の確認・編集が行えます。 // // ・強調表示の定義行では、フラグを上書きします。 // ・それ以外の行では、新たなフラグを挿入します。 //  ただし、スラッシュで始まる行では、何もせずに終了します。 // // ※行頭4文字しか見ないため、判定はいい加減です。 // ※999のような不正な値であっても見逃します。 // #HI[0] = 0x01; // 0000 0001 強調表示1 #HI[1] = 0x41; // 0100 0001 強調表示2 #HI[2] = 0x81; // 1000 0001 強調表示3 #HI[3] = 0xC1; // 1100 0001 強調表示4 #HI[4] = 0x101; // 0001 0000 0001 強調表示5 #HI[5] = 0x141; // 0001 0100 0001 強調表示6 #HI[6] = 0x181; // 0001 1000 0001 強調表示7 #HI[7] = 0x1C1; // 0001 1100 0001 強調表示8 #HI[8] = 0x05; // 0000 0101 行の強調表示1 #HI[9] = 0x45; // 0100 0101 行の強調表示2 #HI[10] = 0x85; // 1000 0101 行の強調表示3 #HI[11] = 0xC5; // 1100 0101 行の強調表示4 #HI[12] = 0x03; // 0000 0011 特に強調表示1 #HI[13] = 0x43; // 0100 0011 特に強調表示2 #HI[14] = 0x83; // 1000 0011 特に強調表示3 #HI[15] = 0xC3; // 1100 0011 特に強調表示4 #HI5678 = 0x02; // 0000 0010 強調表示5〜8の「+2」 #ICASE = 0x08; // 0000 1000 オプション:大文字/小文字の区別 #REGEX = 0x10; // 0001 0000 オプション:単語の検索 #WORD = 0x20; // 0010 0000 オプション:正規表現 #OPT_MASK = 0x1C7; // 0001 1100 0111 オプションをANDで隠すマスク #HI_MASK = 0x38; // 0000 0011 1000 強調表示をANDで隠すマスク // 正規表現用dllをロード loaddll "hmjre.dll"; // 現在行を取得 #line = lineno; // 行頭4文字を取得 $line_head = gettext2(0, #line, 4, #line); // カンマ位置を取得 #comma_pos = dllfunc("FindRegular", "(?<=^\\d{0,3}),", $line_head, 0); // フラグを取得 if ( #comma_pos < 0 ) { // スラッシュで始まる行では何もしない if ( leftstr($line_head, 1) == "/" ) { goto ENDMACRO; } // それ以外でカンマが見つからない時 else { #hilight = 0; } } // カンマが見つかった時 else { #hilight = val( leftstr($line_head, #comma_pos) ); } // メニュー表示 while(1) { // 判定:強調表示 #i = 0; #no_hi = 1; #need_plus2 = 0; while( #HI[#i] ) { if ( (#hilight & #OPT_MASK) == #HI[#i] ) { $hi_select[#i] = ":選択中"; #no_hi = 0; // 強調表示5〜8で「+2」されていない場合の判定 if ( #i >= 4 && #i <= 7 ) #need_plus2 = 1; } // 強調表示5〜8で「+2」されている場合の処理 else if ( #i >= 4 && #i <= 7 ) { if ( (#hilight & #OPT_MASK) == #HI[#i] + #HI5678 ) { $hi_select[#i] = ":選択中"; #no_hi = 0; } else { $hi_select[#i] = ""; } } else { $hi_select[#i] = ""; } #i = #i + 1; } // 強調表示が取得できない場合はデフォルトで強調表示1をセット if ( #no_hi ) { #hilight = #hilgiht | #HI[0]; $hi_select[0] = ":選択中(デフォルト)"; } // 判定:大文字/小文字の区別 if ( (#hilight & #ICASE) == #ICASE ) { $icase = "しない"; } else { $icase = "する"; } // 判定:単語の検索 if ( (#hilight & #WORD) == #WORD ) { $word = "する"; } else { $word = "しない"; } // 判定:正規表現 if ( (#hilight & #REGEX) == #REGEX ) { $regex = "する"; } else { $regex = "しない"; } menu "強調表示1" + $hi_select[0], "強調表示2" + $hi_select[1], "強調表示3" + $hi_select[2], "強調表示4" + $hi_select[3], "強調表示5" + $hi_select[4], "強調表示6" + $hi_select[5], "強調表示7" + $hi_select[6], "強調表示8" + $hi_select[7], "行の強調表示1" + $hi_select[8], "行の強調表示2" + $hi_select[9], "行の強調表示3" + $hi_select[10], "行の強調表示4" + $hi_select[11], "特に強調表示1" + $hi_select[12], "特に強調表示2" + $hi_select[13], "特に強調表示3" + $hi_select[14], "特に強調表示4" + $hi_select[15], "-----------------------------------", "大文字/小文字の区別 (&I):" + $icase, "単語の検索 (&W):" + $word, "正規表現 (&R):" + $regex, "-----------------------------------", "*** 変更対象:" + str(#line) + "行目 ***", "適用する (&A)", "キャンセル (&C)"; #rslt = result; if ( !#rslt ) break; // フラグ変更:強調表示 if ( #rslt >= 1 && #rslt <= 16 ) { #hilight = (#hilight & #HI_MASK) | #HI[#rslt - 1]; } // フラグ変更:大文字/小文字の区別 else if ( #rslt == 18 ) { #hilight = #hilight ^ #ICASE; } // フラグ変更:単語の検索 else if ( #rslt == 19 ) { #hilight = #hilight ^ #WORD; } // フラグ変更:正規表現 else if ( #rslt == 20 ) { #hilight = #hilight ^ #REGEX; } // 適用する else if ( #rslt == 23 ) { // 強調表示5〜8で「+2」されていない場合はプラスする if ( #need_plus2 ) #hilight = #hilight | #HI5678; golinetop2; begingroupundo; if ( #comma_pos > 0 ) deleteword; // カンマありの場合、カンマの前をクリア if ( #hilight < 10 ) insert "0"; // フラグが一桁の場合、前ゼロ挿入 insert str(#hilight); // フラグ挿入 if ( #comma_pos < 0 ) insert ","; // カンマなしの場合、カンマ挿入 endgroupundo; break; } // キャンセル else if ( #rslt == 24 ) { break; } } ENDMACRO: freedll; endmacro;