本文列举说明了在source insight中如何快捷地给我们的代码添加注释,包括文件头注释、函数定义注释、函数声明注释。
-
首先在source insight安装目录下的C:\Source Insight 4.0\Projects\Base文件夹新建一个custom.em文件,用来编写我们自定义的函数。
-
然后将custom.em文件添加到工程目录中
1.点击Project->Add and Remove Project Files…
2.在“File Name:”中将文件的路径粘贴然后回车,这样就进入到了Base文件夹,选中custom.em文件后点击Add,然后关闭窗口,至此就将custom.em文件添加到了我们的工程中了 -
接着就是开始编写函数代码
1. 添加文件头注释
/*获取文件名称*/
macro GetFileName(pathName)
{
nlength = strlen(pathName)
i = nlength - 1
name = ""
while (i + 1)
{
ch = pathName[i]
if ("\\" == "@ch@")
break
i = i - 1
}
i = i + 1
while (i < nlength)
{
name = cat(name, pathName[i])
i = i + 1
}
return name
}
macro CustomInsertFileHeader()
{
//get crrunt time
szTime = GetSysTime(1)
Day = ""
len = strlen(szTime.Day)
if("@len@" == "1")
{
Day = cat(Day, 0)
}
Day = cat(Day, szTime.Day)
Month = ""
len = strlen(szTime.Month)
if("@len@" == "1")
{
Month = cat(Month, 0)
}
Month = cat(Month, szTime.Month)
Year = szTime.Year
hbuf = GetCurrentBuf()//申请变量空间,Get a handle to the current file buffer and the name
PathName = GetBufName(hBuf)
FileName = GetFileName(PathName)
FileNameLen = strlen(FileName)
hbuf = GetCurrentBuf()
InsBufLine(hbuf, 0, "/********************************************************************************")
InsBufLine(hbuf, 1, " * Copyright (C), XXX Tech. Co., Ltd.")
InsBufLine(hbuf, 2, "********************************************************************************")
InsBufLine(hbuf, 3, " * DESCRIPTION")
InsBufLine(hbuf, 4, " * ")
InsBufLine(hbuf, 5, "********************************************************************************")
InsBufLine(hbuf, 6, " * \@file @FileName@")
InsBufLine(hbuf, 7, " * \@version v1.0.0")
InsBufLine(hbuf, 8, " * \@author wqc")
InsBufLine(hbuf, 9, " * \@date @Year@/@Month@/@Day@")
InsBufLine(hbuf, 10, "********************************************************************************")
InsBufLine(hbuf, 11, " * Modification History")
InsBufLine(hbuf, 12, " * @Year@-@Month@-@Day@ WQC Created")
InsBufLine(hbuf, 13,"********************************************************************************/")
InsBufLine(hbuf, 14,"")
InsBufLine(hbuf, 15,"/********************************************************************************")
InsBufLine(hbuf, 16,"//include")
InsBufLine(hbuf, 17,"********************************************************************************/")
FileName[FileNameLen-1] = h;
InsBufLine(hbuf, 18,"#include \"@FileName@\"")
InsBufLine(hbuf, 19,"")
InsBufLine(hbuf, 20,"")
InsBufLine(hbuf, 21,"")
}
效果图
2. 添加函数定义注释
macro CustomInsertFuncHeader()
{
/* 获取光标所在行 */
handle = GetCurrentWnd()
process_line = GetWndSelLnFirst(handle)
/* 获取函数所在行文本 */
file_txt = GetCurrentBuf()
process_txt = GetBufLine(file_txt,process_line + 1)
process_txt_len = strlen(process_txt)
if(process_txt == "")
{
stop
}
/* 获取函数名 */
symbol_rec = GetSymbolLocationFromLn (handle, process_line + 1)
if(symbol_rec == "")
{
stop
}
fuction_name = symbol_rec.Symbol
/* 获取参数个数及参数名 */
param_num = 0
param_list = SymListNew()
i=0,j=0
while(i < process_txt_len)
{
if(process_txt[i] == "," || process_txt[i] == ")")
{
j = i
while(j > 0)
{
if(process_txt[j] == " " || process_txt[j] == "*" || process_txt[j] == "&" ||
process_txt[j] == "(")
{
symbol_rec.Symbol = strmid(process_txt,j+1,i)
SymListInsert(param_list,param_num,symbol_rec)
param_num = param_num + 1
break;
}
j = j - 1
}
}
i = i + 1
}
/* 输出注释 */
PutBufLine(handle,process_line + 0,"")
InsBufLine(handle,process_line + 1,"/*******************************************************************************")
var temp_buffer
temp_buffer = cat(" * \@FunctionName: ",fuction_name)
InsBufLine(handle,process_line + 2,temp_buffer)
InsBufLine(handle,process_line + 3," * \@Author: wqc")
InsBufLine(handle,process_line + 4," * \@Description: ")
sys_time = GetSysTime(1)
temp_buffer = " * \@Date:\t\t "
temp_buffer = cat(temp_buffer,sys_time.Year)
temp_buffer = cat(temp_buffer,"/")
/* 月份和日期转为2位占位符 */
len = strlen(sys_time.Month)
if("@len@" == 1)
{
temp_buffer = cat(temp_buffer,0)
}
temp_buffer = cat(temp_buffer,sys_time.Month)
temp_buffer = cat(temp_buffer,"/")
len = strlen(sys_time.Day)
if("@len@" == 1)
{
temp_buffer = cat(temp_buffer,0)
}
temp_buffer = cat(temp_buffer,sys_time.Day)
InsBufLine(handle,process_line + 5,temp_buffer)
param_line = process_line + 6
InsBufLine(handle,param_line,"*******************************************************************************/")
temp_buffer = " * \@ReturnVal: "
if(strmid(process_txt,0,6) == "static")
{
if(strmid(process_txt,7,11) != "void")
{
/* 定位返回值类型的位置并输出 */
i = 7
j = strlen(fuction_name)
while(i < process_txt_len)
{
if(strmid(process_txt,i,i + j) == "@fuction_name@")
{
i = i - 1
j = 7
while(j < i)
{
temp_buffer = cat(temp_buffer,process_txt[j])
j = j + 1
}
break
}
i = i + 1
}
temp_buffer = cat(temp_buffer," [description]")
InsBufLine(handle,param_line," * !-->Value1 [description]")
InsBufLine(handle,param_line," * !-->Value2 [description]")
}
else
{
temp_buffer = cat(temp_buffer,None)
}
}
else if(strmid(process_txt,0,4) != "void")
{
/* 定位返回值类型的位置并输出 */
i = 0
j = strlen(fuction_name)
while(i < process_txt_len)
{
if(strmid(process_txt,i,i + j) == "@fuction_name@")
{
i = i - 1
j = 0
while(j < i)
{
temp_buffer = cat(temp_buffer,process_txt[j])
j = j + 1
}
break
}
i = i + 1
}
temp_buffer = cat(temp_buffer," [description]")
InsBufLine(handle,param_line," * !-->Value1 [description]")
InsBufLine(handle,param_line," * !-->Value2 [description]")
}
else
{
temp_buffer = cat(temp_buffer,None)
}
InsBufLine(handle,param_line, temp_buffer)
while(param_num > 0)
{
param_num = param_num - 1
symbol_rec = SymListItem(param_list,param_num)
temp_buffer = " * \@Param: "
if(symbol_rec.Symbol == "void")
{
temp_buffer = cat(temp_buffer,None)
}
else
{
temp_buffer = cat(temp_buffer,symbol_rec.Symbol)
temp_buffer = cat(temp_buffer," [description]")
}
temp_buffer_len = strlen(temp_buffer)
temp_buffer_len = 38 - temp_buffer_len
while(temp_buffer_len > 0)
{
temp_buffer_len = temp_buffer_len - 1
temp_buffer = cat(temp_buffer," ")
}
InsBufLine(handle,param_line,temp_buffer)
}
SymListFree(param_list)
}
效果图
函数有形参有返回值
函数有形参无返回值
函数无形参有返回值
函数无形参无返回值
3. 添加函数声明注释
macro CustomInsertFuncHeaderDeclaration()
{
var temp_buffer
/* 获取光标所在行 */
handle = GetCurrentWnd()
process_line = GetWndSelLnFirst(handle)
/* 获取函数所在行文本 */
file_txt = GetCurrentBuf()
process_txt = GetBufLine(file_txt,process_line + 1)
process_txt_len = strlen(process_txt)
if(process_txt == "")
{
stop
}
/* 获取函数名 */
symbol_rec = GetSymbolLocationFromLn (handle, process_line + 1)
if(symbol_rec == "")
{
stop
}
fuction_name = symbol_rec.Symbol
/* 获取参数个数及参数名 */
param_num = 0
param_list = SymListNew()
i=0,j=0
while(i < process_txt_len)
{
if(process_txt[i] == "," || process_txt[i] == ")")
{
j = i
while(j > 0)
{
if(process_txt[j] == " " || process_txt[j] == "*" || process_txt[j] == "&" ||
process_txt[j] == "(")
{
symbol_rec.Symbol = strmid(process_txt,j+1,i)
SymListInsert(param_list,param_num,symbol_rec)
param_num = param_num + 1
break;
}
j = j - 1
}
}
i = i + 1
}
/* 输出注释 */
PutBufLine(handle,process_line++,"")
InsBufLine(handle,process_line++,"/***")
InsBufLine(handle,process_line++," * \@Brief description")
InsBufLine(handle,process_line++," * \@Param")
while(param_num > 0)
{
param_num = param_num - 1
symbol_rec = SymListItem(param_list,param_num)
if(symbol_rec.Symbol == "void")
{
PutBufLine(handle,process_line - 1," * \@Param None")
break
}
else
{
temp_buffer = " * !-->"
temp_buffer = cat(temp_buffer,symbol_rec.Symbol)
temp_buffer = cat(temp_buffer," [description]")
}
temp_buffer_len = strlen(temp_buffer)
temp_buffer_len = 38 - temp_buffer_len
while(temp_buffer_len > 0)
{
temp_buffer_len = temp_buffer_len - 1
temp_buffer = cat(temp_buffer," ")
}
InsBufLine(handle,process_line++,temp_buffer)
}
SymListFree(param_list)
if(strmid(process_txt,0,4) != "void")
{
temp_buffer = " * \@ReturnVal "
i = 0
while(i < process_txt_len)
{
if(process_txt[i] != " ")
{
temp_buffer = cat(temp_buffer, process_txt[i++])
}
else
{
break
}
}
InsBufLine(handle,process_line++, temp_buffer)
InsBufLine(handle,process_line++," * !-->value1 [description]")
InsBufLine(handle,process_line++," * !-->value2 [description]")
}
else
{
InsBufLine(handle,process_line++," * \@ReturnVal None")
}
sys_time = GetSysTime(1)
temp_buffer = " * "
temp_buffer = cat(temp_buffer,sys_time.Year)
temp_buffer = cat(temp_buffer,"-")
/* 月份和日期转为2位占位符 */
len = strlen(sys_time.Month)
if("@len@" == 1)
{
temp_buffer = cat(temp_buffer,0)
}
temp_buffer = cat(temp_buffer,sys_time.Month)
temp_buffer = cat(temp_buffer,"-")
len = strlen(sys_time.Day)
if("@len@" == 1)
{
temp_buffer = cat(temp_buffer,0)
}
temp_buffer = cat(temp_buffer,sys_time.Day)
temp_buffer = cat(temp_buffer," WQC [初版作成]")
InsBufLine(handle,process_line++," * \@History")
InsBufLine(handle,process_line++,temp_buffer)
InsBufLine(handle,process_line++," */")
}
效果图
有形参有返回值
有形参无返回值
无形参有返回值
无形参无返回值
- 最后为我们添加的自定义宏函数定义快捷键
1.点击Options->Key Assignments…
2.在Command的文本框中输入macro,找到我们自定义的宏函数,点击Assign New Key…,然后键入你想设置的快捷键方式即可