构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本
2009-12-19 00:00:00 来源:WEB开发网简单来说,语法样式化的最终目标是在用户键入一段含有效 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。
- ››基于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编程设计的创建及应用
更多精彩
赞助商链接