0
我試圖在libclang的幫助下創建一個輕量級的C++編輯器。Eclipse Editor插件:Textmarker在編輯器中覆蓋樣式信息
我使用了一個新的問題標記類型來標記由clang給出的編譯器警告和錯誤以及令牌範圍進行語法着色。
正如你可以在上面的圖片看到的,誤差標記的波浪線覆蓋語法着色。是否有一個PresentationReconciler考慮到某些標記行可能還有其他樣式信息?
我添加了一些代碼片段,可能是有關解決問題: 我plugin.xml文件:
public void addMarkerToFile(IFile file, IDocument fileDocument) throws CoreException, BadLocationException{
IMarker marker = file.createMarker("cppeditor.problemmarker");
marker.setAttribute(IMarker.SEVERITY, this.severity);
marker.setAttribute(IMarker.MESSAGE, this.message);
marker.setAttribute(IMarker.LINE_NUMBER, this.line);
int startOffset = fileDocument.getLineOffset(this.line-1);
int endOffset = fileDocument.getNumberOfLines() > this.line ?
fileDocument.getLineOffset(this.line) : fileDocument.getLength()-1;
marker.setAttribute(IMarker.CHAR_START, startOffset);
marker.setAttribute(IMarker.CHAR_END, endOffset);
}
的:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.editors">
<editor
name="CXX Editor"
extensions="cpp"
icon="icons/sample.gif"
contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
class="cppeditor.editors.CppEditor"
id="cppeditor.editors.CppEditor">
</editor>
</extension>
<extension
id="cppeditor.problemmarker"
name="clang Error"
point="org.eclipse.core.resources.markers">
<super
type="org.eclipse.core.resources.problemmarker">
</super>
<super
type="org.eclipse.core.resources.textmarker">
</super>
<persistent
value="true">
</persistent>
</extension>
</plugin>
來標記添加到的IFile資源的方法PresentationRepairer的「createPresentation」方法
@Override
public void createPresentation(TextPresentation presentation, ITypedRegion region) {
CppDocument doc = (CppDocument) this.fDocument;
Token[] newTokens = doc.getTokens();
if(newTokens != oldTokens){
for(Token t : newTokens){
addRange(
presentation,
t.getStart(),
t.getEnd() - t.getStart(),
attributeMap.get(t.getKind()));
}
oldTokens = newTokens;
}
}
注:我已經在日食論壇上問過這個問題,但沒有人回答...(見here)
您可以嘗試查看Java編輯器源代碼,因爲它似乎可以執行此操作。它似乎使用'DefaultDamagerRepairer'。 –