基于 JFace Text Framework 构建全功能代码编辑器: 第 5 部分:Text Decoration
2010-03-18 00:00:00 来源:WEB开发网我没有增加自定义的标注,所以这个方法并不复杂。如果你有自己的标注类型,那么可以用程序方式或者扩展方式定义自己的标注配置信息,然后调用 SourceViewerDecorationSupport 的 setAnnotationPreference 方法将你的配置添加到库中
错误检测支持
下一步再一次和 ANTLR 扯上了关系,如果没有解析器的支持,要知道源代码中的错误恐怕有点困难。幸好我们已经有了很多基础工具,但是仍然有点不够。我稍微修改了一下 ANTLR 的文法,支持把错误保存到一个 Map 中。这样解析完成后,我就可以直接从解析器得到错误列表了。同时 SharedParser 做了少许增强,以便得到最近一次解析时的错误信息。这些修改就不一一列出了,总之我现在具有了得到错误位置与错误信息的能力。
扩展 Annotation
下一步是扩展 Annotation 类,因为 Annotation 类并没有实现 IAnnotationPresentation。我想让错误也在标尺上显示出来,所以要扩展 Annotation。我定义了 ExprAnnotation,它的代码的核心是 paint 方法,作用是在标尺上画一个背景,然后再画一个错误图标。至于画图的具体细节没有必要关心,熟悉 SWT 的 GC 使用方式的话应该不是问题,这里我就略过不提了。
Ruler 支持
提示:注意我们的布局代码也发生了变化,原来是 viewer.getTextWidget().setLayoutData(…), 现在是 viewer.getControl().setLayoutData(…)。因为安装了标尺之后,viewer 内部会对布局做了一些调整,这个时候 StyledText 不再是顶层控件,所以要使用 getControl。如果不了解的话,界面的布局会出乎意料,恐怕一时半会也不知道问题从何而来。
现在的编辑器还没有一个标尺,所以稍微修改一下 JTFDialog,传给 ExprViewer 的构造函数一个 VerticalRuler 实例即可。
更多精彩
赞助商链接