Eclipse编辑器同步

时间:2012-03-21 17:13:22

标签: java eclipse-plugin

我正在为eclipse编写插件,它应该是2页的XML编辑器:第一个是xml编辑器(扩展TextEditor),第二个是某种构建器。想象一下我在说什么你可以采用标准的faces-config eclipse编辑器:我的第一页是“Source”页面,我的第二页就像“ManagedBean”< / em>页面。目前为了同步我在构建器页面上所做的更改,我只需从编辑器中获取文本,相应地更改它,然后将此文本放回编辑器。像这样:

    String editorText = editor.getDocumentProvider().getDocument(editor.getEditorInput()).get();
    String changedText = editorText.substring(0, editorText.lastIndexOf(smth));
    changedText += newText + editorText.substring(editorText.lastIndexOf(smth));
    editor.getDocumentProvider().getDocument(editor.getEditorInput()).set(changedText)

它有效,但看起来不是很优雅。我想只应用更改。可能吗?

编辑:现在我看到它不起作用:)我的意思是它适用于简单的情况,并且在编辑器中所有内容都或多或少都是正确的。但是如果标签以非常糟糕的方式写入(在大多数意想不到的地方都有换行符,同时仍保留xml正确性),则不会。因此,保存正确更改的唯一方法是转换整个DOM并将其写入编辑器。实际上这是我尝试的第一件事,但在这种情况下,所有自定义格式都消失了:缩进被保存,但标签内部(属性之间)的换行消失了。这个:

<myTag attr1="1"
       attr2="2">

成为这个:

<myTag attr1="1" attr2="2">

所以我真的需要知道如何只更新文档的一部分,我已经改变了部分。

1 个答案:

答案 0 :(得分:0)

奇怪的是没有人回答,因为解决方案非常简单。它是replace()文档的TextEditor方法:

editor.getDocumentProvider().getDocument(editor.getEditorInput()).replace(offset, length, newText);

唯一的问题是找到这些offsetlength,但在我的情况下,这不是问题,因为我的文档不是很复杂,简单的正则表达式可以解决问题。 :)