private bool CanRemoveOptionalEndTagByNextTag(HtmlTag optionalEndTag, HtmlTag nextTag)
{
string optionalEndTagNameInLowercase = optionalEndTag.NameInLowercase;
if (_settings.PreservableOptionalTagCollection.Contains(optionalEndTagNameInLowercase))
{
return false;
}
string nextTagNameInLowercase = nextTag.NameInLowercase;
bool canRemove;
switch (optionalEndTagNameInLowercase)
{
case "p":
canRemove = _tagsFollowingAfterParagraphOptionalEndTag.Contains(nextTagNameInLowercase);
break;
case "li":
canRemove = nextTagNameInLowercase == "li";
break;
case "thead":
case "tbody":
canRemove = nextTagNameInLowercase == "tbody" || nextTagNameInLowercase == "tfoot";
break;
case "tfoot":
canRemove = nextTagNameInLowercase == "tbody";
break;
case "tr":
canRemove = nextTagNameInLowercase == "tr";
break;
case "td":
case "th":
canRemove = nextTagNameInLowercase == "td" || nextTagNameInLowercase == "th";
break;
case "option":
canRemove = nextTagNameInLowercase == "option" || nextTagNameInLowercase == "optgroup";
break;
case "optgroup":
canRemove = nextTagNameInLowercase == "optgroup";
break;
case "dt":
case "dd":
canRemove = nextTagNameInLowercase == "dt" || nextTagNameInLowercase == "dd";
break;
case "rt":
case "rp":
case "rb":
canRemove = nextTagNameInLowercase == "rt" || nextTagNameInLowercase == "rp"
|| nextTagNameInLowercase == "rb" || nextTagNameInLowercase == "rtc"
;
break;
case "rtc":
canRemove = nextTagNameInLowercase == "rp" || nextTagNameInLowercase == "rb"
|| nextTagNameInLowercase == "rtc"
;
break;
default:
canRemove = false;
break;
}
return canRemove;
}