Beispiel #1
0
        /**
         * If the stack contains an element with this tag's name, pop up the stack to remove the first occurrence. If not
         * found, skips.
         *
         * @param endTag
         */
        private void PopStackToClose(Token.EndTag endTag)
        {
            string  elName     = endTag.Name();
            Element firstFound = null;

            IEnumerator <Element> it = _stack.GetDescendingEnumerator();

            while (it.MoveNext())
            {
                Element next = it.Current;
                if (next.NodeName.Equals(elName))
                {
                    firstFound = next;
                    break;
                }
            }
            if (firstFound == null)
            {
                return; // not found, skip
            }

            it = _stack.GetDescendingEnumerator();
            List <Element> remove = new List <Element>();

            while (it.MoveNext())
            {
                Element next = it.Current;
                if (next == firstFound)
                {
                    remove.Add(next);
                    break;
                }
                else
                {
                    remove.Add(next);
                }
            }
            foreach (Element item in remove)
            {
                _stack.Remove(item);
            }
        }