source insight增加注釋宏


打開base項目,下main.c文件里加入以下代碼


對於在一行內的局部注釋, 沒有找到解除注釋的宏,  


  1. macro Comments_orUn_gx()  
  2. {   //用杠星注釋多行,或取消杠星注釋 ,不選中多行時,只處理當前行  
  3.     hwnd = GetCurrentWnd()  
  4.     hbuf = GetCurrentBuf()  
  5.     if(hbuf ==0)  
  6.         stop   
  7.           
  8.     // debugBuf只是為了調試  
  9.     // debugBuf = NewBuf("debugBuf")   
  10.     // ClearBuf(debugBuf)   
  11.   
  12.     lnSelFirst = GetWndSelLnFirst(hwnd)     // 獲得選中內容的第一行  
  13.     lnSelLast = GetWndSelLnLast(hwnd)       // 獲得選中內容的最后一行  
  14.           
  15.     const_space = " "               // 空格  
  16.     const_comments_begin = "/*"             // 多行注釋符號-開始  
  17.     const_comments_end = "*/"           // 多行注釋符號-結束  
  18.     isCancelComments = 0   
  19.       
  20.     // 跳過開始的空行,否則下面報錯  
  21.     line_index = lnSelFirst   
  22.     orig_text = GetBufLine(hbuf, line_index)    // 獲得第一行的text  
  23.     while(strlen(orig_text) == 0)  
  24.     {  
  25.         line_index = line_index + 1  
  26.         orig_text = GetBufLine(hbuf, line_index)            // 獲得下一行的text  
  27.     }  
  28.           
  29.     // 根據第一行選中文本,確定是“注釋”,還是“取消注釋”  
  30.     // 判斷是否以“//”開始,如果是則認為是“取消注釋”,首先需要去掉空格  
  31.     subIndex = 0          
  32.     while(strmid(orig_text, subIndex, subIndex+1) == const_space)   
  33.             subIndex = subIndex + 1   
  34.       
  35.     if (strmid(orig_text, subIndex, subIndex+2) == const_comments_begin)    // 以“/*”開頭,取消注釋  
  36.     {  
  37.         isCancelComments = 1   
  38.           
  39.         dest_text = strmid(orig_text, subIndex+2, strlen(orig_text))   
  40.         if(strlen(dest_text) == 0)  
  41.         {  
  42.             DelBufLine(hbuf, line_index)                // 本行只有“/*”時,刪除  
  43.         }  
  44.         else  
  45.         {  
  46.             PutBufLine (hbuf, line_index, dest_text)        // 替換以前的text  
  47.         }  
  48.         line_index = line_index + 1  
  49.     }  
  50.     else    // 進行注釋  
  51.     {  
  52.         InsBufLine(hbuf, lnSelFirst, "/*")  
  53.         InsBufLine(hbuf, lnSelLast+2,  "*/")  
  54.           
  55.         stop   
  56.     }  
  57.       
  58.     // 遍歷所有選中的行  
  59.     // line_index = lnSelFirst                      // 前面已經跳過開頭的空行  
  60.     // while(line_index <= lnSelLast)                    // 對選中的內容進行操作  
  61.     while(line_index < GetBufLineCount(hbuf))                //or 從當前行開始,查找到第一個“*/”為止或到結尾  
  62.     {  
  63.         orig_text = GetBufLine(hbuf, line_index)    // 獲得以前的text  
  64.         if (strlen(orig_text) > 1)                   // 如果是空行或只有一個字符,則跳過  
  65.         {  
  66.             dest_text = ""   
  67.             if(isCancelComments == 1)               // 取消注釋  
  68.             {  
  69.                 // 查找注釋符“*/”  
  70.                 subIndex = 0          
  71.                 while(subIndex < strlen(orig_text)-2 && strmid(orig_text, subIndex, subIndex+2) != const_comments_end)   
  72.                         subIndex = subIndex + 1   
  73.                   
  74.                 if (strmid(orig_text, subIndex, subIndex+2) == const_comments_end)  // 找到“*/”,進行處理  
  75.                 {  
  76.                     prefixText = strmid(orig_text, 0, subIndex)             // 前面的text  
  77.                     lastText = strmid(orig_text, subIndex+2, strlen(orig_text))     // 后面的text  
  78.                     dest_text = cat(prefixText, lastText)   
  79.   
  80.                     if(strlen(dest_text) == 0)  
  81.                     {  
  82.                         DelBufLine(hbuf, line_index)                // 本行只有“*/”時,刪除  
  83.                     }  
  84.                     else  
  85.                     {  
  86.                         PutBufLine (hbuf, line_index, dest_text)        // 替換以前的text  
  87.                     }  
  88.                       
  89.                       
  90.                     break                               // 退出  
  91.                 }  
  92.             }  
  93.         }  
  94.           
  95.         line_index = line_index + 1    
  96.     }  
  97. }  
  98.   
  99.   
  100.   
  101. macro CommentSelecte_inOneLine()  
  102. {   //注釋選中,只在單行中有效,不選中任何字符的話就在光標處插入一對杠星注釋符  
  103.     hbuf = GetCurrentBuf()  
  104.     ln = GetBufLnCur(hbuf)  
  105.     str = GetBufSelText(hbuf)  
  106.     str = cat("/*",str)  
  107.     str = cat(str,"*/")  
  108.     SetBufSelText (hbuf, str)  
  109. }  
  110.   
  111. macro _tsGetTabSize()    
  112. {  //只被Comment_gx() 宏調用  
  113.     szTabSize = GetReg("TabSize");    
  114.     
  115.     if (szTabSize != "")    
  116.     {    
  117.         tabSize = AsciiFromChar(szTabSize[0]) - AsciiFromChar("0");    
  118.     }    
  119.     else    
  120.     {    
  121.         tabSize = 4;    
  122.     }    
  123.     
  124.     return tabSize;    
  125. }    
  126.     
  127.     
  128. macro Comment_gx()    
  129. {  //用杠星注釋,不換行,至少注釋一行,不推薦使用  
  130.     hbuf = GetCurrentBuf();    
  131.     hwnd = GetCurrentWnd();    
  132.     
  133.     sel = GetWndSel(hwnd);    
  134.     
  135.     iLine = sel.lnFirst;    
  136.         
  137.     // indicate the comment char according to the file type    
  138.     // for example, using "#" for perl file(.pl) and "/* */" for C/C++.    
  139.     filename = tolower(GetBufName(hbuf));    
  140.     suffix = "";    
  141.     len = strlen(filename);    
  142.     i = len - 1;    
  143.     while (i >= 0)    
  144.     {    
  145.         if (filename[i-1] == ".")    
  146.         {    
  147.             suffix = strmid(filename, i, len)    
  148.             break;    
  149.         }    
  150.         i = i -1;    
  151.     }    
  152.     if  ( suffix == "pl" )    
  153.     {    
  154.         filetype = 2; // PERL    
  155.     }    
  156.     else    
  157.     {    
  158.         filetype = 1; // C    
  159.     }    
  160.     
  161.     szLine = GetBufLine(hbuf, iLine);    
  162.     if (filetype == 1)  // C    
  163.     {    
  164.         szLine = cat("/*", szLine);    
  165.     }    
  166.     else                // PERL    
  167.     {    
  168.         szLine = cat("# ", szLine);    
  169.     }    
  170.     PutBufLine(hbuf, iLine, szLine);    
  171.     iLine = sel.lnLast;    
  172.     szLine = GetBufLine(hbuf, iLine);    
  173.     if (filetype == 1)  // C    
  174.     {    
  175.         szLine = cat(szLine, "*/");    
  176.     }    
  177.     else                // PERL    
  178.     {    
  179.         szLine = cat("# ", szLine);    
  180.     }    
  181.     PutBufLine(hbuf, iLine, szLine);    
  182.     
  183.     
  184.     
  185.     if (sel.lnFirst == sel.lnLast)    
  186.     {    
  187.         tabSize = _tsGetTabSize() - 1;    
  188.         sel.ichFirst = sel.ichFirst + tabSize;    
  189.         sel.ichLim = sel.ichLim + tabSize;    
  190.     }    
  191.     SetWndSel(hwnd, sel);    
  192. }    
  193.     
  194.     
  195. macro Comment_gg()  
  196. {   //用杠杠注釋,不選中多行的話,注釋當前行  
  197.     hwnd = GetCurrentWnd()  
  198.     selection = GetWndSel( hwnd )  
  199.     lnFirst = GetWndSelLnFirst( hwnd )  
  200.     lnLast = GetWndSelLnLast( hwnd )  
  201.   
  202.     hbuf = GetCurrentBuf()  
  203.   
  204.     ln = lnFirst  
  205.     buf = GetBufLine( hbuf, ln )  
  206.     len = strlen( buf )  
  207.     firststart = len  
  208.     while( ln <= lnLast )  
  209.     {  
  210.         buf = GetBufLine( hbuf, ln )  
  211.         len = strlen( buf )  
  212.         start = 0  
  213.         while( start < len )  
  214.         {  
  215.             if( strmid( buf, start, start + 1 ) == CharFromAscii(32) || strmid( buf, start, start + 1 ) == CharFromAscii(9) )  
  216.             {  
  217.                 start = start + 1  
  218.                 if( start > len )  
  219.                     break  
  220.             }  
  221.             else  
  222.                 break  
  223.         }  
  224.         if( start < len && start < firststart )  
  225.         {  
  226.             firststart = start  
  227.         }  
  228.         ln = ln + 1  
  229.     }  
  230.   
  231.     ln = lnFirst  
  232.     while( ln <= lnLast )  
  233.     {  
  234.         buf = GetBufLine( hbuf, ln )  
  235.         len = strlen( buf )  
  236.         if( len > 0 )  
  237.         {  
  238.             buf2 = cat( cat( strmid( buf, 0, firststart ), "//" ), strmid( buf, firststart, len ) )  
  239.             PutBufLine ( hbuf, ln, buf2 )  
  240.         }  
  241.         ln = ln + 1  
  242.     }  
  243.     SetWndSel( hwnd, selection )  
  244. }  
  245.   
  246. macro unComment_gg()  
  247. {   //取消杠杠注釋,不選中多行的話,默認只處理當前行  
  248.     hwnd = GetCurrentWnd()  
  249.     selection = GetWndSel( hwnd )  
  250.     lnFirst = GetWndSelLnFirst( hwnd )  
  251.     lnLast = GetWndSelLnLast( hwnd )  
  252.   
  253.     hbuf = GetCurrentBuf()  
  254.     ln = lnFirst  
  255.     while( ln <= lnLast )  
  256.     {  
  257.         buf = GetBufLine( hbuf, ln )  
  258.         len = strlen( buf )  
  259.         if( len >= 2 )  
  260.         {  
  261.             start = 0  
  262.   
  263.             while( strmid( buf, start, start + 1 ) == CharFromAscii(32) || strmid( buf, start, start + 1 ) == CharFromAscii(9) )  
  264.             {  
  265.                 start = start + 1  
  266.                 if( start >= len )  
  267.                     break  
  268.             }  
  269.             if( start < len - 2 )  
  270.             {  
  271.                 if( strmid( buf, start, start + 2 ) == "//" )  
  272.                 {  
  273.                     buf2 = cat( strmid( buf, 0, start ), strmid( buf, start + 2, len ) )  
  274.                     PutBufLine( hbuf, ln, buf2 )  
  275.                 }  
  276.             }  
  277.         }  
  278.         ln = ln + 1  
  279.     }  
  280.     SetWndSel( hwnd, selection )  

增加后,通過在鍵分配中分配宏命令的按鍵



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com