- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想扩展 gnu c 的 CDT 语言插件,以此为基础创建某种新语言。
新语言在编辑器中应该有不同的视觉外观。如果前面有一个特殊的预处理器指令(如注释),我想将方法体涂成灰色。
有人知道在哪里可以扩展 GCC 语言来进行这样的修改吗?
编辑1:
例如,我希望 specialFunction 的方法体颜色为灰色,作为示例注释的原因 -> #annotation
#annotation
int specialFunction(){
return 1;
}
编辑2:
到目前为止,我尝试的是构建一种“扩展语言”。计划是突出显示预处理器位置并保存该位置,以便为下面的方法着色。我设法让预处理器关键字上色,但不知道如何处理方法体颜色。
public class OwnKeyWords extends GCCLanguage implements ICLanguageKeywords
@Override
public String[] getPreprocessorKeywords() {
//System.out.println("Called keywords" + timesPre++);
return new String[]{
"hide",
"show"
};
}
着色示例:
#hide
int specialFunction(){
return 1;
}
在上面的示例中,“隐藏”将突出显示。
编辑3:
我尝试实现 ISemanticHighlighter 并尝试了几种方法来突出显示我的代码:
CVariable
CFunction
ObjectStyleMacro
...
但它们都不适合用预处理器指令或顶部的任何其他内容突出显示方法体。
还有 ISemanticHighlighter 中的注释:
* NOTE: Implementors are not allowed to keep a reference on the token or on any object retrieved from the
* token.
不是我想要实现的,因为我想保留对高亮对象的引用,以便以后操作。
也许 org.eclipse.cdt.ui.text.folding.DefaultCFoldingStructureProvider 也是一个选项,在那里我无法为仪器着色,我可以隐藏它。
最佳答案
这听起来不像是语义突出显示的新语言。
CDT 有一个很棒的扩展点,称为 org.eclipse.cdt.ui.semanticHighlighting
,它允许您定义自定义语义突出显示规则。
这是 plugin.xml 条目的示例:
<extension
point="org.eclipse.cdt.ui.semanticHighlighting">
<semanticHighlighting
class="com.example.SemanticHighlighter"
defaultBold="true"
defaultEnabled="true"
defaultTextColor="35,0,35"
displayName="Example Semantic Highlighter"
id="com.example.SemanticHighlighter"
preferenceKey="com.example.SemanticHighlighter.pref"
priority="5">
</semanticHighlighting>
</extension>
然后在您的 com.example.SemanticHighlighter
中实现 org.eclipse.cdt.ui.text.ISemanticHighlighter
接口(interface)。只有一种方法 consumes
需要一个 ISemanticToken
。分析标记以查看它是否与您的荧光笔相关并返回 true 以使其突出显示。
下面是该方法的简单实现:
@Override
public boolean consumes(ISemanticToken token) {
IBinding binding = token.getBinding();
if (binding instanceof IFunction) {
IASTNode node = token.getNode();
if (binding != null && node instanceof IASTName && ((IASTName) node).isReference()) {
String n = binding.getName();
if ("MySpecialFunction".equals(n)) {
return true;
}
}
}
return false;
}
实现后,用户可以通过偏好页面C/C++
- Editor
- Syntax Coloring
修改颜色和适用性:
关于java - Eclipse CDT 扩展以构建附加语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424094/
我是一名优秀的程序员,十分优秀!