1 package org.simantics.scl.ui.editor;
3 import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;
4 import org.eclipse.jface.text.IAutoEditStrategy;
5 import org.eclipse.jface.text.IDocument;
6 import org.eclipse.jface.text.TextAttribute;
7 import org.eclipse.jface.text.presentation.IPresentationReconciler;
8 import org.eclipse.jface.text.presentation.PresentationReconciler;
9 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
10 import org.eclipse.jface.text.rules.IRule;
11 import org.eclipse.jface.text.rules.ITokenScanner;
12 import org.eclipse.jface.text.rules.IWhitespaceDetector;
13 import org.eclipse.jface.text.rules.IWordDetector;
14 import org.eclipse.jface.text.rules.RuleBasedScanner;
15 import org.eclipse.jface.text.rules.Token;
16 import org.eclipse.jface.text.rules.WhitespaceRule;
17 import org.eclipse.jface.text.rules.WordRule;
18 import org.eclipse.jface.text.source.ISourceViewer;
19 import org.eclipse.jface.text.source.SourceViewerConfiguration;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.graphics.RGB;
22 import org.simantics.scl.ui.info.SCLInfo;
24 public class SCLSourceViewerConfiguration extends SourceViewerConfiguration {
26 ColorManager colorManager;
28 public SCLSourceViewerConfiguration(ColorManager colorManager) {
29 this.colorManager = colorManager;
32 public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
33 PresentationReconciler reconciler = new PresentationReconciler();
34 reconciler.setDocumentPartitioning(SCLDocumentSetup.SCL_PARTIONING);
37 final Token string = new Token(new TextAttribute(colorManager.get(new RGB(42, 0, 255))));
38 RuleBasedScanner scanner = new RuleBasedScanner();
39 scanner.setDefaultReturnToken(string);
40 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
41 reconciler.setRepairer(dr, SCLDocumentSetup.STRING);
42 reconciler.setDamager(dr, SCLDocumentSetup.STRING);
46 Token comment = new Token(new TextAttribute(colorManager.get(new RGB(63, 127, 95))));
47 RuleBasedScanner scanner = new RuleBasedScanner();
48 scanner.setDefaultReturnToken(comment);
49 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
50 reconciler.setRepairer(dr, SCLDocumentSetup.COMMENT);
51 reconciler.setDamager(dr, SCLDocumentSetup.COMMENT);
55 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());
56 reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
57 reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
63 private ITokenScanner getSclTokenScanner() {
64 RuleBasedScanner scanner = new RuleBasedScanner();
66 final Token reserved = new Token(new TextAttribute(colorManager.get(new RGB(127, 0, 85)), null, SWT.BOLD));
68 WordRule reservedWord = new WordRule(new IWordDetector() {
70 public boolean isWordStart(char c) {
71 return Character.isJavaIdentifierStart(c);
75 public boolean isWordPart(char c) {
76 return Character.isJavaIdentifierPart(c);
78 }, new Token(new TextAttribute(colorManager.get(new RGB(0, 0, 0)))));
80 for(String word : SCLInfo.RESERVED_WORDS)
81 reservedWord.addWord(word, reserved);
83 IRule[] rules = new IRule[] {
85 new WhitespaceRule(new IWhitespaceDetector() {
88 public boolean isWhitespace(char c) {
89 return Character.isWhitespace(c);
93 scanner.setRules(rules);
99 public IAutoEditStrategy[] getAutoEditStrategies(
100 ISourceViewer sourceViewer, String contentType) {
101 return new IAutoEditStrategy[] {
102 new ReplaceTabsBySpaces(),
103 new DefaultIndentLineAutoEditStrategy()/*,
104 new MatchingBracketsEditStrategy()*/