WEB开发网
开发学院软件开发Java 构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示... 阅读

构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 在 CDT 中,注释分区是由 CCommentScanner 和字符来扫描的,构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本(6),而 String 分区则是由 SingleTokenCScanner 扫描的,默认的分区(包含了另一个分区所没有的文本)既可以由 CppCode

在 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 的内容告知编辑器该关键字应该如何显示。

上一页  1 2 3 4 5 6 7  下一页

Tags:构建 基于 CDT

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接