version 1.1.1.2, 2013/07/22 01:22:20
|
version 1.1.1.3, 2014/06/15 19:53:30
|
Line 7
|
Line 7
|
* |
* |
* Added support for the element() scheme described in: |
* Added support for the element() scheme described in: |
* W3C Proposed Recommendation 13 November 2002 |
* W3C Proposed Recommendation 13 November 2002 |
* http://www.w3.org/TR/2002/PR-xptr-element-20021113/ | * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ |
* |
* |
* See Copyright for the status of this software. |
* See Copyright for the status of this software. |
* |
* |
Line 47
|
Line 47
|
#endif |
#endif |
#endif |
#endif |
|
|
#define TODO \ | #define TODO \ |
xmlGenericError(xmlGenericErrorContext, \ |
xmlGenericError(xmlGenericErrorContext, \ |
"Unimplemented block at %s:%d\n", \ |
"Unimplemented block at %s:%d\n", \ |
__FILE__, __LINE__); |
__FILE__, __LINE__); |
|
|
#define STRANGE \ | #define STRANGE \ |
xmlGenericError(xmlGenericErrorContext, \ |
xmlGenericError(xmlGenericErrorContext, \ |
"Internal error at %s:%d\n", \ |
"Internal error at %s:%d\n", \ |
__FILE__, __LINE__); |
__FILE__, __LINE__); |
|
|
/************************************************************************ |
/************************************************************************ |
* * |
* * |
* Some factorized error routines * | * Some factorized error routines * |
* * |
* * |
************************************************************************/ |
************************************************************************/ |
|
|
Line 134 xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *lev
|
Line 134 xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *lev
|
static int |
static int |
xmlXPtrGetArity(xmlNodePtr cur) { |
xmlXPtrGetArity(xmlNodePtr cur) { |
int i; |
int i; |
if (cur == NULL) | if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) |
return(-1); |
return(-1); |
cur = cur->children; |
cur = cur->children; |
for (i = 0;cur != NULL;cur = cur->next) { |
for (i = 0;cur != NULL;cur = cur->next) { |
Line 157 xmlXPtrGetArity(xmlNodePtr cur) {
|
Line 157 xmlXPtrGetArity(xmlNodePtr cur) {
|
static int |
static int |
xmlXPtrGetIndex(xmlNodePtr cur) { |
xmlXPtrGetIndex(xmlNodePtr cur) { |
int i; |
int i; |
if (cur == NULL) | if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) |
return(-1); |
return(-1); |
for (i = 1;cur != NULL;cur = cur->prev) { |
for (i = 1;cur != NULL;cur = cur->prev) { |
if ((cur->type == XML_ELEMENT_NODE) || |
if ((cur->type == XML_ELEMENT_NODE) || |
Line 179 xmlXPtrGetIndex(xmlNodePtr cur) {
|
Line 179 xmlXPtrGetIndex(xmlNodePtr cur) {
|
static xmlNodePtr |
static xmlNodePtr |
xmlXPtrGetNthChild(xmlNodePtr cur, int no) { |
xmlXPtrGetNthChild(xmlNodePtr cur, int no) { |
int i; |
int i; |
if (cur == NULL) | if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) |
return(cur); |
return(cur); |
cur = cur->children; |
cur = cur->children; |
for (i = 0;i <= no;cur = cur->next) { |
for (i = 0;i <= no;cur = cur->next) { |
if (cur == NULL) | if (cur == NULL) |
return(cur); |
return(cur); |
if ((cur->type == XML_ELEMENT_NODE) || |
if ((cur->type == XML_ELEMENT_NODE) || |
(cur->type == XML_DOCUMENT_NODE) || |
(cur->type == XML_DOCUMENT_NODE) || |
Line 553 xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathOb
|
Line 553 xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathOb
|
break; |
break; |
case XPATH_NODESET: |
case XPATH_NODESET: |
/* |
/* |
* Empty set ... | * Empty set ... |
*/ |
*/ |
if (end->nodesetval->nodeNr <= 0) |
if (end->nodesetval->nodeNr <= 0) |
return(NULL); |
return(NULL); |
Line 731 xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathO
|
Line 731 xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathO
|
|
|
if (i >= cur->locNr) { |
if (i >= cur->locNr) { |
#ifdef DEBUG |
#ifdef DEBUG |
xmlGenericError(xmlGenericErrorContext, | xmlGenericError(xmlGenericErrorContext, |
"xmlXPtrLocationSetDel: Range wasn't found in RangeList\n"); |
"xmlXPtrLocationSetDel: Range wasn't found in RangeList\n"); |
#endif |
#endif |
return; |
return; |
Line 903 static void xmlXPtrEvalChildSeq(xmlXPathParserContextP
|
Line 903 static void xmlXPtrEvalChildSeq(xmlXPathParserContextP
|
#define NXT(val) ctxt->cur[(val)] |
#define NXT(val) ctxt->cur[(val)] |
#define CUR_PTR ctxt->cur |
#define CUR_PTR ctxt->cur |
|
|
#define SKIP_BLANKS \ | #define SKIP_BLANKS \ |
while (IS_BLANK_CH(*(ctxt->cur))) NEXT |
while (IS_BLANK_CH(*(ctxt->cur))) NEXT |
|
|
#define CURRENT (*ctxt->cur) |
#define CURRENT (*ctxt->cur) |
Line 945 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
Line 945 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
* xmlXPtrEvalXPtrPart: |
* xmlXPtrEvalXPtrPart: |
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* @name: the preparsed Scheme for the XPtrPart |
* @name: the preparsed Scheme for the XPtrPart |
* | * |
* XPtrPart ::= 'xpointer' '(' XPtrExpr ')' |
* XPtrPart ::= 'xpointer' '(' XPtrExpr ')' |
* | Scheme '(' SchemeSpecificExpr ')' |
* | Scheme '(' SchemeSpecificExpr ')' |
* |
* |
Line 953 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
Line 953 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
* |
* |
* SchemeSpecificExpr ::= StringWithBalancedParens |
* SchemeSpecificExpr ::= StringWithBalancedParens |
* |
* |
* StringWithBalancedParens ::= | * StringWithBalancedParens ::= |
* [^()]* ('(' StringWithBalancedParens ')' [^()]*)* |
* [^()]* ('(' StringWithBalancedParens ')' [^()]*)* |
* [VC: Parenthesis escaping] |
* [VC: Parenthesis escaping] |
* |
* |
Line 971 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
Line 971 xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int i
|
* |
* |
* Parse and evaluate an XPtrPart. Basically it generates the unescaped |
* Parse and evaluate an XPtrPart. Basically it generates the unescaped |
* string and if the scheme is 'xpointer' it will call the XPath interpreter. |
* string and if the scheme is 'xpointer' it will call the XPath interpreter. |
* | * |
* TODO: there is no new scheme registration mechanism |
* TODO: there is no new scheme registration mechanism |
*/ |
*/ |
|
|
Line 1097 xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xml
|
Line 1097 xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xml
|
xmlFree(name); |
xmlFree(name); |
XP_ERROR(XPATH_MEMORY_ERROR); |
XP_ERROR(XPATH_MEMORY_ERROR); |
} |
} |
| |
xmlXPathRegisterNs(ctxt->context, prefix, URI); |
xmlXPathRegisterNs(ctxt->context, prefix, URI); |
CUR_PTR = left; |
CUR_PTR = left; |
xmlFree(URI); |
xmlFree(URI); |
Line 1229 xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xml
|
Line 1229 xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xml
|
while (CUR == '/') { |
while (CUR == '/') { |
int child = 0; |
int child = 0; |
NEXT; |
NEXT; |
| |
while ((CUR >= '0') && (CUR <= '9')) { |
while ((CUR >= '0') && (CUR <= '9')) { |
child = child * 10 + (CUR - '0'); |
child = child * 10 + (CUR - '0'); |
NEXT; |
NEXT; |
Line 1253 static void
|
Line 1253 static void
|
xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) { |
xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) { |
if (ctxt->valueTab == NULL) { |
if (ctxt->valueTab == NULL) { |
/* Allocate the value stack */ |
/* Allocate the value stack */ |
ctxt->valueTab = (xmlXPathObjectPtr *) | ctxt->valueTab = (xmlXPathObjectPtr *) |
xmlMalloc(10 * sizeof(xmlXPathObjectPtr)); |
xmlMalloc(10 * sizeof(xmlXPathObjectPtr)); |
if (ctxt->valueTab == NULL) { |
if (ctxt->valueTab == NULL) { |
xmlXPtrErrMemory("allocating evaluation context"); |
xmlXPtrErrMemory("allocating evaluation context"); |
Line 1396 xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx
|
Line 1396 xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx
|
/* |
/* |
* Evaluation may push a root nodeset which is unused |
* Evaluation may push a root nodeset which is unused |
*/ |
*/ |
xmlNodeSetPtr set; | xmlNodeSetPtr set; |
set = tmp->nodesetval; |
set = tmp->nodesetval; |
if ((set->nodeNr != 1) || |
if ((set->nodeNr != 1) || |
(set->nodeTab[0] != (xmlNodePtr) ctx->doc)) |
(set->nodeTab[0] != (xmlNodePtr) ctx->doc)) |
stack++; |
stack++; |
} else |
} else |
stack++; | stack++; |
} |
} |
xmlXPathFreeObject(tmp); |
xmlXPathFreeObject(tmp); |
} |
} |
Line 1416 xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx
|
Line 1416 xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx
|
xmlXPathFreeObject(res); |
xmlXPathFreeObject(res); |
res = NULL; |
res = NULL; |
} |
} |
| |
xmlXPathFreeParserContext(ctxt); |
xmlXPathFreeParserContext(ctxt); |
return(res); |
return(res); |
} |
} |
Line 1444 xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
Line 1444 xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
return(NULL); |
return(NULL); |
start = (xmlNodePtr) range->user; |
start = (xmlNodePtr) range->user; |
|
|
if (start == NULL) | if ((start == NULL) || (start->type == XML_NAMESPACE_DECL)) |
return(NULL); |
return(NULL); |
end = range->user2; |
end = range->user2; |
if (end == NULL) |
if (end == NULL) |
return(xmlCopyNode(start, 1)); |
return(xmlCopyNode(start, 1)); |
|
if (end->type == XML_NAMESPACE_DECL) |
|
return(NULL); |
|
|
cur = start; |
cur = start; |
index1 = range->index; |
index1 = range->index; |
Line 1478 xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
Line 1480 xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
/* prune and return full set */ |
/* prune and return full set */ |
if (last != NULL) |
if (last != NULL) |
xmlAddNextSibling(last, tmp); |
xmlAddNextSibling(last, tmp); |
else | else |
xmlAddChild(parent, tmp); |
xmlAddChild(parent, tmp); |
return(list); |
return(list); |
} else { |
} else { |
Line 1732 xmlXPtrNbLocChildren(xmlNodePtr node) {
|
Line 1734 xmlXPtrNbLocChildren(xmlNodePtr node) {
|
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* @nargs: the number of args |
* @nargs: the number of args |
* |
* |
* Function implementing here() operation | * Function implementing here() operation |
* as described in 5.4.3 |
* as described in 5.4.3 |
*/ |
*/ |
static void |
static void |
Line 1741 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int
|
Line 1743 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int
|
|
|
if (ctxt->context->here == NULL) |
if (ctxt->context->here == NULL) |
XP_ERROR(XPTR_SYNTAX_ERROR); |
XP_ERROR(XPTR_SYNTAX_ERROR); |
| |
valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL)); |
valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL)); |
} |
} |
|
|
Line 1750 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int
|
Line 1752 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int
|
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* @nargs: the number of args |
* @nargs: the number of args |
* |
* |
* Function implementing origin() operation | * Function implementing origin() operation |
* as described in 5.4.3 |
* as described in 5.4.3 |
*/ |
*/ |
static void |
static void |
Line 1759 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, i
|
Line 1761 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, i
|
|
|
if (ctxt->context->origin == NULL) |
if (ctxt->context->origin == NULL) |
XP_ERROR(XPTR_SYNTAX_ERROR); |
XP_ERROR(XPTR_SYNTAX_ERROR); |
| |
valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL)); |
valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL)); |
} |
} |
|
|
Line 1768 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, i
|
Line 1770 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, i
|
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* @nargs: the number of args |
* @nargs: the number of args |
* |
* |
* Function implementing start-point() operation | * Function implementing start-point() operation |
* as described in 5.4.3 |
* as described in 5.4.3 |
* ---------------- |
* ---------------- |
* location-set start-point(location-set) |
* location-set start-point(location-set) |
Line 1860 xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctx
|
Line 1862 xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctx
|
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* @nargs: the number of args |
* @nargs: the number of args |
* |
* |
* Function implementing end-point() operation | * Function implementing end-point() operation |
* as described in 5.4.3 |
* as described in 5.4.3 |
* ---------------------------- |
* ---------------------------- |
* location-set end-point(location-set) |
* location-set end-point(location-set) |
Line 1996 xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xm
|
Line 1998 xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xm
|
case XML_NOTATION_NODE: |
case XML_NOTATION_NODE: |
case XML_HTML_DOCUMENT_NODE: { |
case XML_HTML_DOCUMENT_NODE: { |
int indx = xmlXPtrGetIndex(node); |
int indx = xmlXPtrGetIndex(node); |
| |
node = node->parent; |
node = node->parent; |
return(xmlXPtrNewRange(node, indx - 1, |
return(xmlXPtrNewRange(node, indx - 1, |
node, indx + 1)); |
node, indx + 1)); |
Line 2243 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
Line 2245 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
|
|
cur = ctxt->cur; |
cur = ctxt->cur; |
newset = xmlXPtrLocationSetCreate(NULL); |
newset = xmlXPtrLocationSetCreate(NULL); |
| |
for (i = 0; i < oldset->nodeNr; i++) { |
for (i = 0; i < oldset->nodeNr; i++) { |
ctxt->cur = cur; |
ctxt->cur = cur; |
|
|
Line 2277 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
Line 2279 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
res = valuePop(ctxt); |
res = valuePop(ctxt); |
xmlXPathFreeObject(res); |
xmlXPathFreeObject(res); |
} |
} |
| |
ctxt->context->node = NULL; |
ctxt->context->node = NULL; |
} |
} |
|
|
Line 2297 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
Line 2299 xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
|
* @level: incremented/decremented to show level in tree |
* @level: incremented/decremented to show level in tree |
* |
* |
* Advance to the next element or text node in document order |
* Advance to the next element or text node in document order |
* TODO: add a stack for entering/exiting entities | * TODO: add a stack for entering/exiting entities |
* |
* |
* Returns -1 in case of failure, 0 otherwise |
* Returns -1 in case of failure, 0 otherwise |
*/ |
*/ |
xmlNodePtr |
xmlNodePtr |
xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) { |
xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) { |
next: |
next: |
if (cur == NULL) | if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) |
return(NULL); |
return(NULL); |
if (cur->children != NULL) { |
if (cur->children != NULL) { |
cur = cur->children ; |
cur = cur->children ; |
Line 2362 xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int by
|
Line 2364 xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int by
|
if ((node == NULL) || (indx == NULL)) |
if ((node == NULL) || (indx == NULL)) |
return(-1); |
return(-1); |
cur = *node; |
cur = *node; |
if (cur == NULL) | if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) |
return(-1); |
return(-1); |
pos = *indx; |
pos = *indx; |
|
|
Line 2400 xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int by
|
Line 2402 xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int by
|
return(0); |
return(0); |
} |
} |
/* |
/* |
* We should have a text (or cdata) node ... | * We should have a text (or cdata) node ... |
*/ |
*/ |
len = 0; |
len = 0; |
if ((cur->type != XML_ELEMENT_NODE) && |
if ((cur->type != XML_ELEMENT_NODE) && |
Line 2453 xmlXPtrMatchString(const xmlChar *string, xmlNodePtr s
|
Line 2455 xmlXPtrMatchString(const xmlChar *string, xmlNodePtr s
|
|
|
if (string == NULL) |
if (string == NULL) |
return(-1); |
return(-1); |
if (start == NULL) | if ((start == NULL) || (start->type == XML_NAMESPACE_DECL)) |
return(-1); |
return(-1); |
if ((end == NULL) || (endindex == NULL)) | if ((end == NULL) || (*end == NULL) || |
| ((*end)->type == XML_NAMESPACE_DECL) || (endindex == NULL)) |
return(-1); |
return(-1); |
cur = start; |
cur = start; |
if (cur == NULL) |
if (cur == NULL) |
Line 2538 xmlXPtrSearchString(const xmlChar *string, xmlNodePtr
|
Line 2541 xmlXPtrSearchString(const xmlChar *string, xmlNodePtr
|
|
|
if (string == NULL) |
if (string == NULL) |
return(-1); |
return(-1); |
if ((start == NULL) || (startindex == NULL)) | if ((start == NULL) || (*start == NULL) || |
| ((*start)->type == XML_NAMESPACE_DECL) || (startindex == NULL)) |
return(-1); |
return(-1); |
if ((end == NULL) || (endindex == NULL)) |
if ((end == NULL) || (endindex == NULL)) |
return(-1); |
return(-1); |
cur = *start; |
cur = *start; |
if (cur == NULL) |
|
return(-1); |
|
pos = *startindex - 1; |
pos = *startindex - 1; |
first = string[0]; |
first = string[0]; |
|
|
Line 2577 xmlXPtrSearchString(const xmlChar *string, xmlNodePtr
|
Line 2579 xmlXPtrSearchString(const xmlChar *string, xmlNodePtr
|
/* |
/* |
* An empty string is considered to match before each |
* An empty string is considered to match before each |
* character of the string-value and after the final |
* character of the string-value and after the final |
* character. | * character. |
*/ |
*/ |
#ifdef DEBUG_RANGES |
#ifdef DEBUG_RANGES |
xmlGenericError(xmlGenericErrorContext, |
xmlGenericError(xmlGenericErrorContext, |
Line 2618 xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
|
Line 2620 xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
|
xmlNodePtr cur; |
xmlNodePtr cur; |
int pos, len = 0; |
int pos, len = 0; |
|
|
if ((node == NULL) || (indx == NULL)) | if ((node == NULL) || (*node == NULL) || |
| ((*node)->type == XML_NAMESPACE_DECL) || (indx == NULL)) |
return(-1); |
return(-1); |
cur = *node; |
cur = *node; |
pos = *indx; |
pos = *indx; |
|
|
if (cur == NULL) |
|
return(-1); |
|
|
|
if ((cur->type == XML_ELEMENT_NODE) || |
if ((cur->type == XML_ELEMENT_NODE) || |
(cur->type == XML_DOCUMENT_NODE) || |
(cur->type == XML_DOCUMENT_NODE) || |
(cur->type == XML_HTML_DOCUMENT_NODE)) { |
(cur->type == XML_HTML_DOCUMENT_NODE)) { |
Line 2729 xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *
|
Line 2729 xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *
|
* @nargs: the number of args |
* @nargs: the number of args |
* |
* |
* Function implementing the string-range() function |
* Function implementing the string-range() function |
* range as described in 5.4.2 | * range as described in 5.4.2 |
* |
* |
* ------------------------------ |
* ------------------------------ |
* [Definition: For each location in the location-set argument, |
* [Definition: For each location in the location-set argument, |
Line 2893 error:
|
Line 2893 error:
|
* @ctxt: the XPointer Parser context |
* @ctxt: the XPointer Parser context |
* |
* |
* [8] Predicate ::= '[' PredicateExpr ']' |
* [8] Predicate ::= '[' PredicateExpr ']' |
* [9] PredicateExpr ::= Expr | * [9] PredicateExpr ::= Expr |
* |
* |
* Evaluate a predicate as in xmlXPathEvalPredicate() but for |
* Evaluate a predicate as in xmlXPathEvalPredicate() but for |
* a Location Set instead of a node set |
* a Location Set instead of a node set |
Line 2942 xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctx
|
Line 2942 xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctx
|
*/ |
*/ |
cur = ctxt->cur; |
cur = ctxt->cur; |
newset = xmlXPtrLocationSetCreate(NULL); |
newset = xmlXPtrLocationSetCreate(NULL); |
| |
for (i = 0; i < oldset->locNr; i++) { |
for (i = 0; i < oldset->locNr; i++) { |
ctxt->cur = cur; |
ctxt->cur = cur; |
|
|
Line 2978 xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctx
|
Line 2978 xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctx
|
res = valuePop(ctxt); |
res = valuePop(ctxt); |
xmlXPathFreeObject(res); |
xmlXPathFreeObject(res); |
} |
} |
| |
ctxt->context->node = NULL; |
ctxt->context->node = NULL; |
} |
} |
|
|