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();
我需要开发一个 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();