Eclipse语法着色插件

时间:2016-04-14 07:27:03

标签: java eclipse syntax-highlighting text-coloring

我需要开发一个可以" color"与JAVA编辑器一样,XML中的变量/值/标记也是如此。
我使用了eclipse的默认XML编辑器,目前我可以使用以下代码在所选单词上添加灰色背景:

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默认主题(白色主题)。

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

感谢阅读。

1 个答案:

答案 0 :(得分: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();