// 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); }
// 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; }