[引用] 为 SWT 应用程序配备内容助理

2008-02-23 10:08:07来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

创建 HTML 编辑器
内容助理的概念与 JFace 文本查看器(即 org.Eclipse.jface.text.source.SourceViewer 类)的特定实现有关。整个 Eclipse 工作台中都使用了这个类的实例来实现各种编辑器。然而,SourceViewers 并不仅限用于 Eclipse 工作台,而是还使用在基于 SWT 和 JFace JAR 建立的任何应用程序中。本文将在 Eclipse 编辑器插件的环境中展示内容助理的实现,并给出关于如何通过“裸”SourceViewers 使用内容助理的技巧。

下面让我们实现一个简单的 HTML 编辑器。内容助理对 HTML 编辑可能非常有用。例如,内容助理能够生成诸如表或链接等典型的 HTML 结构,或者能够将选中的文本区域包装到样式标签中。

为节省时间,我们将使用 New Plug-in Project 向导之一来实现这个编辑器,以生成适当的编辑器插件。由于所生成的这个编辑器是 XML 编辑器,而 HTML 是基于 XML 的标记语言,我们只需进行一些次要的修改,将所生成的编辑器转换为一个 HTML 编辑器。下面就让我们开始吧。

在调用 New 向导之后,选择 Plug-in Development 和 Plug-in Project。在随后的屏幕上,输入项目名称“Sample HTML Editor”。在接下来的屏幕上,定义适当的插件 ID,比如“com.bdaum.SampleHTMLEditor”。下面的屏幕允许您选择适当的代码生成向导。请选择 Plug-in with an editor,如图 1 所示。

图 1. 带编辑器的插件

在下一个屏幕上,修改建议的插件名称(如果想这样做的话)和插件类名称,并指定一个提供者名称。其他内容保留不变。

继续到下一个屏幕,把建议的名称 Editor Class Name 修改为“HTMLEditor”,把 Editor Name 修改为“Sample HTML Editor”,把 File Extension 修改为“html, htm”,如图 2 所示。后一个条目将把新的编辑器与具有 .html 或 .htm 文件扩展名的所有文件关联起来。

图 2. 编辑器选项

单击 Finish 按钮来生成新的编辑器。现在通过 Run > Run as ... > Run-time workbench 启动一个新的工作台。在创建具有 .html 或 .htm 文件扩展名的新文件(或导入这样的文件)之后,再使用新的编辑器来打开它。

添加内容助理
正如您很快将会发现的,这个编辑器没有具备内容助理特性;按 Ctrl 空格键没有任何作用。SourceViewers 默认情况下没有配备内容助理。我们需要相应地配置这个 HTML 编辑器中使用的 SourceViewer

HTML 编辑器的 SourceViewer 的配置是通过所生成的类 XMLConfiguration 来表示的,这个类是 SourceViewerConfiguration 的子类(如果您愿意,可以将这个类重命名为 HTMLConfiguration,不过这并不是必需的)。为了向源代码查看器添加一个内容助理,我们需要重写 SourceViewerConfiguration 方法 getContentAssistant()。这最适合通过 Java 编辑器的上下文功能 Source > Override/Implement Methods...来完成,这个功能会为该方法创建一个存根(stub)。现在我们需要实现这个方法,并返回一个 IContentAssistant 类型的适当实例。

内容助理由一个或多个内容处理器组成,我们想要支持的每种内容类型分别有一个内容处理器。源代码查看器处理过的文档可以划分为具有不同内容类型的多个分区。这样的分区将由分区扫描程序确定,事实上,我们在包 com.bdaum.HTMLEditor.editors 中发现了一个类 XMLPartitionScanner。这个类为我们的文档类型 XML_DEFAULTXML_COMMENTXML_TAG 定义了三种不同的内容类型。此外,文档也可能包含 IDocument.DEFAULT_CONTENT_TYPE 类型的分区。

在新方法 getContentAssistant() 中,我们首先创建了 IContentAssistant 的默认实现的一个新实例,并给它配备了针对 XML_DEFAULTXML_TAGIDocument.DEFAULT_CONTENT_TYPE 内容类型的完全一样的内容助理处理器。由于不打算在 HTML 注释内提供辅助,因此我们没有为内容类型 XML_COMMENT 创建内容助理处理器。清单 1 显示了该代码。

清单 1. getContentAssistant


public IContentAssistant getContentAssistant(SourceViewer sourceViewer) {



   // Create content assistant

   ContentAssistant assistant = new ContentAssistant();

   

   // Create content assistant processor

   IContentAssistProcessor processor = new HtmlContentAssistProcessor();

   

   // Set this processor for each supported content type

   assistant.setContentAssistProcessor(processor, XMLPartitionScanner.XML_TAG);

   assistant.setContentAssistProcessor(processor, XMLPartitionScanner.XML_DEFAULT);

   assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);

         

   // Return the content assistant   

   return assistant;

}


			   
			   

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:在JSP网页上实现月历

下一篇:Maven的Bug???