コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public void RegisterArgumentSeparatorToken(SymToken aToken, SymTokenBalancerMatchCriteria aCriteria)
        {
            SymToken copy = new SymToken(aToken);

            copy.Tag = aCriteria;
            //
            if (IsTokenExactMatch(copy, iArgumentSeparators) == false)
            {
                iArgumentSeparators.Append(copy);
            }
        }