예제 #1
0
        //	Clone the pattern matcher and reconfigure it in a new state based on a word.
        private PatternMatcher makeCopyWithStateFromAtWord(ProseObject atWord)
        {
            PatternMatcher newMatcher = new PatternMatcher(runtime);

            newMatcher.patternComponentNodes.AddRange(patternComponentNodes);
            newMatcher.numObjectsMatched = numObjectsMatched;

            if (currPatternObject != null)
            {
                newMatcher.currPatternObject = currPatternObject.clone();
            }


            if (atWord == runtime.@prose)
            {
                newMatcher.switchToState_MATCHING_PROSE();
                if (parentheticalStack != null)
                {
                    //newMatcher.parentheticalStack = new Stack<ProseObject>(parentheticalStack);
                    newMatcher.parentheticalStack = new Stack <ProseObject>();
                    ProseObject[] objs = parentheticalStack.ToArray();
                    for (int i = objs.Length - 1; i >= 0; i--)
                    {
                        newMatcher.parentheticalStack.Push(objs[i]);
                    }
                }
                newMatcher.inText = inText;
            }
            else if (atWord == runtime.@text)
            {
                newMatcher.switchToState_MATCHING_TEXT();
                newMatcher.textMatchingQQcount = textMatchingQQcount;
            }
            else if (atWord == runtime.@pattern)
            {
                newMatcher.switchToState_MATCHING_PATTERN();
            }
            else
            {
                newMatcher.switchToState_MATCHING_OBJECT();
            }

            return(newMatcher);
        }
예제 #2
0
        //    Clone the pattern matcher and reconfigure it in a new state based on a word.
        private PatternMatcher makeCopyWithStateFromAtWord(ProseObject atWord)
        {
            PatternMatcher newMatcher = new PatternMatcher(runtime);
            newMatcher.patternComponentNodes.AddRange(patternComponentNodes);
            newMatcher.numObjectsMatched = numObjectsMatched;

            if (currPatternObject != null)
                newMatcher.currPatternObject = currPatternObject.clone();

            if (atWord == runtime.@prose) {
                newMatcher.switchToState_MATCHING_PROSE();
                if (parentheticalStack != null) {
                    //newMatcher.parentheticalStack = new Stack<ProseObject>(parentheticalStack);
                    newMatcher.parentheticalStack = new Stack<ProseObject>();
                    ProseObject[] objs = parentheticalStack.ToArray();
                    for (int i=objs.Length - 1; i >= 0; i--)
                        newMatcher.parentheticalStack.Push(objs[i]);

                }
                newMatcher.inText = inText;
            }
            else if (atWord == runtime.@text) {
                newMatcher.switchToState_MATCHING_TEXT();
                newMatcher.textMatchingQQcount = textMatchingQQcount;
            }
            else if (atWord == runtime.@pattern) {
                newMatcher.switchToState_MATCHING_PATTERN();
            }
            else {
                newMatcher.switchToState_MATCHING_OBJECT();
            }

            return newMatcher;
        }