Eclipse 语法着色插件

Eclipse syntax coloring plugin

我需要开发一个 Eclipse 插件,它可以 "color" 在 XML 中出现与 JAVA 编辑器相同的 variable/value/tag。
我正在使用 eclipse 中的默认 XML 编辑器,目前我可以使用以下代码在 selected 的单词上放置灰色背景:

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

我的问题是,如果用户尝试 select 另一个 variable/tag/value,我无法恢复默认样式。文本在失去焦点后不会设置其自然颜色。目前,我使用硬编码的 RGB 值来设置默认颜色,但如果用户保留 Eclipse 默认主题(白色主题),它只是 "working"。

有没有办法要求文档进行完整的语法着色重新验证?

感谢阅读。

我自己找到了答案。 在这里:

在更改选区样式之前,您应该先保存当前样式。使用类似的结构:

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

然后将此结构中出现的所有 styles/offsets 放入循环语句中:

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

您现在可以应用 "highlighting"(出现的灰色背景):

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