【问题标题】:Pre-/postprocessing of DSL edited with TMF-based editor使用基于 TMF 的编辑器编辑的 DSL 的前/后处理
【发布时间】:2018-09-04 00:50:46
【问题描述】:

给定:

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

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

当用户希望保存文件时,我再次想根据实际的解析树预处理文本表示并保存更改后的版本。

是否有任何 Xtext/EMF API 来实现这种预处理/后处理?

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

【问题讨论】:

    标签: xtext emf


    【解决方案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 的选项卡式编辑器,将原始选项卡作为三个选项卡之一(复合文件和“附加信息”文件是另外两个)。

    【讨论】:

    • 用户应该可以像普通文本一样编辑附加文本。 “代码挖掘”看起来很有趣,但不幸的是,它们不可编辑。
    【解决方案2】:

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

    您不能在类似于 EMF 的“属性”视图的另一个视图中显示此信息吗?例如用户打开文件,Xtext 编辑器打开以及“属性”视图,它提供了一种编辑这些“额外”信息的方法。保存任一视图时,都会调用 Xtext 保存,并且您的额外属性会在它们自己的模型中序列化。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2013-09-24
      • 2013-02-08
      • 2017-08-29
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多