libclangの助けを借りて軽量のC++エディタを作成しようとしています。Eclipse Editor Plugin:Textmarkerがエディタでスタイル情報を上書きします
新しいproblemmarkerタイプを使用して、コンパイラの警告とclangで指定されたエラーをマークし、トークンの範囲で構文カラーリングを行います。
あなたは上の写真で見ることができるように、エラーマーカーの波線は、構文の色付けを上書きします。いくつかのマークされた行にまだ他のスタイル情報がある可能性があることを考慮したPresentationReconcilerはありますか?
私はこの問題を解決するために、関連するかもしれないいくつかのコードスニペットを追加しました: 私のplugin.xmlファイル:
<?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リソースにマーカーを追加する方法:
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);
}
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;
}
}
注:私はすでにEclipseフォーラムでこの質問をしましたが、誰もそれに答えませんでした...(here)
これを行うことができるように思われるので、Javaエディタのソースを調べることができます。 'DefaultDamagerRepairer'を使うようです。 –