From b2e216a7f23af375021c94a03cb237c492d72d24 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 31 Jan 2001 20:45:01 +0000 Subject: [PATCH] Test/debug/patch cycle: - tests/REC/test-[9-10]*: added more tests - tests/REC2/html.xml libxslt/xsltutils.c libxslt/transform.c: fixed sorting Daniel --- ChangeLog | 6 ++++++ libxslt/transform.c | 15 ++++++++++++--- libxslt/xsltutils.c | 3 ++- tests/REC/test-10-1.xml | 20 ++++++++++++++++++++ tests/REC/test-10-1.xsl | 20 ++++++++++++++++++++ tests/REC/test-9.1-2.out | 9 +++++++++ tests/REC/test-9.1-2.xml | 8 ++++++++ tests/REC/test-9.1-2.xsl | 31 +++++++++++++++++++++++++++++++ tests/REC2/html.xml | 12 ++++++------ 9 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 tests/REC/test-10-1.xml create mode 100644 tests/REC/test-10-1.xsl create mode 100644 tests/REC/test-9.1-2.out create mode 100644 tests/REC/test-9.1-2.xml create mode 100644 tests/REC/test-9.1-2.xsl diff --git a/ChangeLog b/ChangeLog index 4177c31..b0c23ab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Jan 31 21:42:43 CET 2001 Daniel Veillard + + * tests/REC/test-[9-10]*: added more tests + * tests/REC2/html.xml libxslt/xsltutils.c libxslt/transform.c: + fixed sorting + Wed Jan 31 19:25:38 CET 2001 Daniel Veillard * tests/REC/test-[7-9]*: added more tests diff --git a/libxslt/transform.c b/libxslt/transform.c index 83630e0..12cde9a 100644 --- a/libxslt/transform.c +++ b/libxslt/transform.c @@ -246,6 +246,7 @@ xsltSort(xsltTransformContextPtr ctxt, xmlNodePtr node, int number = 0; int len = 0; int i; + xmlNodePtr oldNode; if ((ctxt == NULL) || (node == NULL) || (inst == NULL)) return; @@ -307,11 +308,13 @@ xsltSort(xsltTransformContextPtr ctxt, xmlNodePtr node, } start = xpathParserCtxt->cur; + oldNode = ctxt->node; for (i = 0;i < len;i++) { xpathParserCtxt->cur = start; - node = ctxt->node = list->nodeTab[i]; + ctxt->xpathCtxt->contextSize = len; ctxt->xpathCtxt->proximityPosition = i + 1; - valuePush(xpathParserCtxt, xmlXPathNewNodeSet(node)); + ctxt->node = list->nodeTab[i]; + ctxt->xpathCtxt->node = ctxt->node; xmlXPathEvalExpr(xpathParserCtxt); xmlXPathStringFunction(xpathParserCtxt, 1); if (number) @@ -348,6 +351,7 @@ xsltSort(xsltTransformContextPtr ctxt, xmlNodePtr node, } } } + ctxt->node = oldNode; xsltSortFunction(list, &results[0], descending, number); @@ -1094,9 +1098,14 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, * handle and skip the xsl:sort */ replacement = inst->children; - while (IS_XSLT_ELEM(replacement) && (IS_XSLT_NAME(replacement, "sort"))) { + if (IS_XSLT_ELEM(replacement) && (IS_XSLT_NAME(replacement, "sort"))) { xsltSort(ctxt, node, replacement); replacement = replacement->next; + while (IS_XSLT_ELEM(replacement) && + (IS_XSLT_NAME(replacement, "sort"))) { + TODO /* imbricated sorts */ + replacement = replacement->next; + } } for (i = 0;i < list->nodeNr;i++) { diff --git a/libxslt/xsltutils.c b/libxslt/xsltutils.c index 9d787d1..f506071 100644 --- a/libxslt/xsltutils.c +++ b/libxslt/xsltutils.c @@ -236,7 +236,8 @@ xsltSortFunction(xmlNodeSetPtr list, xmlXPathObjectPtr *results, if (descending) tst = !tst; } else { - tst = xmlStrcmp(results[i]->stringval, results[j]->stringval); + tst = (xmlStrcmp(results[i]->stringval, + results[j]->stringval)) > 0; if (descending) tst = !tst; } diff --git a/tests/REC/test-10-1.xml b/tests/REC/test-10-1.xml new file mode 100644 index 0000000..e46e71d --- /dev/null +++ b/tests/REC/test-10-1.xml @@ -0,0 +1,20 @@ + + + + James + Clark + + + + + Daniel + Veillard + + + + + Michael + Kay + + + diff --git a/tests/REC/test-10-1.xsl b/tests/REC/test-10-1.xsl new file mode 100644 index 0000000..613c4f3 --- /dev/null +++ b/tests/REC/test-10-1.xsl @@ -0,0 +1,20 @@ + + +
    + + + + +
+
+ + +
  • + + + +
  • +
    +
    diff --git a/tests/REC/test-9.1-2.out b/tests/REC/test-9.1-2.out new file mode 100644 index 0000000..6e03f46 --- /dev/null +++ b/tests/REC/test-9.1-2.out @@ -0,0 +1,9 @@ + + +item1 +item2 +item3 +item4 +item5 +item6 +
    diff --git a/tests/REC/test-9.1-2.xml b/tests/REC/test-9.1-2.xml new file mode 100644 index 0000000..846e3fa --- /dev/null +++ b/tests/REC/test-9.1-2.xml @@ -0,0 +1,8 @@ + + item1 + item2 + item3 + item4 + item5 + item6 + diff --git a/tests/REC/test-9.1-2.xsl b/tests/REC/test-9.1-2.xsl new file mode 100644 index 0000000..3bb0204 --- /dev/null +++ b/tests/REC/test-9.1-2.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + + + yellow + + + + +
    diff --git a/tests/REC2/html.xml b/tests/REC2/html.xml index ad34859..332dd05 100644 --- a/tests/REC2/html.xml +++ b/tests/REC2/html.xml @@ -9,6 +9,12 @@ Bonus +North +10 +9 +7 + + West 6 -1.5 @@ -20,11 +26,5 @@ 3 4 - -North -10 -9 -7 - -- 2.7.4