]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.scl.ui.editor;\r
2 \r
3 import org.eclipse.core.filebuffers.IDocumentSetupParticipant;\r
4 import org.eclipse.jface.text.IDocument;\r
5 import org.eclipse.jface.text.IDocumentExtension3;\r
6 import org.eclipse.jface.text.IDocumentPartitioner;\r
7 import org.eclipse.jface.text.rules.EndOfLineRule;\r
8 import org.eclipse.jface.text.rules.FastPartitioner;\r
9 import org.eclipse.jface.text.rules.IPredicateRule;\r
10 import org.eclipse.jface.text.rules.MultiLineRule;\r
11 import org.eclipse.jface.text.rules.PatternRule;\r
12 import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;\r
13 import org.eclipse.jface.text.rules.Token;\r
14 \r
15 public class SCLDocumentSetup implements IDocumentSetupParticipant {\r
16     \r
17     public static final String COMMENT = "COMMENT";\r
18     public static final String STRING = "STRING";\r
19     \r
20     public static final String[] PARTITION_TYPES = new String[] {\r
21         COMMENT, STRING\r
22     };\r
23     \r
24     public static final String SCL_PARTIONING = "SCL_PARTIONING";\r
25     \r
26     \r
27     @Override\r
28     public void setup(final IDocument document) {\r
29         if(document instanceof IDocumentExtension3) {\r
30             RuleBasedPartitionScanner scanner = new RuleBasedPartitionScanner();\r
31             scanner.setPredicateRules(new IPredicateRule[] {\r
32                     new MultiLineRule("/*", "*/", new Token(COMMENT)),\r
33                     new EndOfLineRule("//", new Token(COMMENT)),\r
34                     new MultiLineRule("\"\"\"", "\"\"\"", new Token(STRING), '\\'),\r
35                     new PatternRule("\"", "\"", new Token(STRING), '\\', true),\r
36             });\r
37             IDocumentPartitioner partitioner = new FastPartitioner(scanner, PARTITION_TYPES);\r
38             ((IDocumentExtension3)document).setDocumentPartitioner(SCL_PARTIONING, partitioner);\r
39             partitioner.connect(document);\r
40         }\r
41     }\r
42 \r
43 }\r