diff --git a/key.patch b/key.patch deleted file mode 100644 index 5502031..0000000 --- a/key.patch +++ /dev/null @@ -1,264 +0,0 @@ -Index: libxslt/keys.c -=================================================================== ---- libxslt/keys.c (revision 1450) -+++ libxslt/keys.c (revision 1451) -@@ -393,9 +393,11 @@ xsltGetKey(xsltTransformContextPtr ctxt, - const xmlChar *nameURI, const xmlChar *value) { - xmlNodeSetPtr ret; - xsltKeyTablePtr table; -+#if 0 - #ifdef XSLT_REFACTORED_KEYCOMP - int found = 0; - #endif -+#endif - - if ((ctxt == NULL) || (name == NULL) || (value == NULL) || - (ctxt->document == NULL)) -@@ -406,20 +408,23 @@ xsltGetKey(xsltTransformContextPtr ctxt, - "Get key %s, value %s\n", name, value); - #endif - -+#ifdef XSLT_REFACTORED_KEYCOMP -+ if (xsltInitAllDocKeys(ctxt)) -+ return(NULL); -+#endif -+ - table = (xsltKeyTablePtr) ctxt->document->keys; - while (table != NULL) { - if (((nameURI != NULL) == (table->nameURI != NULL)) && - xmlStrEqual(table->name, name) && - xmlStrEqual(table->nameURI, nameURI)) - { --#ifdef XSLT_REFACTORED_KEYCOMP -- found = 1; --#endif - ret = (xmlNodeSetPtr)xmlHashLookup(table->keys, value); - return(ret); - } - table = table->next; - } -+#if 0 - #ifdef XSLT_REFACTORED_KEYCOMP - if (! found) { - xsltStylesheetPtr style = ctxt->style; -@@ -464,6 +469,7 @@ xsltGetKey(xsltTransformContextPtr ctxt, - } - } - #endif -+#endif - return(NULL); - } - -@@ -553,6 +559,77 @@ xsltEvalXPathKeys(xsltTransformContextPt - } - #endif - -+#ifdef XSLT_REFACTORED_KEYCOMP -+/** -+ * xsltInitAllDocKeys: -+ * -+ * INTERNAL ROUTINE ONLY -+ * -+ * Check if any keys on the current document need to be computed -+ */ -+int -+xsltInitAllDocKeys(xsltTransformContextPtr ctxt) -+{ -+ xsltStylesheetPtr style, style2; -+ xsltKeyDefPtr keyd, keyd2; -+ xsltKeyTablePtr table; -+ -+ if (ctxt == NULL) -+ return(-1); -+ -+ if (ctxt->document->nbKeysComputed == ctxt->nbKeys) -+ return(0); -+ /* -+ * TODO: This could be further optimized -+ */ -+ style = ctxt->style; -+ while (style) { -+ keyd = (xsltKeyDefPtr) style->keys; -+ while (keyd != NULL) { -+ /* -+ * Check if keys with this QName have been already -+ * computed. -+ */ -+ table = (xsltKeyTablePtr) ctxt->document->keys; -+ while (table) { -+ if (((keyd->nameURI != NULL) == (table->nameURI != NULL)) && -+ xmlStrEqual(keyd->name, table->name) && -+ xmlStrEqual(keyd->nameURI, table->nameURI)) -+ { -+ break; -+ } -+ table = table->next; -+ } -+ if (table == NULL) { -+ /* -+ * Keys with this QName have not been yet computed. -+ */ -+ style2 = ctxt->style; -+ while (style2 != NULL) { -+ keyd2 = (xsltKeyDefPtr) style2->keys; -+ while (keyd2 != NULL) { -+ if (((keyd2->nameURI != NULL) == -+ (keyd->nameURI != NULL)) && -+ xmlStrEqual(keyd2->name, keyd->name) && -+ xmlStrEqual(keyd2->nameURI, keyd->nameURI)) -+ { -+ xsltInitCtxtKey(ctxt, ctxt->document, keyd2); -+ if (ctxt->document->nbKeysComputed == ctxt->nbKeys) -+ return(0); -+ } -+ keyd2 = keyd2->next; -+ } -+ style2 = xsltNextImport(style2); -+ } -+ } -+ keyd = keyd->next; -+ } -+ style = xsltNextImport(style); -+ } -+ return(0); -+} -+#endif -+ - /** - * xsltInitCtxtKey: - * @ctxt: an XSLT transformation context -Index: libxslt/xsltInternals.h -=================================================================== ---- libxslt/xsltInternals.h (revision 1450) -+++ libxslt/xsltInternals.h (revision 1451) -@@ -1958,7 +1958,8 @@ XSLTPUBFUN int XSLTCALL - xsltInitCtxtKey (xsltTransformContextPtr ctxt, - xsltDocumentPtr doc, - xsltKeyDefPtr keyd); -- -+XSLTPUBFUN int XSLTCALL -+ xsltInitAllDocKeys (xsltTransformContextPtr ctxt); - #ifdef __cplusplus - } - #endif -Index: libxslt/pattern.c -=================================================================== ---- libxslt/pattern.c (revision 1450) -+++ libxslt/pattern.c (revision 1451) -@@ -2242,10 +2242,6 @@ xsltAddTemplate(xsltStylesheetPtr style, - static int - xsltComputeAllKeys(xsltTransformContextPtr ctxt, xmlNodePtr contextNode) - { -- xsltStylesheetPtr style, style2; -- xsltKeyDefPtr keyd, keyd2; -- xsltKeyTablePtr table; -- - if ((ctxt == NULL) || (contextNode == NULL)) { - xsltTransformError(ctxt, NULL, ctxt->inst, - "Internal error in xsltComputeAllKeys(): " -@@ -2266,57 +2262,7 @@ xsltComputeAllKeys(xsltTransformContextP - if (ctxt->document == NULL) - return(-1); - } -- -- if (ctxt->document->nbKeysComputed == ctxt->nbKeys) -- return(0); -- /* -- * TODO: This could be further optimized -- */ -- style = ctxt->style; -- while (style) { -- keyd = (xsltKeyDefPtr) style->keys; -- while (keyd != NULL) { -- /* -- * Check if keys with this QName have been already -- * computed. -- */ -- table = (xsltKeyTablePtr) ctxt->document->keys; -- while (table) { -- if (((keyd->nameURI != NULL) == (table->nameURI != NULL)) && -- xmlStrEqual(keyd->name, table->name) && -- xmlStrEqual(keyd->nameURI, table->nameURI)) -- { -- break; -- } -- table = table->next; -- } -- if (table == NULL) { -- /* -- * Keys with this QName have not been yet computed. -- */ -- style2 = ctxt->style; -- while (style2 != NULL) { -- keyd2 = (xsltKeyDefPtr) style2->keys; -- while (keyd2 != NULL) { -- if (((keyd2->nameURI != NULL) == -- (keyd->nameURI != NULL)) && -- xmlStrEqual(keyd2->name, keyd->name) && -- xmlStrEqual(keyd2->nameURI, keyd->nameURI)) -- { -- xsltInitCtxtKey(ctxt, ctxt->document, keyd2); -- if (ctxt->document->nbKeysComputed == ctxt->nbKeys) -- return(0); -- } -- keyd2 = keyd2->next; -- } -- style2 = xsltNextImport(style2); -- } -- } -- keyd = keyd->next; -- } -- style = xsltNextImport(style); -- } -- return(0); -+ return xsltInitAllDocKeys(ctxt); - - doc_info_mismatch: - xsltTransformError(ctxt, NULL, ctxt->inst, ---- python/libxslt-py.c.orig 2008-04-28 17:25:21.000000000 +0200 -+++ python/libxslt-py.c 2008-04-08 19:18:45.000000000 +0200 -@@ -1639,6 +1639,22 @@ libxslt_xsltRegisterTmpRVT(PyObject *sel - } - - PyObject * -+libxslt_xsltInitAllDocKeys(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { -+ PyObject *py_retval; -+ int c_retval; -+ xsltTransformContextPtr ctxt; -+ PyObject *pyobj_ctxt; -+ -+ if (!PyArg_ParseTuple(args, (char *)"O:xsltInitAllDocKeys", &pyobj_ctxt)) -+ return(NULL); -+ ctxt = (xsltTransformContextPtr) PytransformCtxt_Get(pyobj_ctxt); -+ -+ c_retval = xsltInitAllDocKeys(ctxt); -+ py_retval = libxml_intWrap((int) c_retval); -+ return(py_retval); -+} -+ -+PyObject * - libxslt_xsltPrintErrorContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - xsltTransformContextPtr ctxt; - PyObject *pyobj_ctxt; ---- doc/libxslt-api.xml.orig 2008-04-28 17:24:55.000000000 +0200 -+++ doc/libxslt-api.xml 2008-04-08 19:18:48.000000000 +0200 -@@ -529,6 +529,7 @@ - - - -+ - - - -@@ -2337,6 +2338,11 @@ exits'/> - Initializes the processor (e.g. registers built-in extensions, etc.) - - -+ -+ INTERNAL ROUTINE ONLY Check if any keys on the current document need to be computed -+ -+ -+ - - Initialize the set of modules with registered stylesheet data -