Синхронизация редакторов Eclipse - PullRequest
2 голосов
/ 21 марта 2012

Я пишу плагин для eclipse, который должен быть XML-редактором с 2 страницами: первая - это XML-редактор (расширяет TextEditor), а вторая - своего рода конструктор. Чтобы представить, о чем я говорю, вы можете взять стандартный faces-config редактор затмений: моя первая страница «Источник» страница, а моя вторая страница что-то вроде «ManagedBean» страница , В настоящее время для синхронизации изменений, которые я сделал на странице компоновщика, я просто беру текст из редактора, изменяю его соответствующим образом и затем возвращаю этот текст обратно в редактор. Как то так:

    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 голосов
/ 26 марта 2012

Странно, что никто не ответил, так как решение было довольно простым. Это replace() метод документа TextEditor:

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

Единственная проблема состоит в том, чтобы найти эти offset и length, но в моем случае это не проблема, поскольку мой документ не очень сложен, и простое регулярное выражение делает свое дело. :)

...