]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLSourceViewerConfiguration.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLSourceViewerConfiguration.java
new file mode 100755 (executable)
index 0000000..6ca8ae0
--- /dev/null
@@ -0,0 +1,107 @@
+package org.simantics.scl.ui.editor;\r
+\r
+import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;\r
+import org.eclipse.jface.text.IAutoEditStrategy;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.TextAttribute;\r
+import org.eclipse.jface.text.presentation.IPresentationReconciler;\r
+import org.eclipse.jface.text.presentation.PresentationReconciler;\r
+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;\r
+import org.eclipse.jface.text.rules.IRule;\r
+import org.eclipse.jface.text.rules.ITokenScanner;\r
+import org.eclipse.jface.text.rules.IWhitespaceDetector;\r
+import org.eclipse.jface.text.rules.IWordDetector;\r
+import org.eclipse.jface.text.rules.RuleBasedScanner;\r
+import org.eclipse.jface.text.rules.Token;\r
+import org.eclipse.jface.text.rules.WhitespaceRule;\r
+import org.eclipse.jface.text.rules.WordRule;\r
+import org.eclipse.jface.text.source.ISourceViewer;\r
+import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.graphics.RGB;\r
+import org.simantics.scl.ui.info.SCLInfo;\r
+\r
+public class SCLSourceViewerConfiguration extends SourceViewerConfiguration {\r
+\r
+    ColorManager colorManager;\r
+    \r
+    public SCLSourceViewerConfiguration(ColorManager colorManager) {\r
+        this.colorManager = colorManager;\r
+    }\r
+    \r
+    public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {\r
+        PresentationReconciler reconciler = new PresentationReconciler();\r
+        reconciler.setDocumentPartitioning(SCLDocumentSetup.SCL_PARTIONING);\r
+        \r
+        {\r
+            final Token string = new Token(new TextAttribute(colorManager.get(new RGB(42, 0, 255))));            \r
+            RuleBasedScanner scanner = new RuleBasedScanner();\r
+            scanner.setDefaultReturnToken(string);\r
+            DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);\r
+            reconciler.setRepairer(dr, SCLDocumentSetup.STRING);\r
+            reconciler.setDamager(dr, SCLDocumentSetup.STRING);\r
+        }\r
+        \r
+        {\r
+            Token comment = new Token(new TextAttribute(colorManager.get(new RGB(63, 127, 95))));            \r
+            RuleBasedScanner scanner = new RuleBasedScanner();\r
+            scanner.setDefaultReturnToken(comment);\r
+            DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);\r
+            reconciler.setRepairer(dr, SCLDocumentSetup.COMMENT);\r
+            reconciler.setDamager(dr, SCLDocumentSetup.COMMENT);\r
+        }\r
+        \r
+        {\r
+            DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());        \r
+            reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
+            reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
+        }\r
+        \r
+        return reconciler;\r
+    }\r
+\r
+    private ITokenScanner getSclTokenScanner() {\r
+        RuleBasedScanner scanner = new RuleBasedScanner();\r
+       \r
+        final Token reserved = new Token(new TextAttribute(colorManager.get(new RGB(127, 0, 85)), null, SWT.BOLD));\r
+\r
+        WordRule reservedWord = new WordRule(new IWordDetector() {          \r
+            @Override\r
+            public boolean isWordStart(char c) {\r
+                return Character.isJavaIdentifierStart(c);\r
+            }\r
+            \r
+            @Override\r
+            public boolean isWordPart(char c) {\r
+                return Character.isJavaIdentifierPart(c);\r
+            }\r
+        }, new Token(new TextAttribute(colorManager.get(new RGB(0, 0, 0)))));\r
+\r
+        for(String word : SCLInfo.RESERVED_WORDS)\r
+            reservedWord.addWord(word, reserved);\r
+                \r
+        IRule[] rules = new IRule[] {\r
+                reservedWord,\r
+                new WhitespaceRule(new IWhitespaceDetector() {\r
+                    \r
+                    @Override\r
+                    public boolean isWhitespace(char c) {\r
+                        return Character.isWhitespace(c);\r
+                    }\r
+                }),\r
+        };\r
+        scanner.setRules(rules);\r
+        \r
+        return scanner;     \r
+    }\r
+    \r
+    @Override\r
+    public IAutoEditStrategy[] getAutoEditStrategies(\r
+            ISourceViewer sourceViewer, String contentType) {\r
+        return new IAutoEditStrategy[] { \r
+                new ReplaceTabsBySpaces(),\r
+                new DefaultIndentLineAutoEditStrategy()/*,\r
+                new MatchingBracketsEditStrategy()*/\r
+        };\r
+    }\r
+}\r