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

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

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 在提醒其他监听程序前,Document 将其 DocumentEvent 发送给其分区程序,构建基于 CDT 的编辑器,第 2 部分: 在 CDT 中显示文本(4),或在这种情况下,只发送给 FastPartitioner,其中最重要的一个是 PresentationReconciler,该对象

在提醒其他监听程序前,Document 将其 DocumentEvent 发送给其分区程序,或在这种情况下,只发送给 FastPartitioner。分区程序使用该事件来寻找包含了已改变文本的第一行以及包含该行起点的 TypedPosition。随后,它让 FastCPartitionScanner 将文本范围转换为一些 Token。

FastCPartitionScanner 通过使用 BufferedDocumentScanner 读入 Document 的字符。然后,它使用一个状态机(即 switch 语句)来决定引入的字符是否代表分区的末端。如果是,扫描程序返回一个针对该分区的 Token,并报告其偏移量及长度。FastPartitioner 使用这个来更新 Document 的分区清单,这样,分区过程就完成了。

步骤 3. 用 DefaultDamagerRepairer 分析已改变的文本

尽管它非常重要,CSourceViewer 类中并未包含过多的代码。CSourceViewerConfiguration 提供了许多为查看器执行功能的对象。其中最重要的一个是 PresentationReconciler,该对象为每个分区创建一个 DefaultDamagerRepairer。清单 1 中的代码实现了此任务。


清单 1. 将 DefaultDamagerRepairers 添加到 PresentationReconciler
DefaultDamagerRepairer 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); 

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

Tags:构建 基于 CDT

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