private bool ProcessEndTag()
{
bool isProcessed = false;
string content = _innerContext.SourceCode;
int contentRemainderLength = _innerContext.RemainderLength;
var match = _endTagRegex.Match(content, _innerContext.Position, contentRemainderLength);
if (match.Success)
{
string endTag = match.Value;
string endTagName = match.Groups["tagName"].Value;
if (_tagStack.Count == 0)
{
throw new MarkupParsingException(
string.Format(Strings.ErrorMessage_StartTagNotDeclared, endTagName),
_innerContext.NodeCoordinates, _innerContext.GetSourceFragment());
}
StackedXmlTag stackedTag = _tagStack.Pop();
if (stackedTag.Name != endTagName)
{
if (_tagStack.Any(t => t.Name == endTagName))
{
throw new MarkupParsingException(
string.Format(Strings.ErrorMessage_NotClosedTag, stackedTag.Name),
stackedTag.Coordinates,
SourceCodeNavigator.GetSourceFragment(_innerContext.SourceCode, stackedTag.Coordinates));
}
throw new MarkupParsingException(
string.Format(Strings.ErrorMessage_StartTagNotDeclared, endTagName),
_innerContext.NodeCoordinates, _innerContext.GetSourceFragment());
}
if (_handlers.EndTag != null)
{
_handlers.EndTag(_context, endTagName);
}
_innerContext.IncreasePosition(endTag.Length);
isProcessed = true;
}
return isProcessed;
}