Eclipse插件:为不受Eclipse支持的语言创建新的文件扩展名

14
我正在为Eclipse创建一个插件,用于支持一种新的语言。我的问题与内容类型/文件关联及其相应的编辑器有关。
该语言没有Java或XML的基础,并且假设它的扩展名是“ .xyz”。
从我在网上的研究中了解到的信息,我需要使用文件扩展名“ .xyz”创建一个新的Content Type。但是,我发现网上所有的信息都涉及将新扩展名与Java关联(用于Java语法高亮显示)或创建一种XML变体的新文件类型,因此详细说明了描述符。
基本上,我对内容描述符感到困惑,我是否也要为新语言创建一个新的描述符?对于完全不相关于XML或JAVA的语言,我将给出什么基础类型?
另外,由于我将添加自己的语法突出显示,所以我需要创建自己的编辑器,还是可以在预设的editorArea(编辑器)中打开这样的文件。
我查看内容类型的包是org.eclipse.core.contenttype.contentTypes。

祝你尝试顺利,祝你好运 :-) - Peter Perháč
作为Eclipse的用户,理解这些东西已经很难了,所以我也祝你作为插件作者能够顺利弄清楚它们! - dty
谢谢,但我很难称自己为插件作者...还在学习中! - nbz
2个回答

13

我意识到我从未真正为这个问题选定一个答案,最终我找到了一些有用的信息,所以我想分享一下。

这是我理解和使用的信息;如果有任何错误或者我理解错了,我很抱歉,也欢迎任何纠正。

实际上它比我预期的要简单得多。要创建一个新的文件扩展名,你只需要扩展

org.eclipse.core.contenttype.contentTypes

如果您正在使用PDE,那么您只需要右键单击扩展名(一旦它被添加到扩展选项卡中),然后选择“新建...->内容类型”

这是它的XML代码:

<extension
         id="com.newLanguage.XYZ.contentType"
         point="org.eclipse.core.contenttype.contentTypes">
      <content-type
            file-extensions="xyz,xyzz"
            id="com.newLanguage.XYZ.contenttypeMod"
            name="XYZ File"
            priority="normal">
      </content-type>
   </extension>

在此,您可以通过定义唯一的ID、人类可读的名称和扩展来设置此内容类型的属性。您还可以为此内容类型提供多个扩展名。例如,我的XYZ语言可以具有两种扩展名:'.xyz'和'.xyzz'。

当我拥有一个通用的文件扩展名:'.xy'而文件的内容或格式可能有所区别时,内容描述器就派上用场了。因此,我需要一个描述器让编辑器能够浏览文件的内容并识别差异。这对于语法高亮非常方便,因为我需要知道区别。

由于我不是很擅长解释这个问题,这个链接对我非常有用。

但总的来说,这篇教程是让我开始和实际上让我更好地理解如何为Eclipse实现IDE插件的重要一步。我认为它是一个非常理想的起点,特别是对于新手。

另一个让我继续工作的地方是Eclipse FAQs,但我要特别指出第3.5节:实现对您自己的语言支持,其中有许多教程链接。


1
“PDE”是什么?你提到了两次,但没有解释它代表什么。 - tgharold
插件开发环境 - nbz

10

注意:这种(新的语言支持、自定义语法高亮等)功能是使用XText提供的。

Xtext - 语言开发框架

使用 Xtext,您可以轻松创建自己的编程语言和领域特定语言(DSL)。该框架支持开发语言基础设施,包括编译器和解释器,以及完整的基于 Eclipse 的 IDE 集成。

XText custom editor example

由于源代码可用,您可能会有很多线索来说明您当前正在查看的包的用法。


即使编译器和解释器已经编写好,我只需要创建IDE(确切地说是为xyz语言程序员设计的GUI),然后连接到编译器和解释器,这个方法仍然适用吗? - nbz
@nEm:我不确定:XText基于您的语言语法生成所有类,因此我不知道您是否可以将其替换为自己的类。但我的观点是:在编辑器和语法高亮方面,您可以在此XText插件中找到许多实用的实现示例。因此,即使您不直接使用它,您至少可以从中获得一些想法。 - VonC
好的,我明白了!谢谢,我会研究一下的。这绝对是一个不错的起点方向。 - nbz
VonC:我确实查看了XText,但那不是我要找的。不过,我已经记在心里,因为它似乎非常有用。 - nbz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接