source insight 配置宏
来源:互联网 发布:linux root权限不够 编辑:程序博客网 时间:2024/05/21 09:27
/** * @file onejacky_v1.0.em * @author onejacky(wanshijie@126.com) * @version v1.0 * @date 2014-7-27 * @brief sourc insight 3.5 宏,英文版本 **************************************************************************** * @note: ref url * http://www.cnblogs.com/Red_angelX/p/3713935.html **************************************************************************** * @history: * 1. date : 2014-7-27 * author: onejacky(wanshijie@126.com) * change: creat file **************************************************************************** */macro AutoExpand(){ //配置信息 // get window, sel, and buffer handles hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) if(sel.lnFirst != sel.lnLast) { /*块命令处理*/ BlockCommandProc() } if (sel.ichFirst == 0) stop hbuf = GetWndBuf(hwnd) language = getreg(LANGUAGE) if(language != 1) { language = 0 } nVer = 0 nVer = GetVersion() /*取得用户名*/ szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } // get line the selection (insertion point) is on szLine = GetBufLine(hbuf, sel.lnFirst); // parse word just to the left of the insertion point wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine) ln = sel.lnFirst; chTab = CharFromAscii(9) // prepare a new indented blank line to be inserted. // keep white space on left and add a tab to indent. // this preserves the indentation level. chSpace = CharFromAscii(32); ich = 0 while (szLine[ich] == chSpace || szLine[ich] == chTab) { ich = ich + 1 } szLine1 = strmid(szLine,0,ich) szLine = strmid(szLine, 0, ich) # " " sel.lnFirst = sel.lnLast sel.ichFirst = wordinfo.ich sel.ichLim = wordinfo.ich /*自动完成简化命令的匹配显示*/ wordinfo.szWord = RestoreCommand(hbuf,wordinfo.szWord) sel = GetWndSel(hwnd) if (wordinfo.szWord == "pn") /*问题单号的处理*/ { DelBufLine(hbuf, ln) AddPromblemNo() return } /*配置命令执行*/ else if (wordinfo.szWord == "config" || wordinfo.szWord == "co") { DelBufLine(hbuf, ln) ConfigureSystem() return } /*修改历史记录更新*/ else if (wordinfo.szWord == "hi") { DelBufLine(hbuf, ln) InsertHistory(hbuf,ln,language) return } else if (wordinfo.szWord == "abg") { sel.ichFirst = sel.ichFirst - 3 SetWndSel(hwnd,sel) InsertReviseAdd() PutBufLine(hbuf, ln+1 ,szLine1) SetBufIns(hwnd,ln+1,sel.ichFirst) return } else if (wordinfo.szWord == "dbg") { sel.ichFirst = sel.ichFirst - 3 SetWndSel(hwnd,sel) InsertReviseDel() PutBufLine(hbuf, ln+1 ,szLine1) SetBufIns(hwnd,ln+1,sel.ichFirst) return } else if (wordinfo.szWord == "mbg") { sel.ichFirst = sel.ichFirst - 3 SetWndSel(hwnd,sel) InsertReviseMod() PutBufLine(hbuf, ln+1 ,szLine1) SetBufIns(hwnd,ln+1,sel.ichFirst) return } else if (wordinfo.szWord == "ash") { AddStructHeader() return } else if (wordinfo.szWord == "aeh") { AddEnumHeader() return } //if(language == 1) //{ // ExpandProcEN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel) //} //else //{ // ExpandProcCN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel) //} ExpandProcEN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel)}macro ExpandProcEN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel){ szCmd = wordinfo.szWord hwnd = GetCurrentWnd() if (hwnd == 0) stop hbuf = GetWndBuf(hwnd) /*英文注释*/ if (szCmd == "/*") { if(wordinfo.ichLim > 70) { Msg("The right margine is small, Please use a new line") stop } szCurLine = GetBufLine(hbuf, sel.lnFirst); szLeft = strmid(szCurLine,0,wordinfo.ichLim) lineLen = strlen(szCurLine) kk = 0 while(wordinfo.ichLim + kk < lineLen) { if((szCurLine[wordinfo.ichLim + kk] != " ")||(szCurLine[wordinfo.ichLim + kk] != "\t") { msg("you must insert /* at the end of a line"); return } kk = kk + 1 } szContent = Ask("Please input comment") DelBufLine(hbuf, ln) szLeft = cat( szLeft, " ") CommentContent(hbuf,ln,szLeft,szContent,1) return } else if(szCmd == "{") { InsBufLine(hbuf, ln + 1, "@szLine@") InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); SetBufIns (hbuf, ln + 1, strlen(szLine)) return } else if (szCmd == "while" ) { SetBufSelText(hbuf, " (#) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); } else if (szCmd == "for") { SetBufSelText(hbuf, " (#; #; #) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#") InsBufLine(hbuf, ln + 2, "@szLine1@" # "}") SetWndSel(hwnd, sel) SearchForward() szVar = ask("Please input loop variable") newsel = sel newsel.ichLim = GetBufLineLength (hbuf, ln) SetWndSel(hwnd, newsel) SetBufSelText(hbuf, " (@szVar@ = # ; @szVar@ # ; @szVar@++ ) {") } else if (szCmd == "if") { SetBufSelText(hbuf, " (#) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); } else if( szCmd == "else" ) { SetBufSelText(hbuf, " {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); } else if (szCmd == "ef") { PutBufLine(hbuf, ln, szLine1 # "else if (#){") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); } else if (szCmd == "ife") { PutBufLine(hbuf, ln, szLine1 # "if (#) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "} else {"); InsBufLine(hbuf, ln + 3, "@szLine@" # "#"); InsBufLine(hbuf, ln + 4, "@szLine1@" # "}"); } else if (szCmd == "ifs") { PutBufLine(hbuf, ln, szLine1 # "if (#) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "} else if (#) {"); InsBufLine(hbuf, ln + 3, "@szLine@" # "#"); InsBufLine(hbuf, ln + 4, "@szLine1@" # "} else {"); InsBufLine(hbuf, ln + 5, "@szLine@" # "#"); InsBufLine(hbuf, ln + 6, "@szLine1@" # "}"); } else if (szCmd == "#ifd" || szCmd == "#ifdef") //#ifdef { DelBufLine(hbuf, ln) InsIfdef() return } else if (szCmd == "#ifn" || szCmd == "#ifndef") //#ifndef { DelBufLine(hbuf, ln) InsIfndef() return } else if (szCmd == "#if") { DelBufLine(hbuf, ln) InsertPredefIf() return } else if (szCmd == "cpp") { DelBufLine(hbuf, ln) InsertCPP(hbuf,ln) return } else if (szCmd == "fo") { SetBufSelText(hbuf, "r (i = 0; i < #; i++) {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#") InsBufLine(hbuf, ln + 2, "@szLine1@" # "}") symname =GetCurSymbol () symbol = GetSymbolLocation(symname) if(strlen(symbol) > 0) { nIdx = symbol.lnName + 1; while( 1 ) { szCurLine = GetBufLine(hbuf, nIdx); nRet = strstr(szCurLine,"{") if( nRet != 0xffffffff ) { break; } nIdx = nIdx + 1 if(nIdx > symbol.lnLim) { break } } InsBufLine(hbuf, nIdx + 1, " UINT32_T ulI = 0;"); } } else if (szCmd == "switch" ) { nSwitch = ask("Please input the number of case") PutBufLine(hbuf, ln, szLine1 # "switch (#) {") InsertMultiCaseProc(hbuf, szLine1, nSwitch) } else if (szCmd == "do") { PutBufLine(hbuf, ln, szLine1 # "do {") InsBufLine(hbuf, ln + 1, "@szLine@" # "#"); InsBufLine(hbuf, ln + 2, "@szLine1@" # "} while ( # );") } else if (szCmd == "case" ) { SetBufSelText(hbuf, " # :") InsBufLine(hbuf, ln + 1, "@szLine@" # "#") InsBufLine(hbuf, ln + 2, "@szLine@" # "break;") } else if (szCmd == "struct" || szCmd == "st") { DelBufLine(hbuf, ln) szStructName = Ask("Please input struct name") InsBufLine(hbuf, ln, "@szLine1@typedef struct"); PutBufLine(hbuf, ln, szLine1 # "typedef struct{") InsBufLine(hbuf, ln + 1, "@szLine@ "); szStructName = cat(szStructName,"_t") InsBufLine(hbuf, ln + 2, "@szLine1@}@szStructName@;"); SetBufIns (hbuf, ln + 1, strlen(szLine)) return } else if (szCmd == "enum" || szCmd == "en") { DelBufLine(hbuf, ln) szStructName = Ask("Please input enum name") InsBufLine(hbuf, ln, "@szLine1@typedef enum"); PutBufLine(hbuf, ln, szLine1 # "typedef enum{") InsBufLine(hbuf, ln + 1, "@szLine@ "); szStructName = cat(szStructName,"_t") InsBufLine(hbuf, ln + 2, "@szLine1@}@szStructName@;"); SetBufIns (hbuf, ln + 1, strlen(szLine)) return } else if (szCmd == "file" || szCmd == "fi") { DelBufLine(hbuf, ln) InsertFileHeaderEN( hbuf,0, szMyName,"" ) return } else if (szCmd == "filec") { while (1) { myfile = getreg(MYFILEC) if(strlen( myfile ) == 0) { myfile = Ask("Cannot open your templet c file, Enter your templet c file path:") setreg(MYFILEC, myfile) } templet = OpenBuf(myfile) if (templet == hNil) { myfile = Ask("Cannot open your templet c file, Enter your templet c file path:") setreg(MYFILEC, myfile) } else { break; } } DelBufLine(hbuf, ln) numline = GetBufLineCount(templet) i = 0 while (i < numline) { line = GetBufLine(templet, i) //msg(line) InsBufLine(hbuf, i, line) i = i+1 } InsBufLine(hbuf, i, " ") } else if (szCmd == "fileh") { while (1) { myfile = getreg(MYFILEH) if(strlen( myfile ) == 0) { myfile = Ask("Cannot open your templet h file, Enter your templet h file path:") setreg(MYFILEH, myfile) } templet = OpenBuf(myfile) if (templet == hNil) { myfile = Ask("Cannot open your templet h file, Enter your templet h file path:") setreg(MYFILEH, myfile) } else { break; } } DelBufLine(hbuf, ln) numline = GetBufLineCount(templet) i = 0 while (i < numline) { line = GetBufLine(templet, i) //msg(line) InsBufLine(hbuf, i, line) i = i+1 } InsBufLine(hbuf, i, " ") } else if (szCmd == "func" || szCmd == "fu") { DelBufLine(hbuf,ln) lnMax = GetBufLineCount(hbuf) if(ln != lnMax) { szNextLine = GetBufLine(hbuf,ln) if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != 2)) { symbol = GetCurSymbol() if(strlen(symbol) != 0) { FuncHeadCommentEN(hbuf, ln, symbol, szMyName,0) return } } } szFuncName = Ask("Please input function name") FuncHeadCommentEN(hbuf, ln, szFuncName, szMyName, 1) } else if (szCmd == "tab") { DelBufLine(hbuf, ln) ReplaceBufTab() return } else if (szCmd == "ap") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = AddPromblemNo() InsBufLine(hbuf, ln, "@szLine1@/* Promblem Number: @szQuestion@ Author:@szMyName@, Date:@sz@/@sz1@/@sz3@ "); szContent = Ask("Description") szLeft = cat(szLine1," Description : "); if(strlen(szLeft) > 70) { Msg("The right margine is small, Please use a new line") stop } ln = CommentContent(hbuf,ln + 1,szLeft,szContent,1) return } else if (szCmd == "hd") { DelBufLine(hbuf, ln) CreateFunctionDef(hbuf,szMyName,1) return } else if (szCmd == "hdn") { DelBufLine(hbuf, ln) /*生成不要文件名的新头文件*/ CreateNewHeaderFile() return } else if (szCmd == "ab") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "ae") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "db") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "de") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln + 0) InsBufLine(hbuf, ln, "@szLine1@/* END: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "mb") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "me") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else { SearchForward()// ExpandBraceLarge() stop } SetWndSel(hwnd, sel) SearchForward()}macro ExpandProcCN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel){ szCmd = wordinfo.szWord hwnd = GetCurrentWnd() if (hwnd == 0) stop hbuf = GetWndBuf(hwnd) //中文注释 if (szCmd == "/*") { if(wordinfo.ichLim > 70) { Msg("右边空间太小,请用新的行") stop } szCurLine = GetBufLine(hbuf, sel.lnFirst); szLeft = strmid(szCurLine,0,wordinfo.ichLim) lineLen = strlen(szCurLine) kk = 0 /*注释只能在行尾,避免注释掉有用代码*/ while(wordinfo.ichLim + kk < lineLen) { if(szCurLine[wordinfo.ichLim + kk] != " ") { msg("只能在行尾插入"); return } kk = kk + 1 } szContent = Ask("请输入注释的内容") DelBufLine(hbuf, ln) szLeft = cat( szLeft, " ") CommentContent(hbuf,ln,szLeft,szContent,1) return } else if(szCmd == "{") { InsBufLine(hbuf, ln + 1, "@szLine@") InsBufLine(hbuf, ln + 2, "@szLine1@" # "}"); SetBufIns (hbuf, ln + 1, strlen(szLine)) return } else if (szCmd == "while" || szCmd == "wh") { SetBufSelText(hbuf, " ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}"); } else if( szCmd == "else" || szCmd == "el") { InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}"); SetBufIns (hbuf, ln + 2, strlen(szLine)) return } else if (szCmd == "#ifd" || szCmd == "#ifdef") //#ifdef { DelBufLine(hbuf, ln) InsIfdef() return } else if (szCmd == "#ifn" || szCmd == "#ifndef") //#ifdef { DelBufLine(hbuf, ln) InsIfndef() return } else if (szCmd == "#if") { DelBufLine(hbuf, ln) InsertPredefIf() return } else if (szCmd == "cpp") { DelBufLine(hbuf, ln) InsertCPP(hbuf,ln) return } else if (szCmd == "if") { SetBufSelText(hbuf, " ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}");/* InsBufLine(hbuf, ln + 4, "@szLine1@" # "else"); InsBufLine(hbuf, ln + 5, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 6, "@szLine@" # ";"); InsBufLine(hbuf, ln + 7, "@szLine1@" # "}");*/ } else if (szCmd == "ef") { PutBufLine(hbuf, ln, szLine1 # "else if ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}"); } else if (szCmd == "ife") { PutBufLine(hbuf, ln, szLine1 # "if ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}"); InsBufLine(hbuf, ln + 4, "@szLine1@" # "else"); InsBufLine(hbuf, ln + 5, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 6, "@szLine@" # ";"); InsBufLine(hbuf, ln + 7, "@szLine1@" # "}"); } else if (szCmd == "ifs") { PutBufLine(hbuf, ln, szLine1 # "if ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "}"); InsBufLine(hbuf, ln + 4, "@szLine1@" # "else if ( # )"); InsBufLine(hbuf, ln + 5, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 6, "@szLine@" # ";"); InsBufLine(hbuf, ln + 7, "@szLine1@" # "}"); InsBufLine(hbuf, ln + 8, "@szLine1@" # "else"); InsBufLine(hbuf, ln + 9, "@szLine1@" # "{"); InsBufLine(hbuf, ln + 10, "@szLine@" # ";"); InsBufLine(hbuf, ln + 11, "@szLine1@" # "}"); } else if (szCmd == "for") { SetBufSelText(hbuf, " ( # ; # ; # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{") InsBufLine(hbuf, ln + 2, "@szLine@" # "#") InsBufLine(hbuf, ln + 3, "@szLine1@" # "}") SetWndSel(hwnd, sel) SearchForward() szVar = ask("请输入循环变量") newsel = sel newsel.ichLim = GetBufLineLength (hbuf, ln) SetWndSel(hwnd, newsel) SetBufSelText(hbuf, " ( @szVar@ = # ; @szVar@ # ; @szVar@++ )") } else if (szCmd == "fo") { SetBufSelText(hbuf, "r ( ulI = 0; ulI < # ; ulI++ )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{") InsBufLine(hbuf, ln + 2, "@szLine@" # "#") InsBufLine(hbuf, ln + 3, "@szLine1@" # "}") symname =GetCurSymbol () symbol = GetSymbolLocation(symname) if(strlen(symbol) > 0) { nIdx = symbol.lnName + 1; while( 1 ) { szCurLine = GetBufLine(hbuf, nIdx); nRet = strstr(szCurLine,"{") if( nRet != 0xffffffff ) { break; } nIdx = nIdx + 1 if(nIdx > symbol.lnLim) { break } } InsBufLine(hbuf, nIdx + 1, " UINT32_T ulI = 0;"); } } else if (szCmd == "switch" || szCmd == "sw") { nSwitch = ask("请输入case的个数") SetBufSelText(hbuf, " ( # )") InsBufLine(hbuf, ln + 1, "@szLine1@" # "{") InsertMultiCaseProc(hbuf,szLine1,nSwitch) } else if (szCmd == "do") { InsBufLine(hbuf, ln + 1, "@szLine1@" # "{") InsBufLine(hbuf, ln + 2, "@szLine@" # "#"); InsBufLine(hbuf, ln + 3, "@szLine1@" # "} while ( # );") } else if (szCmd == "case" || szCmd == "ca" ) { SetBufSelText(hbuf, " # :") InsBufLine(hbuf, ln + 1, "@szLine@" # "#") InsBufLine(hbuf, ln + 2, "@szLine@" # "break;") } else if (szCmd == "struct" || szCmd == "st" ) { DelBufLine(hbuf, ln) szStructName = toupper(Ask("请输入结构名:")) InsBufLine(hbuf, ln, "@szLine1@typedef struct @szStructName@"); InsBufLine(hbuf, ln + 1, "@szLine1@{"); InsBufLine(hbuf, ln + 2, "@szLine@ "); szStructName = cat(szStructName,"_STRU") InsBufLine(hbuf, ln + 3, "@szLine1@}@szStructName@;"); SetBufIns (hbuf, ln + 2, strlen(szLine)) return } else if (szCmd == "enum" || szCmd == "en") { DelBufLine(hbuf, ln) //提示输入枚举名并转换为大写 szStructName = toupper(Ask("请输入枚举名:")) InsBufLine(hbuf, ln, "@szLine1@typedef enum @szStructName@"); InsBufLine(hbuf, ln + 1, "@szLine1@{"); InsBufLine(hbuf, ln + 2, "@szLine@ "); szStructName = cat(szStructName,"_ENUM") InsBufLine(hbuf, ln + 3, "@szLine1@}@szStructName@;"); SetBufIns (hbuf, ln + 2, strlen(szLine)) return } else if (szCmd == "file" || szCmd == "fi" ) { DelBufLine(hbuf, ln) /*生成文件头说明*/ InsertFileHeaderCN( hbuf,0, szMyName,"" ) return } else if (szCmd == "hd") { DelBufLine(hbuf, ln) /*生成C语言的头文件*/ CreateFunctionDef(hbuf,szMyName,0) return } else if (szCmd == "hdn") { DelBufLine(hbuf, ln) /*生成不要文件名的新头文件*/ CreateNewHeaderFile() return } else if (szCmd == "func" || szCmd == "fu") { DelBufLine(hbuf,ln) lnMax = GetBufLineCount(hbuf) if(ln != lnMax) { szNextLine = GetBufLine(hbuf,ln) /*对于2.1版的si如果是非法symbol就会中断执行,故该为以后一行 是否有‘(’来判断是否是新函数*/ if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != 2)) { /*是已经存在的函数*/ symbol = GetCurSymbol() if(strlen(symbol) != 0) { FuncHeadCommentCN(hbuf, ln, symbol, szMyName,0) return } } } szFuncName = Ask("请输入函数名称:") /*是新函数*/ FuncHeadCommentCN(hbuf, ln, szFuncName, szMyName, 1) } else if (szCmd == "tab") /*将tab扩展为空格*/ { DelBufLine(hbuf, ln) ReplaceBufTab() } else if (szCmd == "ap") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = AddPromblemNo() InsBufLine(hbuf, ln, "@szLine1@/* 问 题 单: @szQuestion@ 修改人:@szMyName@, 时间:@sz@/@sz1@/@sz3@ "); szContent = Ask("修改原因") szLeft = cat(szLine1," 修改原因: "); if(strlen(szLeft) > 70) { Msg("右边空间太小,请用新的行") stop } ln = CommentContent(hbuf,ln + 1,szLeft,szContent,1) return } else if (szCmd == "ab") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "ae") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "db") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "de") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln + 0) InsBufLine(hbuf, ln, "@szLine1@/* END: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "mb") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@ */"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "me") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else { SearchForward() stop } SetWndSel(hwnd, sel) SearchForward()}macro BlockCommandProc(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) if(sel.lnFirst > 0) { ln = sel.lnFirst - 1 } else { stop } szLine = GetBufLine(hbuf,ln) szLine = TrimString(szLine) if(szLine == "while" || szLine == "wh") { InsertWhile() /*插入while*/ } else if(szLine == "do") { InsertDo() //插入do while语句 } else if(szLine == "for") { InsertFor() //插入for语句 } else if(szLine == "if") { InsertIf() //插入if语句 } else if(szLine == "el" || szLine == "else") { InsertElse() //插入else语句 DelBufLine(hbuf,ln) stop } else if((szLine == "#ifd") || (szLine == "#ifdef")) { InsIfdef() //插入#ifdef DelBufLine(hbuf,ln) stop } else if((szLine == "#ifn") || (szLine == "#ifndef")) { InsIfndef() //插入#ifdef DelBufLine(hbuf,ln) stop } else if (szLine == "abg") { InsertReviseAdd() DelBufLine(hbuf, ln) stop } else if (szLine == "dbg") { InsertReviseDel() DelBufLine(hbuf, ln) stop } else if (szLine == "mbg") { InsertReviseMod() DelBufLine(hbuf, ln) stop } else if(szLine == "#if") { InsertPredefIf() DelBufLine(hbuf,ln) stop } DelBufLine(hbuf,ln) SearchForward() stop}macro RestoreCommand(hbuf,szCmd){ if(szCmd == "ca") { SetBufSelText(hbuf, "se") szCmd = "case" } else if(szCmd == "sw") { SetBufSelText(hbuf, "itch") szCmd = "switch" } else if(szCmd == "el") { SetBufSelText(hbuf, "se") szCmd = "else" } else if(szCmd == "wh") { SetBufSelText(hbuf, "ile") szCmd = "while" } return szCmd}macro SearchForward(){ LoadSearchPattern("#", 1, 0, 1); Search_Forward}macro SearchBackward(){ LoadSearchPattern("#", 1, 0, 1); Search_Backward}macro InsertFuncName(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) symbolname = GetCurSymbol() SetBufSelText (hbuf, symbolname)}macro strstr(str1,str2){ i = 0 j = 0 len1 = strlen(str1) len2 = strlen(str2) if((len1 == 0) || (len2 == 0)) { return 0xffffffff } while( i < len1) { if(str1[i] == str2[j]) { while(j < len2) { j = j + 1 if(str1[i+j] != str2[j]) { break } } if(j == len2) { return i } j = 0 } i = i + 1 } return 0xffffffff}macro InsertTraceInfo(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop hbuf = GetWndBuf(hwnd) sel = GetWndSel(hwnd) symbol = GetSymbolLocationFromLn(hbuf, sel.lnFirst) InsertTraceInCurFunction(hbuf,symbol)}macro InsertTraceInCurFunction(hbuf,symbol){ ln = GetBufLnCur (hbuf) symbolname = symbol.Symbol nLineEnd = symbol.lnLim nExitCount = 1; InsBufLine(hbuf, ln, " DebugTrace(\"\\r\\n |@symbolname@() entry--- \");") ln = ln + 1 fIsEnd = 1 fIsNeedPrt = 1 fIsSatementEnd = 1 szLeftOld = "" while(ln < nLineEnd) { szLine = GetBufLine(hbuf, ln) iCurLineLen = strlen(szLine) /*剔除其中的注释语句*/ RetVal = SkipCommentFromString(szLine,fIsEnd) szLine = RetVal.szContent fIsEnd = RetVal.fIsEnd //查找是否有return语句/* ret =strstr(szLine,"return") if(ret != 0xffffffff) { if( (szLine[ret+6] == " " ) || (szLine[ret+6] == "\t" ) || (szLine[ret+6] == ";" ) || (szLine[ret+6] == "(" )) { szPre = strmid(szLine,0,ret) } SetBufIns(hbuf,ln,ret) Paren_Right sel = GetWndSel(hwnd) if( sel.lnLast != ln ) { GetbufLine(hbuf,sel.lnLast) RetVal = SkipCommentFromString(szLine,1) szLine = RetVal.szContent fIsEnd = RetVal.fIsEnd } }*/ //获得左边空白大小 nLeft = GetLeftBlank(szLine) if(nLeft == 0) { szLeft = " " } else { szLeft = strmid(szLine,0,nLeft) } szLine = TrimString(szLine) iLen = strlen(szLine) if(iLen == 0) { ln = ln + 1 continue } szRet = GetFirstWord(szLine)// if( (szRet == "if") || (szRet == "else") //查找是否有return语句// ret =strstr(szLine,"return") if( szRet == "return") { if( fIsSatementEnd == 0) { fIsNeedPrt = 1 InsBufLine(hbuf,ln+1,"@szLeftOld@}") szEnd = cat(szLeft,"DebugTrace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");") InsBufLine(hbuf, ln, szEnd ) InsBufLine(hbuf,ln,"@szLeftOld@{") nExitCount = nExitCount + 1 nLineEnd = nLineEnd + 3 ln = ln + 3 } else { fIsNeedPrt = 0 szEnd = cat(szLeft,"DebugTrace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");") InsBufLine(hbuf, ln, szEnd ) nExitCount = nExitCount + 1 nLineEnd = nLineEnd + 1 ln = ln + 1 } } else { ret =strstr(szLine,"}") if( ret != 0xffffffff ) { fIsNeedPrt = 1 } } szLeftOld = szLeft ch = szLine[iLen-1] if( ( ch == ";" ) || ( ch == "{" ) || ( ch == ":" )|| ( ch == "}" ) || ( szLine[0] == "#" )) { fIsSatementEnd = 1 } else { fIsSatementEnd = 0 } ln = ln + 1 } //只要前面的return后有一个}了说明函数的结尾没有返回,需要再加一个出口打印 if(fIsNeedPrt == 1) { InsBufLine(hbuf, ln, " DebugTrace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");") InsBufLine(hbuf, ln, "") }}macro GetFirstWord(szLine){ szLine = TrimLeft(szLine) nIdx = 0 iLen = strlen(szLine) while(nIdx < iLen) { if( (szLine[nIdx] == " ") || (szLine[nIdx] == "\t") || (szLine[nIdx] == ";") || (szLine[nIdx] == "(") || (szLine[nIdx] == ".") || (szLine[nIdx] == "{") || (szLine[nIdx] == ",") || (szLine[nIdx] == ":") ) { return strmid(szLine,0,nIdx) } nIdx = nIdx + 1 } return ""}macro AutoInsertTraceInfoInBuf(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) isymMax = GetBufSymCount(hbuf) isym = 0 while (isym < isymMax) { symbol = GetBufSymLocation(hbuf, isym) isCodeBegin = 0 fIsEnd = 1 isBlandLine = 0 if(strlen(symbol) > 0) { if(symbol.Type == "Class Placeholder") { hsyml = SymbolChildren(symbol) cchild = SymListCount(hsyml) ichild = 0 while (ichild < cchild) { symbol = GetBufSymLocation(hbuf, isym) hsyml = SymbolChildren(symbol) childsym = SymListItem(hsyml, ichild) ln = childsym.lnName isCodeBegin = 0 fIsEnd = 1 isBlandLine = 0 while( ln < childsym.lnLim ) { szLine = GetBufLine (hbuf, ln) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) szNew = RetVal.szContent fIsEnd = RetVal.fIsEnd if(isCodeBegin == 1) { szNew = TrimLeft(szNew) //检测是否是可执行代码开始 iRet = CheckIsCodeBegin(szNew) if(iRet == 1) { if( isBlandLine != 0 ) { ln = isBlandLine } InsBufLine(hbuf,ln,"") childsym.lnLim = childsym.lnLim + 1 SetBufIns(hbuf, ln+1 , 0) InsertTraceInCurFunction(hbuf,childsym) break } if(strlen(szNew) == 0) { if( isBlandLine == 0 ) { isBlandLine = ln; } } else { isBlandLine = 0 } } //查找到函数的开始 if(isCodeBegin == 0) { iRet = strstr(szNew,"{") if(iRet != 0xffffffff) { isCodeBegin = 1 } } ln = ln + 1 } ichild = ichild + 1 } SymListFree(hsyml) } else if( ( symbol.Type == "Function") || (symbol.Type == "Method") ) { ln = symbol.lnName while( ln < symbol.lnLim ) { szLine = GetBufLine (hbuf, ln) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) szNew = RetVal.szContent fIsEnd = RetVal.fIsEnd if(isCodeBegin == 1) { szNew = TrimLeft(szNew) //检测是否是可执行代码开始 iRet = CheckIsCodeBegin(szNew) if(iRet == 1) { if( isBlandLine != 0 ) { ln = isBlandLine } SetBufIns(hbuf, ln , 0) InsertTraceInCurFunction(hbuf,symbol) InsBufLine(hbuf,ln,"") break } if(strlen(szNew) == 0) { if( isBlandLine == 0 ) { isBlandLine = ln; } } else { isBlandLine = 0 } } //查找到函数的开始 if(isCodeBegin == 0) { iRet = strstr(szNew,"{") if(iRet != 0xffffffff) { isCodeBegin = 1 } } ln = ln + 1 } } } isym = isym + 1 }}macro CheckIsCodeBegin(szLine){ iLen = strlen(szLine) if(iLen == 0) { return 0 } nIdx = 0 nWord = 0 if( (szLine[nIdx] == "(") || (szLine[nIdx] == "-") || (szLine[nIdx] == "*") || (szLine[nIdx] == "+")) { return 1 } if( szLine[nIdx] == "#" ) { return 0 } while(nIdx < iLen) { if( (szLine[nIdx] == " ")||(szLine[nIdx] == "\t") || (szLine[nIdx] == "(")||(szLine[nIdx] == "{") || (szLine[nIdx] == ";") ) { if(nWord == 0) { if( (szLine[nIdx] == "(")||(szLine[nIdx] == "{") || (szLine[nIdx] == ";") ) { return 1 } szFirstWord = StrMid(szLine,0,nIdx) if(szFirstWord == "return") { return 1 } } while(nIdx < iLen) { if( (szLine[nIdx] == " ")||(szLine[nIdx] == "\t") ) { nIdx = nIdx + 1 } else { break } } nWord = nWord + 1 if(nIdx == iLen) { return 1 } } if(nWord == 1) { asciiA = AsciiFromChar("A") asciiZ = AsciiFromChar("Z") ch = toupper(szLine[nIdx]) asciiCh = AsciiFromChar(ch) if( ( szLine[nIdx] == "_" ) || ( szLine[nIdx] == "*" ) || ( ( asciiCh >= asciiA ) && ( asciiCh <= asciiZ ) ) ) { return 0 } else { return 1 } } nIdx = nIdx + 1 } return 1}macro AutoInsertTraceInfoInPrj(){ hprj = GetCurrentProj() ifileMax = GetProjFileCount (hprj) ifile = 0 while (ifile < ifileMax) { filename = GetProjFileName (hprj, ifile) szExt = toupper(GetFileNameExt(filename)) if( (szExt == "C") || (szExt == "CPP") ) { hbuf = OpenBuf (filename) if(hbuf != 0) { SetCurrentBuf(hbuf) AutoInsertTraceInfoInBuf() } } //自动保存打开文件,可根据需要打开/* if( IsBufDirty (hbuf) ) { SaveBuf (hbuf) } CloseBuf(hbuf)*/ ifile = ifile + 1 }}macro RemoveTraceInfo(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) if(hbuf == hNil) stop symbolname = GetCurSymbol() symbol = GetSymbolLocationFromLn(hbuf, sel.lnFirst)// symbol = GetSymbolLocation (symbolname) nLineEnd = symbol.lnLim szEntry = "DebugTrace(\"\\r\\n |@symbolname@() entry--- \");" szExit = "DebugTrace(\"\\r\\n |@symbolname@() exit---:" ln = symbol.lnName fIsEntry = 0 while(ln < nLineEnd) { szLine = GetBufLine(hbuf, ln) /*剔除其中的注释语句*/ RetVal = TrimString(szLine) if(fIsEntry == 0) { ret = strstr(szLine,szEntry) if(ret != 0xffffffff) { DelBufLine(hbuf,ln) nLineEnd = nLineEnd - 1 fIsEntry = 1 ln = ln + 1 continue } } ret = strstr(szLine,szExit) if(ret != 0xffffffff) { DelBufLine(hbuf,ln) nLineEnd = nLineEnd - 1 } ln = ln + 1 }}macro RemoveCurBufTraceInfo(){ hbuf = GetCurrentBuf() isymMax = GetBufSymCount(hbuf) isym = 0 while (isym < isymMax) { isLastLine = 0 symbol = GetBufSymLocation(hbuf, isym) fIsEnd = 1 if(strlen(symbol) > 0) { if(symbol.Type == "Class Placeholder") { hsyml = SymbolChildren(symbol) cchild = SymListCount(hsyml) ichild = 0 while (ichild < cchild) { hsyml = SymbolChildren(symbol) childsym = SymListItem(hsyml, ichild) SetBufIns(hbuf,childsym.lnName,0) RemoveTraceInfo() ichild = ichild + 1 } SymListFree(hsyml) } else if( ( symbol.Type == "Function") || (symbol.Type == "Method") ) { SetBufIns(hbuf,symbol.lnName,0) RemoveTraceInfo() } } isym = isym + 1 }}macro RemovePrjTraceInfo(){ hprj = GetCurrentProj() ifileMax = GetProjFileCount (hprj) ifile = 0 while (ifile < ifileMax) { filename = GetProjFileName (hprj, ifile) hbuf = OpenBuf (filename) if(hbuf != 0) { SetCurrentBuf(hbuf) RemoveCurBufTraceInfo() } //自动保存打开文件,可根据需要打开/* if( IsBufDirty (hbuf) ) { SaveBuf (hbuf) } CloseBuf(hbuf)*/ ifile = ifile + 1 }}macro InsertFileHeaderEN(hbuf, ln,szName,szContent){ InsBufLine(hbuf, ln + 0, "/**") InsBufLine(hbuf, ln + 1, " ****************************************************************************") InsBufLine(hbuf, ln + 2, " * @@ Copyright (C), 2013-2023, WWW.52openwrt.com. All Rights Reserved.") InsBufLine(hbuf, ln + 3, " ****************************************************************************") sz = GetFileName(GetBufName (hbuf)) InsBufLine(hbuf, ln + 4, " * @@file @sz@") if( strlen(szMyName)>0 ) { InsBufLine(hbuf, ln + 5, " * @@author @szName@") } else { InsBufLine(hbuf, ln + 5, " * @@author #") } SysTime = GetSysTime(0) szTime = SysTime.Date sz1=SysTime.Year sz2=SysTime.month sz3=SysTime.day InsBufLine(hbuf, ln + 6, " * @@version v1.0") InsBufLine(hbuf, ln + 7, " * @@date @sz1@-@sz2@-@sz3@") iLen = strlen (szContent) nlnDesc = ln InsBufLine(hbuf, ln + 8, " * @@brief @szContent@") InsBufLine(hbuf, ln + 9, " ****************************************************************************") InsBufLine(hbuf, ln +10, " * @@note:") InsBufLine(hbuf, ln +11, " * ") InsBufLine(hbuf, ln +12, " ****************************************************************************") InsBufLine(hbuf, ln +13, " * @@history:") InsBufLine(hbuf, ln +14, " * 1. date : @sz1@-@sz2@-@sz3@") if( strlen(szMyName)>0 ) { InsBufLine(hbuf, ln +15, " * author: @szName@") } else { InsBufLine(hbuf, ln +15, " * author: #") } InsBufLine(hbuf, ln +16, " * change: creat file") InsBufLine(hbuf, ln +17, " ****************************************************************************") InsBufLine(hbuf, ln +18, " */") if(strlen(szContent) != 0) { return } //如果没有输入功能描述的话提示输入 szContent = Ask("please input brief:") SetBufIns(hbuf,nlnDesc + 8,0) DelBufLine(hbuf,nlnDesc + 8) //自动排列显示功能描述 CommentContent(hbuf,nlnDesc + 8, " * @@brief ",szContent,0)}macro InsertFileHeaderCN(hbuf, ln,szName,szContent){ InsBufLine(hbuf, ln + 0, "/**") InsBufLine(hbuf, ln + 1, " ****************************************************************************") InsBufLine(hbuf, ln + 2, " * @@ Copyright (C), 2013-2023, xxxxx Corporation. All Rights Reserved.") InsBufLine(hbuf, ln + 3, " ****************************************************************************") sz = GetFileName(GetBufName (hbuf)) InsBufLine(hbuf, ln + 4, " * @@file @sz@") if( strlen(szMyName)>0 ) { InsBufLine(hbuf, ln + 5, " * @@author @szName@") } else { InsBufLine(hbuf, ln + 5, " * @@author #") } SysTime = GetSysTime(0) szTime = SysTime.Date sz1=SysTime.Year sz2=SysTime.month sz3=SysTime.day InsBufLine(hbuf, ln + 6, " * @@version v1.0") InsBufLine(hbuf, ln + 7, " * @@date @sz1@-@sz2@-@sz3@") iLen = strlen (szContent) nlnDesc = ln InsBufLine(hbuf, ln + 8, " * @@brief @szContent@") InsBufLine(hbuf, ln + 9, " ****************************************************************************") InsBufLine(hbuf, ln +10, " * @@note:") InsBufLine(hbuf, ln +11, " * ") InsBufLine(hbuf, ln +12, " ****************************************************************************") InsBufLine(hbuf, ln +13, " * @@history:") InsBufLine(hbuf, ln +14, " * 1. date : @sz1@-@sz2@-@sz3@") if( strlen(szMyName)>0 ) { InsBufLine(hbuf, ln +15, " * author: @szName@") } else { InsBufLine(hbuf, ln +15, " * author: #") } InsBufLine(hbuf, ln +16, " * change: creat file") InsBufLine(hbuf, ln +17, " ****************************************************************************") InsBufLine(hbuf, ln +18, " */") if(strlen(szContent) != 0) { return } //如果没有输入功能描述的话提示输入 szContent = Ask("please input brief:") SetBufIns(hbuf,nlnDesc + 8,0) DelBufLine(hbuf,nlnDesc + 8) //自动排列显示功能描述 CommentContent(hbuf,nlnDesc + 8, " * @@brief ",szContent,0)}macro GetFunctionList(hbuf,hnewbuf){ isymMax = GetBufSymCount (hbuf) isym = 0 //依次取出全部的但前buf符号表中的全部符号 while (isym < isymMax) { symbol = GetBufSymLocation(hbuf, isym) if(symbol.Type == "Class Placeholder") { hsyml = SymbolChildren(symbol) cchild = SymListCount(hsyml) ichild = 0 while (ichild < cchild) { childsym = SymListItem(hsyml, ichild) AppendBufLine(hnewbuf,childsym.symbol) ichild = ichild + 1 } SymListFree(hsyml) } if(strlen(symbol) > 0) { if( (symbol.Type == "Method") || (symbol.Type == "Function") || ("Editor Macro" == symbol.Type) ) { //取出类型是函数和宏的符号 symname = symbol.Symbol //将符号插入到新buf中这样做是为了兼容V2.1 AppendBufLine(hnewbuf,symname) } } isym = isym + 1 }}macro InsertFileList(hbuf,hnewbuf,ln){ if(hnewbuf == hNil) { return ln } isymMax = GetBufLineCount (hnewbuf) isym = 0 while (isym < isymMax) { szLine = GetBufLine(hnewbuf, isym) InsBufLine(hbuf,ln," @szLine@") ln = ln + 1 isym = isym + 1 } return ln}macro CommentContent1 (hbuf,ln,szPreStr,szContent,isEnd){ //将剪贴板中的多段文本合并 szClip = MergeString() //去掉多余的空格 szTmp = TrimString(szContent) //如果输入窗口中的内容是剪贴板中的内容说明是剪贴过来的 ret = strstr(szClip,szTmp) if(ret == 0) { szContent = szClip } szLeftBlank = szPreStr iLen = strlen(szPreStr) k = 0 while(k < iLen) { szLeftBlank[k] = " "; k = k + 1; } iLen = strlen (szContent) szTmp = cat(szPreStr,"#"); if( iLen == 0) { InsBufLine(hbuf, ln, "@szTmp@") } else { i = 0 while (iLen - i > 75 - k ) { j = 0 while(j < 75 - k) { iNum = szContent[i + j] //如果是中文必须成对处理 if( AsciiFromChar (iNum) > 160 ) { j = j + 2 } else { j = j + 1 } if( (j > 70 - k) && (szContent[i + j] == " ") ) { break } } if( (szContent[i + j] != " " ) ) { n = 0; iNum = szContent[i + j + n] while( (iNum != " " ) && (AsciiFromChar (iNum) < 160)) { n = n + 1 if((n >= 3) ||(i + j + n >= iLen)) break; iNum = szContent[i + j + n] } if(n < 3) { j = j + n sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) } else { sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) if(sz1[strlen(sz1)-1] != "-") { sz1 = cat(sz1,"-") } } } else { sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) } InsBufLine(hbuf, ln, "@sz1@") ln = ln + 1 szPreStr = szLeftBlank i = i + j while(szContent[i] == " ") { i = i + 1 } } sz1 = strmid(szContent,i,iLen) sz1 = cat(szPreStr,sz1) if(isEnd) { sz1 = cat(sz1,"*/") } InsBufLine(hbuf, ln, "@sz1@") } return ln}macro CommentContent (hbuf,ln,szPreStr,szContent,isEnd){ szLeftBlank = szPreStr iLen = strlen(szPreStr) k = 0 while(k < iLen) { szLeftBlank[k] = " "; k = k + 1; } hNewBuf = newbuf("clip") if(hNewBuf == hNil) return SetCurrentBuf(hNewBuf) PasteBufLine (hNewBuf, 0) lnMax = GetBufLineCount( hNewBuf ) szTmp = TrimString(szContent) //判断如果剪贴板是0行时对于有些版本会有问题,要排除掉 if(lnMax != 0) { szLine = GetBufLine(hNewBuf , 0) ret = strstr(szLine,szTmp) if(ret == 0) { /*如果输入窗输入的内容是剪贴板的一部分说明是剪贴过来的取剪贴板中的内 容*/ szContent = TrimString(szLine) } else { lnMax = 1 } } else { lnMax = 1 } szRet = "" nIdx = 0 while ( nIdx < lnMax) { if(nIdx != 0) { szLine = GetBufLine(hNewBuf , nIdx) szContent = TrimLeft(szLine) szPreStr = szLeftBlank } iLen = strlen (szContent) szTmp = cat(szPreStr,"#"); if( (iLen == 0) && (nIdx == (lnMax - 1)) { InsBufLine(hbuf, ln, "@szTmp@") } else { i = 0 //以每行75个字符处理 while (iLen - i > 75 - k ) { j = 0 while(j < 75 - k) { iNum = szContent[i + j] if( AsciiFromChar (iNum) > 160 ) { j = j + 2 } else { j = j + 1 } if( (j > 70 - k) && (szContent[i + j] == " ") ) { break } } if( (szContent[i + j] != " " ) ) { n = 0; iNum = szContent[i + j + n] //如果是中文字符只能成对处理 while( (iNum != " " ) && (AsciiFromChar (iNum) < 160)) { n = n + 1 if((n >= 3) ||(i + j + n >= iLen)) break; iNum = szContent[i + j + n] } if(n < 3) { //分段后只有小于3个的字符留在下段则将其以上去 j = j + n sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) } else { //大于3个字符的加连字符分段 sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) if(sz1[strlen(sz1)-1] != "-") { sz1 = cat(sz1,"-") } } } else { sz1 = strmid(szContent,i,i+j) sz1 = cat(szPreStr,sz1) } InsBufLine(hbuf, ln, "@sz1@") ln = ln + 1 szPreStr = szLeftBlank i = i + j while(szContent[i] == " ") { i = i + 1 } } sz1 = strmid(szContent,i,iLen) sz1 = cat(szPreStr,sz1) if((isEnd == 1) && (nIdx == (lnMax - 1)) { sz1 = cat(sz1," */") } InsBufLine(hbuf, ln, "@sz1@") } ln = ln + 1 nIdx = nIdx + 1 } closebuf(hNewBuf) return ln - 1}macro FormatLine(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) if(sel.ichFirst > 70) { Msg("选择太靠右了") stop } hbuf = GetWndBuf(hwnd) // get line the selection (insertion point) is on szCurLine = GetBufLine(hbuf, sel.lnFirst); lineLen = strlen(szCurLine) szLeft = strmid(szCurLine,0,sel.ichFirst) szContent = strmid(szCurLine,sel.ichFirst,lineLen) DelBufLine(hbuf, sel.lnFirst) CommentContent(hbuf,sel.lnFirst,szLeft,szContent,0)}macro CreateBlankString(nBlankCount){ szBlank="" nIdx = 0 while(nIdx < nBlankCount) { szBlank = cat(szBlank," ") nIdx = nIdx + 1 } return szBlank}macro TrimLeft(szLine){ nLen = strlen(szLine) if(nLen == 0) { return szLine } nIdx = 0 while( nIdx < nLen ) { if( ( szLine[nIdx] != " ") && (szLine[nIdx] != "\t") ) { break } nIdx = nIdx + 1 } return strmid(szLine,nIdx,nLen)}macro TrimRight(szLine){ nLen = strlen(szLine) if(nLen == 0) { return szLine } nIdx = nLen while( nIdx > 0 ) { nIdx = nIdx - 1 if( ( szLine[nIdx] != " ") && (szLine[nIdx] != "\t") ) { break } } return strmid(szLine,0,nIdx+1)}macro TrimString(szLine){ szLine = TrimLeft(szLine) szLIne = TrimRight(szLine) return szLine}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 //如果是{表示函数参数头结束了 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}macro GetWordFromString(hbuf,szLine,nBeg,nEnd,chBeg,chSeparator,chEnd){ if((nEnd > strlen(szLine) || (nBeg > nEnd)) { return 0 } nMaxLen = 0 nIdx = nBeg //先定位到开始字符标记处 while(nIdx < nEnd) { if(szLine[nIdx] == chBeg) { break } nIdx = nIdx + 1 } nBegWord = nIdx + 1 //用于检测chBeg和chEnd的配对情况 iCount = 0 nEndWord = 0 //以分隔符为标记进行搜索 while(nIdx < nEnd) { if(szLine[nIdx] == chSeparator) { szWord = strmid(szLine,nBegWord,nIdx) szWord = TrimString(szWord) nLen = strlen(szWord) if(nMaxLen < nLen) { nMaxLen = nLen } AppendBufLine(hbuf,szWord) nBegWord = nIdx + 1 } if(szLine[nIdx] == chBeg) { iCount = iCount + 1 } if(szLine[nIdx] == chEnd) { iCount = iCount - 1 nEndWord = nIdx if( iCount == 0 ) { break } } nIdx = nIdx + 1 } if(nEndWord > nBegWord) { szWord = strmid(szLine,nBegWord,nEndWord) szWord = TrimString(szWord) nLen = strlen(szWord) if(nMaxLen < nLen) { nMaxLen = nLen } AppendBufLine(hbuf,szWord) } return nMaxLen}macro FuncHeadCommentCN(hbuf, ln, szFunc, szMyName,newFunc){ iIns = 0 if(newFunc != 1) { symbol = GetSymbolLocationFromLn(hbuf, ln) if(strlen(symbol) > 0) { hTmpBuf = NewBuf("Tempbuf") if(hTmpBuf == hNil) { stop } //将文件参数头整理成一行并去掉了注释 szLine = GetFunctionDef(hbuf,symbol) iBegin = symbol.ichName //取出返回值定义 szTemp = strmid(szLine,0,iBegin) szTemp = TrimString(szTemp) szRet = GetFirstWord(szTemp) if(symbol.Type == "Method") { szTemp = strmid(szTemp,strlen(szRet),strlen(szTemp)) szTemp = TrimString(szTemp) if(szTemp == "::") { szRet = "" } } if(toupper (szRet) == "MACRO") { //对于宏返回值特殊处理 szRet = "" } //从函数头分离出函数参数 nMaxParamSize = GetWordFromString(hTmpBuf,szLine,iBegin,strlen(szLine),"(",",",")") lnMax = GetBufLineCount(hTmpBuf) ln = symbol.lnFirst SetBufIns (hbuf, ln, 0) } } else { lnMax = 0 szLine = "" szRet = "" } InsBufLine(hbuf, ln, "/**") if( strlen(szFunc)>0 ) { InsBufLine(hbuf, ln+1, " *@@brief: @szFunc@") } else { InsBufLine(hbuf, ln+1, " *@@brief: #") } oldln = ln InsBufLine(hbuf, ln+2, " *@@details: ") szIns = " *@@param[in] " if(newFunc != 1) { //对于已经存在的函数插入函数参数 i = 0 while ( i < lnMax) { szTmp = GetBufLine(hTmpBuf, i) nLen = strlen(szTmp); szBlank = CreateBlankString(nMaxParamSize - nLen + 2) szTmp = cat(szTmp,szBlank) ln = ln + 1 szTmp = cat(szIns,szTmp) InsBufLine(hbuf, ln+2, "@szTmp@") iIns = 1 szIns = " " i = i + 1 } closebuf(hTmpBuf) } if(iIns == 0) { ln = ln + 1 InsBufLine(hbuf, ln+2, " *@@param[in] 无") } InsBufLine(hbuf, ln+3, " *@@param[out] 无") InsBufLine(hbuf, ln+4, " *@@retval: @szRet@") InsbufLIne(hbuf, ln+5, " */"); if ((newFunc == 1) && (strlen(szFunc)>0)) { InsBufLine(hbuf, ln+6, "UINT32_T @szFunc@( # )") InsBufLine(hbuf, ln+7, "{"); InsBufLine(hbuf, ln+8, " #"); InsBufLine(hbuf, ln+9, "}"); SearchForward() } hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) sel.ichFirst = 0 sel.ichLim = sel.ichFirst sel.lnFirst = ln + 6 sel.lnLast = ln + 6 szContent = Ask("请输入函数功能描述的内容") setWndSel(hwnd,sel) DelBufLine(hbuf,oldln + 2) //显示输入的功能描述内容 newln = CommentContent(hbuf,oldln+2," *@@details: ",szContent,0) - 2 ln = ln + newln - oldln if ((newFunc == 1) && (strlen(szFunc)>0)) { isFirstParam = 1 //提示输入新函数的返回值 szRet = Ask("请输入返回值类型") if(strlen(szRet) > 0) { PutBufLine(hbuf, ln+4," *@@retval: @szRet@") PutBufLine(hbuf, ln+6, "@szRet@ @szFunc@( )") SetbufIns(hbuf,ln+6,strlen(szRet)+strlen(szFunc) + 3 } szFuncDef = "" sel.ichFirst = strlen(szFunc)+strlen(szRet) + 3 sel.ichLim = sel.ichFirst + 1 //循环输入参数 while (1) { szParam = ask("请输入函数参数名") szParam = TrimString(szParam) szTmp = cat(szIns,szParam) szParam = cat(szFuncDef,szParam) sel.lnFirst = ln + 6 sel.lnLast = ln + 6 setWndSel(hwnd,sel) sel.ichFirst = sel.ichFirst + strlen(szParam) sel.ichLim = sel.ichFirst oldsel = sel if(isFirstParam == 1) { PutBufLine(hbuf, ln+2, "@szTmp@") isFirstParam = 0 } else { ln = ln + 1 InsBufLine(hbuf, ln+2, "@szTmp@") oldsel.lnFirst = ln + 6 oldsel.lnLast = ln + 6 } SetBufSelText(hbuf,szParam) szIns = " " szFuncDef = ", " oldsel.lnFirst = ln + 8 oldsel.lnLast = ln + 8 oldsel.ichFirst = 4 oldsel.ichLim = 5 setWndSel(hwnd,oldsel) } } return ln + 9}macro FuncHeadCommentEN(hbuf, ln, szFunc, szMyName, newFunc){ iIns = 0 if(newFunc != 1) { symbol = GetSymbolLocationFromLn(hbuf, ln) if(strlen(symbol) > 0) { hTmpBuf = NewBuf("Tempbuf") if(hTmpBuf == hNil) { stop } //将文件参数头整理成一行并去掉了注释 szLine = GetFunctionDef(hbuf,symbol) iBegin = symbol.ichName //取出返回值定义 szTemp = strmid(szLine,0,iBegin) szTemp = TrimString(szTemp) szRet = GetFirstWord(szTemp) if(symbol.Type == "Method") { szTemp = strmid(szTemp,strlen(szRet),strlen(szTemp)) szTemp = TrimString(szTemp) if(szTemp == "::") { szRet = "" } } if(toupper (szRet) == "MACRO") { //对于宏返回值特殊处理 szRet = "" } //从函数头分离出函数参数 nMaxParamSize = GetWordFromString(hTmpBuf,szLine,iBegin,strlen(szLine),"(",",",")") lnMax = GetBufLineCount(hTmpBuf) ln = symbol.lnFirst SetBufIns (hbuf, ln, 0) } } else { lnMax = 0 szLine = "" szRet = "" } InsBufLine(hbuf, ln, "/**") InsBufLine(hbuf, ln+1, " * @@brief ") oldln = ln InsBufLine(hbuf, ln+2, " * @@details ") szIns = " * @@param[in] " if(newFunc != 1) { //对于已经存在的函数插入函数参数 i = 0 while ( i < lnMax) { szTmp = GetBufLine(hTmpBuf, i) nLen = strlen(szTmp); szBlank = CreateBlankString(nMaxParamSize - nLen + 2) szTmp = cat(szTmp,szBlank) ln = ln + 1 szTmp = cat(szIns, szTmp) InsBufLine(hbuf, ln+2, "@szTmp@") iIns = 1 szIns = " * " i = i + 1 } closebuf(hTmpBuf) } if(iIns == 0) { ln = ln + 1 InsBufLine(hbuf, ln+2, " * @@param[in] None") } InsBufLine(hbuf, ln+3, " * @@param[out] None") InsBufLine(hbuf, ln+4, " * @@retval @szRet@") InsbufLIne(hbuf, ln+5, " */"); if ((newFunc == 1) && (strlen(szFunc)>0)) { InsBufLine(hbuf, ln+6, "UINT32_T @szFunc@( # )") InsBufLine(hbuf, ln+7, "{"); InsBufLine(hbuf, ln+8, " #"); InsBufLine(hbuf, ln+9, "}"); SearchForward() } hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) sel.ichFirst = 0 sel.ichLim = sel.ichFirst sel.lnFirst = ln + 6 sel.lnLast = ln + 6 szContent = Ask("Description") setWndSel(hwnd,sel) DelBufLine(hbuf,oldln + 2) //显示输入的功能描述内容 newln = CommentContent(hbuf,oldln+2," * @@details ",szContent,0) - 2 ln = ln + newln - oldln if ((newFunc == 1) && (strlen(szFunc)>0)) { isFirstParam = 1 //提示输入新函数的返回值 szRet = Ask("Please input return value type") if(strlen(szRet) > 0) { PutBufLine(hbuf, ln+4, " * @@retval @szRet@") PutBufLine(hbuf, ln+6, " @szRet@ @szFunc@( )") SetbufIns(hbuf,ln+6,strlen(szRet)+strlen(szFunc) + 3 } szFuncDef = "" sel.ichFirst = strlen(szFunc)+strlen(szRet) + 3 sel.ichLim = sel.ichFirst + 1 //循环输入参数 while (1) { szParam = ask("Please input parameter") szParam = TrimString(szParam) szTmp = cat(szIns,szParam) szParam = cat(szFuncDef,szParam) sel.lnFirst = ln + 6 sel.lnLast = ln + 6 setWndSel(hwnd,sel) sel.ichFirst = sel.ichFirst + strlen(szParam) sel.ichLim = sel.ichFirst oldsel = sel if(isFirstParam == 1) { PutBufLine(hbuf, ln+2, "@szTmp@") isFirstParam = 0 } else { ln = ln + 1 InsBufLine(hbuf, ln+2, "@szTmp@") oldsel.lnFirst = ln + 6 oldsel.lnLast = ln + 6 } SetBufSelText(hbuf,szParam) szIns = " " szFuncDef = ", " oldsel.lnFirst = ln + 8 oldsel.lnLast = ln + 8 oldsel.ichFirst = 4 oldsel.ichLim = 5 setWndSel(hwnd,oldsel) } } return ln + 9}macro InsertHistory(hbuf,ln,language){ iHistoryCount = 1 isLastLine = ln i = 0 while(ln-i>0) { szCurLine = GetBufLine(hbuf, ln-i); iBeg1 = strstr(szCurLine,"日 期") iBeg2 = strstr(szCurLine,"date") if((iBeg1 != 0xffffffff) || (iBeg2 != 0xffffffff)) { iHistoryCount = iHistoryCount + 1 i = i + 1 continue } iBeg1 = strstr(szCurLine,"修改历史") iBeg2 = strstr(szCurLine,"history") if((iBeg1 != 0xffffffff) || (iBeg2 != 0xffffffff)) { break } iBeg = strstr(szCurLine,"/**********************") if( iBeg != 0xffffffff ) { break } i = i + 1 } if(language == 0) { InsertHistoryContentCN(hbuf,ln,iHistoryCount) } else { InsertHistoryContentEN(hbuf,ln,iHistoryCount) }}macro UpdateFunctionList(){ hnewbuf = newbuf("") if(hnewbuf == hNil) { stop } hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) GetFunctionList(hbuf,hnewbuf) ln = sel.lnFirst iHistoryCount = 1 isLastLine = ln iTotalLn = GetBufLineCount (hbuf) while(ln < iTotalLn) { szCurLine = GetBufLine(hbuf, ln); iLen = strlen(szCurLine) j = 0; while(j < iLen) { if(szCurLine[j] != " ") break j = j + 1 } //以文件头说明中前有大于10个空格的为函数列表记录 if(j > 10) { DelBufLine(hbuf, ln) } else { break } iTotalLn = GetBufLineCount (hbuf) } //插入函数列表 InsertFileList( hbuf,hnewbuf,ln ) closebuf(hnewbuf) }macro InsertHistoryContentCN(hbuf,ln,iHostoryCount){ SysTime = GetSysTime(1); szTime = SysTime.Date sz1=SysTime.Year sz2=SysTime.month sz3=SysTime.day szMyName = getreg(MYNAME) InsBufLine(hbuf, ln, " *") //* 1. date : 2014-4-1 InsBufLine(hbuf, ln + 1, " * @iHostoryCount@. date : @sz1@-@sz2@-@sz3@") if( strlen(szMyName) > 0 ) { //* author: onejacky InsBufLine(hbuf, ln + 2, " * author: @szMyName@") } else { InsBufLine(hbuf, ln + 2, " * author: #") } szContent = Ask("Please input change info") CommentContent(hbuf,ln + 3, " * change: ",szContent,0)}macro InsertHistoryContentEN(hbuf,ln,iHostoryCount){ SysTime = GetSysTime(1); szTime = SysTime.Date sz1=SysTime.Year sz2=SysTime.month sz3=SysTime.day szMyName = getreg(MYNAME) InsBufLine(hbuf, ln, " *") //* 1. date : 2014-4-1 InsBufLine(hbuf, ln + 1, " * @iHostoryCount@. date : @sz1@-@sz2@-@sz3@") if( strlen(szMyName) > 0 ) { //* author: onejacky InsBufLine(hbuf, ln + 2, " * author: @szMyName@") } else { InsBufLine(hbuf, ln + 2, " * author: #") } szContent = Ask("Please input change info") CommentContent(hbuf,ln + 3, " * change: ",szContent,0)}macro CreateFunctionDef(hbuf, szName, language){ ln = 0 //获得当前没有后缀的文件名 szFileName = GetFileNameNoExt(GetBufName (hbuf)) if(strlen(szFileName) == 0) { sz = ask("请输入头文件名") szFileName = GetFileNameNoExt(sz) szExt = GetFileNameExt(szFileName) szPreH = toupper (szFileName) szPreH = cat("__",szPreH) szExt = toupper(szExt) szPreH = cat(szPreH,"_@szExt@__") } szPreH = toupper (szFileName) sz = cat(szFileName,".h") szPreH = cat("__",szPreH) szPreH = cat(szPreH,"_H__") hOutbuf = NewBuf(sz) // create output buffer if (hOutbuf == 0) stop //搜索符号表取得函数名 SetCurrentBuf(hOutbuf) isymMax = GetBufSymCount(hbuf) isym = 0 while (isym < isymMax) { isLastLine = 0 symbol = GetBufSymLocation(hbuf, isym) fIsEnd = 1 if(strlen(symbol) > 0) { if(symbol.Type == "Class Placeholder") { hsyml = SymbolChildren(symbol) cchild = SymListCount(hsyml) ichild = 0 szClassName = symbol.Symbol InsBufLine(hOutbuf, ln, "}") InsBufLine(hOutbuf, ln, "{") InsBufLine(hOutbuf, ln, "class @szClassName@") ln = ln + 2 while (ichild < cchild) { childsym = SymListItem(hsyml, ichild) childsym.Symbol = szClassName ln = CreateClassPrototype(hbuf,ln,childsym) ichild = ichild + 1 } SymListFree(hsyml) InsBufLine(hOutbuf, ln + 1, "") ln = ln + 2 } else if( symbol.Type == "Function" ) { ln = CreateFuncPrototype(hbuf,ln,"extern",symbol) } else if( symbol.Type == "Method" ) { szLine = GetBufline(hbuf,symbol.lnName) szClassName = GetLeftWord(szLine,symbol.ichName) symbol.Symbol = szClassName ln = CreateClassPrototype(hbuf,ln,symbol) } } isym = isym + 1 } InsertCPP(hOutbuf,0) HeadIfdefStr(szPreH) szContent = GetFileName(GetBufName (hbuf)) if(language == 0) { szContent = cat(szContent," 的头文件") //插入文件头说明 InsertFileHeaderCN(hOutbuf,0,szName,szContent) } else { szContent = cat(szContent," header file") //插入文件头说明 InsertFileHeaderEN(hOutbuf,0,szName,szContent) }}macro GetLeftWord(szLine,ichRight){ if(ich == 0) { return "" } ich = ichRight while(ich > 0) { if( (szLine[ich] == " ") || (szLine[ich] == "\t") || ( szLine[ich] == ":") || (szLine[ich] == ".")) { ich = ich - 1 ichRight = ich } else { break } } while(ich > 0) { if(szLine[ich] == " ") { ich = ich + 1 break } ich = ich - 1 } return strmid(szLine,ich,ichRight)}macro CreateClassPrototype(hbuf,ln,symbol){ isLastLine = 0 fIsEnd = 1 hOutbuf = GetCurrentBuf() szLine = GetBufLine (hbuf, symbol.lnName) sline = symbol.lnFirst szClassName = symbol.Symbol ret = strstr(szLine,szClassName) if(ret == 0xffffffff) { return ln } szPre = strmid(szLine,0,ret) szLine = strmid(szLine,symbol.ichName,strlen(szLine)) szLine = cat(szPre,szLine) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) fIsEnd = RetVal.fIsEnd szNew = RetVal.szContent szLine = cat(" ",szLine) szNew = cat(" ",szNew) while((isLastLine == 0) && (sline < symbol.lnLim)) { i = 0 j = 0 iLen = strlen(szNew) while(i < iLen) { if(szNew[i]=="(") { j = j + 1; } else if(szNew[i]==")") { j = j - 1; if(j <= 0) { //函数参数头结束 isLastLine = 1 //去掉最后多余的字符 szLine = strmid(szLine,0,i+1); szLine = cat(szLine,";") break } } i = i + 1 } InsBufLine(hOutbuf, ln, "@szLine@") ln = ln + 1 sline = sline + 1 if(isLastLine != 1) { //函数参数头还没有结束再取一行 szLine = GetBufLine (hbuf, sline) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) szNew = RetVal.szContent fIsEnd = RetVal.fIsEnd } } return ln}macro CreateFuncPrototype(hbuf,ln,szType,symbol){ isLastLine = 0 hOutbuf = GetCurrentBuf() szLine = GetBufLine (hbuf,symbol.lnName) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) szNew = RetVal.szContent fIsEnd = RetVal.fIsEnd szLine = cat("@szType@ ",szLine) szNew = cat("@szType@ ",szNew) sline = symbol.lnFirst while((isLastLine == 0) && (sline < symbol.lnLim)) { i = 0 j = 0 iLen = strlen(szNew) while(i < iLen) { if(szNew[i]=="(") { j = j + 1; } else if(szNew[i]==")") { j = j - 1; if(j <= 0) { //函数参数头结束 isLastLine = 1 //去掉最后多余的字符 szLine = strmid(szLine,0,i+1); szLine = cat(szLine,";") break } } i = i + 1 } InsBufLine(hOutbuf, ln, "@szLine@") ln = ln + 1 sline = sline + 1 if(isLastLine != 1) { //函数参数头还没有结束再取一行 szLine = GetBufLine (hbuf, sline) szLine = cat(" ",szLine) //去掉注释的干扰 RetVal = SkipCommentFromString(szLine,fIsEnd) szNew = RetVal.szContent fIsEnd = RetVal.fIsEnd } } return ln}macro CreateNewHeaderFile(){ hbuf = GetCurrentBuf() language = getreg(LANGUAGE) if(language != 1) { language = 0 } szName = getreg(MYNAME) if(strlen( szName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } isymMax = GetBufSymCount(hbuf) isym = 0 ln = 0 //获得当前没有后缀的文件名 sz = ask("Please input header file name") szFileName = GetFileNameNoExt(sz) szExt = GetFileNameExt(sz) szPreH = toupper (szFileName) szPreH = cat("__",szPreH) szExt = toupper(szExt) szPreH = cat(szPreH,"_@szExt@__") hOutbuf = NewBuf(sz) // create output buffer if (hOutbuf == 0) stop SetCurrentBuf(hOutbuf) InsertCPP(hOutbuf,0) HeadIfdefStr(szPreH) szContent = GetFileName(GetBufName (hbuf)) if(language == 0) { szContent = cat(szContent," 的头文件") //插入文件头说明 InsertFileHeaderCN(hOutbuf,0,szName,szContent) } else { szContent = cat(szContent," header file") //插入文件头说明 InsertFileHeaderEN(hOutbuf,0,szName,szContent) } lnMax = GetBufLineCount(hOutbuf) if(lnMax > 9) { ln = lnMax - 9 } else { return } hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) sel.lnFirst = ln sel.ichFirst = 0 sel.ichLim = 0 SetBufIns(hOutbuf,ln,0) szType = Ask ("Please prototype type : extern or static") //搜索符号表取得函数名 while (isym < isymMax) { isLastLine = 0 symbol = GetBufSymLocation(hbuf, isym) fIsEnd = 1 if(strlen(symbol) > 0) { if(symbol.Type == "Class Placeholder") { hsyml = SymbolChildren(symbol) cchild = SymListCount(hsyml) ichild = 0 szClassName = symbol.Symbol InsBufLine(hOutbuf, ln, "}") InsBufLine(hOutbuf, ln, "{") InsBufLine(hOutbuf, ln, "class @szClassName@") ln = ln + 2 while (ichild < cchild) { childsym = SymListItem(hsyml, ichild) childsym.Symbol = szClassName ln = CreateClassPrototype(hbuf,ln,childsym) ichild = ichild + 1 } SymListFree(hsyml) InsBufLine(hOutbuf, ln + 1, "") ln = ln + 2 } else if( symbol.Type == "Function" ) { ln = CreateFuncPrototype(hbuf,ln,szType,symbol) } else if( symbol.Type == "Method" ) { szLine = GetBufline(hbuf,symbol.lnName) szClassName = GetLeftWord(szLine,symbol.ichName) symbol.Symbol = szClassName ln = CreateClassPrototype(hbuf,ln,symbol) } } isym = isym + 1 } sel.lnLast = ln SetWndSel(hwnd,sel)}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*/ //只提取字符和# { / *作为命令 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}macro ReplaceBufTab(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop hbuf = GetWndBuf(hwnd) iTotalLn = GetBufLineCount (hbuf) nBlank = Ask("一个Tab替换几个空格") if(nBlank == 0) { nBlank = 4 } szBlank = CreateBlankString(nBlank) ReplaceInBuf(hbuf,"\t",szBlank,0, iTotalLn, 1, 0, 0, 1)}macro ReplaceTabInProj(){ hprj = GetCurrentProj() ifileMax = GetProjFileCount (hprj) nBlank = Ask("一个Tab替换几个空格") if(nBlank == 0) { nBlank = 4 } szBlank = CreateBlankString(nBlank) ifile = 0 while (ifile < ifileMax) { filename = GetProjFileName (hprj, ifile) hbuf = OpenBuf (filename) if(hbuf != 0) { iTotalLn = GetBufLineCount (hbuf) ReplaceInBuf(hbuf,"\t",szBlank,0, iTotalLn, 1, 0, 0, 1) } if( IsBufDirty (hbuf) ) { SaveBuf (hbuf) } CloseBuf(hbuf) ifile = ifile + 1 }}macro ReplaceInBuf(hbuf,chOld,chNew,nBeg,nEnd,fMatchCase, fRegExp, fWholeWordsOnly, fConfirm){ hwnd = GetCurrentWnd() if (hwnd == 0) stop hbuf = GetWndBuf(hwnd) sel = GetWndSel(hwnd) sel.ichLim = 0 sel.lnLast = 0 sel.ichFirst = sel.ichLim sel.lnFirst = sel.lnLast SetWndSel(hwnd, sel) LoadSearchPattern(chOld, 0, 0, 0); while(1) { Search_Forward selNew = GetWndSel(hwnd) if(sel == selNew) { break } SetBufSelText(hbuf, chNew) selNew.ichLim = selNew.ichFirst SetWndSel(hwnd, selNew) sel = selNew }}macro ConfigureSystem(){ /* szLanguage = ASK("Please select language: 0 Chinese ,1 English"); if(szLanguage == "#") { SetReg ("LANGUAGE", "0") } else { SetReg ("LANGUAGE", szLanguage) } */ SetReg ("LANGUAGE", "1") szName = ASK("Please input your name"); if(szName == "#") { SetReg ("MYNAME", "") } else { SetReg ("MYNAME", szName) }}macro GetLeftBlank(szLine){ nIdx = 0 nEndIdx = strlen(szLine) while( nIdx < nEndIdx ) { if( (szLine[nIdx] !=" ") && (szLine[nIdx] !="\t") ) { break; } nIdx = nIdx + 1 } return nIdx}macro ExpandBraceLittle(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() if( (sel.lnFirst == sel.lnLast) && (sel.ichFirst == sel.ichLim) ) { SetBufSelText (hbuf, "( )") SetBufIns (hbuf, sel.lnFirst, sel.ichFirst + 2) } else { SetBufIns (hbuf, sel.lnFirst, sel.ichFirst) SetBufSelText (hbuf, "( ") SetBufIns (hbuf, sel.lnLast, sel.ichLim + 2) SetBufSelText (hbuf, " )") }}macro ExpandBraceMid(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() if( (sel.lnFirst == sel.lnLast) && (sel.ichFirst == sel.ichLim) ) { SetBufSelText (hbuf, "[]") SetBufIns (hbuf, sel.lnFirst, sel.ichFirst + 1) } else { SetBufIns (hbuf, sel.lnFirst, sel.ichFirst) SetBufSelText (hbuf, "[") SetBufIns (hbuf, sel.lnLast, sel.ichLim + 1) SetBufSelText (hbuf, "]") }}macro ExpandBraceLarge(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst nlineCount = 0 retVal = "" szLine = GetBufLine( hbuf, ln ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); szRight = "" szMid = "" if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { //对于没有块选择的情况,直接插入{}即可 if( nLeft == strlen(szLine) ) { SetBufSelText (hbuf, "{") } else { ln = ln + 1 InsBufLine(hbuf, ln, "@szLeft@{") nlineCount = nlineCount + 1 } InsBufLine(hbuf, ln + 1, "@szLeft@ ") InsBufLine(hbuf, ln + 2, "@szLeft@}") nlineCount = nlineCount + 2 SetBufIns (hbuf, ln + 1, strlen(szLeft)+4) } else { //对于有块选择的情况还得考虑将块选择区分开了 //检查选择区内是否大括号配对,如果嫌太慢则注释掉下面的判断 RetVal= CheckBlockBrace(hbuf) if(RetVal.iCount != 0) { msg("Invalidated brace number") stop } //取出选中区前的内容 szOld = strmid(szLine,0,sel.ichFirst) if(sel.lnFirst != sel.lnLast) { //对于多行的情况 //第一行的选中部分 szMid = strmid(szLine,sel.ichFirst,strlen(szLine)) szMid = TrimString(szMid) szLast = GetBufLine(hbuf,sel.lnLast) if( sel.ichLim > strlen(szLast) ) { //如果选择区长度大于改行的长度,最大取该行的长度 szLineselichLim = strlen(szLast) } else { szLineselichLim = sel.ichLim } //得到最后一行选择区为的字符 szRight = strmid(szLast,szLineselichLim,strlen(szLast)) szRight = TrimString(szRight) } else { //对于选择只有一行的情况 if(sel.ichLim >= strlen(szLine)) { sel.ichLim = strlen(szLine) } //获得选中区的内容 szMid = strmid(szLine,sel.ichFirst,sel.ichLim) szMid = TrimString(szMid) if( sel.ichLim > strlen(szLine) ) { szLineselichLim = strlen(szLine) } else { szLineselichLim = sel.ichLim } //同样得到选中区后的内容 szRight = strmid(szLine,szLineselichLim,strlen(szLine)) szRight = TrimString(szRight) } nIdx = sel.lnFirst while( nIdx < sel.lnLast) { szCurLine = GetBufLine(hbuf,nIdx+1) if( sel.ichLim > strlen(szCurLine) ) { szLineselichLim = strlen(szCurLine) } else { szLineselichLim = sel.ichLim } szCurLine = cat(" ",szCurLine) if(nIdx == sel.lnLast - 1) { //对于最后一行应该是选中区内的内容后移四位 szCurLine = strmid(szCurLine,0,szLineselichLim + 4) PutBufLine(hbuf,nIdx+1,szCurLine) } else { //其它情况是整行的内容后移四位 PutBufLine(hbuf,nIdx+1,szCurLine) } nIdx = nIdx + 1 } if(strlen(szRight) != 0) { //最后插入最后一行没有被选择的内容 InsBufLine(hbuf, sel.lnLast + 1, "@szLeft@@szRight@") } InsBufLine(hbuf, sel.lnLast + 1, "@szLeft@}") nlineCount = nlineCount + 1 if(nLeft < sel.ichFirst) { //如果选中区前的内容不是空格,则要保留该部分内容 PutBufLine(hbuf,ln,szOld) InsBufLine(hbuf, ln+1, "@szLeft@{") nlineCount = nlineCount + 1 ln = ln + 1 } else { //如果选中区前没有内容直接删除该行 DelBufLine(hbuf,ln) InsBufLine(hbuf, ln, "@szLeft@{") } if(strlen(szMid) > 0) { //插入第一行选择区的内容 InsBufLine(hbuf, ln+1, "@szLeft@ @szMid@") nlineCount = nlineCount + 1 ln = ln + 1 } } retVal.szLeft = szLeft retVal.nLineCount = nlineCount //返回行数和左边的空白 return retVal}/*macro ScanStatement(szLine,iBeg){ nIdx = 0 iLen = strlen(szLine) while(nIdx < iLen -1) { if(szLine[nIdx] == "/" && szLine[nIdx + 1] == "/") { return 0xffffffff } if(szLine[nIdx] == "/" && szLine[nIdx + 1] == "*") { while(nIdx < iLen) { if(szLine[nIdx] == "*" && szLine[nIdx + 1] == "/") { break } nIdx = nIdx + 1 } } if( (szLine[nIdx] != " ") && (szLine[nIdx] != "\t" )) { return nIdx } nIdx = nIdx + 1 } if( (szLine[iLen -1] == " ") || (szLine[iLen -1] == "\t" )) { return 0xffffffff } return nIdx}*//*macro MoveCommentLeftBlank(szLine){ nIdx = 0 iLen = strlen(szLine) while(nIdx < iLen - 1) { if(szLine[nIdx] == "/" && szLine[nIdx+1] == "*") { szLine[nIdx] = " " szLine[nIdx + 1] = " " nIdx = nIdx + 2 while(nIdx < iLen - 1) { if(szLine[nIdx] != " " && szLine[nIdx] != "\t") { szLine[nIdx - 2] = "/" szLine[nIdx - 1] = "*" return szLine } nIdx = nIdx + 1 } } if(szLine[nIdx] == "/" && szLine[nIdx+1] == "/") { szLine[nIdx] = " " szLine[nIdx + 1] = " " nIdx = nIdx + 2 while(nIdx < iLen - 1) { if(szLine[nIdx] != " " && szLine[nIdx] != "\t") { szLine[nIdx - 2] = "/" szLine[nIdx - 1] = "/" return szLine } nIdx = nIdx + 1 } } nIdx = nIdx + 1 } return szLine}*/macro DelCompoundStatement(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst szLine = GetBufLine(hbuf,ln ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); Msg("@szLine@ will be deleted !") fIsEnd = 1 while(1) { RetVal = SkipCommentFromString(szLine,fIsEnd) szTmp = RetVal.szContent fIsEnd = RetVal.fIsEnd //查找复合语句的开始 ret = strstr(szTmp,"{") if(ret != 0xffffffff) { szNewLine = strmid(szLine,ret+1,strlen(szLine)) szNew = strmid(szTmp,ret+1,strlen(szTmp)) szNew = TrimString(szNew) if(szNew != "") { InsBufLine(hbuf,ln + 1,"@szLeft@ @szNewLine@"); } sel.lnFirst = ln sel.lnLast = ln sel.ichFirst = ret sel.ichLim = ret //查找对应的大括号 //使用自己编写的代码速度太慢 retTmp = SearchCompoundEnd(hbuf,ln,ret) if(retTmp.iCount == 0) { DelBufLine(hbuf,retTmp.ln) sel.ichFirst = 0 sel.ichLim = 0 DelBufLine(hbuf,ln) sel.lnLast = retTmp.ln - 1 SetWndSel(hwnd,sel) Indent_Left } //使用Si的大括号配对方法,但V2.1时在注释嵌套时可能有误/* SetWndSel(hwnd,sel) Block_Down selNew = GetWndSel(hwnd) if(selNew != sel) { DelBufLine(hbuf,selNew.lnFirst) sel.ichFirst = 0 sel.ichLim = 0 DelBufLine(hbuf,ln) sel.lnLast = selNew.lnFirst - 1 SetWndSel(hwnd,sel) Indent_Left }*/ break } szTmp = TrimString(szTmp) iLen = strlen(szTmp) if(iLen != 0) { if(szTmp[iLen-1] == ";") { break } } DelBufLine(hbuf,ln) if( ln == GetBufLineCount(hbuf )) { break } szLine = GetBufLine(hbuf,ln) }}macro CheckBlockBrace(hbuf){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) ln = sel.lnFirst nCount = 0 RetVal = "" szLine = GetBufLine( hbuf, ln ) if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { RetVal.iCount = 0 RetVal.ich = sel.ichFirst return RetVal } if(sel.lnFirst == sel.lnLast && sel.ichFirst != sel.ichLim) { RetTmp = SkipCommentFromString(szLine,fIsEnd) szTmp = RetTmp.szContent RetVal = CheckBrace(szTmp,sel.ichFirst,sel.ichLim,"{","}",0,1) return RetVal } if(sel.lnFirst != sel.lnLast) { fIsEnd = 1 while(ln <= sel.lnLast) { if(ln == sel.lnFirst) { RetVal = CheckBrace(szLine,sel.ichFirst,strlen(szLine)-1,"{","}",nCount,fIsEnd) } else if(ln == sel.lnLast) { RetVal = CheckBrace(szLine,0,sel.ichLim,"{","}",nCount,fIsEnd) } else { RetVal = CheckBrace(szLine,0,strlen(szLine)-1,"{","}",nCount,fIsEnd) } fIsEnd = RetVal.fIsEnd ln = ln + 1 nCount = RetVal.iCount szLine = GetBufLine( hbuf, ln ) } } return RetVal}macro SearchCompoundEnd(hbuf,ln,ichBeg){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) ln = sel.lnFirst nCount = 0 SearchVal = ""// szLine = GetBufLine( hbuf, ln ) lnMax = GetBufLineCount(hbuf) fIsEnd = 1 while(ln < lnMax) { szLine = GetBufLine( hbuf, ln ) RetVal = CheckBrace(szLine,ichBeg,strlen(szLine)-1,"{","}",nCount,fIsEnd) fIsEnd = RetVal.fIsEnd ichBeg = 0 nCount = RetVal.iCount //如果nCount=0则说明{}是配对的 if(nCount == 0) { break } ln = ln + 1// szLine = GetBufLine( hbuf, ln ) } SearchVal.iCount = RetVal.iCount SearchVal.ich = RetVal.ich SearchVal.ln = ln return SearchVal}macro CheckBrace(szLine,ichBeg,ichEnd,chBeg,chEnd,nCheckCount,isCommentEnd){ retVal = "" retVal.ich = 0 nIdx = ichBeg nLen = strlen(szLine) if(ichEnd >= nLen) { ichEnd = nLen - 1 } fIsEnd = 1 while(nIdx <= ichEnd) { //如果是/*注释区,跳过该段 if( (isCommentEnd == 0) || (szLine[nIdx] == "/" && szLine[nIdx+1] == "*")) { fIsEnd = 0 while(nIdx <= ichEnd ) { if(szLine[nIdx] == "*" && szLine[nIdx+1] == "/") { nIdx = nIdx + 1 fIsEnd = 1 isCommentEnd = 1 break } nIdx = nIdx + 1 } if(nIdx > ichEnd) { break } } //如果是//注释则停止查找 if(szLine[nIdx] == "/" && szLine[nIdx+1] == "/") { break } if(szLine[nIdx] == chBeg) { nCheckCount = nCheckCount + 1 } if(szLine[nIdx] == chEnd) { nCheckCount = nCheckCount - 1 if(nCheckCount == 0) { retVal.ich = nIdx } } nIdx = nIdx + 1 } retVal.iCount = nCheckCount retVal.fIsEnd = fIsEnd return retVal}macro InsertElse(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) InsBufLine(hbuf, ln,szLeft) SetWndSel(hwnd,sel) } val = ExpandBraceLarge() szLeft = val.szLeft InsBufLine(hbuf, ln, "@szLeft@else") if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { PutBufLine(hbuf,ln+2, "@szLeft@ ") SetBufIns (hbuf, ln+2, strlen(szLeft)+4) return } SetBufIns (hbuf, ln, strlen(szLeft)+7)}macro InsertCase(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst szLine = GetBufLine( hbuf, ln ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); InsBufLine(hbuf, ln, "@szLeft@" # "case # :") InsBufLine(hbuf, ln + 1, "@szLeft@" # " " # "#") InsBufLine(hbuf, ln + 2, "@szLeft@" # " " # "break;") SearchForward()}macro InsertSwitch(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst szLine = GetBufLine( hbuf, ln ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); InsBufLine(hbuf, ln, "@szLeft@switch ( # )") InsBufLine(hbuf, ln + 1, "@szLeft@" # "{") nSwitch = ask("请输入case的个数") InsertMultiCaseProc(hbuf,szLeft,nSwitch) SearchForward()}macro InsertMultiCaseProc(hbuf,szLeft,nSwitch){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) ln = sel.lnFirst nIdx = 0 if(nSwitch == 0) { hNewBuf = newbuf("clip") if(hNewBuf == hNil) return SetCurrentBuf(hNewBuf) PasteBufLine (hNewBuf, 0) nLeftMax = 0 lnMax = GetBufLineCount(hNewBuf ) i = 0 fIsEnd = 1 while ( i < lnMax) { szLine = GetBufLine(hNewBuf , i) //先去掉代码中注释的内容 RetVal = SkipCommentFromString(szLine,fIsEnd) szLine = RetVal.szContent fIsEnd = RetVal.fIsEnd// nLeft = GetLeftBlank(szLine) //从剪贴板中取得case值 szLine = GetSwitchVar(szLine) if(strlen(szLine) != 0 ) { ln = ln + 3 InsBufLine(hbuf, ln - 1, "@szLeft@" # "case @szLine@:") InsBufLine(hbuf, ln , "@szLeft@" # " " # "#") InsBufLine(hbuf, ln + 1, "@szLeft@" # " " # "break;") } i = i + 1 } closebuf(hNewBuf) } else { while(nIdx < nSwitch) { ln = ln + 3 InsBufLine(hbuf, ln - 1, "@szLeft@" # "case # :") InsBufLine(hbuf, ln , "@szLeft@" # " " # "#") InsBufLine(hbuf, ln + 1, "@szLeft@" # " " # "break;") nIdx = nIdx + 1 } } InsBufLine(hbuf, ln + 2, "@szLeft@" # "default:") InsBufLine(hbuf, ln + 3, "@szLeft@" # " " # "#") InsBufLine(hbuf, ln + 4, "@szLeft@" # "}") SetWndSel(hwnd, sel) SearchForward()}macro GetSwitchVar(szLine){ if( (szLine == "{") || (szLine == "}") ) { return "" } ret = strstr(szLine,"#define" ) if(ret != 0xffffffff) { szLine = strmid(szLine,ret + 8,strlen(szLine)) } szLine = TrimLeft(szLine) nIdx = 0 nLen = strlen(szLine) while( nIdx < nLen) { if((szLine[nIdx] == " ") || (szLine[nIdx] == ",") || (szLine[nIdx] == "=")) { szLine = strmid(szLine,0,nIdx) return szLine } nIdx = nIdx + 1 } return szLine}/*macro SkipControlCharFromString(szLine){ nLen = strlen(szLine) nIdx = 0 newStr = "" while(nIdx < nLen - 1) { if(szLine[nIdx] == "\t") { newStr = cat(newStr," ") } else if(szLine[nIdx] < " ") { newStr = cat(newStr," ") } else { newStr = cat(newStr," ") } }}*/macro SkipCommentFromString(szLine,isCommentEnd){ RetVal = "" fIsEnd = 1 nLen = strlen(szLine) nIdx = 0 while(nIdx < nLen ) { //如果当前行开始还是被注释,或遇到了注释开始的变标记,注释内容改为空格? if( (isCommentEnd == 0) || (szLine[nIdx] == "/" && szLine[nIdx+1] == "*")) { fIsEnd = 0 while(nIdx < nLen ) { if(szLine[nIdx] == "*" && szLine[nIdx+1] == "/") { szLine[nIdx+1] = " " szLine[nIdx] = " " nIdx = nIdx + 1 fIsEnd = 1 isCommentEnd = 1 break } szLine[nIdx] = " " //如果是倒数第二个则最后一个也肯定是在注释内// if(nIdx == nLen -2 )// {// szLine[nIdx + 1] = " "// } nIdx = nIdx + 1 } //如果已经到了行尾终止搜索 if(nIdx == nLen) { break } } //如果遇到的是//来注释的说明后面都为注释 if(szLine[nIdx] == "/" && szLine[nIdx+1] == "/") { szLine = strmid(szLine,0,nIdx) break } nIdx = nIdx + 1 } RetVal.szContent = szLine; RetVal.fIsEnd = fIsEnd return RetVal}macro InsertDo(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) InsBufLine(hbuf, ln,szLeft) SetWndSel(hwnd,sel) } val = ExpandBraceLarge() szLeft = val.szLeft if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { PutBufLine(hbuf,ln+1, "@szLeft@ #") } PutBufLine(hbuf, sel.lnLast + val.nLineCount, "@szLeft@}while ( # );")// SetBufIns (hbuf, sel.lnLast + val.nLineCount, strlen(szLeft)+8) InsBufLine(hbuf, ln, "@szLeft@do") SearchForward()}macro InsertWhile(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) InsBufLine(hbuf, ln,szLeft) SetWndSel(hwnd,sel) } val = ExpandBraceLarge() szLeft = val.szLeft InsBufLine(hbuf, ln, "@szLeft@while ( # )") if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { PutBufLine(hbuf,ln+2, "@szLeft@ #") } SetBufIns (hbuf, ln, strlen(szLeft)+7) SearchForward()}macro InsertFor(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) InsBufLine(hbuf, ln,szLeft) SetWndSel(hwnd,sel) } val = ExpandBraceLarge() szLeft = val.szLeft InsBufLine(hbuf, ln,"@szLeft@for ( # ; # ; # )") if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { PutBufLine(hbuf,ln+2, "@szLeft@ #") } sel.lnFirst = ln sel.lnLast = ln sel.ichFirst = 0 sel.ichLim = 0 SetWndSel(hwnd, sel) SearchForward() szVar = ask("请输入循环变量") PutBufLine(hbuf,ln, "@szLeft@for ( @szVar@ = # ; @szVar@ # ; @szVar@++ )") SearchForward()}macro InsertIf(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() ln = sel.lnFirst if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) InsBufLine(hbuf, ln,szLeft) SetWndSel(hwnd,sel) } val = ExpandBraceLarge() szLeft = val.szLeft InsBufLine(hbuf, ln, "@szLeft@if ( # )") if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { PutBufLine(hbuf,ln+2, "@szLeft@ #") }// SetBufIns (hbuf, ln, strlen(szLeft)+4) SearchForward()}macro MergeString(){ hbuf = newbuf("clip") if(hbuf == hNil) return SetCurrentBuf(hbuf) PasteBufLine (hbuf, 0) //如果剪贴板中没有内容,则返回 lnMax = GetBufLineCount(hbuf ) if( lnMax == 0 ) { closebuf(hbuf) return "" } lnLast = 0 if(lnMax > 1) { lnLast = lnMax - 1 i = lnMax - 1 } while ( i > 0) { szLine = GetBufLine(hbuf , i-1) szLine = TrimLeft(szLine) nLen = strlen(szLine) if(szLine[nLen - 1] == "-") { szLine = strmid(szLine,0,nLen - 1) } nLen = strlen(szLine) if( (szLine[nLen - 1] != " ") && (AsciiFromChar (szLine[nLen - 1]) <= 160)) { szLine = cat(szLine," ") } SetBufIns (hbuf, lnLast, 0) SetBufSelText(hbuf,szLine) i = i - 1 } szLine = GetBufLine(hbuf,lnLast) closebuf(hbuf) return szLine}macro ClearPrombleNo(){ SetReg ("PNO", "")}macro AddPromblemNo(){ szQuestion = ASK("Please Input problem number "); if(szQuestion == "#") { szQuestion = "" SetReg ("PNO", "") } else { SetReg ("PNO", szQuestion) } return szQuestion}/*this macro convet selected C++ coment block to C comment blockfor example: line " // aaaaa " convert to /* aaaaa */*//*macro ComentCPPtoC(){ hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst( hwnd ) lnLast = GetWndSelLnLast( hwnd ) lnCurrent = lnFirst fIsEnd = 1 while ( lnCurrent <= lnLast ) { fIsEnd = CmtCvtLine( lnCurrent,fIsEnd ) lnCurrent = lnCurrent + 1; }}*/macro ComentCPPtoC(){ hwnd = GetCurrentWnd() hbuf = GetCurrentBuf() lnFirst = GetWndSelLnFirst( hwnd ) lnCurrent = lnFirst lnLast = GetWndSelLnLast( hwnd ) ch_comment = CharFromAscii(47) isCommentEnd = 1 isCommentContinue = 0 while ( lnCurrent <= lnLast ) { ich = 0 szLine = GetBufLine(hbuf,lnCurrent) ilen = strlen(szLine) while ( ich < ilen ) { if( (szLine[ich] != " ") && (szLine[ich] != "\t") ) { break } ich = ich + 1 } /*如果是空行,跳过该行*/ if(ich == ilen) { lnCurrent = lnCurrent + 1 szOldLine = szLine continue } /*如果该行只有一个字符*/ if(ich > ilen - 2) { if( isCommentContinue == 1 ) { szOldLine = cat(szOldLine," */") PutBufLine(hbuf,lnCurrent-1,szOldLine) isCommentContinue = 0 } lnCurrent = lnCurrent + 1 szOldLine = szLine continue } if( isCommentEnd == 1 ) { /*如果不是在注释区内*/ if(( szLine[ich]==ch_comment ) && (szLine[ich+1]==ch_comment)) { /* 去掉中间嵌套的注释 */ nIdx = ich + 2 while ( nIdx < ilen -1 ) { if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+1] == "*")|| ( szLine[nIdx] == "*" ) && (szLine[nIdx+1] == "/") ) { szLine[nIdx] = " " szLine[nIdx+1] = " " } nIdx = nIdx + 1 } if( isCommentContinue == 1 ) { /* 如果是连续的注释*/ szLine[ich] = " " szLine[ich+1] = " " } else { /*如果不是连续的注释则是新注释的开始*/ szLine[ich] = "/" szLine[ich+1] = "*" } if ( lnCurrent == lnLast ) { /*如果是最后一行则在行尾添加结束注释符*/ szLine = cat(szLine," */") isCommentContinue = 0 } /*更新该行*/ PutBufLine(hbuf,lnCurrent,szLine) isCommentContinue = 1 szOldLine = szLine lnCurrent = lnCurrent + 1 continue } else { /*如果该行的起始不是//注释*/ if( isCommentContinue == 1 ) { szOldLine = cat(szOldLine," */") PutBufLine(hbuf,lnCurrent-1,szOldLine) isCommentContinue = 0 } } } while ( ich < ilen - 1 ) { //如果是/*注释区,跳过该段 if( (isCommentEnd == 0) || (szLine[ich] == "/" && szLine[ich+1] == "*")) { isCommentEnd = 0 while(ich < ilen - 1 ) { if(szLine[ich] == "*" && szLine[ich+1] == "/") { ich = ich + 1 isCommentEnd = 1 break } ich = ich + 1 } if(ich >= ilen - 1) { break } } if(( szLine[ich]==ch_comment ) && (szLine[ich+1]==ch_comment)) { /* 如果是//注释*/ isCommentContinue = 1 nIdx = ich //去掉期间的/* 和 */注释符以免出现注释嵌套错误 while ( nIdx < ilen -1 ) { if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+1] == "*")|| ( szLine[nIdx] == "*" ) && (szLine[nIdx+1] == "/") ) { szLine[nIdx] = " " szLine[nIdx+1] = " " } nIdx = nIdx + 1 } szLine[ich+1] = "*" if( lnCurrent == lnLast ) { szLine = cat(szLine," */") } PutBufLine(hbuf,lnCurrent,szLine) break } ich = ich + 1 } szOldLine = szLine lnCurrent = lnCurrent + 1 }}macro ComentLine(){ hwnd = GetCurrentWnd() hbuf = GetCurrentBuf() lnFirst = GetWndSelLnFirst( hwnd ) lnCurrent = lnFirst lnLast = GetWndSelLnLast( hwnd ) lnOld = 0 while ( lnCurrent <= lnLast ) { szLine = GetBufLine(hbuf,lnCurrent) DelBufLine(hbuf,lnCurrent) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); szLine = TrimString(szLine) ilen = strlen(szLine) if(iLen == 0) { continue } nIdx = 0 //去掉期间的/* 和 */注释符以免出现注释嵌套错误 while ( nIdx < ilen -1 ) { if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+1] == "*")|| ( szLine[nIdx] == "*" ) && (szLine[nIdx+1] == "/") ) { szLine[nIdx] = " " szLine[nIdx+1] = " " } nIdx = nIdx + 1 } szLine = cat("/* ",szLine) lnOld = lnCurrent lnCurrent = CommentContent(hbuf,lnCurrent,szLeft,szLine,1) lnLast = lnCurrent - lnOld + lnLast lnCurrent = lnCurrent + 1 }}macro CmtCvtLine(lnCurrent, isCommentEnd){ hbuf = GetCurrentBuf() szLine = GetBufLine(hbuf,lnCurrent) ch_comment = CharFromAscii(47) ich = 0 ilen = strlen(szLine) fIsEnd = 1 iIsComment = 0; while ( ich < ilen - 1 ) { //如果是/*注释区,跳过该段 if( (isCommentEnd == 0) || (szLine[ich] == "/" && szLine[ich+1] == "*")) { fIsEnd = 0 while(ich < ilen - 1 ) { if(szLine[ich] == "*" && szLine[ich+1] == "/") { ich = ich + 1 fIsEnd = 1 isCommentEnd = 1 break } ich = ich + 1 } if(ich >= ilen - 1) { break } } if(( szLine[ich]==ch_comment ) && (szLine[ich+1]==ch_comment)) { nIdx = ich while ( nIdx < ilen -1 ) { if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+1] == "*")|| ( szLine[nIdx] == "*" ) && (szLine[nIdx+1] == "/") ) { szLine[nIdx] = " " szLine[nIdx+1] = " " } nIdx = nIdx + 1 } szLine[ich+1] = "*" szLine = cat(szLine," */") DelBufLine(hbuf,lnCurrent) InsBufLine(hbuf,lnCurrent,szLine) return fIsEnd } ich = ich + 1 } return fIsEnd}macro GetFileNameExt(sz){ i = 1 j = 0 szName = sz iLen = strlen(sz) if(iLen == 0) return "" while( i <= iLen) { if(sz[iLen-i] == ".") { j = iLen-i szExt = strmid(sz,j + 1,iLen) return szExt } i = i + 1 } return ""}macro GetFileNameNoExt(sz){ i = 1 szName = sz iLen = strlen(sz) j = iLen if(iLen == 0) return "" while( i <= iLen) { if(sz[iLen-i] == ".") { j = iLen-i } if( sz[iLen-i] == "\\" ) { szName = strmid(sz,iLen-i+1,j) return szName } i = i + 1 } szName = strmid(sz,0,j) return szName}macro GetFileName(sz){ i = 1 szName = sz iLen = strlen(sz) if(iLen == 0) return "" while( i <= iLen) { if(sz[iLen-i] == "\\") { szName = strmid(sz,iLen-i+1,iLen) break } i = i + 1 } return szName}macro InsIfdef(){ sz = Ask("Enter #ifdef condition:") if (sz != "") IfdefStr(sz);}macro InsIfndef(){ sz = Ask("Enter #ifndef condition:") if (sz != "") IfndefStr(sz);}macro InsertCPP(hbuf,ln){ InsBufLine(hbuf, ln, "") InsBufLine(hbuf, ln, "#endif /* __cplusplus */") InsBufLine(hbuf, ln, "#endif") InsBufLine(hbuf, ln, "extern \"C\"{") InsBufLine(hbuf, ln, "#if __cplusplus") InsBufLine(hbuf, ln, "#ifdef __cplusplus") InsBufLine(hbuf, ln, "") iTotalLn = GetBufLineCount (hbuf) InsBufLine(hbuf, iTotalLn, "") InsBufLine(hbuf, iTotalLn, "#endif /* __cplusplus */") InsBufLine(hbuf, iTotalLn, "#endif") InsBufLine(hbuf, iTotalLn, "}") InsBufLine(hbuf, iTotalLn, "#if __cplusplus") InsBufLine(hbuf, iTotalLn, "#ifdef __cplusplus") InsBufLine(hbuf, iTotalLn, "")}macro ReviseCommentProc(hbuf,ln,szCmd,szMyName,szLine1){ if (szCmd == "ap") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = AddPromblemNo() InsBufLine(hbuf, ln, "@szLine1@/* 问 题 单: @szQuestion@ 修改人:@szMyName@, 时间:@sz@/@sz1@/@sz3@ "); szContent = Ask("修改原因") szLeft = cat(szLine1," 修改原因: "); if(strlen(szLeft) > 70) { Msg("The right margine is small, Please use a new line") stop } ln = CommentContent(hbuf,ln + 1,szLeft,szContent,1) return } else if (szCmd == "ab") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@*/"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "ae") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "db") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@*/"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "de") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln + 0) InsBufLine(hbuf, ln, "@szLine1@/* END: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); return } else if (szCmd == "mb") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) szQuestion = GetReg ("PNO") if(strlen(szQuestion) > 0) { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ 问题单号:@szQuestion@*/"); } else { InsBufLine(hbuf, ln, "@szLine1@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); } return } else if (szCmd == "me") { SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day DelBufLine(hbuf, ln) InsBufLine(hbuf, ln, "@szLine1@/* END: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); return }}macro InsertReviseAdd(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) } else { szLine = GetBufLine( hbuf, sel.lnFirst ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); } szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); } if(sel.lnLast < lnMax - 1) { InsBufLine(hbuf, sel.lnLast + 2, "@szLeft@/* END: Added by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { AppendBufLine(hbuf, "@szLeft@/* END: Added by @szMyName@, @sz@/@sz1@/@sz3@ */"); } SetBufIns(hbuf,sel.lnFirst + 1,strlen(szLeft))}macro InsertReviseDel(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) } else { szLine = GetBufLine( hbuf, sel.lnFirst ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); } szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); } if(sel.lnLast < lnMax - 1) { InsBufLine(hbuf, sel.lnLast + 2, "@szLeft@/* END: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { AppendBufLine(hbuf, "@szLeft@/* END: Deleted by @szMyName@, @sz@/@sz1@/@sz3@ */"); } SetBufIns(hbuf,sel.lnFirst + 1,strlen(szLeft))}macro InsertReviseMod(){ hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } SysTime = GetSysTime(1) sz=SysTime.Year sz1=SysTime.month sz3=SysTime.day if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim) { szLeft = CreateBlankString(sel.ichFirst) } else { szLine = GetBufLine( hbuf, sel.lnFirst ) nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); } szQuestion = GetReg ("PNO") if(strlen(szQuestion)>0) { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* BEGIN: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); } if(sel.lnLast < lnMax - 1) { InsBufLine(hbuf, sel.lnLast + 2, "@szLeft@/* END: Modified by @szMyName@, @sz@/@sz1@/@sz3@ PN:@szQuestion@ */"); } else { AppendBufLine(hbuf, "@szLeft@/* END: Modified by @szMyName@, @sz@/@sz1@/@sz3@ */"); } SetBufIns(hbuf,sel.lnFirst + 1,strlen(szLeft))}// Wrap ifdef <sz> .. endif around the current selectionmacro IfdefStr(sz){ hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) if(lnMax != 0) { szLine = GetBufLine( hbuf, lnFirst ) } nLeft = GetLeftBlank(szLine) szLeft = strmid(szLine,0,nLeft); hbuf = GetCurrentBuf() if(lnLast + 1 < lnMax) { InsBufLine(hbuf, lnLast+1, "@szLeft@#endif /* @sz@ */") } else if(lnLast + 1 == lnMax) { AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */") } else { AppendBufLine(hbuf, "") AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */") } InsBufLine(hbuf, lnFirst, "@szLeft@#ifdef @sz@") SetBufIns(hbuf,lnFirst + 1,strlen(szLeft))}macro IfndefStr(sz){ hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) if(lnMax != 0) { szLine = GetBufLine( hbuf, lnFirst ) } nLeft = GetLeftBlank(szLine) hbuf = GetCurrentBuf() if(lnLast + 1 < lnMax) { InsBufLine(hbuf, lnLast+1, "#endif /* @sz@ */") } else if(lnLast + 1 == lnMax) { AppendBufLine(hbuf, "#endif /* @sz@ */") } else { AppendBufLine(hbuf, "") AppendBufLine(hbuf, "#endif /* @sz@ */") } InsBufLine(hbuf, lnFirst, "#ifndef @sz@") SetBufIns(hbuf,lnFirst + 1,0)}macro InsertPredefIf(){ sz = Ask("Enter #if condition:") PredefIfStr(sz)}macro PredefIfStr(sz){ hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) hbuf = GetCurrentBuf() lnMax = GetBufLineCount(hbuf) if(lnMax != 0) { szLine = GetBufLine( hbuf, lnFirst ) } nLeft = GetLeftBlank(szLine) hbuf = GetCurrentBuf() if(lnLast + 1 < lnMax) { InsBufLine(hbuf, lnLast+1, "#endif /* #if @sz@ */") } else if(lnLast + 1 == lnMax) { AppendBufLine(hbuf, "#endif /* #if @sz@ */") } else { AppendBufLine(hbuf, "") AppendBufLine(hbuf, "#endif /* #if @sz@ */") } InsBufLine(hbuf, lnFirst, "#if @sz@") SetBufIns(hbuf,lnFirst + 1,0)}macro HeadIfdefStr(sz){ hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) hbuf = GetCurrentBuf() InsBufLine(hbuf, lnFirst, "") InsBufLine(hbuf, lnFirst, "#define @sz@") InsBufLine(hbuf, lnFirst, "#ifndef @sz@") iTotalLn = GetBufLineCount (hbuf) InsBufLine(hbuf, iTotalLn, "#endif /* @sz@ */") InsBufLine(hbuf, iTotalLn, "")}macro GetSysTime(a){ //从sidate取得时间 RunCmd ("sidate") SysTime="" SysTime.Year=getreg(Year) if(strlen(SysTime.Year)==0) { setreg(Year,"2002") setreg(Month,"05") setreg(Day,"02") SysTime.Year="2002" SysTime.month="05" SysTime.day="20" SysTime.Date="2002-05-20" } else { SysTime.Month=getreg(Month) SysTime.Day=getreg(Day) SysTime.Date=getreg(Date) } return SysTime}macro HeaderFileCreate(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } CreateFunctionDef(hbuf,szMyName,language)}macro FunctionHeaderCreate(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop sel = GetWndSel(hwnd) ln = sel.lnFirst hbuf = GetWndBuf(hwnd) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } nVer = GetVersion() lnMax = GetBufLineCount(hbuf) if(ln != lnMax) { szNextLine = GetBufLine(hbuf,ln) if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != 2 )) { symbol = GetCurSymbol() if(strlen(symbol) != 0) { if(language == 0) { FuncHeadCommentCN(hbuf, ln, symbol, szMyName,0) } else { FuncHeadCommentEN(hbuf, ln, symbol, szMyName,0) } return } } } if(language == 0 ) { szFuncName = Ask("请输入函数名称:") FuncHeadCommentCN(hbuf, ln, szFuncName, szMyName, 1) } else { szFuncName = Ask("Please input function name") FuncHeadCommentEN(hbuf, ln, szFuncName, szMyName, 1) }}macro GetVersion(){ Record = GetProgramInfo () return Record.versionMajor}macro GetProgramInfo (){ Record = "" Record.versionMajor = 2 Record.versionMinor = 1 return Record}macro FileHeaderCreate(){ hwnd = GetCurrentWnd() if (hwnd == 0) stop ln = 0 hbuf = GetWndBuf(hwnd) language = getreg(LANGUAGE) if(language != 1) { language = 0 } szMyName = getreg(MYNAME) if(strlen( szMyName ) == 0) { szMyName = Ask("Enter your name:") setreg(MYNAME, szMyName) } SetBufIns (hbuf, 0, 0) if(language == 0) { InsertFileHeaderCN( hbuf,ln, szMyName,"" ) } else { InsertFileHeaderEN( hbuf,ln, szMyName,"" ) }}macro AddStructHeader(){ // 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 ) DelBufLine(hbuf,ln) /* if owner variable exists, insert Owner: name */ lnStartPos = ln +1; if (strlen(szMyName) > 0) { InsBufLine( hbuf, ln, "/**" ) InsBufLine( hbuf, ln + 1, " * @@struct brief " ) InsBufLine( hbuf, ln + 2, " */" ) ln = ln + 2 } else { ln = ln + 2 } // put the insertion point inside the header comment SetBufIns( hbuf, lnStartPos, 10 )}macro AddEnumHeader(){ // 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 ) DelBufLine(hbuf,ln) /* if owner variable exists, insert Owner: name */ lnStartPos = ln + 1; if (strlen(szMyName) > 0) { InsBufLine( hbuf, ln, "/**" ) InsBufLine( hbuf, ln + 1, " * @@enum brief " ) InsBufLine( hbuf, ln + 2, " */" ) ln = ln + 2 } else { ln = ln + 2 } // put the insertion point inside the header comment SetBufIns( hbuf, lnStartPos, 10 )}/**************************************************************************** * Ver: 1.13 * Date: 2002.9.18 * Author: suqiyuan * ================================ * 这里有几个宏可以用来部分支持汉字: * 使用这些宏重载对应的键就可以了 * * 重载关系如下: * EM_delete: DELETE * EM_backspace: BACKSPACE * EM_CursorUp: ↑(上方向键) * EM_CursorDown: ↓(下方向键) * EM_CursorLeft: ←(左方向键) * EM_CursorRight: →(右方向键) * EM_SelectWordLeft: Shift + ← * EM_SelectWordRight: Shift + → * EM_SelectLineUp: Shift + ↑ * EM_SelectLineUp: Shift + ↓ ****************************************************************************/#if 0 //For keyboard delete Macro EM_delete() { //get current character hWnd = GetCurrentWnd() if(hWnd == 0) stop ln = GetWndSelLnFirst(hWnd) lnLast = GetWndSelLnLast(hWnd) lnCnt = lnLast - ln + 1 sel = GetWndSel(hWnd) ich = GetWndSelIchFirst(hWnd) ichLast = GetWndSelIchLim(hWnd) hBuf = GetWndBuf(hWnd) curLine = GetBufLine(hBuf,ln) //Msg("Now Select lines:@lnCnt@,Line @ln@ index @ich@ to line @lnLast@ index @ichLast@") if((lnCnt > 1) || ((lnCnt==1)&&(ichLast>ich)))//选择的是块 { //Msg("Selection is One BLOCK.") curLine = GetBufLine(hBuf,ln) if(ich>0) { index = 0 while(index < ich) { ch = curLine[index] if(SearchCharInTab(ch)) index = index + 1 else index = index + 2 } //如果块首在汉字中间,块首向前调整一个字节 sel.ichFirst = ich - (index-ich) } curLine = GetBufLine(hBuf,lnLast) len = GetBufLineLength(hBuf,lnLast) index = 0 while(index < ichLast && index < len) { ch = curLine[index] if(SearchCharInTab(ch)) index = index + 1 else index = index + 2 } sel.ichLim = index if(ichLast>len) sel.ichLim = ichLast SetWndSel(hWnd,sel) //Msg("See the block selected is adjusted now.") Delete_Character } else//选择的不是块 { //Msg("Selection NOT block.") curChar = curLine[ich] //如果在行末,应该能够使得下一行连到行尾 if(ich == strlen(curLine)) { Delete_Character stop } //Msg("Not at the end of line.") flag = SearchCharInTab(curChar) //Msg("Current char:@curChar@,Valid flag:@flag@") if(flag) { //Msg("Byte location to delete:@ich@,Current char:@curChar@") DelCharOfLine(hWnd,ln,ich,1) } else { /*这里的实现方法是这样的:从行首开始找,如果是Table中的,加一继续 *如果不是,加二继续,一直到当前字符,决定怎么删除 *这里有这样的假定,当前行没有半个汉字的情形 */ index = 0 word = 0 byte = 0 len = strlen(curLine) while(index < ich) { ch = curLine[index] flag = SearchCharInTab(ch) if(flag) { index = index + 1 byte = byte + 1 } else { index = index + 2 word = word + 1 } } //index = ich + 1,current cursor is in the middle of word // or in the front of byte //index = ich,current cursor is NOT in the front of word nich = 2*(word-(index-ich)) + byte //Msg("Start deleting position:@ich@,word:@word@,byte:@byte@") DelCharOfLine(hWnd,ln,nich,2) if((index-ich) && !flag && (ich != len-1))//当在一个不在末尾的汉字中间 Cursor_Left } }}//For keyboard backspace <-Macro EM_backspace(){ //get current character hWnd = GetCurrentWnd() if(hWnd == 0) stop sel = GetWndSel(hWnd) ln = sel.lnFirst ich = sel.ichFirst if(ich < 0) stop lnLast = GetWndSelLnLast(hWnd) lnCnt = lnLast - ln + 1 ichLast = GetWndSelIchLim(hWnd) //Msg("Now Select lines:@lnCnt@,Line @ln@ index @ich@ to line @lnLast@ index @ichLast@") if((lnCnt > 1) || ((lnCnt==1)&&(ichLast>ich)))//选择的是块,直接删除调整后的块 { EM_delete } else {if(ich == 0) { Backspace stop } hBuf = GetWndBuf(hWnd) curLine = GetBufLine(hBuf,ln) index = 0 flag = 0 // 1-byte,0-word byte = 0 word = 0 while(index < ich) { ch = curLine[index] flag = SearchCharInTab(ch) if(flag) { byte = byte + 1 index = index + 1 } else { word = word + 1 index = index + 2 } } if(flag)//char before cursor is in table { //Msg("char before cursor is in table,byte!") Backspace } else if(!flag && (index-ich))//current cursor is in the middle of word { //Msg("current cursor is in the middle of word.") DelCharOfLine(hWnd,ln,ich-1,2) if(!(sel.ichFirst == strlen(curLine)-1)) Cursor_Left } else if(!flag && !(index-ich))//Current cursor is after a word { //Msg("Current cursor is after a word.") DelCharOfLine(hWnd,ln,ich-2,2) if(sel.ichFirst != strlen(curLine)) { Cursor_Left Cursor_Left } } }}Macro SearchCharInTab(curChar){ /* Total 97 chars */ AsciiChar = AsciiFromChar(curChar) //Msg("Current char in SearchCharInTab():@curChar@.") if(AsciiChar >= 32 && AsciiChar <= 126) return 1 //Msg("Current Char(@curChar@) NOT between space and ~") if(AsciiChar == 9)//Tab return 1 //Msg("Current Char(@curChar@) NOT Tab") if(AsciiChar == 13)//CR return 1 //Msg("Current Char(@curChar@) Not CR") return 0}Macro DelCharOfLine(hWnd,ln,ich,count){ if(hWnd == 0) stop sel = GetWndSel(hWnd) hBuf = GetWndBuf(hWnd) if(hBuf == 0) stop if(ln > GetBufLineCount(hBuf)) stop szLine = GetBufLine(hBuf,ln) len = strlen(szLine) if(ich > len) stop NewLine = "" if(ich > 0) { NewLine = NewLine # strmid(szLine,0,ich) } if(ich+count < len) { ichLast = len NewLine = NewLine # strmid(szLine,ich+count,ichLast) } /**/ //Msg("Current line:@szLine@") //Msg("Replaced as:@NewLine@") /**/ PutBufLine(hBuf,ln,NewLine) SetWndSel(hWnd, sel)}//上移光标macro EM_CursorUp(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //移动光标 Cursor_Up //检查移动光标后的光标位置 hwnd = GetWndhandle(hbuf) sel = GetWndSel(hwnd) str = GetBufline(hbuf, sel.lnFirst) flag = StrChinChk(str, sel.ichFirst) //光标位于中文字符之中则向前移动一个字符 if (flag == True) { Cursor_Left }}//下移光标macro EM_CursorDown(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //移动光标 Cursor_Down //检查移动光标后的光标位置 hwnd = GetWndhandle(hbuf) sel = GetWndSel(hwnd) str = GetBufline(hbuf, sel.lnFirst) flag = StrChinChk(str, sel.ichFirst) //光标位于中文字符之中则向前移动一个字符 if (flag == True) { Cursor_Right }}//右移光标macro EM_CursorRight(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //移动光标 Cursor_Right //检查移动光标后的光标位置 hwnd = GetWndhandle(hbuf) sel = GetWndSel(hwnd) str = GetBufline(hbuf, sel.lnFirst) flag = StrChinChk(str, sel.ichFirst) //光标位于中文字符之中则向前移动一个字符(向后移时是再向后移动一个字符) if (flag == True) { Cursor_Right }}//左移光标macro EM_CursorLeft(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //移动光标 Cursor_Left //检查移动光标后的光标位置 hwnd = GetWndhandle(hbuf) sel = GetWndSel(hwnd) str = GetBufline(hbuf, sel.lnFirst) flag = StrChinChk(str, sel.ichFirst) //光标位于中文字符之中则向前移动一个字符(向后移时是再向后移动一个字符) if (flag == True) { Cursor_Left }}//向左选择字符macro EM_SelectWordLeft(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //执行命令 Select_Char_Left hwnd = GetWndhandle(hbuf) //selold = GetWndSel(hwnd) sel = GetWndSel(hwnd) //ln = GetBufLnCur(hbuf) /* if (selold.ichFirst == sel.ichFirst && sel.lnFirst == selold.lnFirst) curinhead = 1 else curinhead = 0 */ str = GetBufline(hbuf, sel.lnFirst) hdflag = StrChinChk(str, sel.ichFirst) str = GetBufline(hbuf, sel.lnLast) bkflag = StrChinChk(str, sel.ichLim) if (hdflag == TRUE || bkflag == TRUE) { Select_Char_Left }}//向右选择字符macro EM_SelectWordRight(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //执行命令 Select_Char_Right hwnd = GetWndhandle(hbuf) //selold = GetWndSel(hwnd) sel = GetWndSel(hwnd) //ln = GetBufLnCur(hbuf) /* if (selold.ichFirst == sel.ichFirst && sel.lnFirst == selold.lnFirst) curinhead = 1 else curinhead = 0 */ str = GetBufline(hbuf, sel.lnFirst) hdflag = StrChinChk(str, sel.ichFirst) str = GetBufline(hbuf, sel.lnLast) bkflag = StrChinChk(str, sel.ichLim) if (hdflag == TRUE || bkflag == TRUE) { Select_Char_Right }}//向上选择字符macro EM_SelectLineUp(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //执行命令 Select_Line_Up hwnd = GetWndhandle(hbuf) //selold = GetWndSel(hwnd) sel = GetWndSel(hwnd) //ln = GetBufLnCur(hbuf) /* if (selold.ichFirst == sel.ichFirst && sel.lnFirst == selold.lnFirst) curinhead = 1 else curinhead = 0 */ str = GetBufline(hbuf, sel.lnFirst) hdflag = StrChinChk(str, sel.ichFirst) str = GetBufline(hbuf, sel.lnLast) bkflag = StrChinChk(str, sel.ichLim) if (hdflag == TRUE || bkflag == TRUE) { Select_Char_Right }}//向下选择字符macro EM_SelectLineDown(){ hWnd = GetCurrentWnd() if(hWnd == 0) stop hbuf = GetCurrentBuf() //执行命令 Select_Line_Down hwnd = GetWndhandle(hbuf) //selold = GetWndSel(hwnd) sel = GetWndSel(hwnd) //ln = GetBufLnCur(hbuf) /* if (selold.ichFirst == sel.ichFirst && sel.lnFirst == selold.lnFirst) curinhead = 1 else curinhead = 0 */ str = GetBufline(hbuf, sel.lnFirst) hdflag = StrChinChk(str, sel.ichFirst) str = GetBufline(hbuf, sel.lnLast) bkflag = StrChinChk(str, sel.ichLim) if (hdflag == TRUE || bkflag == TRUE) { Select_Char_Right }}//对字符串str到ln位进行检查//如果有偶数个中文字符则返回FALSE//如果是奇数个中文字符则返回TRUEmacro StrChinChk(str, ln){ tm = 0 flag = False len = strlen(str) while (tm < ln) { if (str[tm] != "") ascstr = asciifromchar(str[tm]) else ascstr = 0 //中文字符ASCII > 128 if (ascstr > 128) flag = !flag tm = tm + 1 if (tm >= len) break } return flag}// 在工程中查找半个汉字,依赖"macro OpenorNewBuf(szfile)"macro FindHalfChcharInProj(){ hprj = GetCurrentProj() if (hprj == 0) stop ifileMax = GetProjFileCount(hprj) hOutBuf = OpenorNewBuf("HalfChch.txt") if (hOutBuf == hNil) { Msg("Can't Open file:HalfChchar.txt") stop } AppendBufLine(hOutBuf, ">>半个汉字列表>>") ifile = 0 while (ifile < ifileMax) { filename = GetProjFileName(hprj, ifile) hbuf = OpenBuf(filename) if (hbuf != 0) { StartMsg("@filename@ is being processing. . . press ESC to cancel.") iTotalLn = GetBufLineCount(hbuf) iCurLn = 0 while (iCurLn < iTotalLn) { str = GetBufline(hbuf, iCurLn) flag = StrChinChk(str, strlen(str)) if (flag == True) { // 存在半个汉字,记录文件名和行号 iOutLn = iCurLn + 1 outstr = cat(filename, "(@iOutLn@) : ") outstr = cat(outstr, str) AppendBufLine(hOutBuf, outstr) SetSourceLink(hOutBuf,GetBufLineCount(hOutBuf)-1,filename,iCurLn) } iCurLn = iCurLn + 1 } EndMsg() } ifile = ifile + 1 } //SetCurrentBuf(hOutBuf) //Go_To_First_Link}// 如果没有szfile指明的文件打开,则新建,否则打开,并返回BUFF句柄macro OpenorNewBuf(szfile){ hout = GetBufHandle(szfile) if (hout == hNil) { hout = OpenBuf(szfile) if (hout == hNil) { hout = NewBuf(szfile) NewWnd(hout) } } return hout}#endif
阅读全文
0 0
- source insight 配置宏
- source insight配置
- source insight 配置
- source insight 配置
- Tornado配置Source Insight
- source insight配置
- Source Insight 配置
- source insight的配置
- source insight的配置
- source insight 配置
- Source Insight --- 配置 SVN
- Source Insight 配置 .
- source Insight移植配置
- source insight 配置
- Source Insight使用配置
- source insight配置
- Source Insight的配置
- Source Insight使用配置
- C语言实现词法分析
- Oc UITabBarController+侧滑视图第三方(RESideMenu)demo
- 学习:知识过载与疲于奔命
- SSL2836 2017年11月4日提高组T2 序列(迭代dfs)
- android中this、getAppliaction()、context的区别。
- source insight 配置宏
- do while和while的区别
- Android Studio插件之快速findViewById butterknife和Android CodeGenerator的使用
- 扫描二维码
- 动态规划之字符串分词
- python--leetcode.Detect Capital
- Android使用自定义布局制作进度圆
- 在 CentOS7 上安装 Zookeeper-3.4.9 服务
- Pyinstaller使用教程