強調ファイルのコード判定方法についてNo.04119
セイジ さん 04/02/20 19:24
 
マクロについて質問です。

強調ファイル(.hilight)の中の強調コード(?)を
逆引きする時はどうやればいいのでしょうか?

 33 → 強調1、単語、大文字区別あり
 97 → 強調2、単語、大文字区別あり
107 → 特に強調2、大小区別なし、単語

この右側を判定するコードってどう書けばいいのでしょうか?

[ ]
RE:04119 強調ファイルのコード判定方法にNo.04120
アルビレオ さん 04/02/20 20:02
 
秀丸ユーザーのアルビレオです。

>強調ファイル(.hilight)の中の強調コード(?)を
>逆引きする時はどうやればいいのでしょうか?
>
> 33 → 強調1、単語、大文字区別あり
> 97 → 強調2、単語、大文字区別あり
>107 → 特に強調2、大小区別なし、単語
>
>この右側を判定するコードってどう書けばいいのでしょうか?

マクロヘルプのloadhilight文の項に説明があります。
これは16進数でしか書かれていないので10進数に書き直すと

強調1:1
強調2:65
強調3:129
強調4:193
行の強調1:5
行の強調2:69
特に強調1:3
特に強調2:67

大文字/小文字を区別しない:8
正規表現:16
単語:32

.hilightファイルに書かれる数字はこれらを合計したものになります。
強調1、単語、大文字区別あり→1+32 = 33
強調2、単語、大文字区別あり→65+32 = 97
特に強調2、大小区別なし、単語→67+8+32 = 107
というわけです。

(マクロヘルプには10進表記も書いたほうがいいような気がします)

[ ]
RE:04120 強調ファイルのコード判定方法にNo.04121
やすひさ さん 04/02/21 10:42
 
 セイジさん、アルビレオさん、みなさん、こんにちは。

 マクロを作成していますのでご参考にどうぞ。
下のは入力した数値から意味を表示するマクロです。

************************************************************

#HilightCode = val(input( "調べたい強調定義用の番号" ));
if( #HilightCode == 0 ) endmacro;

#Bubun          = #HilightCode & 0x001F;
#Tab            = #HilightCode & 0x0020;
#ZenSpace       = #HilightCode & 0x0040;
#HanSpace       = #HilightCode & 0x0080;
#Select         = #HilightCode & 0x0100;
#CtrlCode       = #HilightCode & 0x0200;
#OpenByShell    = #HilightCode & 0x0400;
#OpenByHidemaru = #HilightCode & 0x0800;
#E_mail         = #HilightCode & 0x1000;

$Bubun_msg[ 0] = "普通の部分";
$Bubun_msg[ 3] = "コメント部分";
$Bubun_msg[ 4] = "強調1";
$Bubun_msg[ 5] = "特に強調1";
$Bubun_msg[ 6] = "行の強調1";
$Bubun_msg[ 7] = "強調2";
$Bubun_msg[ 8] = "特に強調2";
$Bubun_msg[ 9] = "行の強調2";
$Bubun_msg[11] = "URL部分";
$Bubun_msg[12] = "E-mail部分";
$Bubun_msg[13] = "HTMLタグ全体部分";
$Bubun_msg[14] = "HTMLタグのエレメント";
$Bubun_msg[15] = "HTMLタグのアトリビュート";
$Bubun_msg[16] = "[EOF]";
$Bubun_msg[20] = "文字定数";
$Bubun_msg[21] = "ファイル名部分";
$Bubun_msg[22] = "強調3";
$Bubun_msg[23] = "強調4";

$msg = $Bubun_msg[#Bubun];

if( #Tab            != 0 ) $msg = $msg + "\n" + "タブ文字";
if( #ZenSpace       != 0 ) $msg = $msg + "\n" + "全角空白";
if( #HanSpace       != 0 ) $msg = $msg + "\n" + "半角空白";
if( #Select         != 0 ) $msg = $msg + "\n" + "範囲選択";
if( #CtrlCode       != 0 ) $msg = $msg + "\n" + "制御コード";
if( #OpenByShell    != 0 ) $msg = $msg + "\n" + "「...を開く」が出来る場所";
if( #OpenByHidemaru != 0 ) $msg = $msg + "\n" + "「...を秀丸で開く」が出来る
場所";
// if( #E_mail         != 0 ) $msg = $msg + "\n" + "E-mail部分";

message "ColorCode = " + str( #HilightCode ) + "\n\n" + $msg;

************************************************************

似たようなマクロを公開していますのでよろしければどうぞ。
http://homepage3.nifty.com/yasuhisa/windows/hidemac.html

[ ]
RE:04120 強調ファイルのコード判定方法にNo.04124
セイジ さん 04/02/21 19:29
 
どもありがとうございます。
私の理解が悪いのかよくわかりません。。。
10進数ってのはわかっているのですが

>強調1、単語、大文字区別あり→1+32 = 33
>強調2、単語、大文字区別あり→65+32 = 97
>特に強調2、大小区別なし、単語→67+8+32 = 107
>というわけです。
>

って左側がわかっているからなのでは?

「97」という漠然とした数字から、
あぁーこれは「特に強調2」入ってるなぁ〜。
しかも検索方法は「単語検索」と「大小区別なし」になってるなぁ〜。

って知りたいのですが。。。
コードで書くと56ケースのif文を書かないといけないのでしょうかね?
よろしくお願いします m(_ _)m

[ ]
RE:04121 強調ファイルのコード判定方法にNo.04125
セイジ さん 04/02/21 19:36
 
ありがとうございます。
マクロ使ってみました。
「97」と入力したのですが

  「タブ文字」
  「全角空白」

っと出てきました。

  表示方法:「特に強調2」
  検索方法:「単語」「大文字区別なし」

っという風に出てほしかったのですが。。。
よろしくお願いします m(_ _)m

-----//
リンク先を見させていただきましたがパッと見で
私の思っているようなのがなかった気がします。。。

[ ]
RE:04124 強調ファイルのコード判定方法にNo.04126
アルビレオ さん 04/02/21 20:20
 
アルビレオです。

>「97」という漠然とした数字から、
>あぁーこれは「特に強調2」入ってるなぁ〜。
>しかも検索方法は「単語検索」と「大小区別なし」になってるなぁ〜。
>
>って知りたいのですが。。。

それほど組み合わせは多くないので、私は電卓と暗算で済ませてます。(^^;

>コードで書くと56ケースのif文を書かないといけないのでしょうかね?

そんなにいりません(笑

やすひささんのはマクロ変数のcolorcodeからカーソル位置の色コードを調べる
もので、.hilightで使うコードとは違いますね。
ちょっと改造して

if(selecting == 0 || rectselecting == 1){
message "範囲選択してね";
endmacro;
}

#HilightCode = val(gettext(seltopx,seltopy,selendx,selendy));

#nocasesense = #HilightCode & 0x08;
#regular     = #HilightCode & 0x10;
#word        = #HilightCode & 0x20;

#HilightCode = #HilightCode - #nocasesense - #regular - #word;

$msg="";
if(#HilightCode == 0x01) $msg = "強調1";
if(#HilightCode == 0x41) $msg = "強調2";
if(#HilightCode == 0x81) $msg = "強調3";
if(#HilightCode == 0xc1) $msg = "強調4";
if(#HilightCode == 0x05) $msg = "行の強調1";
if(#HilightCode == 0x45) $msg = "行の強調2";
if(#HilightCode == 0x03) $msg = "特に強調1";
if(#HilightCode == 0x43) $msg = "特に強調2";
if($msg == "") $msg = "不正なコード";

if( #nocasesense != 0 ) $msg = $msg + "\n" + "大文字小文字を区別しない";
if( #regular     != 0 ) $msg = $msg + "\n" + "正規表現";
if( #word        != 0 ) $msg = $msg + "\n" + "単語";

message "HilightCode = " + str( #HilightCode ) + "\n\n" + $msg;

こんなもんです。
数字をダブルクリックしてからマクロを実行してください。

[ ]
RE:04126 強調ファイルのコード判定方法にNo.04128
セイジ さん 04/02/21 20:37
 
ありがとうございます。
私も時を同じくしてマクロ書きました。

//-- 強調番号チェックマクロ ---//
if (selecting) {
 ##GetCode = val(gettext(seltopx,seltopy,selendx,selendy));
} else {
 ##GetCode = val(input("強調番号"));
}
$$SrchStr = "";
if (##GetCode & 0x10 == 0x10) {
 $$SrchStr = "「正規」";
}
if (##GetCode & 0x08 == 0x08) {
 $$SrchStr = $$SrchStr + "「大小区別なし」";
} else {
 if ($$SrchStr == "") {
  $$SrchStr = "「普通」";
 }
}
if (##GetCode & 0x20 == 0x20) {
 $$SrchStr = $$SrchStr + "「単語」";
}
$$DispStr = "";
if (##GetCode & 0x43 == 0x43) {
 $$DispStr = "「特に強調2」";
} else if (##GetCode & 0x03 == 0x03) {
 $$DispStr = "「特に強調1」";
} else if (##GetCode & 0x45 == 0x45) {
 $$DispStr = "「行の強調2」";
} else if (##GetCode & 0x05 == 0x05) {
 $$DispStr = "「行の強調1」";
} else if (##GetCode & 0xC1 == 0xC1) {
 $$DispStr = "「強調4」";
} else if (##GetCode & 0x81 == 0x81) {
 $$DispStr = "「強調3」";
} else if (##GetCode & 0x41 == 0x41) {
 $$DispStr = "「強調2」";
} else {
 $$DispStr = "「強調1」";
}
message "検索方法:"+$$SrchStr+"\n"+"表示方法:"+$$DispStr;

微妙に私の方は処理が遅いようです(笑)

なにはともあれ胸のつっかえがとれました。
ありがとうございました m(_ _)m

[ ]
RE:04125 強調ファイルのコード判定方法にNo.04129
ゴマっち さん 04/02/21 21:10
 
 割り込んですいません。ゴマっちです。セイジさん、こんにちは。

>   表示方法:「特に強調2」
>   検索方法:「単語」「大文字区別なし」

 マクロヘルプのloadhilight文を参考にして、セイジさんが希望しているマク
ロを作ってみました。

なお、マクロ初心者(というか、その前に秀丸初心者)なので、間違っていた場
合はすいません。

$sz_flg = input("フラグ値");
#v_flg = val($sz_flg);

#m_flg = (0xC7 & #v_flg);
if ( #m_flg == 0x01 ) $sz_Ans = "強調1";
else if ( #m_flg == 0x41 ) $sz_Ans = "強調2";
else if ( #m_flg == 0x81 ) $sz_Ans = "強調3";
else if ( #m_flg == 0xC1 ) $sz_Ans = "強調4";
else if ( #m_flg == 0x05 ) $sz_Ans = "行の強調1";
else if ( #m_flg == 0x45 ) $sz_Ans = "行の強調2";
else if ( #m_flg == 0x03 ) $sz_Ans = "特に強調1";
else if ( #m_flg == 0x43 ) $sz_Ans = "特に強調2";

#m_flg = (0x38 & #v_flg);
if ( #m_flg & 0x10) $sz_Ans = $sz_Ans + ",正規表現";
if ( #m_flg & 0x20) $sz_Ans = $sz_Ans + ",単語";
if ( #m_flg & 0x08) $sz_Ans = $sz_Ans + ",大文字/小文字を区別しない";
else $sz_Ans = $sz_Ans + ",大文字/小文字を区別する";

message $sz_flg + " = " + $sz_Ans;

[ ]
RE:04129 強調ファイルのコード判定方法にNo.04130
ゴマっち さん 04/02/21 21:23
 
 ゴマっちです。

 行き違いに、書き込みをしてしまいました。すいません。
 自分がマクロを作成してメールで書き込む間に、解決していたようですね。

[ ]
RE:04128 強調ファイルのコード判定方法にNo.04131
やすひさ さん 04/02/21 22:20
 
 セイジさん、アルビレオさん、みなさん、こんにちは。

 早とちりしたマクロを公開してしまって申し訳ないです。
なんだか悔しいので、私でも再度考え直しました。

 強調定義ファイルの数値にカーソルを置いておくか、数値を入力することで
その数値の意味を表示させます。

**************************************************

//// 数値から強調定義の意味を表示する Yasuhisa,2004 ////

selectline;
#HilightCode = val( gettext( seltopx, seltopy, selendx, selendy ) );
                                                        // カーソル上の数値
if( #HilightCode == 0 ) {
    #HilightCode = val(input( "調べたい強調定義用の番号" ));
                                                        // 数値入力
    if( #HilightCode == 0 ) endmacro;
}

$youto1[0x01] = "強調1";                       //   1 ; 0000 0001
$youto1[0x41] = "強調2";                       //  65 ; 0100 0001
$youto1[0x81] = "強調3";                       // 129 ; 1000 0001
$youto1[0xC1] = "強調4";                       // 193 ; 1100 0001
$youto1[0x05] = "特に強調1";                   //   5 ; 0000 0101
$youto1[0x45] = "特に強調2";                   //  69 ; 0100 0101
$youto1[0x03] = "行の強調1";                   //   3 ; 0000 0011
$youto1[0x43] = "行の強調2";                   //  67 ; 0100 0011

$youto2[0x08] = "大文字/小文字を区別しない";    //   8 ; 0000 1000
$youto2[0x10] = "正規表現";                     //  16 ; 0001 0000
$youto2[0x20] = "単語の検索";                   //  32 ; 0010 0000

#code1 = #HilightCode & 0xC7;
#code2 = #HilightCode & 0x38;

if( $youto1[#code1] == "" )
$msg = "不正な数値です。";
else
$msg = $youto1[#code1] + "\n" + $youto2[#code2];

message "強調定義番号 [ " + str(#HilightCode) + " ]\n--------------------\n"
+ $msg;

**************************************************

[ ]
RE:04131 強調ファイルのコード判定方法にNo.04132
アルビレオ さん 04/02/21 23:06
 
アルビレオです。

>$msg = $youto1[#code1] + "\n" + $youto2[#code2];

これだと正規表現 & 単語のような場合に、何もなしになっちゃいます。(^_^;

[ ]
RE:04132 強調ファイルのコード判定方法にNo.04133
やすひさ さん 04/02/22 01:12
 
 アルビレオさん、みなさん、こんにちは。

 あまり検証せずにアップしているのがバレバレですね。すみません。
解決しているようなので私の自己満足のような気がしてきましたが。(^^;;

**************************************************

//// 数値から強調定義の意味を表示する Yasuhisa,2004 ////

$youto1[0x01] = "強調1";                       //   1 ; 0000 0001
$youto1[0x41] = "強調2";                       //  65 ; 0100 0001
$youto1[0x81] = "強調3";                       // 129 ; 1000 0001
$youto1[0xC1] = "強調4";                       // 193 ; 1100 0001
$youto1[0x05] = "特に強調1";                   //   5 ; 0000 0101
$youto1[0x45] = "特に強調2";                   //  69 ; 0100 0101
$youto1[0x03] = "行の強調1";                   //   3 ; 0000 0011
$youto1[0x43] = "行の強調2";                   //  67 ; 0100 0011

$youto2[0x08] = "大文字/小文字を区別しない";    //   8 ; 0000 1000
$youto2[0x10] = "正規表現";                     //  16 ; 0001 0000
$youto2[0x20] = "単語";                         //  32 ; 0010 0000

// 数値取得 //
selectline;
#HilightCode = val( gettext( seltopx, seltopy, selendx, selendy ) );
                                                        // カーソル上の数値
if( #HilightCode == 0 ) {
    #HilightCode = val(input( "調べたい強調定義用の番号" ));
                                                        // 数値入力
    if( #HilightCode == 0 ) endmacro;
}

#code1    = #HilightCode & 0xC7;
#code2[0] = #HilightCode & 0x08;
#code2[1] = #HilightCode & 0x10;
#code2[2] = #HilightCode & 0x20;

$msg = "強調定義用の番号 [ " + str(#HilightCode) + " ]\n----------\n";

// 判定処理 //
if( $youto1[#code1] == "" )
    $msg = $msg + "不正な数値です!!";
else{
    // 表示方法
    $msg1 = $youto1[#code1];

    // 検索方法
    #num = 0;
    while( #num <= 2 ){
        if( #code2[#num] != 0 ){
            if( $msg2 != "" ) $msg2 = $msg2 + ", ";
            $msg2 = $msg2  + $youto2[#code2[#num]];
        }
        #num = #num + 1;
    }

    $msg = $msg + "表示方法 : " + $msg1 + "\n検索方法 : " + $msg2;
}

// 表示 //
message $msg;

**************************************************

[ ]