[xml] PATCH: XPath eq and neq operators (NON STANDARD ?)
- From: "pwhelan" <pwhelan exis cl>
- To: xml gnome org
- Subject: [xml] PATCH: XPath eq and neq operators (NON STANDARD ?)
- Date: Thu, 11 Jan 2007 14:13:28 -0300
Hello
This patch adds support for the 'eq' and 'neq' operators, in a way so that
they are just aliases for the '=' and '!=' operators.
This patch is really just a 'personal itch' kind of thing to handle the
needs of a customer.
Thanks for the great library,
Phillip Whelan
--- libxml2-2.6.27/xpath.c 2006-11-23 14:25:16.000000000 -0300
+++ libxml2-2.6.27-eq-xpath-patch/xpath.c 2007-01-11 13:10:24.000000000 -0300
@@ -10734,6 +10735,32 @@
}
}
+
+/**
+ * xmlXPathIsEqualityExpr;
+ * @ctxt: the XPath Parser context
+ *
+ * Test if an expresion is an equality expression.
+ *
+ */
+static int xmlXPathIsEqualityExpr(xmlXPathParserContextPtr ctxt)
+{
+ if ( CUR == '=' )
+ return 1;
+
+ if ((CUR == '!') && (NXT(1) == '='))
+ return 1;
+
+ if ((CUR == 'e') && (NXT(1) == 'q'))
+ return 1;
+
+ if ((CUR == 'n') && (NXT(1) == 'e') && (NXT(2) == 'q'))
+ return 1;
+
+ return 0;
+}
+
+
/**
* xmlXPathCompEqualityExpr:
* @ctxt: the XPath Parser context
@@ -10754,15 +10781,23 @@
xmlXPathCompEqualityExpr(xmlXPathParserContextPtr ctxt) {
xmlXPathCompRelationalExpr(ctxt);
CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == '=') || ((CUR == '!') && (NXT(1) == '='))) {
+ SKIP_BLANKS;
+ while (xmlXPathIsEqualityExpr(ctxt)) {
int eq;
int op1 = ctxt->comp->last;
-
- if (CUR == '=') eq = 1;
+
+ if ((CUR == '='))
+ eq = 1;
+ else if ((CUR == 'e') && (NXT(1) == 'q'))
+ eq = 1;
else eq = 0;
+
NEXT;
- if (!eq) NEXT;
+ if ((!eq) || (eq && CUR == 'q'))
+ NEXT;
+ if ((!eq) && (CUR == 'q'))
+ NEXT;
+
SKIP_BLANKS;
xmlXPathCompRelationalExpr(ctxt);
CHECK_ERROR;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]