private static XmlNode NormalizeText(XmlNode n) { XmlNode retnode = null; while (n.IsText()) { retnode = n; n = n.PreviousSibling; if (n == null) { XmlNode intnode = retnode; while (true) { if (intnode.ParentNode != null && intnode.ParentNode.NodeType == XmlNodeType.EntityReference) { if (intnode.ParentNode.PreviousSibling != null) { n = intnode.ParentNode.PreviousSibling; break; } else { intnode = intnode.ParentNode; if (intnode == null) { break; } } } else { break; } } } if (n == null) { break; } while (n.NodeType == XmlNodeType.EntityReference) { n = n.LastChild; // The only possibility of this happening is when // XmlEntityReference is not expanded. // All entities are expanded when created in XmlDocument. // If you try to create standalone XmlEntityReference // it is not expanded until you set its parent. Debug.Assert(n != null); } } return(retnode); }
private XmlNode TextEnd(XmlNode node) { XmlNode end; do { end = node; node = NextSibling(node); } while (node != null && node.IsText()); return end; }
private XmlNode TextStart(XmlNode node) { XmlNode start; do { start = node; node = PreviousSibling(node); } while (node != null && node.IsText()); return start; }
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; }
private static XmlNode NormalizeText(XmlNode n) { XmlNode retnode = null; while (n.IsText()) { retnode = n; n = n.PreviousSibling; if (n == null) { XmlNode intnode = retnode; while (true) { if (intnode.ParentNode != null && intnode.ParentNode.NodeType == XmlNodeType.EntityReference) { if (intnode.ParentNode.PreviousSibling != null) { n = intnode.ParentNode.PreviousSibling; break; } else { intnode = intnode.ParentNode; if (intnode == null) break; } } else break; } } if (n == null) break; while (n.NodeType == XmlNodeType.EntityReference) { n = n.LastChild; // The only possibility of this happening is when // XmlEntityReference is not expanded. // All entities are expanded when created in XmlDocument. // If you try to create standalone XmlEntityReference // it is not expanded until you set its parent. Debug.Assert(n != null); } } return retnode; }