Eclipse e4 RCP SourceViewer 语法着色

Eclipse e4 RCP SourceViewer syntax coloring

为了在 eclipse e4 RCP 应用程序中实现语法着色,我创建了一个基本的插件项目,其中包含一个包含 SourceViewer 控件的部分。

public class SyntaxColoringTest {

    /** The SourceViewer control to create the editor. */
    public SourceViewer sv = null;

    @Inject
    public SyntaxColoringTest() {
    }

    @PostConstruct
    public void postConstruct(Composite parent) {
            IVerticalRuler  verticalRuler = new VerticalRuler(10);
            OverviewRuler overviewRuler = new OverviewRuler(null, 20, null);
            sv = new SourceViewer(parent, verticalRuler, overviewRuler, true, SWT.MULTI | SWT.V_SCROLL |SWT.H_SCROLL);
            sv.configure(new TestSourceViewerConf());
    }
}

正在TestSourceViewerConf如下:

public class TestSourceViewerConf extends SourceViewerConfiguration {
    public ITokenScanner tokenScanner;
    public IRule patternRule;
    public IRule endOfLineRule;

    public TestSourceViewerConf(){
        tokenScanner = createTokenScanner();
    }
    public IPresentationReconciler getPresentationReconciler(ISourceViewer viewer) {
         PresentationReconciler reconciler= new PresentationReconciler();
         DefaultDamagerRepairer defDamagerRepairer= new DefaultDamagerRepairer(tokenScanner);
         reconciler.setDamager(defDamagerRepairer, IDocument.DEFAULT_CONTENT_TYPE);
         reconciler.setRepairer(defDamagerRepairer, IDocument.DEFAULT_CONTENT_TYPE);
         return reconciler;
    }
    private ITokenScanner createTokenScanner() {
         RuleBasedScanner scanner= new RuleBasedScanner();
         scanner.setRules(createRules());
         return scanner;
    }
    private IRule[] createRules() {
         Display display = Display.getCurrent();
         Color blue = display.getSystemColor(SWT.COLOR_BLUE);
         IToken tokenA= new Token(new TextAttribute(blue));
         IToken tokenB= new Token(new TextAttribute(blue));
         patternRule= new PatternRule("<", ">", tokenA, '\', false);
         endOfLineRule = new EndOfLineRule("++ ", tokenB);
         return new IRule[] {patternRule, endOfLineRule};
    }
}

当 运行 应用程序在“++”之后或 < > 之间键入时没有任何颜色 谢谢

这段代码适合我在我自己的一个 e4 编辑器中进行测试。

您没有显示的是源代码查看器的文档设置。如果您不设置文档,我的测试会显示您所看到的行为。将文档设置为:

IDocument doc = new Document(contents);

sv.setDocument(doc);

其中 contents 是文档的初始内容。