Source Insight实现Ctrl+/,自动注释或者去掉注释

macro MultiLineComment()
{
hwnd = GetCurrentWnd()
selection = GetWndSel(hwnd)
LnFirst = GetWndSelLnFirst(hwnd) //取首行行号
LnLast = GetWndSelLnLast(hwnd) //取末行行号
hbuf = GetCurrentBuf()

// 判断是否需要注释,条件:只要有一行没有注释就需要全部添加一次注释
Ln = Lnfirst
flagAddComment = false
spaceCnt = 256
while(Ln <= Lnlast) {
buf = GetBufLine(hbuf, Ln) //取Ln对应的行
//跳过空行
if(buf ==""){
Ln = Ln + 1
continue
}
// 统计前置空白数
len = strlen(buf)
q = 0
while(q < len) {
if(StrMid(buf,q,q+1) !=" ")
break
q = q + 1
}
if(q == len)
break
if(q < spaceCnt){
spaceCnt = q
spaces = StrMid(buf,0,q)
}
// 判断是否需要添加注释
if(StrMid(buf,q,q+1) !="/"){
// todo 这里可能会有问题
flagAddComment = true
}
Ln = Ln + 1
}
Comment = Cat(spaces, "// ")
Ln = Lnfirst
buf = GetBufLine(hbuf, Ln)
len =strlen(buf)
while(Ln <= Lnlast) {
buf = GetBufLine(hbuf, Ln) //取Ln对应的行
if(buf ==""){ //跳过空行
Ln = Ln + 1
continue
}
if(flagAddComment){
len = strlen(buf)
buf = StrMid(buf,spaceCnt,len)
PutBufLine(hbuf, Ln, Cat(Comment, buf))
}else{
// 统计前置空白数
len = strlen(buf)
p = 0
while(p < len) {
if(StrMid(buf,p,p+1) !=" ")
break
p = p + 1
}
if(StrMid(buf, p, p+3) =="// ") {
PutBufLine(hbuf, Ln, Cat(spaces, StrMid(buf, p+3, Strlen(buf))))
}else if(StrMid(buf, p, p+2) =="//") {
PutBufLine(hbuf, Ln, Cat(spaces, StrMid(buf, p+2, Strlen(buf))))
}
}
Ln = Ln + 1
}
SetWndSel(hwnd, selection)
}

猜你喜欢

转载自www.cnblogs.com/AmosLee94/p/13209555.html