2016-04-14 3 views
1

Мне нужно разработать плагин Eclipse, который может «раскрасить» то же самое появление переменной/значения/тега в XML, что и редактор JAVA.
Я использую редактор по умолчанию XML из затмений, и я в настоящее время в состоянии поставить серый фон на выбранных слов с помощью следующего кода:Плагин раскраски синтаксиса Eclipse

for (Point p : offsets){ 
     TextPresentation t = new TextPresentation(); 

     t.replaceStyleRange(new StyleRange((int)p.getX(), 
       (int)(p.getY() - p.getX()), 
       null, 
       Color.win32_new(null, 0xDDDDDD))); 

     fText.changeTextPresentation(t, true); 
    } 

Моя проблема заключается в том, что я не могу восстановить стиль по умолчанию если пользователь пытается выбрать другую переменную/тег/значение. Текст не устанавливает естественную окраску после потери фокуса. На данный момент я использую жестко закодированные значения RGB для установки цветов по умолчанию, НО это только «работает», если пользователь сохранил тему Eclipse по умолчанию (белая тема).

Есть ли способ запросить документ для полной повторной проверки цвета синтаксиса?

Спасибо за чтение.

ответ

0

Я нашел ответ самостоятельно. Вот он:

Прежде чем изменять стиль выделения, вы должны сначала сохранить текущий стиль. Используйте аналогичную структуру:

private ArrayList<Point> offsets = new ArrayList<Point>(); 
private ArrayList<Color> foregroundgColor = new ArrayList<Color>(); 

Затем вы кладете все стили/смещения на вхождениях в этой структуре, в операторе цикла:

offsets.add(new Point(i,j));  
fgColor.add(fText.getTextWidget().getStyleRangeAtOffset(i).foreground); 

Теперь вы можете применить «подсветку» (серый фон на вхождениях):

for (Point p : offsets){ 
     TextPresentation t = new TextPresentation(); 

     t.replaceStyleRange(new StyleRange((int)p.getX(), 
       (int)(p.getY() - p.getX()), 
       null, 
       Color.win32_new(null, 0xDDDDDD))); 

     fText.changeTextPresentation(t, true); 
    } 

Наконец, когда выбранные вхождения теряют фокус, вы восстанавливаете стили по умолчанию:

for (int i = 0; i < offsets.size(); i++){ 

      Point p = offsets.get(i); 

      TextPresentation t = new TextPresentation(); 
      t.replaceStyleRange(new StyleRange((int)p.getX(), 
               (int)(p.getY() - p.getX()), 
               fgColor.get(i), 
               null)); 
      fText.changeTextPresentation(t, true); 
     } 

    offsets.clear(); 
    fgColor.clear(); 
Смежные вопросы