protected virtual void ArgumentStarted(SymToken aToken, SymTokenBalancerMatchCriteria aCriteria) { System.Diagnostics.Debug.Write(aToken.Value); int currentLevelNumber = CurrentLevelNumber; // Perform any base class end level behaviour PerformEndLevelBehaviour(CurrentNode, aCriteria); // Add the emit node (the rest of the code will work out whether it needs to quote it when the final // tree is formed). SymTokenBalancerNodeEmittedElement argEmitElement = new SymTokenBalancerNodeEmittedElement(aToken, aCriteria); DocumentTree.CurrentNode.Add(argEmitElement); // Always add the argument node SymTokenBalancerMarkerArgumentNode argNode = new SymTokenBalancerMarkerArgumentNode(aCriteria); DocumentTree.CurrentNode.Add(argNode); if (aCriteria.IsAssociatedBehaviourCreateSubTree) { // Make a new argument definition based upon the tokens we have in // the main document tree. SymArgument argument = MakeArgument(DocumentTree.CurrentNode); // Then notify the observer NotifyArgumentAvailable(argument, aToken); } }
protected bool IsArgumentSeparatorMatch(SymToken aToken, out SymTokenBalancerMatchCriteria aCriteria, int aLevelNumber) { aCriteria = null; bool matchFound = false; // int index = iArgumentSeparators.IndexOf(aToken); while (index >= 0 && matchFound == false) { SymToken token = iArgumentSeparators[index]; System.Diagnostics.Debug.Assert(token.Tag != null && token.Tag is SymTokenBalancerMatchCriteria); SymTokenBalancerMatchCriteria criteria = (SymTokenBalancerMatchCriteria)token.Tag; if (criteria.Matches(aLevelNumber)) { aCriteria = criteria; matchFound = true; } else { index = iArgumentSeparators.IndexOf(aToken, index + 1); } } return(matchFound); }
public void RegisterArgumentSeparatorToken(SymToken aToken, SymTokenBalancerMatchCriteria aCriteria) { SymToken copy = new SymToken(aToken); copy.Tag = aCriteria; // if (IsTokenExactMatch(copy, iArgumentSeparators) == false) { iArgumentSeparators.Append(copy); } }