构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本
2009-12-19 00:00:00 来源:WEB开发网在提醒其他监听程序前,Document 将其 DocumentEvent 发送给其分区程序,或在这种情况下,只发送给 FastPartitioner。分区程序使用该事件来寻找包含了已改变文本的第一行以及包含该行起点的 TypedPosition。随后,它让 FastCPartitionScanner 将文本范围转换为一些 Token。
FastCPartitionScanner 通过使用 BufferedDocumentScanner 读入 Document 的字符。然后,它使用一个状态机(即 switch 语句)来决定引入的字符是否代表分区的末端。如果是,扫描程序返回一个针对该分区的 Token,并报告其偏移量及长度。FastPartitioner 使用这个来更新 Document 的分区清单,这样,分区过程就完成了。
步骤 3. 用 DefaultDamagerRepairer 分析已改变的文本
尽管它非常重要,CSourceViewer 类中并未包含过多的代码。CSourceViewerConfiguration 提供了许多为查看器执行功能的对象。其中最重要的一个是 PresentationReconciler,该对象为每个分区创建一个 DefaultDamagerRepairer。清单 1 中的代码实现了此任务。
清单 1. 将 DefaultDamagerRepairers 添加到 PresentationReconcilerDefaultDamagerRepairer dr= new \
DefaultDamagerRepairer(getSinglelineCommentScanner());
reconciler.setDamager(dr, ICPartitions.C_SINGLE_LINE_COMMENT);
reconciler.setRepairer(dr, ICPartitions.C_SINGLE_LINE_COMMENT);
dr= new DefaultDamagerRepairer(getMultilineCommentScanner());
reconciler.setDamager(dr, ICPartitions.C_MULTILINE_COMMENT);
reconciler.setRepairer(dr, ICPartitions.C_MULTILINE_COMMENT);
dr= new DefaultDamagerRepairer(getStringScanner());
reconciler.setDamager(dr, ICPartitions.C_STRING);
reconciler.setRepairer(dr, ICPartitions.C_STRING);
dr= new DefaultDamagerRepairer(getStringScanner());
reconciler.setDamager(dr, ICPartitions.C_CHARACTER);
reconciler.setRepairer(dr, ICPartitions.C_CHARACTER);
String language = ((CSourceViewer)sourceViewer).getDisplayLanguage();
if(language.equals(CEditor.LANGUAGE_CPP)) {
scanner= getCppCodeScanner();
} else {
scanner= getCCodeScanner();
}
dr= new DefaultDamagerRepairer(scanner);
reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
- ››基于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编程设计的创建及应用
更多精彩
赞助商链接