青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 76,  comments - 621,  trackbacks - 0
編輯器制作之代碼折疊

   代碼折疊這個(gè)功能,我最早是在Dreamweaver里面看到的,具體哪個(gè)版本記不清了,好多年了。

當(dāng)時(shí)DW的實(shí)現(xiàn)是當(dāng)你選擇文本的時(shí)候,在編輯器的左側(cè),有一個(gè)折疊的提示,提示你可以把選中的

文本折疊起來。那個(gè)時(shí)候覺得這個(gè)功能,毫無用處。不過自從VisualStudio2003以來,代碼折疊

這個(gè)功能幾乎成為了程序員的必備。

   的確,在瀏覽代碼的時(shí)候,代碼折疊可以帶來一些好處,讓重點(diǎn)凸顯在用戶的面前,或者可以拉近兩塊

相隔很遠(yuǎn)的代碼,實(shí)現(xiàn)比較。當(dāng)然,這個(gè)也完全可以通過分割視圖完成。

   在眾多的編輯器當(dāng)中,我認(rèn)為單純就代碼折疊而言,目前實(shí)現(xiàn)的最好的還是VisualStudio,它

可以根據(jù)語言上下文的關(guān)系,即語法,進(jìn)行代碼折疊,這是其它編輯器無法企及的。當(dāng)然,它本身也是

一個(gè)重量級(jí)的IDE,超出了簡(jiǎn)單編輯器的范疇。

   本文試圖描述代碼折疊最基本的思路,沒有具體的代碼。其實(shí)這個(gè)功能并不難實(shí)現(xiàn),相反很簡(jiǎn)單。

難點(diǎn)在于要和編輯器本身很好的結(jié)合。

   以下面的C語言為例。
   
1 #include <stdio.h>
2 
3 int main(int argc, char *argv[])
4 {
5     printf("Hello, world\n");
6     
7     return 0;
8 }
9 


   如果對(duì)上面的代碼進(jìn)行折疊,應(yīng)該如何實(shí)現(xiàn)呢?聰明的讀者,應(yīng)該馬上就會(huì)知道了代碼折疊的思路了。

對(duì),就是在{和},即兩個(gè)大括號(hào)之間進(jìn)行折疊。那么如何實(shí)現(xiàn)遞歸折疊呢?這個(gè)也很簡(jiǎn)單,我們只要標(biāo)記

一個(gè)Level,不同的Level之間用不同的圖標(biāo)顯示在編輯器左側(cè),點(diǎn)擊的時(shí)候根據(jù)Level的前后大小關(guān)系,

判斷是該折疊還是該展開。

   比如下面的代碼:
 
 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     {
 6         printf("Hello, world\n");
 7    
 8     }
 9     return 0;
10 }


  在第4行和第5行的時(shí)候我們應(yīng)該顯示一個(gè)+,5, 6,7,8,9我們應(yīng)該顯示和上下文關(guān)聯(lián)的"|"符號(hào),那么代碼

也就很好寫了。如下,根據(jù)前一行的level設(shè)置本行的level:
   
int set_level( int prevLevel, const char* str, int len, void* others ){
    
int retLevel = prevLevel;
    
while! end of str ){
        
if( str has '{' )
            retLevel
++;
        
if( str has '}' )
            retLevel
--;
    }
    
return retLevel;
}

分析完的level要保存在行信息里面.不然就無法繪制+或者-了。

    瞧,如此簡(jiǎn)單的代碼折疊就出來了。

    其實(shí)大部分的簡(jiǎn)單編輯器都是這么多的,比如scintilla。這么做的好處是實(shí)現(xiàn)起來非常簡(jiǎn)單,高效,

而且基本上能滿足大部分的需求。另外,上面的函數(shù)還有一個(gè)參數(shù)others,這個(gè)可以根據(jù)前文已經(jīng)做過的詞法分析,

再做進(jìn)一步處理,從而實(shí)現(xiàn)過濾掉注釋或者字符串里面的{和},并且還可以實(shí)現(xiàn)對(duì)注釋的折疊。

    很顯然,這種方法也有缺點(diǎn),就是只能實(shí)現(xiàn)類C的這種代碼折疊。沒有辦法,每種語言都有自己的特色,

要想做更好的折疊只有這個(gè)辦法。比如vb,我們可以在funtion和end function之間折疊,html我們可以在

<body>和</body>之間折疊。不可能寫了一個(gè)就會(huì)萬能的。
   
    不過,可以有一種類似萬能的效果,就是利用Tab或者空格來折疊。也就是Editplus現(xiàn)在做成的那樣。

這個(gè)實(shí)現(xiàn)起來思路和上面是一模一樣的,不再贅述。

ps:下一篇,編輯器之代碼自動(dòng)補(bǔ)全,敬請(qǐng)期待。
posted on 2009-03-07 16:07 megax 閱讀(3978) 評(píng)論(13)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久一本一区二区青青蜜月| 亚洲美女av黄| 亚洲欧洲精品天堂一级 | 久久久999精品免费| 欧美精品久久一区二区| 国内成+人亚洲| 国产精品美女xx| 久久九九电影| 亚洲免费在线精品一区| 一区二区三区久久| 久久久青草婷婷精品综合日韩 | 国产精品一区在线观看你懂的| 亚洲国产美国国产综合一区二区| 麻豆av一区二区三区久久| 国产欧美精品日韩区二区麻豆天美 | 韩国精品主播一区二区在线观看| 欧美视频日韩视频在线观看| 亚洲国产第一页| 久久国内精品自在自线400部| 亚洲国产精品毛片| 99综合在线| 亚洲欧洲中文日韩久久av乱码| 亚洲欧美日韩在线观看a三区| 黄色精品在线看| 亚洲激情在线| 亚洲人成网站影音先锋播放| 久久久美女艺术照精彩视频福利播放 | 亚洲高清视频的网址| 久久亚洲欧美| 久久精品亚洲乱码伦伦中文 | 亚洲欧美日韩一区在线| 欧美一区二区三区在线播放| 亚洲一区日本| 日韩一级黄色大片| 国产精品露脸自拍| 亚洲日韩视频| 亚洲三级网站| 日韩午夜电影av| 一区二区三区国产精品| 久久亚洲精品伦理| 亚洲欧洲综合| 久久婷婷成人综合色| 欧美一区二区| 雨宫琴音一区二区在线| 狠狠久久综合婷婷不卡| 一区二区久久| 久久久久久久久久久一区 | 久久国产精品99国产精| 日韩午夜中文字幕| 午夜精品福利视频| 亚洲青涩在线| 亚洲精品一二三| 国产亚洲精品一区二区| 毛片一区二区三区| 国产欧美一区二区三区国产幕精品| 一本一本久久a久久精品牛牛影视| 亚洲视频久久| 国产麻豆精品theporn| av成人毛片| 亚洲网友自拍| 黄色成人av在线| 亚洲精选一区二区| 国产精品欧美经典| 一区二区三区四区蜜桃| 欧美日韩一区二区三区四区五区| 蜜桃久久精品乱码一区二区| 国产区精品视频| 中文成人激情娱乐网| 欧美成人午夜激情| av72成人在线| 欧美亚洲综合久久| 国产精品捆绑调教| 久久精品国产综合| 欧美精品在线观看一区二区| 久久香蕉国产线看观看网| 国产日产高清欧美一区二区三区| 久久精品最新地址| 亚洲高清视频中文字幕| 久久岛国电影| 久久免费国产精品1| 亚洲伦理久久| 欧美日韩国产精品成人| 99综合视频| 一区二区不卡在线视频 午夜欧美不卡在| 久久成人免费视频| 亚洲人成艺术| 中文在线资源观看视频网站免费不卡| 亚洲国产精品小视频| 久久爱www.| 最近中文字幕日韩精品| 欧美日韩免费在线观看| 亚洲社区在线观看| 久久久av网站| 久久精品日产第一区二区| 国产精品久久久久久五月尺| 久久久www免费人成黑人精品 | 亚洲国产一区视频| 国产欧美 在线欧美| 亚洲永久在线| 欧美xart系列高清| 欧美成人国产一区二区| 欧美一二区视频| 在线免费观看一区二区三区| 欧美精品国产一区| 久久精品国产免费看久久精品 | 久久久久成人精品| 亚洲黄色高清| 美日韩精品视频免费看| 免费在线看成人av| 亚洲一区二区免费| 久久久人成影片一区二区三区观看| 免费黄网站欧美| 亚洲国产日韩在线一区模特| 久久精品视频免费| 欧美永久精品| 亚洲高清视频一区二区| 91久久综合亚洲鲁鲁五月天| 日韩视频免费在线| 午夜一区不卡| 欧美激情亚洲另类| 一本色道久久综合精品竹菊 | 午夜精品福利在线观看| 亚洲精品专区| 夜夜嗨av一区二区三区网页| 久久本道综合色狠狠五月| 久久亚洲一区二区三区四区| 欧美影院成人| 亚洲大片精品永久免费| av不卡在线| 欧美国产亚洲精品久久久8v| 韩日欧美一区| 亚洲区免费影片| 蜜臀va亚洲va欧美va天堂 | 亚洲人成网站777色婷婷| 欧美在线短视频| 国产精品美女久久久免费| 欧美日韩一区高清| 性刺激综合网| 亚洲高清自拍| 亚洲欧美福利一区二区| 欧美精品免费视频| 精品动漫3d一区二区三区免费| 午夜在线观看免费一区| 免费在线亚洲欧美| 久久青青草综合| 91久久在线播放| 久久成人这里只有精品| 国产精品人成在线观看免费| 一区二区三区久久精品| 蜜臀av性久久久久蜜臀aⅴ| 亚洲天堂偷拍| 国产偷久久久精品专区| 欧美一区二区高清| 欧美女人交a| 亚洲一区二区精品在线| 99视频在线观看一区三区| 国产视频亚洲| 久久久久久久999| 亚洲一区二区三区三| 久久久亚洲高清| av成人老司机| 欧美日韩在线视频一区| 久久九九热免费视频| 在线视频精品一区| 欧美高清影院| 在线视频精品一区| 牛牛精品成人免费视频| 亚洲在线播放| 欧美日韩国产首页| 久久久久久国产精品mv| 国产精品xxx在线观看www| 亚洲男同1069视频| 亚洲美女性视频| 欧美一级播放| 午夜亚洲激情| 在线观看欧美日韩| 亚洲日韩欧美一区二区在线| 狠狠色狠色综合曰曰| 亚洲欧美在线免费| 怡红院精品视频| 国产精品乱子乱xxxx| 91久久视频| 亚洲在线视频免费观看| 在线观看成人小视频| 亚洲欧美影院| 亚洲视频在线看| 国产精品视频yy9099| 最新亚洲电影| 一本色道久久99精品综合| 国内精品久久久久影院薰衣草| 久久久亚洲精品一区二区三区| 9l国产精品久久久久麻豆| 你懂的视频欧美| 久久夜色精品国产欧美乱极品| 欧美亚洲尤物久久| av成人免费在线| 国产视频一区二区在线观看| 免费不卡在线观看av| 蜜桃av噜噜一区| 亚洲免费视频观看|