基于 JFace Text Framework 构建全功能代码编辑器: 第 6 部分:Text Hover 和 Annotation Hover
2010-03-18 00:00:00 来源:WEB开发网Text Hover
Text Hover(文本悬浮)可以让用户快速的得到某种信息,而不用打开相对缓慢的 Eclipse 帮助系统。Eclipse 的 Java 编辑器使用了文本悬浮来显示 Javadoc 帮助,极大的方便了程序员。从功能上看,文本悬浮可以认为是一种增强型的 Tooltip,因为它支持显示更多的内容,并且可以显示成各种样子。
文本悬浮看起来很酷,但是原理却很简单。基本上就是三个步骤:
根据鼠标位置得到字符偏移
根据字符偏移得到字符所在单词和上下文信息
根据这个单词以及上下文信息显示相关帮助
最关键的事情在于得到字符所在的单词并得到上下文信息,这样才能决定该显示什么样的帮助信息。所以这就又回到了词法解析器和语法解析器的领域了,只好略过不提。不过经过了这么多次的强调之后,希望你对词法解析器和语法解析器的重要性有了深切的体会。它们是代码编辑器里最重要的基石。
第一步不用我们操心,StyledText 已经提供了这样的能力。我们要处理的是第二和第三步。对于文本悬浮,相关的接口是 ITextHover;对于标注悬浮,相关的接口是 IAnnotationHover。
ITextHover
接下来我打算实现用文本悬浮显示变量值的功能,比如对下面的代码:
清单1. 示例语言
pa = 4;
b = 4;
a = b + 4;
如果你把鼠标移到 a 上,则会显示“8”,如果移到b上,则会显示“4”,是不是很酷呢?
修改解析器
这样的功能没有解析器的支持可不好做,所以我又修改了 Expr.g 文件,使解析器能够保存所有已经声明的变量和它们的值。SharedParser 也做了一定的修改,提供了一个 getVariableValue 方法来根据变量名得到值。用 ANTLR 完成这些事情确实很简单,我就不一一列出代码了。
更多精彩
赞助商链接