Подсветка синтаксиса Eclipse e4 RCP SourceViewer

Чтобы реализовать раскраску синтаксиса в приложении eclipse e4 RCP, я создал базовый проект плагина с Part, включающим элемент управления 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};
    }
}

При запуске приложения ничего не окрашивается при наборе после "++ " или между < >Спасибо

1 ответ

Решение

Этот код работает для меня, тестирующего в одном из моих собственных редакторов e4.

То, что вы не показали, - это какая-либо настройка документа для средства просмотра исходного кода. Если вы не установите документ, мой тест показывает поведение, которое вы видите. Установите документ с помощью:

IDocument doc = new Document(contents);

sv.setDocument(doc);

где contents является исходным содержанием документа.

Другие вопросы по тегам