]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLSourceViewerConfiguration.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor / SCLSourceViewerConfiguration.java
1 package org.simantics.scl.ui.editor;\r
2 \r
3 import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;\r
4 import org.eclipse.jface.text.IAutoEditStrategy;\r
5 import org.eclipse.jface.text.IDocument;\r
6 import org.eclipse.jface.text.TextAttribute;\r
7 import org.eclipse.jface.text.presentation.IPresentationReconciler;\r
8 import org.eclipse.jface.text.presentation.PresentationReconciler;\r
9 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;\r
10 import org.eclipse.jface.text.rules.IRule;\r
11 import org.eclipse.jface.text.rules.ITokenScanner;\r
12 import org.eclipse.jface.text.rules.IWhitespaceDetector;\r
13 import org.eclipse.jface.text.rules.IWordDetector;\r
14 import org.eclipse.jface.text.rules.RuleBasedScanner;\r
15 import org.eclipse.jface.text.rules.Token;\r
16 import org.eclipse.jface.text.rules.WhitespaceRule;\r
17 import org.eclipse.jface.text.rules.WordRule;\r
18 import org.eclipse.jface.text.source.ISourceViewer;\r
19 import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
20 import org.eclipse.swt.SWT;\r
21 import org.eclipse.swt.graphics.RGB;\r
22 import org.simantics.scl.ui.info.SCLInfo;\r
23 \r
24 public class SCLSourceViewerConfiguration extends SourceViewerConfiguration {\r
25 \r
26     ColorManager colorManager;\r
27     \r
28     public SCLSourceViewerConfiguration(ColorManager colorManager) {\r
29         this.colorManager = colorManager;\r
30     }\r
31     \r
32     public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {\r
33         PresentationReconciler reconciler = new PresentationReconciler();\r
34         reconciler.setDocumentPartitioning(SCLDocumentSetup.SCL_PARTIONING);\r
35         \r
36         {\r
37             final Token string = new Token(new TextAttribute(colorManager.get(new RGB(42, 0, 255))));            \r
38             RuleBasedScanner scanner = new RuleBasedScanner();\r
39             scanner.setDefaultReturnToken(string);\r
40             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);\r
41             reconciler.setRepairer(dr, SCLDocumentSetup.STRING);\r
42             reconciler.setDamager(dr, SCLDocumentSetup.STRING);\r
43         }\r
44         \r
45         {\r
46             Token comment = new Token(new TextAttribute(colorManager.get(new RGB(63, 127, 95))));            \r
47             RuleBasedScanner scanner = new RuleBasedScanner();\r
48             scanner.setDefaultReturnToken(comment);\r
49             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);\r
50             reconciler.setRepairer(dr, SCLDocumentSetup.COMMENT);\r
51             reconciler.setDamager(dr, SCLDocumentSetup.COMMENT);\r
52         }\r
53         \r
54         {\r
55             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());        \r
56             reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
57             reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
58         }\r
59         \r
60         return reconciler;\r
61     }\r
62 \r
63     private ITokenScanner getSclTokenScanner() {\r
64         RuleBasedScanner scanner = new RuleBasedScanner();\r
65        \r
66         final Token reserved = new Token(new TextAttribute(colorManager.get(new RGB(127, 0, 85)), null, SWT.BOLD));\r
67 \r
68         WordRule reservedWord = new WordRule(new IWordDetector() {          \r
69             @Override\r
70             public boolean isWordStart(char c) {\r
71                 return Character.isJavaIdentifierStart(c);\r
72             }\r
73             \r
74             @Override\r
75             public boolean isWordPart(char c) {\r
76                 return Character.isJavaIdentifierPart(c);\r
77             }\r
78         }, new Token(new TextAttribute(colorManager.get(new RGB(0, 0, 0)))));\r
79 \r
80         for(String word : SCLInfo.RESERVED_WORDS)\r
81             reservedWord.addWord(word, reserved);\r
82                 \r
83         IRule[] rules = new IRule[] {\r
84                 reservedWord,\r
85                 new WhitespaceRule(new IWhitespaceDetector() {\r
86                     \r
87                     @Override\r
88                     public boolean isWhitespace(char c) {\r
89                         return Character.isWhitespace(c);\r
90                     }\r
91                 }),\r
92         };\r
93         scanner.setRules(rules);\r
94         \r
95         return scanner;     \r
96     }\r
97     \r
98     @Override\r
99     public IAutoEditStrategy[] getAutoEditStrategies(\r
100             ISourceViewer sourceViewer, String contentType) {\r
101         return new IAutoEditStrategy[] { \r
102                 new ReplaceTabsBySpaces(),\r
103                 new DefaultIndentLineAutoEditStrategy()/*,\r
104                 new MatchingBracketsEditStrategy()*/\r
105         };\r
106     }\r
107 }\r