]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui.editor/src/org/simantics/scl/ui/editor/SCLSourceViewerConfiguration.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui.editor / src / org / simantics / scl / ui / editor / SCLSourceViewerConfiguration.java
1 package org.simantics.scl.ui.editor;\r
2 \r
3 import org.eclipse.jface.text.DefaultTextHover;\r
4 import org.eclipse.jface.text.IDocument;\r
5 import org.eclipse.jface.text.ITextHover;\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.IWordDetector;\r
13 import org.eclipse.jface.text.rules.MultiLineRule;\r
14 import org.eclipse.jface.text.rules.PatternRule;\r
15 import org.eclipse.jface.text.rules.RuleBasedScanner;\r
16 import org.eclipse.jface.text.rules.Token;\r
17 import org.eclipse.jface.text.rules.WordRule;\r
18 import org.eclipse.jface.text.source.DefaultAnnotationHover;\r
19 import org.eclipse.jface.text.source.IAnnotationHover;\r
20 import org.eclipse.jface.text.source.ISharedTextColors;\r
21 import org.eclipse.jface.text.source.ISourceViewer;\r
22 import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
23 import org.eclipse.swt.SWT;\r
24 import org.eclipse.swt.graphics.Device;\r
25 import org.eclipse.swt.graphics.Font;\r
26 import org.eclipse.swt.graphics.RGB;\r
27 \r
28 public class SCLSourceViewerConfiguration extends SourceViewerConfiguration {\r
29 \r
30     public static final char[] CONTENT_ASSIST_AUTO_CHARS = new char[] { '.' };\r
31     Device device;\r
32     \r
33     ISharedTextColors sharedTextColors;\r
34     \r
35     public SCLSourceViewerConfiguration(Device device,\r
36             ISharedTextColors sharedTextColors) {\r
37         this.device = device;\r
38         this.sharedTextColors = sharedTextColors;\r
39     }\r
40 \r
41     public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {\r
42         return new String[] {\r
43             IDocument.DEFAULT_CONTENT_TYPE\r
44         };\r
45     }\r
46     \r
47     public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {\r
48         PresentationReconciler reconciler = new PresentationReconciler();\r
49         \r
50         DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());\r
51         \r
52         reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
53         reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
54         \r
55         return reconciler;\r
56     }\r
57     \r
58     ITokenScanner getSclTokenScanner() {\r
59         RuleBasedScanner scanner = new RuleBasedScanner();\r
60         \r
61         Font font = new Font(device, "Courier New", 10, SWT.NORMAL);\r
62         Font boldFont = new Font(device, "Courier New", 10, SWT.BOLD);\r
63 \r
64         Token defaultToken = new Token(\r
65                 new TextAttribute(\r
66                         sharedTextColors.getColor(new RGB(0, 0, 0)),\r
67                         null,\r
68                         0,\r
69                         font\r
70                 ));\r
71         Token string = new Token(new TextAttribute(\r
72                 sharedTextColors.getColor(new RGB(42, 0, 255)),\r
73                 null,\r
74                 0,\r
75                 font\r
76                 ));\r
77         Token reserved = new Token(\r
78                 new TextAttribute(\r
79                         sharedTextColors.getColor(new RGB(127, 0, 85)),\r
80                         null,\r
81                         SWT.BOLD,\r
82                         boldFont\r
83                 ));\r
84         Token comment = new Token(new TextAttribute(\r
85                 sharedTextColors.getColor(new RGB(63, 127, 95)),\r
86                 null,\r
87                 0,\r
88                 font\r
89                 ));\r
90 \r
91         WordRule reservedWord = new WordRule(new IWordDetector() {          \r
92             @Override\r
93             public boolean isWordStart(char c) {\r
94                 return Character.isJavaIdentifierStart(c);\r
95             }\r
96             \r
97             @Override\r
98             public boolean isWordPart(char c) {\r
99                 return Character.isJavaIdentifierPart(c) || c=='.';\r
100             }\r
101         });\r
102 \r
103         reservedWord.addWord("if", reserved);\r
104         reservedWord.addWord("then", reserved);\r
105         reservedWord.addWord("else", reserved);\r
106         reservedWord.addWord("match", reserved);\r
107         reservedWord.addWord("with", reserved);\r
108         reservedWord.addWord("data", reserved);\r
109         reservedWord.addWord("type", reserved);\r
110         reservedWord.addWord("class", reserved);\r
111         \r
112         IRule[] rules = new IRule[] {\r
113             //new MultiLineRule("\"\"\"", "\"\"\"", string),\r
114             new PatternRule("\"", "\"", string, '\\', true),\r
115             new MultiLineRule("/*", "*/", comment),\r
116             new PatternRule("//", null, comment, '\0', true),\r
117             reservedWord\r
118         };\r
119         scanner.setRules(rules);\r
120         scanner.setDefaultReturnToken(defaultToken);\r
121         \r
122         return scanner;     \r
123     }\r
124     \r
125     @Override\r
126     public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {\r
127         return new DefaultTextHover(sourceViewer);\r
128     }\r
129     \r
130     @Override\r
131     public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {\r
132         return new DefaultAnnotationHover();\r
133     }\r
134 }\r