最近,我想做一个asp/PHP编辑器,我用RICHTEXTBOX,要求关键字要颜色显示,就象VB的编辑器一样,但是当代码增多是,代码彩化的速度真是太慢。
在很多软件中都有代码关键字显示,他们的执行速度非常的快,几乎接近VB6的编辑器的速度,象UltraEdit,http://www.skycn.net/soft/2248.html;彩化的速度非常的快。
恳请大家提供编程原理、资料和线索,必有重谢!!!1000分!!!
我的思路是:1,查找关键字》彩化,2,在RTF的编码中彩化,2的速度快于1,但是还不理想,故探索中

解决方案 »

  1.   

    谈谈我的想法:关键字有两种:单个的关键字和成对(组)的关键字。分开对待。
    对于单个关键字,在用户输入时进行匹配,彩化。
    对于成对(组)的关键字,要考虑的东西就多了。你可以参考一下Emacs和Edit Plus 的风格。为关键字设置信号量。比如说出现注释或字符串标识的时候,后面的字串不考虑关键字彩化。我觉得彩化要比句法分析来的简单一些吧。
    不知道是不是richtextbox 的原因呢?用户输入的情况就不考虑了,可以忽略彩化的时间。
    读入文件时,对于readline的到的每一行:1)拆分单词 2)逐单词查找关键字 3)根据关键字进行彩化。
    没做过,瞎说的。如果错了,不要见怪。
      

  2.   

    我也来罗嗦几句RTF 保存所有的格式信息 不管当前屏幕有没有显示出来我觉得
    有关于颜色、字体、粗细等格式的信息没有必要保存起来
    毕竟源程序只是那些字符序列在控件的 PAINT 事件中对其(看到的部分)进行着色等处理
      

  3.   

    to xc(xc) ,ljc_zy(彷徨) 怎样实现可视时才加亮颜色.在RTF中?谢谢!!!
      

  4.   

    这个应该用正则表达试
    给你个正则表达式使用的例子,比如要将所有“<>”括起来的标记(比如<html>)替换成{}先引用Microsoft VBScript Regular Expressions
        Dim re As New RegExp
        re.IgnoreCase = True
        re.Global = True
        re.Pattern = "<[^>]+>"
        text1.Text = re.Replace(text1.Text, "{}")类似的你可以设置Pattern然后匹配richtextbox的TextRTF,并替换成带颜色标记的rtf.所以首先你应该熟悉正则表达试,和rtf格式
      

  5.   

    判断当前内容是很麻烦的
    比如想要将<abc>和</abc>之间的格式化成红色,此时如果<abc>再第一页,当前位置再第三页,</abc>再第四页,如果只判断当前内容的话就会出现错误结果。
    还有引号内的内容要做为文本而不能当成关键字进行格式化,如果引号起始再当前页外如何处理