1 package org.simantics.scl.ui.editor;
\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
15 public class SCLDocumentSetup implements IDocumentSetupParticipant {
\r
17 public static final String COMMENT = "COMMENT";
\r
18 public static final String STRING = "STRING";
\r
20 public static final String[] PARTITION_TYPES = new String[] {
\r
24 public static final String SCL_PARTIONING = "SCL_PARTIONING";
\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
37 IDocumentPartitioner partitioner = new FastPartitioner(scanner, PARTITION_TYPES);
\r
38 ((IDocumentExtension3)document).setDocumentPartitioner(SCL_PARTIONING, partitioner);
\r
39 partitioner.connect(document);
\r