【问题标题】:Eclipse syntax coloring pluginEclipse 语法着色插件
【发布时间】:2016-04-14 07:27:02
【问题描述】:

我需要开发一个 Eclipse 插件,它可以像 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 默认主题(白色主题)时它才会“工作”。

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

感谢阅读。

【问题讨论】:

    标签: java eclipse syntax-highlighting text-coloring


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多