用RTF实现文本编辑器中对关键字的高亮显示(1)

说是高亮显示起始不太准确,其实就是一般IDE中关键字用特殊的字体(区别于正常字体)来显示
现在学校安排小学期的任务是写这么一个C源代码编辑器,要求进行关键字区别显示以及实时检错还有文本格式化的任务。感觉很像Vi。
    刚开始的时候没有头绪,察看Java的DEMO也没有太多收获,只是知道了要用JEditorPane来显示,但是Demo中并没有相关的显示内容(也许是我没看到吧)。后来突然从QQ中得到启发,应该使用RTF格式来显示不同颜色的文本,然后找了一下RTF的规格,果然可以。于是基本思路就是将一个源代码文件读入,对其中的关键字进行标记,转换为相应的RTF格式文本,之后用JEditorPane来显示(VC,Dephli中也有相应的组件来完成这一任务)。每次文本被编辑后,重新进行转换(此处正在优化,牵扯到很麻烦的问题)。
    具体如何转换呢?由RTF格式中得
    1,将源代码中的'/'符号转化为RTF中的 // ,以便显示
    2,按照要求标记关键字,注释,小括号,大括号
    3,转换其他特殊字符,包括回车符,左右大括号

步骤中的一三步很简单,没有什么值得研究的地方,无非是遍历整个字符串,转换字符,也许分成两部来做效率比较低,但是我这样做是因为考虑到在标记关键字过程中会产生很多“多余的”/符号,比如/cf1/b之类的等等,如果在标记关键字之后对代码中的/符号进行转换,要做很多判断。具体对效率的影响我没有做严格的数学论证,只是从直觉上觉得这样可能会影响,因此要在标记关键字之前对其进行转换。此外在标记的时候要对注释进行判断,注释内部的字符都不算在代码执行部分之内,因此在算法里,注释内的部分被统统略过,那么算法内部的特殊字符就没有被搜索。因此我把对特殊字符的搜索分离出来。而且为了在搜索关键字的时候减少搜索规模,因此选择了在标记关键字之后进行特殊字符转换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值