private XmlNode PreviousTextTail(XmlNode node, XmlNode text) {
if (text != null) {
return text;
}
if (!node.IsText) {
return null;
}
XmlNode sibling = node.PreviousSibling;
while (sibling == null) {
node = node.ParentNode;
if (node == null
|| node.NodeType != XmlNodeType.EntityReference) {
return null;
}
sibling = node.PreviousSibling;
}
while (sibling != null) {
switch (sibling.NodeType) {
case XmlNodeType.EntityReference:
sibling = sibling.LastChild;
break;
case XmlNodeType.Text:
case XmlNodeType.CDATA:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
return sibling;
default:
return null;
}
}
return null;
}