]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLSourceViewerConfiguration.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor / SCLSourceViewerConfiguration.java
1 package org.simantics.scl.ui.editor;
2
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;
23
24 public class SCLSourceViewerConfiguration extends SourceViewerConfiguration {
25
26     ColorManager colorManager;
27     
28     public SCLSourceViewerConfiguration(ColorManager colorManager) {
29         this.colorManager = colorManager;
30     }
31     
32     public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
33         PresentationReconciler reconciler = new PresentationReconciler();
34         reconciler.setDocumentPartitioning(SCLDocumentSetup.SCL_PARTIONING);
35         
36         {
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);
43         }
44         
45         {
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);
52         }
53         
54         {
55             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());        
56             reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
57             reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
58         }
59         
60         return reconciler;
61     }
62
63     private ITokenScanner getSclTokenScanner() {
64         RuleBasedScanner scanner = new RuleBasedScanner();
65        
66         final Token reserved = new Token(new TextAttribute(colorManager.get(new RGB(127, 0, 85)), null, SWT.BOLD));
67
68         WordRule reservedWord = new WordRule(new IWordDetector() {          
69             @Override
70             public boolean isWordStart(char c) {
71                 return Character.isJavaIdentifierStart(c);
72             }
73             
74             @Override
75             public boolean isWordPart(char c) {
76                 return Character.isJavaIdentifierPart(c);
77             }
78         }, new Token(new TextAttribute(colorManager.get(new RGB(0, 0, 0)))));
79
80         for(String word : SCLInfo.RESERVED_WORDS)
81             reservedWord.addWord(word, reserved);
82                 
83         IRule[] rules = new IRule[] {
84                 reservedWord,
85                 new WhitespaceRule(new IWhitespaceDetector() {
86                     
87                     @Override
88                     public boolean isWhitespace(char c) {
89                         return Character.isWhitespace(c);
90                     }
91                 }),
92         };
93         scanner.setRules(rules);
94         
95         return scanner;     
96     }
97     
98     @Override
99     public IAutoEditStrategy[] getAutoEditStrategies(
100             ISourceViewer sourceViewer, String contentType) {
101         return new IAutoEditStrategy[] { 
102                 new ReplaceTabsBySpaces(),
103                 new DefaultIndentLineAutoEditStrategy()/*,
104                 new MatchingBracketsEditStrategy()*/
105         };
106     }
107 }