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

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

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 可见通过这个接口,JTF 可以遍历所有的符号并且得到符号的偏移和长度信息,基于 JFace Text Framework 构建全功能代码编辑器: 第 2 部分:Syntax Highlight(2),所以实现这个接口是一个实质性的工作,但是 JTF 怎么知道如何去渲染不同的文本呢?为了解决这个问

可见通过这个接口,JTF 可以遍历所有的符号并且得到符号的偏移和长度信息。所以实现这个接口是一个实质性的工作。但是 JTF 怎么知道如何去渲染不同的文本呢?为了解决这个问题,JTF 也提供了一个 IToken 接口,并且有一个基本的实现类 Token。注意 ANTLR 里面也有 Token 这个类,两者的概念类似,只不过用法不同。JTF 的 Token 可以附带一些自定义的对象,我们可以把文本的属性,比如前景背景字体样式等等,都放到 Token 里面,这样 JTF 就知道该如何渲染文本了。这些文本属性也被 JTF 包装成了一个 TextAttribute 类,我们在构造 Token 之后的传入 TextAttribute 对象就可以了。

既然我们有了 TokenList 这样的基础类,实现 ITokenScanner 就是很简单的事了,我们看看 ExprTokenScanner 的代码:

清单 2. ExprTokenScanner 实现了 ITokenScanner

   public class ExprTokenScanner implements ITokenScanner { 
 /* 
 * JFace token type definition 
 */ 
 
private static IToken VARIABLE = new Token( 
 new TextAttribute(ColorManager.getInstance().getColor(IColorConstants.VARIABLE))); 
private static IToken INTEGER = new Token( 
 new TextAttribute(ColorManager.getInstance().getColor(IColorConstants.INTEGER))); 
private static IToken DEFAULT = new Token( 
 new TextAttribute(ColorManager.getInstance().getColor(IColorConstants.DEFAULT))); 
 
 // character offset 
 private int offset; 
 // last token returned by nextToken() 
 private CommonToken lastToken; 
 // token list 
 private TokenList tokenList; 
 
 public ExprTokenScanner() { 
 offset = 0; 
 } 
 
 public int getTokenLength() { 
 return lastToken.getStopIndex() - lastToken.getStartIndex() + 1; 
 } 
 
 public int getTokenOffset() { 
 return lastToken.getStartIndex(); 
 } 
 
 public IToken nextToken() { 
 if(lastToken == null) 
  lastToken = tokenList.getToken(offset); 
 else 
  lastToken = tokenList.getNextToken(lastToken); 
  
 if(lastToken == null) 
  return Token.UNDEFINED; 
  
 switch(lastToken.getType()) { 
  case IExprTokens.ID: 
  return VARIABLE; 
  case IExprTokens.INT: 
  return INTEGER; 
  case org.antlr.runtime.Token.EOF: 
  return Token.EOF; 
  default: 
  return DEFAULT; 
 } 
 } 
 
 public void setRange(IDocument document, int offset, int length) { 
 lastToken = null; 
 this.offset = offset; 
 tokenList = TokenManager.getTokenList(document); 
 } 
} 

上一页  1 2 3 4  下一页

Tags:基于 JFace Text

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