先鼓勵一下園子里面的一位兄弟,這個是他自己些的東西
http://surfsky.cnblogs.com/archive/2005/12/12/295814.html
他也說現在他也不用這個東西了,AnyWay,鼓勵一下!
舉幾個說說事,以后慢慢的補上。
ICSharpCode.TextEditor
這個東西是作為著名的開發工具SharpDevelop的一個開發組件存在,就是其中的代碼編輯器,功能自是不必說,強大。
而且,開源!
語法文件集成到編譯包中,目前支持的不是很多,XML配置,很簡單,語法高亮可以使用程序設置,目前是我首選。
Essential Studio
Syncfusion公司出品的套件中包含了一個Editor,支持所有的編輯器的功能。你想要的都有了,呵呵,語法文件內置,也可以引入,非常不錯,功能介紹自己上主站去看吧。
這個東西的問題一是版權,而是中文支持比較菜,我嘗試修改了一下代碼,但是還是存在光標定位的問題,代碼太復雜了,跟蹤了很久,也就放棄了。
Scintilla
http://scintilla.sourceforge.net/index.html
老牌的C下面的編輯器了,最大的優點就是跨平台的實現,有個仁兄封裝了一個DotNet的包,所以才會在這里出現,呵呵,開源,但是看不懂,復雜啊復雜。
可能是考慮太多的平台移植性,這個東西的界面有些~~~嗯,丑陋。至少比起它的其他兄弟姐妹來說,它的界面就顯得很老土了。
語法加亮是沒有問題的,積累了這么多的經驗,怎么也能划拉啦。配置文件使用unix的配置信息文件,顯得有些落伍,但是就本身而言,配置文件也就是這樣了,XML最多也就是多一個層次而已,呵呵,沒什么可以值得炫耀的。
代碼折疊就有些哪樣了,至少我看不慣,很像JBuilder的代碼折疊,TM折疊了一半。而且前面的那個圖標也有點那個啥,呵呵。
無中文問題,很順利,也很意外,至少和其他的幾個比起來,這點做的不錯。速度非常快,要說是C的?太違心了,還是代碼寫得好啊。
結論:我肯定是不用的。
FireEdit
http://sourceforge.net/projects/dotnetfireball
實話說,就一個編輯器,附加那么多DLL,有些不合算,呵呵。
語法文件內置,編譯的時候已經提供了大量的語法文件,是全部編輯器里面內置最多的一個編輯器。可以使用DLL文件對語法進行擴充。提供設置界面對語法高亮進行設置,只是界面不咋滴,呵呵,過於簡單了一些。提供傳說中的無限級別的redo功能,這個功能的確是編輯器不可或缺的。提供find和replace 功能。中文支持不是差勁的問題,是非常非常差勁。一旦輸入中文就會出現光標位置不對,@_@.
代碼折疊存在問題,沒有辦法折疊注釋塊。正常的代碼折疊,我測試了一下C#和Java沒有問題,但是XML折疊存在問題,只能折疊CDATA,有點不可思議。
折疊的方式比較漂亮,和VS的風格一致
有意思的是,這個編輯器組件對在注釋中的東東也進行了語法高亮、括號匹配,不知道是錯誤還是就是如此,哈哈。
致命傷:輸入中文的時候出現錯誤,例如你輸入"測試",在編輯器里面會出現"測試測試",任何中文字符都是如此,如果使用Copy則不會出現這樣的問題。在輸入中文的時候redo也存在問題,原本輸入兩個漢字變成4個漢字,但是redo的時候卻需要redo 4次,:)。有興趣的同學可以直接打開源代碼,參考后面我提供的那個Essential Studio修改一下,呵呵,我老早之前看過它的源代碼,現在已經忘記了是那個類了。
結論:我不會用,因為我要輸入中文。
Appendix
Syncfusion Editor組件支持中文
StreamEditControl.cs
函數protected void TextInsertInternal( int iLine, int iColumn, string str, bool update, bool bUseTabStops )
修改
if (m_wrapper.Encoding.GetMaxByteCount(1) == 1 && Encoding.Default.GetByteCount(str) > str.Length &&
m_wrapper.Encoding.GetString( m_wrapper.Encoding.GetBytes( str ) ) != str)
{
ChangeEncoding( Encoding.Default );//強制轉換成default的編碼方式
}
protected override void OnKeyPress( KeyPressEventArgs e )
if( !e.Handled )
{
ProcessAutoReplace( e.KeyChar );
InsertChar( e.KeyChar );
ProcessIntellisenseKey( e );
e.Handled = true;//增加本行,如果不增加則輸入中文的時候會重復輸入一次,寒
}
RegexTokenizer.cs
構造函數
public RegexTokenizer(Stream input)
{ m_reader = new StreamReader(input, Encoding.Default, true); //這里最重要,否則什么都是白搭
修改之后沒解決的問題
光標移動的時候會出現錯位
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/skyremember/archive/2008/10/21/3119483.aspx