WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 2 部分:Syntax Highlight

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: getTokenLength 和 getTokenOffset 的实现是相当直接的,因为长度和偏移信息都保存在了 ANTLR 的 Token 实现中,基于 JFace Text Framework 构建全功能代码编辑器: 第 2 部分:Syntax Highlight(3),nextToken

getTokenLength 和 getTokenOffset 的实现是相当直接的,因为长度和偏移信息都保存在了 ANTLR 的 Token 实现中。nextToken 稍微有点长,因为我们需要把 ANTLR 的 Token 映射到 JTF 的 Token,所有用了一个 swtich 语句来检查了一下 Token 的类型,从而返回相应的 JTF Token。返回的 Token 已经预先定义好了,并加上了文本属性信息。setRange 可能是个不太直观的方法,这个方法有两个目的:第一是将 ITokenScanner 和 IDocument 分离开,这样一个 ITokenScanner 可以为多个 IDocument 服务;第二是提高性能,因为每次都从头把文本渲染一遍是个不太经济的做法,所以 setRange 有 offset 和 length 两个参数来控制需要渲染的范围,提高了渲染速度。

PresentationReconciler

有了 TokenScanner 之后,剩下的事情就是让 JTF 知道它。上一部分提到了 SourceViewerConfiguration,它是 JTF 和外界交互的枢纽。我已经实现了 ExprConfiguation,但是它还是空的,现在我们就要覆盖父类的 getPresentationReconciler 方法:

清单 3. 覆盖父类的 getPresentationReconciler 方法

public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) 
{ 
 PresentationReconciler reconciler = new PresentationReconciler(); 
 
 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getTokenScanner()); 
 reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); 
 reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); 
 
 return reconciler; 
} 

PresentationReconciler,顾名思义,是一个负责 Presentation 的类,这里 Presentation 指的就是文本的颜色,字体等等。文本渲染是一个不断进行的过程,因为用户可能在不断的修改文本内容。JTF 必须知道用户输入了什么,然后重新检查一下输入的内容,再刷新。所以 JTF 引入了 Damager 和 Repairer 的概念,Damager 负责计算用户的输入对哪些区域造成了破坏,Repairer 负责重新渲染被破坏的文本区域。Damager 和 Repairer 是按照文本类型来组织的,但是在我们的例子中,只有一个缺省文本类型,所以我们只为缺省类型设置了 Damager 和 Repairer。稍后我们会简单介绍一下文本类型的概念。

上一页  1 2 3 4  下一页

Tags:基于 JFace Text

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