构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本
2009-12-19 00:00:00 来源:WEB开发网在 CDT 中,注释分区是由 CCommentScanner 和字符来扫描的,而 String 分区则是由 SingleTokenCScanner 扫描的。默认的分区(包含了另一个分区所没有的文本)既可以由 CppCodeScanner 来扫描,也可以由 CCodeScanner 来扫描,这取决于代码的语言。它们每个都是 RuleBasedScanner 的子类,每个都使用 IRule 的 List 来创建与文本中检测到的模式相对应的 Token。
这些 IRule 都相当重要,Eclipse 文本编辑器 API 提供了五种实现类:
WordRule当找到特定的词时,返回一个 Token。SingleLineRule当在单行文本中找到一个表达式时,返回一个 Token。MultiLineRule当在多行文本中找到一个表达式时,返回一个 Token。NumberRule为文本中的每一个数值返回一个 Token。WhitespaceRule当检测到空格时,返回一个 Token。
为了解释扫描程序如何使用这些规则,清单 2 展示了 CCodeScanner 创建用于检测 String 及数字的规则的一段代码。当文本的一部分同规则模式相匹配时,扫描程序返回相应的 Token。
清单 2. 向 RuleBasedScanner 添加规则Token token= getToken(ICColorConstants.C_STRING);
rules.add(new SingleLineRule("'", "'", token, '\\'));
token = getToken(ICColorConstants.C_NUMBER);
NumberRule numberRule = new NumberRule(token);
rules.add(numberRule);
这些 Token 包含 String,正如由分区扫描程序返回的 String 一样。然而,这些 String 代表 TextAttribute,而不是分区名称。TextAttribute 描述了文本的给定部分是如何表示的。也就是说,它描述了文本的背景色、前景色及一个代表其样式(SWT.BOLD、SWT.ITALIC 或 SWT.NORMAL)的整数。例如,CCodeScanner 使用 WordRule 来检测文本中的 C/C++ 关键字。当 WordRule 检测到关键字时,其 Token 的内容告知编辑器该关键字应该如何显示。
- ››基于IP地址的vsftp服务器
- ››构建Windows 8风格应用23-App Bar概述及使用规范
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››构建域名服务器(DNS)
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››构建Android平台Google Map应用
- ››基于Windows Azure的云计算应用设计
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
更多精彩
赞助商链接