package com.sap.furcas.ide.editor; import java.util.ArrayList; import java.util.Collection; import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; import com.sap.furcas.metamodel.FURCAS.TCS.ConcreteSyntax; import com.sap.furcas.metamodel.FURCAS.TCS.MultiLineRule; import com.sap.furcas.metamodel.FURCAS.TCS.RulePattern; import com.sap.furcas.metamodel.FURCAS.TCS.Token; public class FurcasPartitionScanner extends RuleBasedPartitionScanner { public final static String COMMENT = "__furcas_comment"; //$NON-NLS-1$ public static final String[] PARTITIONS = new String[] { COMMENT }; public FurcasPartitionScanner(ConcreteSyntax syntax) { Collection<IPredicateRule> rules = new ArrayList<IPredicateRule>(); for (Token tok : syntax.getTokens()) { if(tok.getPattern() != null && tok.getPattern().getSimplePatterns().size() >0 && tok.getPattern().getSimplePatterns().iterator().next() instanceof RulePattern) { RulePattern ruleP = (RulePattern) tok.getPattern().getSimplePatterns().iterator().next(); if(ruleP.getRule() instanceof MultiLineRule) { MultiLineRule tcsRule = (MultiLineRule) ruleP.getRule(); char esc = 0; if(tcsRule.getEsc() != null) { esc = tcsRule.getEsc().getName().charAt(0); } IPredicateRule pr = new org.eclipse.jface.text.rules.MultiLineRule(tcsRule.getStart().getName(), tcsRule.getEnd().getName(), new org.eclipse.jface.text.rules.Token(COMMENT), esc, false); rules.add(pr); } } } setPredicateRules(rules.toArray(new IPredicateRule[0])); } }