終于忍不住了,要為Megax加上語法加亮,我在正則還是lex上徘徊了大半年,始終沒有找到比較好的方法,一個編輯器如果支持非常嚴(yán)格的語法加亮的話,那么可配置性是相當(dāng)?shù)牟畹?。像scintilla,你必須得寫個lex針對某種特定的語言才行。當(dāng)然大多數(shù)的語言都有一些共性,比如你可以用c語言的語法文件去渲染java或者c#的。但是我不想這么做,我想要傻瓜也可以進(jìn)行配置文件的編寫,像Editplus,但是Editplus做的不夠好。
目前完成了塊狀代碼的識別,這是最關(guān)鍵的,什么是塊狀的呢,主要是下面這三種:
1.注釋(單行,多行)
2.字符串(可續(xù)行或者不可)
3.子語言
對于子語言這一塊,c++里面可以嵌入asm,html里面可以嵌入css和js,像這樣的語言,我把它定義成子語言。但是子語言不可嵌套,在Megax里面我不處理嵌套的子語言(PS:誰他媽的有病啊,這么寫)。
完成上面這些,在遇到子語言的時候,只需要切換當(dāng)前的schema就可以完成子語言的語法加亮,同時Megax定死了,最多支持4種sub language.
識別完之后,在用正則分別進(jìn)行細(xì)節(jié)匹配,比如c++里面里面的#[多個空格]include和#[無空格]include都是關(guān)鍵字,或者注釋里面含有email地址之類的。
在進(jìn)行行跳轉(zhuǎn)的時候,我們不需要識別這些,只需要識別塊狀的代碼,所以效率是非常的高,在我的機(jī)器上打開100萬行的代碼,跳轉(zhuǎn)到任意一行,均十分的流暢。
先寫這么多了,下面這張截圖暫時沒有子語言的支持,上班時間偷偷寫的啊。
另外高速自動換行基本實(shí)現(xiàn)了,效率和內(nèi)存占用讓我很滿意,基本上沒有明顯的延遲,小勝Editplus。
最近下了EMEditor的最新版本,EM做的是越來越強(qiáng)大了,基礎(chǔ)功能和架構(gòu)我覺得應(yīng)該是目前最棒的編輯器。在打開超大文件的時候,用內(nèi)存映射之后,剩下的內(nèi)存占用主要是行信息。在編輯的時候,我一直認(rèn)為內(nèi)存映射會非常的慢,看來我需要重新審視一下。思路就是這樣的,EM加載大文件的時候會啟動一個新的線程,線程的同步著實(shí)是個大問題,不是我擅長的啊。。。。
周四回國了,好高興,回去要大吃一頓,想死我了。
posted on 2008-06-23 18:17
megax 閱讀(1995)
評論(4) 編輯 收藏 引用