2009. 12. 7. 16:53

소스인사이트 팁3 : if나 switch문의 뼈대를 작성해주는 매크로

아래의 매크로 역시 C++빌더 의 Ctrl + J 키를 흉내낸것입니다.
if 나 switch등의 자주 이용하는 키워드의 뼈대를 작성해주는 코드입니다.



/*====================================================================
Create by sparrow
Ctrl + J (C++Builder Code Generation function.
====================================================================*/



macro CodeCompletation()
{
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)

line = GetBufLine(hbuf,ln)

DelBufLine(hbuf, ln)

if(strlen(line) <2)
{
return
}


cch = strlen(line)
ich = 0
space_cnt = 0
chTab = CharFromAscii(9)
szSpace = ""

while(ich <= cch)
{
ch = line[ich];
if (ch == " " || ch == chTab)
{
space_cnt = space_cnt + 1
}
else
{
szSpace = strmid(line,0,space_cnt)
line = strmid(line,space_cnt,strlen(line))
break
}
ich = ich + 1
}





if ( line == "if")
{
/* code completation if ~ else */


InsBufLine(hbuf, ln +0, "@szSpace@if( )")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ ")
InsBufLine(hbuf, ln +3, "@szSpace@}")
InsBufLine(hbuf, ln +4, "@szSpace@else")
InsBufLine(hbuf, ln +5, "@szSpace@{")
InsBufLine(hbuf, ln +6, "@szSpace@ ")
InsBufLine(hbuf, ln +7, "@szSpace@}")
SetBufIns(hbuf,ln + 0,space_cnt + 3)
}
if (line == "ife")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "@szSpace@if( )")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ ")
InsBufLine(hbuf, ln +3, "@szSpace@}")
InsBufLine(hbuf, ln +4, "@szSpace@else if( )")
InsBufLine(hbuf, ln +5, "@szSpace@{")
InsBufLine(hbuf, ln +6, "@szSpace@ ")
InsBufLine(hbuf, ln +7, "@szSpace@}")
InsBufLine(hbuf, ln +8, "@szSpace@else")
InsBufLine(hbuf, ln +9, "@szSpace@{")
InsBufLine(hbuf, ln +10, "@szSpace@ ")
InsBufLine(hbuf, ln +11, "@szSpace@}")

SetBufIns(hbuf,ln + 0,space_cnt + 3)
}

else if(line == "do")
{
/* code completation do ~ while */
InsBufLine(hbuf, ln +0, "@szSpace@do")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ ")
InsBufLine(hbuf, ln +3, "@szSpace@}while( )")
SetBufIns(hbuf,ln + 3,space_cnt +7)

}
else if (line == "while")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "@szSpace@while( )")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ ")
InsBufLine(hbuf, ln +3, "@szSpace@}")
SetBufIns(hbuf,ln + 0,space_cnt +6)

}
else if(line == "enum")
{
/* code completation enum ~ */
InsBufLine(hbuf, ln +0, "@szSpace@typedef enum")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@};")
SetBufIns(hbuf,ln + 2,space_cnt +1)

}
else if (line == "struct")
{
/* code completation struct ~ */
InsBufLine(hbuf, ln +0, "@szSpace@typedef struct")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@};")
SetBufIns(hbuf,ln + 2,space_cnt +1)

}
else if (line == "union")
{
/* code completation struct ~ */
InsBufLine(hbuf, ln +0, "@szSpace@union")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@};")
SetBufIns(hbuf,ln + 2,space_cnt +1)

}

else if(line == "switch")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "@szSpace@switch( )")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ case : ;")
InsBufLine(hbuf, ln +3, "@szSpace@ break;")
InsBufLine(hbuf, ln +4, "@szSpace@ case : ;")
InsBufLine(hbuf, ln +5, "@szSpace@ break;")
InsBufLine(hbuf, ln +6, "@szSpace@ case : ;")
InsBufLine(hbuf, ln +7, "@szSpace@ break;")
InsBufLine(hbuf, ln +8, "@szSpace@ case : ;")
InsBufLine(hbuf, ln +9, "@szSpace@ break;")
InsBufLine(hbuf, ln +10, "@szSpace@ default: ;")
InsBufLine(hbuf, ln +11, "@szSpace@}")
SetBufIns(hbuf,ln + 0,space_cnt +7)

}
else if(line == "for")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "@szSpace@for( ; ; )")
InsBufLine(hbuf, ln +1, "@szSpace@{")
InsBufLine(hbuf, ln +2, "@szSpace@ ")
InsBufLine(hbuf, ln +3, "@szSpace@}")
SetBufIns(hbuf,ln + 0,space_cnt +4)

}
else if(line == "#ifdef")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "#ifdef")
InsBufLine(hbuf, ln +1, "")
InsBufLine(hbuf, ln +2, "#else ")
InsBufLine(hbuf, ln +3, "")
InsBufLine(hbuf, ln +4, "#endif /* */")
SetBufIns(hbuf,ln + 0,space_cnt +7)

}
else if(line == "#ifndef")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "#ifndef")
InsBufLine(hbuf, ln +1, "")
InsBufLine(hbuf, ln +2, "#else ")
InsBufLine(hbuf, ln +3, "")
InsBufLine(hbuf, ln +4, "#endif /* */")
SetBufIns(hbuf,ln + 0,space_cnt +8)

}
else if(line == "#if")
{
/* code completation if ~ else */
InsBufLine(hbuf, ln +0, "#if")
InsBufLine(hbuf, ln +1, "")
InsBufLine(hbuf, ln +2, "#else ")
InsBufLine(hbuf, ln +3, "")
InsBufLine(hbuf, ln +4, "#endif /* */")
SetBufIns(hbuf,ln + 0,space_cnt +4)

}


}