]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLDocumentSetup.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor / SCLDocumentSetup.java
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLDocumentSetup.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLDocumentSetup.java
new file mode 100755 (executable)
index 0000000..16d81ea
--- /dev/null
@@ -0,0 +1,43 @@
+package org.simantics.scl.ui.editor;\r
+\r
+import org.eclipse.core.filebuffers.IDocumentSetupParticipant;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.IDocumentExtension3;\r
+import org.eclipse.jface.text.IDocumentPartitioner;\r
+import org.eclipse.jface.text.rules.EndOfLineRule;\r
+import org.eclipse.jface.text.rules.FastPartitioner;\r
+import org.eclipse.jface.text.rules.IPredicateRule;\r
+import org.eclipse.jface.text.rules.MultiLineRule;\r
+import org.eclipse.jface.text.rules.PatternRule;\r
+import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;\r
+import org.eclipse.jface.text.rules.Token;\r
+\r
+public class SCLDocumentSetup implements IDocumentSetupParticipant {\r
+    \r
+    public static final String COMMENT = "COMMENT";\r
+    public static final String STRING = "STRING";\r
+    \r
+    public static final String[] PARTITION_TYPES = new String[] {\r
+        COMMENT, STRING\r
+    };\r
+    \r
+    public static final String SCL_PARTIONING = "SCL_PARTIONING";\r
+    \r
+    \r
+    @Override\r
+    public void setup(final IDocument document) {\r
+        if(document instanceof IDocumentExtension3) {\r
+            RuleBasedPartitionScanner scanner = new RuleBasedPartitionScanner();\r
+            scanner.setPredicateRules(new IPredicateRule[] {\r
+                    new MultiLineRule("/*", "*/", new Token(COMMENT)),\r
+                    new EndOfLineRule("//", new Token(COMMENT)),\r
+                    new MultiLineRule("\"\"\"", "\"\"\"", new Token(STRING), '\\'),\r
+                    new PatternRule("\"", "\"", new Token(STRING), '\\', true),\r
+            });\r
+            IDocumentPartitioner partitioner = new FastPartitioner(scanner, PARTITION_TYPES);\r
+            ((IDocumentExtension3)document).setDocumentPartitioner(SCL_PARTIONING, partitioner);\r
+            partitioner.connect(document);\r
+        }\r
+    }\r
+\r
+}\r