/// <summary> Begins the processing of an xml tag </summary>
		public virtual void StartTag(XmlTagInfo tag)
		{
			XmlLightElement parent = _parserStack.Peek();
			XmlLightElement e = new XmlLightElement(parent, tag);

			if (Root == null && _parserStack.Count == 1)
				Root = e;
			if (tag.SelfClosed == false)
				_parserStack.Push(e);
		}
Exemple #2
0
        /// <summary> Ends the processing of an xml tag </summary>
        public virtual void EndTag(XmlTagInfo tag)
        {
            XmlLightElement e = _parserStack.Pop();

            if (e.TagName != tag.FullName)
            {
                throw new XmlException(String.Format("Incorrect tag closed '</{0}>', expected '</{1}>'", tag.FullName, e.TagName));
            }
            e.ClosingTagWhitespace = tag.EndingWhitespace;
        }
Exemple #3
0
        /// <summary> Begins the processing of an xml tag </summary>
        public virtual void StartTag(XmlTagInfo tag)
        {
            XmlLightElement parent = _parserStack.Peek();
            XmlLightElement e      = new XmlLightElement(parent, tag);

            if (Root == null && _parserStack.Count == 1)
            {
                Root = e;
            }
            if (tag.SelfClosed == false)
            {
                _parserStack.Push(e);
            }
        }
        /// <summary> </summary>
        public override void EndTag(XmlTagInfo tag)
        {
            if (_nonClosedTags.Contains(tag.FullName))
            {
                return;
            }

            XmlLightElement closed = null;

            try
            {
                XmlLightElement[] stack = _parserStack.ToArray();
                if (stack[0].TagName == tag.FullName)
                {
                    closed = _parserStack.Pop();
                    return;
                }

                //closes any tags left open in these elements
                bool found = false;
                for (int i = 0; !found && i < stack.Length; i++)
                {
                    found = found || StringComparer.OrdinalIgnoreCase.Equals(stack[i].TagName, tag.FullName);
                }

                while (found &&
                       StringComparer.OrdinalIgnoreCase.Equals((closed = _parserStack.Pop()).TagName, tag.FullName) == false)
                {
                }
            }
            finally
            {
                if (closed != null && StringComparer.OrdinalIgnoreCase.Equals(closed.TagName, tag.FullName))
                {
                    closed.ClosingTagWhitespace = tag.EndingWhitespace;
                }
            }
        }
        /// <summary> </summary>
        public override void StartTag(XmlTagInfo tag)
        {
            if (_nonClosedTags.Contains(tag.FullName))
            {
                tag.SelfClosed = true;
            }

            XmlLightElement parent = _parserStack.Peek();
            List <string>   allowedParents;

            if (_nonNestingTags.Contains(tag.FullName) && StringComparer.OrdinalIgnoreCase.Equals(parent.TagName, tag.FullName))
            {
                _parserStack.Pop();
            }
            else if (_htmlHeirarchy.TryGetValue(tag.FullName, out allowedParents))
            {
                int depth = 0;
                XmlLightElement[] stack = _parserStack.ToArray();
                while (depth < stack.Length && allowedParents.BinarySearch(stack[depth].TagName, StringComparer.OrdinalIgnoreCase) < 0)
                {
                    depth++;
                }

                if (depth < stack.Length)
                {
                    for (; depth > 0; depth--)
                    {
                        _parserStack.Pop();
                    }
                }
                else
                {
                    StartTag(new XmlTagInfo(allowedParents[0], false));
                }
            }

            base.StartTag(tag);
        }
 internal XmlLightElement(XmlLightElement parent, XmlTagInfo tag)
     : this(parent, tag.SelfClosed, tag.FullName, tag.EndingWhitespace, tag.UnparsedTag, tag.Attributes)
 {
 }
		/// <summary> Ends the processing of an xml tag </summary>
		public virtual void EndTag(XmlTagInfo tag)
		{
			XmlLightElement e = _parserStack.Pop();
			if (e.TagName != tag.FullName)
				throw new XmlException(String.Format("Incorrect tag closed '</{0}>', expected '</{1}>'", tag.FullName, e.TagName));
			e.ClosingTagWhitespace = tag.EndingWhitespace;
		}
			public void StartTag(XmlTagInfo tag) { }
			public void EndTag(XmlTagInfo tag) { }
		internal XmlLightElement(XmlLightElement parent, XmlTagInfo tag)
			: this(parent, tag.SelfClosed, tag.FullName, tag.EndingWhitespace, tag.UnparsedTag, tag.Attributes)
		{ }