|
マクロはそのままでは完全ではなかったので、もうちょっと考えたマクロにして
みました。
このまま実行すると、ファイルタイプ別の設定で設定された#ifdef等のカラー表
示で色付けします。
$layer="ifdefcolor"; //レイヤー名
#color=0xff00ff; //色
Label_Main: {
setcompatiblemode 0x20000;
if((filetype!=".c")
&&(filetype!=".cpp")
&&(filetype!=".h")
){
endmacro;
}
loaddll "HmJre.dll";
disabledraw;
deletecolormarkerall $layer;
#x=x;
#y=y;
call Label_LoadReg;
gofiletop;
#cNest=0;//#aValid[]//#aLineNo[]
while(1){
title "#ifdef等のカラー表示適用中:"+str(lineno);
searchdown2
"^\\s*(#(ifdef|ifndef|if|else|endif)\\s*)\\C(?\\1)"
,regular;
if(result==false){
if(#cNest==0) break;
$found="#endif";
} else {
$found=gettext(foundtopx,foundtopy,foundendx,foundendy);
moveto foundendx,foundendy;
}
if(strstr($found,"#ifdef")>=0){
#derective=1;
#iftype=0x00;
#not=0;
} else if(strstr($found,"#ifndef")>=0){
#derective=1;
#iftype=0x00;
#not=1;
} else if(strstr($found,"#else")>=0){
#derective=2;
} else if(strstr($found,"#endif")>=0){
#derective=3;
} else {//#if
#derective=1;
#iftype=0x02;
#not=0;
}
if(#derective==1){
$strWord=gettext2(column,lineno,linelen2,lineno);
$strWord=dllfuncstr("ReplaceRegular","\\s",$strWord,0,"",2);
$strWord=dllfuncstr("ReplaceRegular","//.*",$strWord,0,"",2);
$strWord=dllfuncstr("ReplaceRegular","/\\*.*",$strWord,0,"",2);
call Label_IsValid $strWord, #iftype;
#valid=##return;
if(#not!=0){
if(#valid==1){
#valid=2;
} else if(#valid==2){
#valid=1;
}
}
#aValid[#cNest]=#valid;
#aLineNo[#cNest]=lineno+1;
#cNest=#cNest+1;
} else if(#derective==2){
if(#cNest>0){
if(#aValid[#cNest-1]==1){
#aValid[#cNest-1]=2;
#aLineNo[#cNest-1]=lineno + 1;
}else if(#aValid[#cNest-1]==2){
colormarker #color,-1,11,0,0,$layer,
#aLineNo[#cNest - 1], 0,
lineno, 0;
#aValid[#cNest-1]=1;
}
}
} else if(#derective==3){
if(#cNest>0){
#cNest=#cNest-1;
if(#aValid[#cNest]==2){
colormarker #color,-1,11,0,0,$layer,
#aLineNo[#cNest], 0,
lineno, 0;
}
}
}
moveto2 0,lineno+1;
}
moveto #x,#y;
endmacro;
}
Label_LoadReg: {
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\"
+filetype;
$$config=getregstr("");
closereg;
if( $$config!=""){
$$configset="Config\\"+$$config;
} else {
$$configset="Default";
}
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\"
+$$configset;
call Label_GetBinary "Defines",0x00;
call Label_GetBinary "DefinesInvalid",0x01;
call Label_GetBinary "Ifvalue",0x02;
call Label_GetBinary "IfvalueInvalid",0x03;
closereg;
return;
}
Label_GetBinary: {
##cb=0;
$$ab="";
while(1){
$$abRead=getregbinary($$1,##cb,1000);
if($$abRead=="") break;
$$ab=$$ab+$$abRead;
##cb=##cb+strlen($$abRead)/2;
}
if($$ab=="") return;
##cKeyword=0;
##i=0;
while(1){
$$strKeyword="";
while(1){
$$strByte=midstr($$ab,##i,2);
if($$strByte==""||$$strByte=="00"){
##i=##i+2;
break;
}
$$strChar=char(val("0x"+$$strByte));
if($$strChar!=" "){
$$strKeyword=$$strKeyword+$$strChar;
}
##i=##i+2;
}
if($$strKeyword!=""){
$astrKeyword[##2][##cKeyword]=$$strKeyword;
##cKeyword=##cKeyword+1;
}
if($$strByte=="") break;
}
#acKeyword[##2]=##cKeyword;
return;
}
Label_IsValid: {
##i=0;
##iftypeValid=##2;
##iftypeInvalid=##iftypeValid+1;
if( ##iftypeValid == 0x02 ) {
if($$1=="1") return 1;
if($$1=="0") return 2;
}
if($astrKeyword[##iftypeValid][0]=="//all"){
return 1;
} if($astrKeyword[##iftypeInvalid][0]=="//all"){
return 2;
}
while(##i<#acKeyword[##iftypeValid]){
if($astrKeyword[##iftypeValid][##i]==$$1){
return 1;
}
##i=##i+1;
}
##i=0;
while(##i<#acKeyword[##iftypeInvalid]){
if($astrKeyword[##iftypeInvalid][##i]==$$1){
return 2;
}
##i=##i+1;
}
return 0;
}
|
|