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

Template

Template(模版)可以用来快速添加某种固定形式的代码,中间还可以插入参数。对于 Java 编辑器来说,你可以在 Eclipse 的设置中找到相应的属性页,路径是 General->Java->Editor->Templates。这个属性页是Eclipse标准的模版属性页,因为它做的比较完善,所以一般不需要自己写一个。

仔细探索一下这个属性页,尝试编辑一下模版,你可能会发现很多不了解的概念,下面我会一一解释

模版属性

模版包含一些基本属性:

Name(名称):这个模版的名字,必须唯一

Context(上下文):上下文是指这个模版可以在什么位置或者什么情况下出现,它相当于对模版做了一个粗略的分类。这个属性可以方便你在某些时候隐藏掉不需要显示的模版。

Description(描述):一段详细介绍模版功能的文字,还记得内容提示的时候可以通过 IInformationControl 显示一些帮助信息吗?这个属性很适合显示在那里。

Auto Insert(自动插入):当用户的输入只可能定位到一个模版的时候,是否自动把这个模版插入到编辑器中。不然还是提示用户选择一个模版插入,即使只有一个模版。

模版的定义

模版可以通过扩展的方式定义,扩展点是 org.eclipse.ui.editors.templates,也可以通过属性页手动添加,也可以通过程序方式添加。通过扩展点添加的模版,可以认为是“静态模版”,即缺省就存在的,后面两种方式则更灵活一些,但是稍微麻烦一点。

模版的存储

模版是需要持久化的,它最终会被存放到一个XML文件里面。我们并不需要知道这个 XML 文件在哪里,格式是什么,这些事情被 TemplateStore 封装了,我们直接用它就行。在装载的模版的过程中,既要装载通过扩展点定义的模版,又要装载用户手动添加的模版,TemplateStore 只能装载通过扩展点定义的模版,所以一般是使用 TemplateStore 的子类 ContributionTemplateStore,它提供了装载用户自定义模版的能力。

模版参数

模版中可以嵌入参数,即我们看到的 ${arg} 的形式。JTF 缺省定义了一些参数,程序员也可以自己定义参数。参数大致可以分为两种:自动解析式和输入式。自动解析的参数有 time,date 等等,这类参数在插入模版到编辑器的时候,会自动替换成相应的时间,日期等等。输入式的参数则相当于一个占位符,用户通过键盘输入替换掉参数内容。后面的例子中不会演示自定义参数,有兴趣的读者可以看看 TemplateVariable,GlobalTemplateVariables和 TemplateVariableResolver 这些类。

实现模版功能

下面我来实现模版功能,然后能让模版在内容提示中出现。

时间: 2024-10-31 11:04:00

基于JFace Text Framework构建全功能代码编辑器: 第9部分的相关文章

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

引言 JFace Text Framework(JFace 文本框架,后面直接简称为 JTF)是 Eclipse 中重要的框架,是其它开发工具的基石之一,比如 JDT (Java Development Tool) 中的 Java 源代码编辑器就是基于它开发的.相信用过 JDT 的人都会对它的源代码编辑器有深刻印象,因为它的很多功能可以让我们很方便的编辑 Java 源代码,比如语法高亮和内容提示等等.所有这些功能都是在 JTF 架的基础上实现的,所以学会使用这个框架对于开发某种语言的编辑工具是至

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

Text Hover和Annotation Hover Text Hover Text Hover(文本悬浮)可以让用户快速的得到某种信息,而不用打开相对缓慢的 Eclipse 帮助系统.Eclipse 的 Java 编辑器使用了文本悬浮来显示 Javadoc 帮助,极大的方便了程序员.从功能上看,文本悬浮可以认为是一种增强型的 Tooltip,因为它支持显示更多的内容,并且可以显示成各种样子. 文本悬浮看起来很酷,但是原理却很简单.基本上就是三个步骤: 根据鼠标位置得到字符偏移 根据字符偏移得

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

Text Decoration Text Decoration 对于代码编辑器来说,Text Decoration(文本装饰)是一个必需的功能.我们先来看看 Java 编辑器中对文本装饰的应用: 图1. Java 编辑器中的文本装饰 可以看到 Java 编辑器会把错误的部分用一个红色的波浪线标记出来,还可以看到对于模版来说,模版参数周围有一个小矩形,而且在左边还有相应的错误图标显示.这些都叫做文本装饰. 提示:模版会在以后的文章中进行介绍 我们在编辑代码的时候,出错是不可避免的,因此有了文本装饰

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

Content Assistant Content Assistant Content Assistant(内容提示)可以帮助程序员快速的完成代码,并且还有代码自动补全的附加功能.这对于一个代码编辑器来说是至关重要的,也是不少人喜欢用 IDE 编写代码的原因之一.但是这个功能背后却不是那么简单的,我们先来了解一下 JTF 中和 Content Assistant 相关的概念,下面是 Eclipse 中 Java 编辑器的内容提示的样子: 图1. Java 编辑器的内容提示 先来介绍一下图 1 中

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

Text Formatting Text Formatting(文本格式化)可以快速的将源代码按照预定的规则排版,JTF 只是定义了这个框架,将其发挥到极致的是 JDT.打开 Eclipse 的设置页,找到 General->Java->Code Style->Formatter,你会发现在这里可以编辑名目繁多的格式化选项.JDT 提供的代码格式化功能强大的令人眩目,但本文的目的是介绍这个强大功能下的基础设施. IFormattingStrategy IFormattingStrateg

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

Hyperlink Hyperlink(超链接)在 Java 编辑器中用来进行快速的代码定位,当你按住 Ctrl 键并把鼠标指向一个函数名的时候,函数名会显示为超链接,点击之后代码会跳转到函数的声明处.这个功能使得 Eclipse 浏览代码很方便,这次我就来介绍如何在自己的编辑器中添加超链接功能. 超链接的定位 编辑器不会知道哪块区域应该显示为超链接,这是通过 IHyperlinkDetector 接口实现的.这里牵涉到语义方面的内容,因为你必须要能知道鼠标下面到底是个什么.在解析器那一层需要实

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

Quick Assistant Quick Assistant(快速帮助)的基本用途是为源代码中的错误提供一些快速的解决方案.快速的意思是指这个方案足够简单或者足够模式化,可以由程序帮你自动完成.当然快速帮助是无法解决深层次的问题的,不过一般我们在编写代码的时候,犯的最多的都是一些小错误,所以快速帮助是个非常有用的功能. 在 Java 编辑器中,快速帮助看上去就是下图的样子: 图1. Java 编辑器中的快速帮助 可见,不管是从名字上,还是界面上,快速帮助都非常类似我提过的 Content As

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

Text Folding Text Folding(文本折叠)其实在 Eclipse 2.1 的时候就已经出现了苗头,在 Eclipse 3.0 之后,文本折叠的架构被重新设计了,开始逐渐变的实用.我们先来了解一下JTF为了文本折叠做了哪些工作. ProjectionViewer SourceViewer 本身不支持文本折叠,所以 JTF 添加了一个 ProjectionViewer 专门支持文本折叠,它是 SourceViewer 的子类. 主从文档结构 JTF 是不可能神奇的知道哪些文本是可

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

Syntax Highlight Syntax Highlight(语法高亮)是指把文本的不同内容用不同的颜色,字体等渲染,通过这种方式,用户可以快速发现某种内容,可以在短时间内对全文的结构有一个大概的了解.本文探讨如何在 JTF 中实现语法高亮. 前提 语法高亮是把一段文本中的不同内容使用不同的样式来渲染的功能,如下图所示: 图1. Java编辑器的语法高亮 图 1 中的 Java 源代码的不同部分被 Java 编辑器渲染成了不同颜色.比如关键字是偏红的,并且是粗体:变量是蓝色,注释是绿色等等