使用基于TMF的编辑器编辑的DSL的预处理/后处理

时间:2018-07-29 03:22:52

标签: xtext emf

给出:

使用Xtext解析器解析某些DSL,然后由用户在基于TMF的编辑器中进行编辑。

当用户打开文件进行编辑时,我希望首先访问刚打开的文件的分析树,以某种方式修改加载的文件内容,然后提供给用户修改的源进行编辑。

当用户希望保存文件时,我再次希望基于实际的分析树对文本表示进行预处理,并保存更改后的版本。

是否存在任何Xtext / EMF API来实现此类预处理/后处理?

目标是添加一些物理文件中未显示的内容,允许用户编辑该内容并在保存到文件之前将其删除。这些额外的内容应与DSL源文件分开存储。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则希望在文本编辑器本身中显示其他信息(而不是仅将附加信息添加到EMF模型,而不是添加文本,可以使用IDerivedStateComputer)。

如果用户不希望编辑其他文本,则“代码挖掘”功能可能会很有用:https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#code-mininghttps://blogs.itemis.com/en/code-mining-support-in-xtext

要回答问题本身

  

是否存在任何Xtext / EMF API来实现此类预处理/后处理?

不,我很确定没有这样的Xtext API用于基于它们自己的分析树的文件的前/后处理(EMF与您要更改物理内容无关)。您可以尝试弄乱XtextDocumentProvider(即创建自己的子类并在UI模块中注册),但这很可能会破坏UI,因为行号和偏移量不匹配。

实现在原始文件上执行的custom Eclipse action并基于已解析的原始文件创建临时修改后的副本,然后打开该临时文件的编辑器可能会更幸运。然后,您可以实现一个IXtextBuilderParticipant,将其保存时将结果写回到原始文件中(您必须使用org.eclipse.xtext.builder.participant扩展点进行注册)。

另一个想法不是使用Eclipse操作,而是使用MultiPageEditorPart的选项卡式编辑器,其中原始选项卡是三个选项卡之一(复合文件和“附加信息”文件是另两个选项卡)。 / p>

答案 1 :(得分:0)

  

目标是添加一些物理文件中未显示的内容,允许用户编辑该内容并在保存到文件之前将其删除。这些额外的内容应与DSL源文件分开存储。

您是否可以在类似于EMF的“属性”视图的其他视图中显示此信息?例如用户打开文件,Xtext编辑器以及“属性”视图都会打开,该视图提供了一种编辑这些“额外”信息的方法。保存任何一个视图后,都会调用Xtext保存,并且您的额外属性将在其自己的模型中序列化。