private bool RemoveLastStartTagFromBuffer(HtmlTag startTag)
{
int bufferItemCount = _buffer.Count;
if (bufferItemCount == 0)
{
return false;
}
bool isEndTagRemoved = false;
int lastStartTagBeginAngleBracketIndex = _buffer.LastIndexOf("<");
if (lastStartTagBeginAngleBracketIndex != -1)
{
string lastTagName = _buffer[lastStartTagBeginAngleBracketIndex + 1];
if (lastTagName.IgnoreCaseEquals(startTag.NameInLowercase))
{
int lastStartTagEndAngleBracketIndex = _buffer.IndexOf(">", lastStartTagBeginAngleBracketIndex);
if (lastStartTagEndAngleBracketIndex != -1)
{
int lastBufferItemIndex = bufferItemCount - 1;
bool noMoreContent = true;
if (lastStartTagEndAngleBracketIndex != lastBufferItemIndex)
{
for (int bufferItemIndex = lastStartTagEndAngleBracketIndex + 1;
bufferItemIndex < bufferItemCount;
bufferItemIndex++)
{
if (!string.IsNullOrWhiteSpace(_buffer[bufferItemIndex]))
{
noMoreContent = false;
break;
}
}
}
if (noMoreContent)
{
_buffer.RemoveRange(lastStartTagBeginAngleBracketIndex,
bufferItemCount - lastStartTagBeginAngleBracketIndex);
isEndTagRemoved = true;
}
}
}
}
return isEndTagRemoved;
}