Index: third_party/libxslt/libexslt/dynamic.c |
diff --git a/third_party/libxslt/libexslt/dynamic.c b/third_party/libxslt/libexslt/dynamic.c |
deleted file mode 100644 |
index 4a4944e8e39cbaad757bb22828cc2c2b685c1d8e..0000000000000000000000000000000000000000 |
--- a/third_party/libxslt/libexslt/dynamic.c |
+++ /dev/null |
@@ -1,301 +0,0 @@ |
-/* |
- * dynamic.c: Implementation of the EXSLT -- Dynamic module |
- * |
- * References: |
- * http://www.exslt.org/dyn/dyn.html |
- * |
- * See Copyright for the status of this software. |
- * |
- * Authors: |
- * Mark Vakoc <mark_vakoc@jdedwards.com> |
- * Thomas Broyer <tbroyer@ltgt.net> |
- * |
- * TODO: |
- * elements: |
- * functions: |
- * min |
- * max |
- * sum |
- * map |
- * closure |
- */ |
- |
-#define IN_LIBEXSLT |
-#include "libexslt/libexslt.h" |
- |
-#if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) |
-#include <win32config.h> |
-#else |
-#include "config.h" |
-#endif |
- |
-#include <libxml/tree.h> |
-#include <libxml/xpath.h> |
-#include <libxml/xpathInternals.h> |
- |
-#include <libxslt/xsltconfig.h> |
-#include <libxslt/xsltutils.h> |
-#include <libxslt/xsltInternals.h> |
-#include <libxslt/extensions.h> |
- |
-#include "exslt.h" |
- |
-/** |
- * exsltDynEvaluateFunction: |
- * @ctxt: an XPath parser context |
- * @nargs: the number of arguments |
- * |
- * Evaluates the string as an XPath expression and returns the result |
- * value, which may be a boolean, number, string, node set, result tree |
- * fragment or external object. |
- */ |
- |
-static void |
-exsltDynEvaluateFunction(xmlXPathParserContextPtr ctxt, int nargs) { |
- xmlChar *str = NULL; |
- xmlXPathObjectPtr ret = NULL; |
- |
- if (ctxt == NULL) |
- return; |
- if (nargs != 1) { |
- xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL); |
- xsltGenericError(xsltGenericErrorContext, |
- "dyn:evalute() : invalid number of args %d\n", nargs); |
- ctxt->error = XPATH_INVALID_ARITY; |
- return; |
- } |
- str = xmlXPathPopString(ctxt); |
- /* return an empty node-set if an empty string is passed in */ |
- if (!str||!xmlStrlen(str)) { |
- if (str) xmlFree(str); |
- valuePush(ctxt,xmlXPathNewNodeSet(NULL)); |
- return; |
- } |
- ret = xmlXPathEval(str,ctxt->context); |
- if (ret) |
- valuePush(ctxt,ret); |
- else { |
- xsltGenericError(xsltGenericErrorContext, |
- "dyn:evaluate() : unable to evaluate expression '%s'\n",str); |
- valuePush(ctxt,xmlXPathNewNodeSet(NULL)); |
- } |
- xmlFree(str); |
- return; |
-} |
- |
-/** |
- * exsltDynMapFunction: |
- * @ctxt: an XPath parser context |
- * @nargs: the number of arguments |
- * |
- * Evaluates the string as an XPath expression and returns the result |
- * value, which may be a boolean, number, string, node set, result tree |
- * fragment or external object. |
- */ |
- |
-static void |
-exsltDynMapFunction(xmlXPathParserContextPtr ctxt, int nargs) |
-{ |
- xmlChar *str = NULL; |
- xmlNodeSetPtr nodeset = NULL; |
- xsltTransformContextPtr tctxt; |
- xmlXPathCompExprPtr comp = NULL; |
- xmlXPathObjectPtr ret = NULL; |
- xmlDocPtr oldDoc, container = NULL; |
- xmlNodePtr oldNode; |
- int oldContextSize; |
- int oldProximityPosition; |
- int i, j; |
- |
- |
- if (nargs != 2) { |
- xmlXPathSetArityError(ctxt); |
- return; |
- } |
- str = xmlXPathPopString(ctxt); |
- if (xmlXPathCheckError(ctxt)) { |
- xmlXPathSetTypeError(ctxt); |
- return; |
- } |
- |
- nodeset = xmlXPathPopNodeSet(ctxt); |
- if (xmlXPathCheckError(ctxt)) { |
- xmlXPathSetTypeError(ctxt); |
- return; |
- } |
- if (str == NULL || !xmlStrlen(str) || !(comp = xmlXPathCompile(str))) { |
- if (nodeset != NULL) |
- xmlXPathFreeNodeSet(nodeset); |
- if (str != NULL) |
- xmlFree(str); |
- valuePush(ctxt, xmlXPathNewNodeSet(NULL)); |
- return; |
- } |
- |
- ret = xmlXPathNewNodeSet(NULL); |
- if (ret == NULL) { |
- xsltGenericError(xsltGenericErrorContext, |
- "exsltDynMapFunction: ret == NULL\n"); |
- goto cleanup; |
- } |
- |
- oldDoc = ctxt->context->doc; |
- oldNode = ctxt->context->node; |
- oldContextSize = ctxt->context->contextSize; |
- oldProximityPosition = ctxt->context->proximityPosition; |
- |
- /** |
- * since we really don't know we're going to be adding node(s) |
- * down the road we create the RVT regardless |
- */ |
- tctxt = xsltXPathGetTransformContext(ctxt); |
- if (tctxt == NULL) { |
- xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, |
- "dyn:map : internal error tctxt == NULL\n"); |
- goto cleanup; |
- } |
- container = xsltCreateRVT(tctxt); |
- if (container == NULL) { |
- xsltTransformError(tctxt, NULL, NULL, |
- "dyn:map : internal error container == NULL\n"); |
- goto cleanup; |
- } |
- xsltRegisterLocalRVT(tctxt, container); |
- if (nodeset && nodeset->nodeNr > 0) { |
- xmlXPathNodeSetSort(nodeset); |
- ctxt->context->contextSize = nodeset->nodeNr; |
- ctxt->context->proximityPosition = 0; |
- for (i = 0; i < nodeset->nodeNr; i++) { |
- xmlXPathObjectPtr subResult = NULL; |
- xmlNodePtr cur = nodeset->nodeTab[i]; |
- |
- ctxt->context->proximityPosition++; |
- ctxt->context->node = cur; |
- |
- if (cur->type == XML_NAMESPACE_DECL) { |
- /* |
- * The XPath module sets the owner element of a ns-node on |
- * the ns->next field. |
- */ |
- cur = (xmlNodePtr) ((xmlNsPtr) cur)->next; |
- if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE)) { |
- xsltGenericError(xsltGenericErrorContext, |
- "Internal error in exsltDynMapFunction: " |
- "Cannot retrieve the doc of a namespace node.\n"); |
- continue; |
- } |
- ctxt->context->doc = cur->doc; |
- } else { |
- ctxt->context->doc = cur->doc; |
- } |
- |
- subResult = xmlXPathCompiledEval(comp, ctxt->context); |
- if (subResult != NULL) { |
- switch (subResult->type) { |
- case XPATH_NODESET: |
- if (subResult->nodesetval != NULL) |
- for (j = 0; j < subResult->nodesetval->nodeNr; |
- j++) |
- xmlXPathNodeSetAdd(ret->nodesetval, |
- subResult->nodesetval-> |
- nodeTab[j]); |
- break; |
- case XPATH_BOOLEAN: |
- if (container != NULL) { |
- xmlNodePtr cur = |
- xmlNewChild((xmlNodePtr) container, NULL, |
- BAD_CAST "boolean", |
- BAD_CAST (subResult-> |
- boolval ? "true" : "")); |
- if (cur != NULL) { |
- cur->ns = |
- xmlNewNs(cur, |
- BAD_CAST |
- "http://exslt.org/common", |
- BAD_CAST "exsl"); |
- xmlXPathNodeSetAddUnique(ret->nodesetval, |
- cur); |
- } |
- } |
- break; |
- case XPATH_NUMBER: |
- if (container != NULL) { |
- xmlChar *val = |
- xmlXPathCastNumberToString(subResult-> |
- floatval); |
- xmlNodePtr cur = |
- xmlNewChild((xmlNodePtr) container, NULL, |
- BAD_CAST "number", val); |
- if (val != NULL) |
- xmlFree(val); |
- |
- if (cur != NULL) { |
- cur->ns = |
- xmlNewNs(cur, |
- BAD_CAST |
- "http://exslt.org/common", |
- BAD_CAST "exsl"); |
- xmlXPathNodeSetAddUnique(ret->nodesetval, |
- cur); |
- } |
- } |
- break; |
- case XPATH_STRING: |
- if (container != NULL) { |
- xmlNodePtr cur = |
- xmlNewChild((xmlNodePtr) container, NULL, |
- BAD_CAST "string", |
- subResult->stringval); |
- if (cur != NULL) { |
- cur->ns = |
- xmlNewNs(cur, |
- BAD_CAST |
- "http://exslt.org/common", |
- BAD_CAST "exsl"); |
- xmlXPathNodeSetAddUnique(ret->nodesetval, |
- cur); |
- } |
- } |
- break; |
- default: |
- break; |
- } |
- xmlXPathFreeObject(subResult); |
- } |
- } |
- } |
- ctxt->context->doc = oldDoc; |
- ctxt->context->node = oldNode; |
- ctxt->context->contextSize = oldContextSize; |
- ctxt->context->proximityPosition = oldProximityPosition; |
- |
- |
- cleanup: |
- /* restore the xpath context */ |
- if (comp != NULL) |
- xmlXPathFreeCompExpr(comp); |
- if (nodeset != NULL) |
- xmlXPathFreeNodeSet(nodeset); |
- if (str != NULL) |
- xmlFree(str); |
- valuePush(ctxt, ret); |
- return; |
-} |
- |
- |
-/** |
- * exsltDynRegister: |
- * |
- * Registers the EXSLT - Dynamic module |
- */ |
- |
-void |
-exsltDynRegister (void) { |
- xsltRegisterExtModuleFunction ((const xmlChar *) "evaluate", |
- EXSLT_DYNAMIC_NAMESPACE, |
- exsltDynEvaluateFunction); |
- xsltRegisterExtModuleFunction ((const xmlChar *) "map", |
- EXSLT_DYNAMIC_NAMESPACE, |
- exsltDynMapFunction); |
- |
-} |