quicker.em在sourceinsight 4中的使用问题

uicker.em可以在sourceinsight 3.5中很好使用;也很方便;先多谢大牛。

但是,将quicker.em添加到sourceinsight 4中,绑定快捷键,根本就找不到autoExpand的宏。

可能主要原因是:souceinsight 4对宏解析的规范有些变动;所以quicker.em某些地方产生了冲突(代码的注释)。

具体办法:

1、修改GetFunctionDef函数里的注释      如果是{表示函数参数头结束了   改为    //如果是'{'表示函数参数头结束了

行数大概在

quicker.em在sourceinsight 4中的使用问题

具体函数内容为: 

macro GetFunctionDef(hbuf,symbol)
{
    ln = symbol.lnName
    szFunc = ""
    if(strlen(symbol) == 0)
    {
       return szFunc
    }
    fIsEnd = 1
//    msg(symbol)
    while(ln < symbol.lnLim)
    {
        szLine = GetBufLine (hbuf, ln)
        //去掉被注释掉的内容
        RetVal = SkipCommentFromString(szLine,fIsEnd)
		szLine = RetVal.szContent
		szLine = TrimString(szLine)
		fIsEnd = RetVal.fIsEnd
		//如果是{表示函数参数头结束了					//2018.11.19修改前
        //如果是'{'表示函数参数头结束了					//2018.11.19修改后
        ret = strstr(szLine,"{")        
        if(ret != 0xffffffff)
        {
            szLine = strmid(szLine,0,ret)
            szFunc = cat(szFunc,szLine)
            break
        }
        szFunc = cat(szFunc,szLine)        
        ln = ln + 1
    }
    return szFunc
}

2、修改函数GetWordLeftOfIch 里的注释       //只提取字符和# { / *作为命令    改为      //只提取字符和'#', '{', '/', '*'作为命令    

具体行数大概在

quicker.em在sourceinsight 4中的使用问题

具体函数为;

 

macro GetWordLeftOfIch(ich, sz)
{
    wordinfo = "" // create a "wordinfo" structure
    
    chTab = CharFromAscii(9)
    
    // scan backwords over white space, if any
    ich = ich - 1;
    if (ich >= 0)
        while (sz[ich] == " " || sz[ich] == chTab)
        {
            ich = ich - 1;
            if (ich < 0)
                break;
        }
    
    // scan backwords to start of word    
    ichLim = ich + 1;
    asciiA = AsciiFromChar("A")
    asciiZ = AsciiFromChar("Z")
    while (ich >= 0)
    {
        ch = toupper(sz[ich])
        asciiCh = AsciiFromChar(ch)
        
/*        if ((asciiCh < asciiA || asciiCh > asciiZ)
             && !IsNumber(ch)
             &&  (ch != "#") )
            break // stop at first non-identifier character
*/
	 	//只提取字符和# { / *作为命令                              //2018.11.19修改前
        //只提取字符和'#', '{', '/', '*'作为命令                //2018.11.19修改后测试通过
        if ((asciiCh < asciiA || asciiCh > asciiZ) 
           && !IsNumber(ch)
           && ( ch != "#" && ch != "{" && ch != "/" && ch != "*"))
            break;

        ich = ich - 1;
    }
    
    ich = ich + 1
    wordinfo.szWord = strmid(sz, ich, ichLim)
    wordinfo.ich = ich
    wordinfo.ichLim = ichLim;
    
    return wordinfo
}