让Fireball CodeEditor控件支持中文
Fireball.CodeEditor是個(gè)很強(qiáng)大的編輯器。實(shí)話說(shuō),就一個(gè)編輯器,附加那么多DLL,有些不合算,呵呵。
語(yǔ)法文件內(nèi)置,編譯的時(shí)候已經(jīng)提供了大量的語(yǔ)法文件,是全部編輯器里面內(nèi)置最多的一個(gè)編輯器??梢允褂肈LL文件對(duì)語(yǔ)法進(jìn)行擴(kuò)充。提供設(shè)置界面對(duì)語(yǔ)法高亮進(jìn)行設(shè)置,只是界面不咋滴,呵呵,過(guò)于簡(jiǎn)單了一些。提供傳說(shuō)中的無(wú)限級(jí)別的redo功能,這個(gè)功能的確是編輯器不可或缺的。提供find和 replace功能。中文支持不是差勁的問(wèn)題,是非常非常差勁。一旦輸入中文就會(huì)出現(xiàn)光標(biāo)位置不對(duì),@_@.
代碼折疊存在問(wèn)題,沒(méi)有辦法折疊注釋塊。正常的代碼折疊,我測(cè)試了一下C#和Java沒(méi)有問(wèn)題,但是XML折疊存在問(wèn)題,只能折疊CDATA,有點(diǎn)不可思議。
折疊的方式比較漂亮,和VS的風(fēng)格一致
有意思的是,這個(gè)編輯器組件對(duì)在注釋中的東東也進(jìn)行了語(yǔ)法高亮、括號(hào)匹配,不知道是錯(cuò)誤還是就是如此,哈哈。
致命傷:輸入中文的時(shí)候出現(xiàn)錯(cuò)誤,例如你輸入"測(cè)試",在編輯器里面會(huì)出現(xiàn)"測(cè)試測(cè)試",任何中文字符都是如此,如果使用Copy則不會(huì)出現(xiàn)這樣的問(wèn)題。在輸入中文的時(shí)候redo也存在問(wèn)題,原本輸入兩個(gè)漢字變成4個(gè)漢字,但是redo的時(shí)候卻需要redo 4次。打開中文文件時(shí)大多會(huì)出現(xiàn)亂碼。:)。
//解決重復(fù)輸入問(wèn)題: //CodeEditor\Editors\EditView\EditViewControl.cs protected override void OnKeyPress(KeyPressEventArgs e) {base.OnKeyPress(e);if (!e.Handled && !_KeyDownHandled && e.KeyChar != (char)127){if (((int)e.KeyChar) < 32)return;if (!this.ReadOnly){switch ((Keys)(int)e.KeyChar){default:{InsertText(e.KeyChar.ToString());if (this.Indent == IndentStyle.Scope || this.Indent == IndentStyle.Smart){if (Caret.CurrentRow.ShouldOutdent){OutdentEndRow();}}//增加本行,如果不增加則輸入中文的時(shí)候會(huì)重復(fù)輸入一次,寒 e.Handled = true;break;}}}}if (AutoListVisible && !e.Handled && _CodeEditor.AutoListAutoSelect){string s = Caret.CurrentRow.Text;//try //{ if (Caret.Position.X - AutoListStartPos.X >= 0){s = s.Substring(AutoListStartPos.X, Caret.Position.X - AutoListStartPos.X);AutoList.SelectItem(s);}//} //catch //{ //} } } /************************************************************/ //解決打開文件出現(xiàn)亂碼的問(wèn)題: //CodeEditor\Editors\CodeEditorControl.cs public void Open(string filename) {if (this.Document == null)throw new NullReferenceException("CodeEditorControl.Document");//添加System.Text.Encoding.Default,否則中文顯示為亂碼StreamReader swr = new StreamReader(filename, System.Text.Encoding.Default);this.Document.Text = swr.ReadToEnd();swr.Close();SetFileName(filename);this.Saved = true; }轉(zhuǎn)載于:https://www.cnblogs.com/flying19880517/archive/2009/05/29/MakeFireballCodeEditorSupportChinese.html
總結(jié)
以上是生活随笔為你收集整理的让Fireball CodeEditor控件支持中文的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QWERT切换到DVORAK
- 下一篇: 计算机教师考核方案,教师校园网使用考核方