]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLPresentationReconciler.java
Merge "Remove unused import in DeleteHandler"
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLPresentationReconciler.java
1 package org.simantics.scl.ui.editor2;\r
2 \r
3 import org.eclipse.jface.resource.FontDescriptor;\r
4 import org.eclipse.jface.resource.ResourceManager;\r
5 import org.eclipse.jface.text.IDocument;\r
6 import org.eclipse.jface.text.TextAttribute;\r
7 import org.eclipse.jface.text.presentation.PresentationReconciler;\r
8 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;\r
9 import org.eclipse.jface.text.rules.IRule;\r
10 import org.eclipse.jface.text.rules.ITokenScanner;\r
11 import org.eclipse.jface.text.rules.IWhitespaceDetector;\r
12 import org.eclipse.jface.text.rules.IWordDetector;\r
13 import org.eclipse.jface.text.rules.RuleBasedScanner;\r
14 import org.eclipse.jface.text.rules.Token;\r
15 import org.eclipse.jface.text.rules.WhitespaceRule;\r
16 import org.eclipse.jface.text.rules.WordRule;\r
17 import org.eclipse.swt.SWT;\r
18 import org.eclipse.swt.graphics.Font;\r
19 import org.eclipse.swt.graphics.RGB;\r
20 import org.simantics.scl.ui.info.SCLInfo;\r
21 \r
22 public class SCLPresentationReconciler extends PresentationReconciler {\r
23     private static final FontDescriptor FONT_NORMAL = FontDescriptor.createFrom("Consolas", 10, SWT.NORMAL);\r
24     private static final FontDescriptor FONT_BOLD = FontDescriptor.createFrom("Consolas", 10, SWT.BOLD);\r
25     \r
26     public SCLPresentationReconciler(ResourceManager resourceManager) {\r
27         Font font = resourceManager.createFont(FONT_NORMAL);\r
28         {\r
29             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(\r
30                     resourceManager.createColor(new RGB(63, 127, 95)),\r
31                     null,\r
32                     0,\r
33                     font\r
34                     )));\r
35             setDamager(dr, SCLPartitionScanner.SCL_COMMENT);\r
36             setRepairer(dr, SCLPartitionScanner.SCL_COMMENT);\r
37         }\r
38         {\r
39             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new StringTokenScanner(new TextAttribute(\r
40                     resourceManager.createColor(new RGB(42, 0, 255)),\r
41                     null,\r
42                     0,\r
43                     font\r
44                     )));\r
45             setDamager(dr, SCLPartitionScanner.SCL_STRING);\r
46             setRepairer(dr, SCLPartitionScanner.SCL_STRING);\r
47         }\r
48         {\r
49             DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner(resourceManager));\r
50 \r
51             setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
52             setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
53         }\r
54     }\r
55     \r
56     private static ITokenScanner getSclTokenScanner(ResourceManager resourceManager) {\r
57         RuleBasedScanner scanner = new RuleBasedScanner();\r
58         \r
59         Token defaultToken = new Token(\r
60                 new TextAttribute(\r
61                         resourceManager.createColor(new RGB(0, 0, 0)),\r
62                         null,\r
63                         0,\r
64                         resourceManager.createFont(FONT_NORMAL)\r
65                 ));\r
66         Token reserved = new Token(\r
67                 new TextAttribute(\r
68                         resourceManager.createColor(new RGB(127, 0, 85)),\r
69                         null,\r
70                         SWT.BOLD,\r
71                         resourceManager.createFont(FONT_BOLD)\r
72                 ));\r
73 \r
74         WordRule reservedWord = new WordRule(new IWordDetector() {\r
75             @Override\r
76             public boolean isWordStart(char c) {\r
77                 return ('a' <= c && c <= 'z')\r
78                      || ('A' <= c && c <= 'Z')\r
79                      || c == '_' || c == '?';\r
80             }\r
81             @Override\r
82             public boolean isWordPart(char c) {\r
83                 return ('a' <= c && c <= 'z')\r
84                         || ('A' <= c && c <= 'Z')\r
85                         || ('0' <= c && c <= '9')\r
86                         || c == '_' || c == '.' || c == '\'';\r
87             }\r
88         }, defaultToken);\r
89 \r
90         for(String word : SCLInfo.RESERVED_WORDS)\r
91             reservedWord.addWord(word, reserved);\r
92         \r
93         scanner.setRules(new IRule[] {\r
94                 new WhitespaceRule(new IWhitespaceDetector() {\r
95                     @Override\r
96                     public boolean isWhitespace(char c) {\r
97                         return c==' ' || c=='\t' || c=='\n' || c=='\r';\r
98                     }\r
99                 }, defaultToken),\r
100                 reservedWord\r
101         });\r
102         scanner.setDefaultReturnToken(defaultToken);\r
103         \r
104         return scanner;\r
105     }\r
106 }\r