/// <summary>
/// Determines if element is a self-closing element (i.e. like <br />
/// </summary>
/// <param name="textProvider">Text provider</param>
/// <param name="prefixRange">Text range of the element prefix</param>
/// <param name="nameRange">Text range of the element name</param>
/// <returns>True if element is a self-closing element.</returns>
public bool IsSelfClosing(ITextProvider textProvider, ITextRange prefixRange, ITextRange nameRange)
{
if (nameRange.Length == 0)
{
return(false);
}
string name = textProvider.GetText(nameRange);
if (name[0] == '!')
{
return(true); // bang tags are always self-closing
}
if (prefixRange.Length == 0)
{
return(_defaultProvider.IsSelfClosing(textProvider, nameRange));
}
string prefix = textProvider.GetText(prefixRange);
IHtmlClosureProvider provider;;
_providers.TryGetValue(prefix, out provider);
var textRangeProvider = provider as IHtmlClosureProviderTextRange;
if (textRangeProvider != null)
{
return(textRangeProvider.IsSelfClosing(textProvider, nameRange));
}
if (provider != null)
{
return(provider.IsSelfClosing(name));
}
return(false);
}