2009. 12. 7. 16:53
소스인사이트 팁3 : if나 switch문의 뼈대를 작성해주는 매크로
2009. 12. 7. 16:53 in 공부합시다/프로그래밍
아래의 매크로 역시 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)
}
}
'공부합시다 > 프로그래밍' 카테고리의 다른 글
소스인사이트 팁5 : 오래된 창을 닫아주는 매크로 (0) | 2009.12.07 |
---|---|
소스인사이트 팁4 : 선택한 영역의 소스 비활성화 시키는 매크로 (0) | 2009.12.07 |
소스인사이트 팁2 : 소스와 같은 이름의 헤더파일을 여는 매크로 (0) | 2009.12.07 |
소스인사이트 팁1 : 매크로를 이용한 한글 주석 (0) | 2009.12.07 |
[Visual Studio] IE 8.0 업데이트 후 VS2005, VS2008 class wizard 스크립트 오류 해결방법 (0) | 2009.10.16 |