2016-04-14 89 views
1

我需要開發一個Eclipse插件,它能像JAVA編輯器那樣在XML中「變色」變量/值/標籤的相同位置。
我使用Eclipse中的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); 
    } 

最後,當選擇OCCURENCES失去焦點,您恢復默認樣式:

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();