/** * Copyright 2010-2014 Three Crickets LLC. * <p> * The contents of this file are subject to the terms of a BSD license. See * attached license.txt. * <p> * Alternatively, you can obtain a royalty free commercial license with less * limitations, transferable or non-transferable, directly from Three Crickets * at http://threecrickets.com/ */ package org.sikuli.syntaxhighlight.grammar.def; import org.sikuli.syntaxhighlight.ResolutionException; import org.sikuli.syntaxhighlight.grammar.Grammar; import org.sikuli.syntaxhighlight.grammar.Rule; import org.sikuli.syntaxhighlight.grammar.SaveRule; import org.sikuli.syntaxhighlight.grammar.State; /** * @author Tal Liron */ public class SaveDef extends StateDef { public SaveDef( String stateName, String savedStateName ) { super( stateName ); this.savedStateName = savedStateName; } // // Def // @Override public boolean resolve( Grammar grammar ) throws ResolutionException { State state = grammar.getState( stateName ); State savedState = grammar.getState( savedStateName ); // Only include a resolved state if( savedState.isResolved() ) { if( placeHolder != null ) { int location = state.getRules().indexOf( placeHolder ); state.getRules().remove( placeHolder ); state.addRuleAt( location, new SaveRule( savedState ) ); } else state.addRule( new SaveRule( savedState ) ); resolved = true; return true; } else if( placeHolder == null ) { // Remember location placeHolder = new Rule(); state.addRule( placeHolder ); } return false; } // // Object // @Override public String toString() { return super.toString() + " " + stateName + ", " + savedStateName; } // ////////////////////////////////////////////////////////////////////////// // Private private final String savedStateName; }