source insight 宏 添加函数注释

原创 2013年11月19日 20:26:31

无意中发现source insight有宏信息,具体的编码规则可以在 source insight下面按 F1,查看Macro Language Guide进行参考,查阅

此版本是基于source insight内部的base工程,也参考了网上的资料

主要就是解析字符串,使用了 strmid()  strtrunc()函数来裁剪字符串

在此记录一下...

/*-------------------------------------------------------------------------
I N S E R T   H E A D E R


Inserts a comment header block at the top of the current function. 
This actually works on any type of symbol, not just functions.


To use this, define an environment variable "MYNAME" and set it
to your email name.  eg. set MYNAME=raygr
-------------------------------------------------------------------------*/
macro AddFuncHeader()
{
    hSysBuf = OpenBuf( "system.ini" )   // 打开当前工程下面的配置文件,有版本号及作者的信息
    if( hSysBuf == hNil ){
        return 1
    }

    // 一行行读取配置文件信息
    szMyName  = GetBufLine( hSysBuf, 0 ) // 著者
    szVersion = GetBufLine( hSysBuf, 1 ) // 软件版本号

    SysTime = GetSysTime( 0 )
    year  = SysTime.Year
    month = SysTime.Month
    day   = SysTime.Day
    hour  = SysTime.Hour + 8
    minute= SysTime.Minute
    
// Get a handle to the current file buffer and the name
// and location of the current symbol where the cursor is.
hbuf = GetCurrentBuf()


if( hbuf == hNil ){
   return 1
}


ln = GetBufLnCur( hbuf )


    totalLine = 0
    tmpLine = ln +1
    
    i = 0;
    find_flag = 0  // 该表示用来表示是否找到 "{",从而判断是否可以开始解析字符


    /*
     * 分两步来添加函数的注释
     * 1. 获取函数名字
     * 2. 获取函数参数
    */


    funcContent = " "  // 初始化函数的所有注释信息为空
    
    while ( totalLine < 20 )  // 防止函数名跨越的行数太长
    {
        // 1. 逐行获取数据
tmpLineContent = GetBufLine( hbuf, tmpLine )
tmpLineLen = GetBufLineLength( hbuf, tmpLine)
tmpIndex = 0
// 遍历 该句来判断是否有 "{"存在,有则证明函数头已包含在缓冲数据中
while ( tmpIndex < tmpLineLen )
{
if ( "{" == tmpLineContent[tmpIndex] )
{
   find_flag = 1;
break;
}
tmpIndex = tmpIndex + 1
}
        // 说明该行函数仍未结束,添加改行信息到总的信息后面
funcContent = cat ( funcContent, tmpLineContent )


if ( find_flag == 1 )
{
break;
}


totalLine = totalLine + 1
tmpLine = tmpLine +1
    }
    // InsBufLine( hbuf, ln ++, "/**\@all      @funcContent@" )


    // 找到所有需要的字符信息之后,开始找出函数名出来,只需要从 "("处断开即可
    indexLeft = 0;
    while ( (funcContent[indexLeft]) != "(" )
    {
        indexLeft = indexLeft +1
    }
    funName =  strtrunc(funcContent, indexLeft)


    InsBufLine( hbuf, ln ++, "/* Function      @funName@()" )
    InsBufLine( hbuf, ln ++, " * Description    " )
    
    //InsBufLine( hbuf, ln ++, "/**\@param      @funcContent@" )
    
    // 再找到右括号 ")"的位置
    indexRight = 0
    while ( (funcContent[indexRight]) != ")" )
    {
        indexRight = indexRight + 1
    }


    // 接下去解析函数内部的参数
    index = 0
    paramEnd = 0
    paramStr = " "
    index = indexLeft + 1   // 跳过 左括号 "("
    while ( index <= indexRight )
    {
        paramEnd = index
        if ( (funcContent[index] == ",") || (funcContent[index] == ")") )  // 说明一个参数结束
        {
        
            
            // 再往前找到的字符为 空格" ","*" , "&",则说明是参数的起始位置
            index = index -1
            while ( index > indexLeft )
           {
           if ( ( funcContent[index] == " " ) 
                || ( funcContent[index] == "*" )
                || ( funcContent[index] == "&" ) 
                 )
           {
                paramStr = strmid(funcContent, index+1, paramEnd)
                         InsBufLine( hbuf, ln ++, " * param[in]      @paramStr@    :" )
                         break;
           }
                    else
                    {
                         index = index -1
                    }
            }
            
            
        }
        index = paramEnd + 1
    }


    InsBufLine( hbuf, ln++, " * return         " )
    InsBufLine( hbuf, ln++, " * modify         @szMyName@  @szVersion@  @year@-@month@-@day@ @hour@:@minute@       " )
        // 注释结束
    InsBufLine( hbuf, ln++, " */" )


// put the insertion point inside the header comment
SetBufIns( hbuf, ln, 10 )
CloseBuf( hSysBuf )

}


通过类似的方式还可以添加文件头,结构体等注释,提高代码的可读性...


自动生成函数注释及其模板---source insight自定义宏工具

这是一个可以自动生成函数注释及其模板实现的一个宏工具
  • SSWDG123456
  • SSWDG123456
  • 2014年11月26日 01:29
  • 2783

利用Source Insight宏语言脚本添加注释

利用Source Insight宏语言脚本添加注释 一,前言     总所周知,在Windows开发环境中,一个几百兆C语言工程代码中,最好用的编辑工具当然就是Source Insight...
  • just_white
  • just_white
  • 2013年07月31日 01:14
  • 1079

SourceInsight中添加注释快捷键

在使用SI过程中,我根据自己的使用习惯修改了它的默认快捷键,并且在配置文件中添加了一些人性化功能,下面一一介绍:  修改快捷键:Options->Key Assignments... 1.main...
  • yxtouch
  • yxtouch
  • 2014年04月24日 22:37
  • 2371

source insight 自动注释函数宏

这几天偶然间发现source insight 居然更新了!之前因为嫌弃si界面丑陋、对中文支持不好,转而用了sblime。期待了2年终于更新了,虽然界面还是那个鸟样,但是起码中文支持得不错了,现分享一...
  • fanyusen
  • fanyusen
  • 2017年03月05日 16:36
  • 299

Source Insight 注释快捷键的宏添加

 在使用SI过程中,我根据自己的使用习惯修改了它的默认快捷键,并且在配置文件中添加了一些人性化功能,下面一一介绍:  修改快捷键:Options->Key Assignments... 1....
  • wyq393562305
  • wyq393562305
  • 2014年09月04日 09:14
  • 147

Source Insight中快速添加注释

使用说明: 可以实现在sourceinsight中快速添加修改注释。 1. Project->Open Project... 打开Base工程(该工程一般在我的文档//Source Ins...
  • fjclc2008
  • fjclc2008
  • 2011年05月25日 14:12
  • 2289

source insight 添加注释,添加环境变

source insight 添加注释,添加环境变量
  • woaixiaziliao
  • woaixiaziliao
  • 2016年05月11日 14:09
  • 1273

部分解决Source Insight中文输入法打开时输入的乱码问题和自动添加注释

最近在结合书本看Linux内核源码,很多需要加注释的地方,需要大写或添加注释时,总是需要切换输入法,总是要进行同样的重复输入,实在是被折磨的不行了。进行一番搜索之后,网上有很多方法也试了都不行,要么是...
  • moonvs2010
  • moonvs2010
  • 2012年09月26日 18:16
  • 3939

source insight增加注释宏

打开base项目,下main.c文件里加入以下代码 对于在一行内的局部注释, 没有找到解除注释的宏,   macro Comments_orUn_g...
  • hushiganghu
  • hushiganghu
  • 2016年09月12日 15:10
  • 639

Source Insight 宏-多行注释

上篇文章介绍了单行注释(“//”)宏的实现,这里介绍多行注释(“/**/”)宏的实现。     由于/* ... */ 的注释出现的情况较复杂,大家可以根据自己需要进行修改,这里只将第一非空行,且以...
  • tankles
  • tankles
  • 2011年11月08日 19:19
  • 2884
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:source insight 宏 添加函数注释
举报原因:
原因补充:

(最多只允许输入30个字)