private bool CanRemoveOptionalEndTagByParentTag(HtmlTag optionalEndTag, HtmlTag parentTag)
{
string optionalEndTagNameInLowercase = optionalEndTag.NameInLowercase;
if (_settings.PreservableOptionalTagCollection.Contains(optionalEndTagNameInLowercase))
{
return false;
}
string parentTagNameInLowercase = parentTag.NameInLowercase;
bool canRemove;
switch (optionalEndTagNameInLowercase)
{
case "p":
canRemove = parentTagNameInLowercase != "a";
break;
case "li":
canRemove = parentTagNameInLowercase == "ul" || parentTagNameInLowercase == "ol"
|| parentTagNameInLowercase == "menu";
break;
case "tbody":
case "tfoot":
canRemove = parentTagNameInLowercase == "table";
break;
case "tr":
canRemove = parentTagNameInLowercase == "table" || parentTagNameInLowercase == "thead"
|| parentTagNameInLowercase == "tbody" || parentTagNameInLowercase == "tfoot";
break;
case "td":
case "th":
canRemove = parentTagNameInLowercase == "tr";
break;
case "option":
canRemove = parentTagNameInLowercase == "select" || parentTagNameInLowercase == "optgroup"
|| parentTagNameInLowercase == "datalist";
break;
case "optgroup":
canRemove = parentTagNameInLowercase == "select";
break;
case "dd":
canRemove = parentTagNameInLowercase == "dl";
break;
case "rt":
canRemove = parentTagNameInLowercase == "ruby" || parentTagNameInLowercase == "rtc";
break;
case "rp":
case "rb":
case "rtc":
canRemove = parentTagNameInLowercase == "ruby";
break;
default:
canRemove = false;
break;
}
return canRemove;
}