8280 {
8281
8284
8285 if (lo && ro) return lo < ro;
8286
8287
8288 xml_node ln = lhs.node(), rn = rhs.node();
8289
8290
8291 if (lhs.attribute() && rhs.attribute())
8292 {
8293
8294 if (lhs.parent() == rhs.parent())
8295 {
8296
8297 for (xml_attribute a = lhs.attribute(); a; a = a.next_attribute())
8298 if (a == rhs.attribute())
8299 return true;
8300
8301 return false;
8302 }
8303
8304
8305 ln = lhs.parent();
8306 rn = rhs.parent();
8307 }
8308 else if (lhs.attribute())
8309 {
8310
8311 if (lhs.parent() == rhs.node()) return false;
8312
8313 ln = lhs.parent();
8314 }
8315 else if (rhs.attribute())
8316 {
8317
8318 if (rhs.parent() == lhs.node()) return true;
8319
8320 rn = rhs.parent();
8321 }
8322
8323 if (ln == rn) return false;
8324
8325 if (!ln || !rn) return ln < rn;
8326
8327 return node_is_before(ln.internal_object(), rn.internal_object());
8328 }
PUGI__FN const void * document_buffer_order(const xpath_node &xnode)
PUGI__FN bool node_is_before(xml_node_struct *ln, xml_node_struct *rn)