--- /dev/null
+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