WebMarkupMin.Core.Parsers.HtmlParser.ParseEndTag C# (CSharp) Method

ParseEndTag() private method

Parses a end tag
private ParseEndTag ( string tagName, string tagNameInLowercase ) : void
tagName string Tag name
tagNameInLowercase string Tag name in lowercase
return void
        private void ParseEndTag(string tagName, string tagNameInLowercase)
        {
            int endTagIndex = 0;
            int lastTagIndex = _tagStack.Count - 1;
            bool tagNameNotEmpty = !string.IsNullOrEmpty(tagName);
            HtmlParsingHandlers.EndTagDelegate endTagHandler = _handlers.EndTag;

            if (tagNameNotEmpty)
            {
                for (endTagIndex = lastTagIndex; endTagIndex >= 0; endTagIndex--)
                {
                    if (_tagStack[endTagIndex].NameInLowercase == tagNameInLowercase)
                    {
                        break;
                    }
                }
            }

            if (endTagIndex >= 0)
            {
                // Close all the open elements, up the stack
                if (endTagHandler != null)
                {
                    for (int tagIndex = lastTagIndex; tagIndex >= endTagIndex; tagIndex--)
                    {
                        HtmlTag startTag = _tagStack[tagIndex];
                        string startTagNameInLowercase = startTag.NameInLowercase;
                        HtmlTagFlags startTagFlags = startTag.Flags;

                        string endTagName;
                        if (tagNameNotEmpty && tagNameInLowercase == startTagNameInLowercase)
                        {
                            endTagName = tagName;
                        }
                        else
                        {
                            endTagName = startTag.Name;
                        }

                        if (_xmlTagStack.Count > 0 && !startTagFlags.HasFlag(HtmlTagFlags.NonIndependent))
                        {
                            _xmlTagStack.Pop();
                        }

                        var endTag = new HtmlTag(endTagName, startTagNameInLowercase, startTagFlags);
                        endTagHandler(_context, endTag);
                    }
                }

                // Remove the open elements from the stack
                if (endTagIndex <= lastTagIndex)
                {
                    int tagToRemoveStartIndex = endTagIndex;
                    int tagsToRemoveCount = lastTagIndex - endTagIndex + 1;

                    _tagStack.RemoveRange(tagToRemoveStartIndex, tagsToRemoveCount);
                }
            }
            else if (tagNameNotEmpty && _conditionalCommentOpened)
            {
                if (_xmlTagStack.Count > 0 && HtmlTagFlagsHelpers.IsXmlBasedTag(tagNameInLowercase))
                {
                    _xmlTagStack.Pop();
                }

                var endTag = new HtmlTag(tagName, tagNameInLowercase, GetTagFlagsByName(tagNameInLowercase));
                if (endTagHandler != null)
                {
                    endTagHandler(_context, endTag);
                }
            }
        }

Same methods

HtmlParser::ParseEndTag ( ) : void