X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Feditor%2FSCLDocumentSetup.java;fp=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Feditor%2FSCLDocumentSetup.java;h=16d81eaa87b666450f93c6fdabd662a6e78eb8cc;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 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 index 000000000..16d81eaa8 --- /dev/null +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLDocumentSetup.java @@ -0,0 +1,43 @@ +package org.simantics.scl.ui.editor; + +import org.eclipse.core.filebuffers.IDocumentSetupParticipant; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentExtension3; +import org.eclipse.jface.text.IDocumentPartitioner; +import org.eclipse.jface.text.rules.EndOfLineRule; +import org.eclipse.jface.text.rules.FastPartitioner; +import org.eclipse.jface.text.rules.IPredicateRule; +import org.eclipse.jface.text.rules.MultiLineRule; +import org.eclipse.jface.text.rules.PatternRule; +import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; +import org.eclipse.jface.text.rules.Token; + +public class SCLDocumentSetup implements IDocumentSetupParticipant { + + public static final String COMMENT = "COMMENT"; + public static final String STRING = "STRING"; + + public static final String[] PARTITION_TYPES = new String[] { + COMMENT, STRING + }; + + public static final String SCL_PARTIONING = "SCL_PARTIONING"; + + + @Override + public void setup(final IDocument document) { + if(document instanceof IDocumentExtension3) { + RuleBasedPartitionScanner scanner = new RuleBasedPartitionScanner(); + scanner.setPredicateRules(new IPredicateRule[] { + new MultiLineRule("/*", "*/", new Token(COMMENT)), + new EndOfLineRule("//", new Token(COMMENT)), + new MultiLineRule("\"\"\"", "\"\"\"", new Token(STRING), '\\'), + new PatternRule("\"", "\"", new Token(STRING), '\\', true), + }); + IDocumentPartitioner partitioner = new FastPartitioner(scanner, PARTITION_TYPES); + ((IDocumentExtension3)document).setDocumentPartitioner(SCL_PARTIONING, partitioner); + partitioner.connect(document); + } + } + +}