package org.easyb.ui.editor; import static org.easyb.ui.editor.KeywordEnum.A; import static org.easyb.ui.editor.KeywordEnum.AFTER; import static org.easyb.ui.editor.KeywordEnum.AFTER_EACH; import static org.easyb.ui.editor.KeywordEnum.AND; import static org.easyb.ui.editor.KeywordEnum.BEFORE; import static org.easyb.ui.editor.KeywordEnum.BEFORE_EACH; import static org.easyb.ui.editor.KeywordEnum.BEHAVES; import static org.easyb.ui.editor.KeywordEnum.BEHAVIOUR; import static org.easyb.ui.editor.KeywordEnum.DESCRIPTION; import static org.easyb.ui.editor.KeywordEnum.ENSURE; import static org.easyb.ui.editor.KeywordEnum.ENSURE_FAILS; import static org.easyb.ui.editor.KeywordEnum.ENSURE_THROWS; import static org.easyb.ui.editor.KeywordEnum.GIVEN; import static org.easyb.ui.editor.KeywordEnum.I; import static org.easyb.ui.editor.KeywordEnum.IT; import static org.easyb.ui.editor.KeywordEnum.NARRATIVE; import static org.easyb.ui.editor.KeywordEnum.SCENARIO; import static org.easyb.ui.editor.KeywordEnum.SHARED; import static org.easyb.ui.editor.KeywordEnum.SO; import static org.easyb.ui.editor.KeywordEnum.THAT; import static org.easyb.ui.editor.KeywordEnum.THEN; import static org.easyb.ui.editor.KeywordEnum.WANT; import static org.easyb.ui.editor.KeywordEnum.WHEN; import java.util.Arrays; import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; import org.eclipse.jface.text.rules.Token; /** * Constructs a partition scanner to be used to * partition easyb behaviours. * @author whiteda * */ public class PartitionScannerBuilder { public static final String PARTITIONER_ID = "org.easyb.behaviour.partitioner"; public final static String EASYB_BEHAVIOUR_SCENARIO_START= "__easyb_behaviour_scenario_start"; public final static String EASYB_BEHAVIOUR_GIVEN_START = "__easyb_behaviour_given_start"; public final static String EASYB_BEHAVIOUR_WHEN_START = "__easyb_behaviour_when_start"; public final static String EASYB_BEHAVIOUR_THEN_START = "__easyb_behaviour_then_start"; public final static String EASYB_BEHAVIOUR_AND_START = "__easyb_behaviour_and_start"; public final static String EASYB_BEHAVIOUR_NARRATIVE_START = "__easyb_behaviour_narrative_start"; public final static String EASYB_BEHAVIOUR_IT_START = "__easyb_behaviour_it_start"; public final static String EASYB_BEHAVIOUR_DESCRIPTION_START = "__easyb_behaviour_description"; public final static String EASYB_BEHAVIOUR_SHARED_START = "__easyb_behaviour_shared"; public final static String EASYB_BEHAVIOUR_BEFORE_START = "__easyb_behaviour_before_start"; public final static String EASYB_BEHAVIOUR_BEFORE_EACH_START = "__easyb_behaviour_before_each_start"; public final static String EASYB_BEHAVIOUR_AFTER_START ="__easyb_behaviour_after_start"; public final static String EASYB_BEHAVIOUR_AFTER_EACH_START ="__easyb_behaviour_after_each_start"; public final static String EASYB_BEHAVIOUR_ENSURE_THROWS_START = "__easyb_behaviour_ensure_throws_start"; public final static String EASYB_BEHAVIOUR_ENSURE_START = "__easyb_behaviour_ensure_start"; public final static String EASYB_BEHAVIOUR_ENSURE_FAILS_START = "__easyb_behaviour_ensure_fails_start"; public final static String EASYB_BEHAVIOUR_IT_BEHAVES_AS_START = "__easyb_behaviour_it_behaves_as"; public final static String EASYB_BEHAVIOUR_AS_A_START = "__easyb_behaviour_as_a"; public final static String EASYB_BEHAVIOUR_I_WANT_START = "__easyb_behaviour_i_want"; public final static String EASYB_BEHAVIOUR_SO_THAT_START = "__easyb_behaviour_so_that"; public static final String[] EASYB_STATEMENT_PARTITION_TYPES = new String[]{ EASYB_BEHAVIOUR_GIVEN_START, EASYB_BEHAVIOUR_THEN_START, EASYB_BEHAVIOUR_WHEN_START, EASYB_BEHAVIOUR_AND_START, EASYB_BEHAVIOUR_ENSURE_THROWS_START, EASYB_BEHAVIOUR_ENSURE_START, EASYB_BEHAVIOUR_ENSURE_FAILS_START, EASYB_BEHAVIOUR_IT_BEHAVES_AS_START, EASYB_BEHAVIOUR_AS_A_START, EASYB_BEHAVIOUR_I_WANT_START, EASYB_BEHAVIOUR_SO_THAT_START }; public static final String[] EASYB_ROOT_PARTITION_TYPES = new String[]{ EASYB_BEHAVIOUR_SCENARIO_START, EASYB_BEHAVIOUR_BEFORE_START, EASYB_BEHAVIOUR_BEFORE_EACH_START, EASYB_BEHAVIOUR_AFTER_START, EASYB_BEHAVIOUR_AFTER_EACH_START, EASYB_BEHAVIOUR_IT_START, EASYB_BEHAVIOUR_NARRATIVE_START, EASYB_BEHAVIOUR_DESCRIPTION_START, EASYB_BEHAVIOUR_SHARED_START }; public static final String[] EASYB_ALL_PARTITION_TYPES = new String[EASYB_STATEMENT_PARTITION_TYPES.length+EASYB_ROOT_PARTITION_TYPES.length]; static{ Arrays.sort(EASYB_ROOT_PARTITION_TYPES); Arrays.sort(EASYB_STATEMENT_PARTITION_TYPES); int lastVal =0; for(;lastVal<EASYB_ROOT_PARTITION_TYPES.length;++lastVal){ EASYB_ALL_PARTITION_TYPES[lastVal] =EASYB_ROOT_PARTITION_TYPES[lastVal]; } for(int i =0;lastVal<EASYB_ALL_PARTITION_TYPES.length;++lastVal,++i){ EASYB_ALL_PARTITION_TYPES[lastVal] = EASYB_STATEMENT_PARTITION_TYPES[i]; } } private PartitionScannerBuilder(){ } public static RuleBasedPartitionScanner createBehaviourPartitionScanner(){ RuleBasedPartitionScanner scanner = new RuleBasedPartitionScanner(); scanner.setPredicateRules(createPredicateRules()); return scanner; } private static IPredicateRule[] createPredicateRules(){ IPredicateRule[] rules = new IPredicateRule[20]; //Add rule for scenario start rules[0] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_SCENARIO_START),SCENARIO.toString()); //Add rule for given rules[1] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_GIVEN_START),GIVEN.toString()); //Add rule for when rules[2] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_WHEN_START),WHEN.toString()); //Add rule for then rules[3] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_THEN_START),THEN.toString()); //Add rule for and rules[4] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_AND_START),AND.toString()); //Add rule for narrative rules[5] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_BEFORE_START),NARRATIVE.toString()); //Add rule for before rules[6] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_BEFORE_START),BEFORE.toString()); //Add rule for before_each rules[7] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_BEFORE_EACH_START),BEFORE_EACH.toString()); //Add rule for after rules[8] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_AFTER_START),AFTER.toString()); //Add rule for after_each rules[9] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_AFTER_EACH_START),AFTER_EACH.toString()); //Add rule for ensure throws rules[10] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_ENSURE_START),ENSURE_THROWS.toString()); //Add rule for ensure rules[11] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_ENSURE_START),ENSURE.toString()); //Add rule for ensure fails rules[12] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_ENSURE_FAILS_START),ENSURE_FAILS.toString()); //Add rule for description rules[13] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_DESCRIPTION_START),DESCRIPTION.toString()); //Add rule for shared rules[14] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_SHARED_START),SHARED.toString(),BEHAVIOUR.toString()); //Add rule for "it behaves as" escape whitespace rules[15] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_IT_BEHAVES_AS_START),IT.toString(),BEHAVES.toString(),"as"); //Add rule for it rules[16] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_IT_START),IT.toString()); //Add rule for narrative "as a" rules[17] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_AS_A_START),"as",A.toString()); //Add rule for narrative "i want" rules[18] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_I_WANT_START),I.toString(),WANT.toString()); //Add rule for narrative "i want" rules[19] = new BehaviourWordRule(new Token(EASYB_BEHAVIOUR_I_WANT_START),SO.toString(),THAT.toString()); return rules; } }