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

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

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 简单来说,语法样式化的最终目标是在用户键入一段含有效 C/C++ 代码的适当语句时,构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本(2),创建一个作为文本一部分的 TextPresentation 对象,该过程包含四个步骤:Document 为输入键击创建一个 Documen

简单来说,语法样式化的最终目标是在用户键入一段含有效 C/C++ 代码的适当语句时,创建一个作为文本一部分的 TextPresentation 对象。该过程包含四个步骤:

Document 为输入键击创建一个 DocumentEvent。

FastPartitioner 更新 Document 的分区。

查看器提醒 PresentationReconciler,它使用 DefaultDamagerRepairer 来分析改变了的分区。

DefaultDamagerRepairer 使用规则创建用于更新文本颜色及样式的 TextPresentation。

步骤 1. SourceViewer 和 Document

在创建过程中,CSourceViewer 是 CEditor 创建的第一批对象中的一个。此对象不仅构建编辑器的 StyledText 部件,还处理其接收到的任何事件。特别是,它使用 VerifyListener 对键入作出响应。可以根据需要将 VerifyEvent 转送到其他的对象,但查看器默认会通报编辑器的 Document

正如在 第 1 部分 中提到的那样,Document 存储编辑器的信息,而 DocumentProvider 用编辑器的输入文件中的文本对其进行初始化。同样地,SourceViewer 用编辑器的文本来更新 Document。它使用 DocumentCommand 完成该任务。每一条命令保存已添加的文本及文本在 Document 中的位置。当命令执行时,它更新 Document 中的模型信息。

正如 CDT 编辑器只不过是一个有着众多额外特性的 StyledText 小部件一样,Document 本质上是一个 String(技术上称为 ITextStore)。除了文本外,它还包含了代表 String 的子部分的一系列的 Position。每一个 Position 都有一个长度及偏移量,而 TypedPosition 还有一个与之关联的名称。TypedPosition 对于本文来说尤其重要,因为它们将用于表示分区。

当执行 DocumentCommand 时,首先会更新与插入符号(垂直的光标条)相应的 Position。随后,该命令调用 Document.replace(),用以更改 Document 的 ITextStore 中的字符。此操作完成后,Document 就是最新的了,它向所有已注册的 DocumentListener 发送 DocumentEvent。

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

Tags:构建 基于 CDT

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