60#define WITH_XSLT_DEBUG_EXTRA
61#define WITH_XSLT_DEBUG_PROCESS
62#define WITH_XSLT_DEBUG_VARIABLE
65#define XSLT_GENERATE_HTML_DOCTYPE
66#ifdef XSLT_GENERATE_HTML_DOCTYPE
79# define FALSE (0 == 1)
83#define IS_BLANK_NODE(n) \
84 (((n)->type == XML_TEXT_NODE) && (xsltIsBlank((n)->content)))
96 xmlNodePtr
node, xmlNodePtr insert,
int isLRE,
101 xmlNodePtr contextNode, xmlNodePtr
list,
106 xmlNodePtr contextNode,
128 newMax *
sizeof(*tmp));
186 if (ctxt->
varsNr <= limitNr)
194 }
while (ctxt->
varsNr != 0);
218 if (
param->level >= 0) {
348static xmlXPathObjectPtr
351 xmlXPathObjectPtr
res;
352 xmlXPathContextPtr xpctxt;
353 xmlNodePtr oldXPContextNode;
354 xmlNsPtr *oldXPNamespaces;
355 int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
358 oldXPContextNode = xpctxt->node;
359 oldXPProximityPosition = xpctxt->proximityPosition;
360 oldXPContextSize = xpctxt->contextSize;
361 oldXPNsNr = xpctxt->nsNr;
362 oldXPNamespaces = xpctxt->namespaces;
365#ifdef XSLT_REFACTORED
366 if (comp->inScopeNs !=
NULL) {
367 xpctxt->namespaces = comp->inScopeNs->list;
368 xpctxt->
nsNr = comp->inScopeNs->xpathNumber;
370 xpctxt->namespaces =
NULL;
374 xpctxt->namespaces = comp->
nsList;
375 xpctxt->nsNr = comp->
nsNr;
378 res = xmlXPathCompiledEval(comp->
comp, xpctxt);
380 xpctxt->node = oldXPContextNode;
381 xpctxt->proximityPosition = oldXPProximityPosition;
382 xpctxt->contextSize = oldXPContextSize;
383 xpctxt->nsNr = oldXPNsNr;
384 xpctxt->namespaces = oldXPNamespaces;
401 xmlXPathContextPtr xpctxt;
402 xmlNodePtr oldXPContextNode;
403 xmlNsPtr *oldXPNamespaces;
404 int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
407 oldXPContextNode = xpctxt->node;
408 oldXPProximityPosition = xpctxt->proximityPosition;
409 oldXPContextSize = xpctxt->contextSize;
410 oldXPNsNr = xpctxt->nsNr;
411 oldXPNamespaces = xpctxt->namespaces;
414#ifdef XSLT_REFACTORED
415 if (comp->inScopeNs !=
NULL) {
416 xpctxt->namespaces = comp->inScopeNs->list;
417 xpctxt->
nsNr = comp->inScopeNs->xpathNumber;
419 xpctxt->namespaces =
NULL;
423 xpctxt->namespaces = comp->
nsList;
424 xpctxt->nsNr = comp->
nsNr;
427 res = xmlXPathCompiledEvalToBoolean(comp->
comp, xpctxt);
429 xpctxt->node = oldXPContextNode;
430 xpctxt->proximityPosition = oldXPProximityPosition;
431 xpctxt->contextSize = oldXPContextSize;
432 xpctxt->nsNr = oldXPNsNr;
433 xpctxt->namespaces = oldXPNamespaces;
506 "xsltTransformCacheCreate : malloc failed\n");
525 cur = (xmlDocPtr)
cur->next;
526 if (tmp->_private !=
NULL) {
539 if (
cache->stackItems) {
574 "xsltNewTransformContext : malloc failed\n");
588#ifdef WITH_XSLT_DEBUG
590 "Creating sub-dictionary from stylesheet for transformation\n");
600 "xsltNewTransformContext: out of memory\n");
615 "xsltNewTransformContext: out of memory\n");
633 cur->xpathCtxt = xmlXPathNewContext(doc);
636 "xsltNewTransformContext : xmlXPathNewContext failed\n");
642 if (xmlXPathContextSetCache(
cur->xpathCtxt, 1, -1, 0) == -1)
647 if (
style->extrasNr != 0) {
648 cur->extrasMax =
style->extrasNr + 20;
653 "xsltNewTransformContext: out of memory\n");
657 for (
i = 0;
i <
cur->extrasMax;
i++) {
670 cur->xpathCtxt->nsHash =
style->nsHash;
680 xmlXPathOrderDocElems(doc);
689 "xsltNewTransformContext : xsltNewDocument failed\n");
693 cur->document = docu;
700 cur->keyInitLevel = 0;
757#ifdef WITH_XSLT_DEBUG
759 "freeing transformation dictionary\n");
823 "xsltCopyText: text allocation failed\n");
834 extra = minSize < 100 ? 100 : minSize;
845 if (newbuf ==
NULL) {
847 "xsltCopyText: text allocation failed\n");
858 xmlNodeAddContent(
target,
string);
882 const xmlChar *
string,
int noescape)
890#ifdef WITH_XSLT_DEBUG_PROCESS
892 "xsltCopyTextString: copy text %s\n",
909 (
target->type == XML_ELEMENT_NODE) &&
921 (
target->last->type == XML_CDATA_SECTION_NODE))
926 }
else if (noescape) {
931 (
target->last->type == XML_TEXT_NODE) &&
936 copy = xmlNewTextLen(
string,
len);
944 (
target->last->type == XML_TEXT_NODE) &&
948 copy = xmlNewTextLen(
string,
len);
958 "xsltCopyTextString: text copy failed\n");
978 xmlNodePtr
cur,
int interned)
982 if ((
cur->type != XML_TEXT_NODE) &&
983 (
cur->type != XML_CDATA_SECTION_NODE))
988#ifdef WITH_XSLT_DEBUG_PROCESS
989 if (
cur->type == XML_CDATA_SECTION_NODE) {
991 "xsltCopyText: copy CDATA text %s\n",
995 "xsltCopyText: copy unescaped text %s\n",
999 "xsltCopyText: copy text %s\n",
1015 (
target->type == XML_ELEMENT_NODE) &&
1035 (
target->last->type == XML_CDATA_SECTION_NODE))
1057 (((
target->last->type == XML_TEXT_NODE) &&
1060 (((
target->last->type == XML_CDATA_SECTION_NODE) &&
1126 "xsltCopyText: text copy failed\n");
1132 "Internal error in xsltCopyText(): "
1133 "Failed to copy the string.\n");
1164 if (
target->type != XML_ELEMENT_NODE) {
1166 "Cannot add an attribute node to a non-element node.\n");
1172 "Attribute nodes must be added before "
1173 "any child nodes to an element.\n");
1185 "Namespace fixup error: Failed to acquire an in-scope "
1186 "namespace binding of the copied attribute '{%s}%s'.\n",
1220 if (txtNode ==
NULL)
1230 txtNode->content =
value;
1231 copy->children = txtNode;
1255 xmlNodePtr invocNode,
1259 xmlNsPtr origNs =
NULL, copyNs =
NULL;
1271 if (
attr->ns != origNs) {
1285 if ((
attr->children) && (
attr->children->type == XML_TEXT_NODE) &&
1288 attr->children->content);
1289 }
else if (
attr->children !=
NULL) {
1331 xmlNodePtr insert,
int isLRE)
1335 if ((
node->type == XML_DTD_NODE) || (insert ==
NULL))
1337 if ((
node->type == XML_TEXT_NODE) ||
1338 (
node->type == XML_CDATA_SECTION_NODE))
1341 copy = xmlDocCopyNode(
node, insert->doc, 0);
1347 "xsltShallowCopyElem: copy failed\n");
1351 if (
node->type == XML_ELEMENT_NODE) {
1386 }
else if ((insert->type == XML_ELEMENT_NODE) &&
1387 (insert->ns !=
NULL))
1397 "xsltShallowCopyElem: copy %s failed\n",
node->name);
1424 xmlNodePtr insert,
int isLRE,
int topElemVisited)
1430 list, insert, isLRE, topElemVisited);
1460 xmlNsPtr
p =
NULL,
q, luNs;
1467 if ((
elem !=
NULL) && (
elem->type != XML_ELEMENT_NODE))
1471 if (
ns->type != XML_NAMESPACE_DECL)
1494 }
else if (
q !=
NULL) {
1516 xmlNodePtr invocNode,
1526 if ((insert ==
NULL) || (insert->type != XML_ELEMENT_NODE))
1529 if (insert->children !=
NULL) {
1531 "Namespace nodes must be added before "
1532 "any child nodes are added to an element.\n");
1558 if (insert->ns ==
NULL)
1560 }
else if ((
ns->
prefix[0] ==
'x') &&
1569 if (insert->nsDef !=
NULL) {
1570 tmpns = insert->nsDef;
1573 if ((tmpns->prefix ==
ns->
prefix) ||
1584 tmpns = tmpns->next;
1585 }
while (tmpns !=
NULL);
1587 tmpns = xmlSearchNs(insert->doc, insert,
ns->
prefix);
1596 return(xmlNewNs(insert,
ns->href,
ns->
prefix));
1627 xmlNodePtr
node, xmlNodePtr insert,
int isLRE,
1634 switch (
node->type) {
1635 case XML_ELEMENT_NODE:
1636 case XML_ENTITY_REF_NODE:
1637 case XML_ENTITY_NODE:
1639 case XML_COMMENT_NODE:
1640 case XML_DOCUMENT_NODE:
1641 case XML_HTML_DOCUMENT_NODE:
1642#ifdef LIBXML_DOCB_ENABLED
1643 case XML_DOCB_DOCUMENT_NODE:
1646 case XML_TEXT_NODE: {
1650 case XML_CDATA_SECTION_NODE:
1652 case XML_ATTRIBUTE_NODE:
1655 case XML_NAMESPACE_DECL:
1657 insert, (xmlNsPtr)
node));
1659 case XML_DOCUMENT_TYPE_NODE:
1660 case XML_DOCUMENT_FRAG_NODE:
1661 case XML_NOTATION_NODE:
1663 case XML_ELEMENT_DECL:
1664 case XML_ATTRIBUTE_DECL:
1665 case XML_ENTITY_DECL:
1666 case XML_XINCLUDE_START:
1667 case XML_XINCLUDE_END:
1673 node->children, insert, 0, 0);
1678 copy = xmlDocCopyNode(
node, insert->doc, 0);
1684 "xsltCopyTree: Copying of '%s' failed.\n",
node->name);
1690 if (insert->last !=
copy)
1691 return(insert->last);
1694 if (
node->type == XML_ELEMENT_NODE) {
1707 if ((topElemVisited == 0) &&
1709 (
node->parent->type != XML_DOCUMENT_NODE) &&
1710 (
node->parent->type != XML_HTML_DOCUMENT_NODE))
1712 xmlNsPtr *nsList, *curns,
ns;
1722 nsList = xmlGetNsList(
node->doc,
node);
1723 if (nsList !=
NULL) {
1730 ns = xmlSearchNs(insert->doc, insert,
1742 ns = xmlSearchNsByHref(insert->doc,
1743 insert, (*curns)->href);
1750 ns = xmlNewNs(
copy, (*curns)->href,
1754 if (
node->ns == *curns) {
1762 }
while (*curns !=
NULL);
1788 }
else if ((insert->type == XML_ELEMENT_NODE) &&
1789 (insert->ns !=
NULL))
1803 if (topElemVisited == 0)
1811 node->children,
copy, isLRE, topElemVisited);
1815 "xsltCopyTree: Copying of '%s' failed.\n",
node->name);
1844 (inst->children ==
NULL))
1847 child = inst->children;
1851#ifdef WITH_XSLT_DEBUG_PARSING
1853 "applying xsl:fallback\n");
1897 int nbchild = 0, oldSize;
1898 int childno = 0, oldPos;
1905 switch (
node->type) {
1906 case XML_DOCUMENT_NODE:
1907 case XML_HTML_DOCUMENT_NODE:
1908 case XML_ELEMENT_NODE:
1910 case XML_CDATA_SECTION_NODE:
1911#ifdef WITH_XSLT_DEBUG_PROCESS
1913 "xsltDefaultProcessOneNode: copy CDATA %s\n",
1919 "xsltDefaultProcessOneNode: cdata copy failed\n");
1923#ifdef WITH_XSLT_DEBUG_PROCESS
1926 "xsltDefaultProcessOneNode: copy empty text\n"));
1930 "xsltDefaultProcessOneNode: copy text %s\n",
1937 "xsltDefaultProcessOneNode: text copy failed\n");
1940 case XML_ATTRIBUTE_NODE:
1942 while ((
cur !=
NULL) && (
cur->type != XML_TEXT_NODE))
1946 "xsltDefaultProcessOneNode: no text for attribute\n");
1948#ifdef WITH_XSLT_DEBUG_PROCESS
1951 "xsltDefaultProcessOneNode: copy empty text\n"));
1954 "xsltDefaultProcessOneNode: copy text %s\n",
1961 "xsltDefaultProcessOneNode: text copy failed\n");
1985 oldPos = ctxt->
xpathCtxt->proximityPosition;
1989 switch (
cur->type) {
1990 case XML_DOCUMENT_NODE:
1991 case XML_HTML_DOCUMENT_NODE:
1992 case XML_ELEMENT_NODE:
1994 ctxt->
xpathCtxt->proximityPosition = childno;
1998 "xsltDefaultProcessOneNode: Maximum template depth "
2000 "You can adjust xsltMaxDepth (--maxdepth) in order to "
2001 "raise the maximum number of nested template calls and "
2002 "variables/params (currently set to %d).\n",
2011 case XML_CDATA_SECTION_NODE:
2014#ifdef WITH_XSLT_DEBUG_PROCESS
2016 "xsltDefaultProcessOneNode: applying template for CDATA %s\n",
2025#ifdef WITH_XSLT_DEBUG_PROCESS
2027 "xsltDefaultProcessOneNode: copy CDATA %s\n",
2033 "xsltDefaultProcessOneNode: cdata copy failed\n");
2040#ifdef WITH_XSLT_DEBUG_PROCESS
2042 "xsltDefaultProcessOneNode: applying template for text %s\n",
2046 ctxt->
xpathCtxt->proximityPosition = childno;
2053#ifdef WITH_XSLT_DEBUG_PROCESS
2056 "xsltDefaultProcessOneNode: copy empty text\n"));
2059 "xsltDefaultProcessOneNode: copy text %s\n",
2066 "xsltDefaultProcessOneNode: text copy failed\n");
2071 case XML_COMMENT_NODE:
2074#ifdef WITH_XSLT_DEBUG_PROCESS
2075 if (
cur->type == XML_PI_NODE) {
2077 "xsltDefaultProcessOneNode: template found for PI %s\n",
2079 }
else if (
cur->type == XML_COMMENT_NODE) {
2081 "xsltDefaultProcessOneNode: template found for comment\n"));
2085 ctxt->
xpathCtxt->proximityPosition = childno;
2099 ctxt->
xpathCtxt->proximityPosition = oldPos;
2122 if (templ ==
NULL) {
2123#ifdef WITH_XSLT_DEBUG_PROCESS
2124 if (contextNode->type == XML_DOCUMENT_NODE) {
2126 "xsltProcessOneNode: no template found for /\n"));
2127 }
else if (contextNode->type == XML_CDATA_SECTION_NODE) {
2129 "xsltProcessOneNode: no template found for CDATA\n"));
2130 }
else if (contextNode->type == XML_ATTRIBUTE_NODE) {
2132 "xsltProcessOneNode: no template found for attribute %s\n",
2133 ((xmlAttrPtr) contextNode)->
name));
2136 "xsltProcessOneNode: no template found for %s\n", contextNode->name));
2139 oldNode = ctxt->
node;
2140 ctxt->
node = contextNode;
2142 ctxt->
node = oldNode;
2146 if (contextNode->type == XML_ATTRIBUTE_NODE) {
2153#ifdef WITH_XSLT_DEBUG_PROCESS
2155 "xsltProcessOneNode: applying template '%s' for attribute %s\n",
2156 templ->
match, contextNode->name));
2168#ifdef WITH_XSLT_DEBUG_PROCESS
2169 if (contextNode->type == XML_DOCUMENT_NODE) {
2171 "xsltProcessOneNode: applying template '%s' for /\n",
2175 "xsltProcessOneNode: applying template '%s' for %s\n",
2176 templ->
match, contextNode->name));
2188 xmlNodePtr contextNode,
2193 xmlNodePtr debugedNode =
NULL;
2197 *addCallResult = xslAddCall(templ, templ->
elem);
2199 *addCallResult = xslAddCall(
NULL,
list);
2210 debugedNode = templ->
elem;
2214 }
else if (ctxt->
inst) {
2216 debugedNode = ctxt->
inst;
2219 return(debugedNode);
2245 newMax *
sizeof(*tmp));
2282 cur = (xmlDocPtr)
cur->next;
2296 "xsltReleaseLocalRVTs: Unexpected RVT flag %p\n",
2319 xmlNodePtr contextNode, xmlNodePtr
list,
2322 xmlNodePtr oldInsert, oldInst, oldCurInst, oldContextNode;
2324 int level = 0, oldVarsNr;
2325 xmlDocPtr oldLocalFragmentTop;
2327#ifdef XSLT_REFACTORED
2332 int addCallResult = 0;
2333 xmlNodePtr debuggedNode =
NULL;
2342 xsltDebuggerStartSequenceConstructor(ctxt, contextNode,
2343 list, templ, &addCallResult);
2344 if (debuggedNode ==
NULL)
2359 "xsltApplySequenceConstructor: A potential infinite template "
2360 "recursion was detected.\n"
2361 "You can adjust xsltMaxDepth (--maxdepth) in order to "
2362 "raise the maximum number of nested template calls and "
2363 "variables/params (currently set to %d).\n",
2371 oldLocalFragmentTop = ctxt->
localRVT;
2372 oldInsert = insert = ctxt->
insert;
2373 oldInst = oldCurInst = ctxt->
inst;
2374 oldContextNode = ctxt->
node;
2379 oldVarsNr = ctxt->
varsNr;
2388 "xsltApplySequenceConstructor: "
2389 "Operation limit exceeded\n");
2409 if (insert ==
NULL) {
2411#ifdef WITH_XSLT_DEBUG_PROCESS
2413 "xsltApplySequenceConstructor: insert == NULL !\n"));
2423#ifdef XSLT_REFACTORED
2424 if (
cur->type == XML_ELEMENT_NODE) {
2448 "Internal error in xsltApplySequenceConstructor(): "
2449 "The element '%s' in the stylesheet has no compiled "
2450 "representation.\n",
2455 if (
info->type == XSLT_FUNC_LITERAL_RESULT_ELEMENT) {
2456 xsltStyleItemLRElementInfoPtr lrInfo =
2457 (xsltStyleItemLRElementInfoPtr)
info;
2462#ifdef WITH_XSLT_DEBUG_PROCESS
2465 "xsltApplySequenceConstructor: copy literal result "
2466 "element '%s'\n",
cur->name));
2474 copy = xmlDocCopyNode(
cur, insert->doc, 0);
2477 "Internal error in xsltApplySequenceConstructor(): "
2478 "Failed to copy literal result element '%s'.\n",
2491 if (lrInfo->effectiveNs !=
NULL) {
2492 xsltEffectiveNsPtr effNs = lrInfo->effectiveNs;
2493 xmlNsPtr
ns, lastns =
NULL;
2495 while (effNs !=
NULL) {
2501 ns = xmlSearchNs(
copy->doc,
copy, effNs->prefix);
2505 effNs = effNs->next;
2508 ns = xmlNewNs(
copy, effNs->nsName, effNs->prefix);
2511 "Internal error in "
2512 "xsltApplySequenceConstructor(): "
2513 "Failed to copy a namespace "
2524 effNs = effNs->next;
2556 ((insert !=
NULL) &&
2557 (insert->type == XML_ELEMENT_NODE) &&
2558 (insert->ns !=
NULL)))
2572 if (
cur->properties !=
NULL) {
2575 }
else if (IS_XSLT_ELEM_FAST(
cur)) {
2580 if (
info->type == XSLT_FUNC_UNKOWN_FORWARDS_COMPAT) {
2588 "The is no fallback behaviour defined for "
2589 "the unknown XSLT element '%s'.\n",
2592 ctxt->
insert = oldInsert;
2599 info->func(ctxt, contextNode,
cur,
2605 if (oldLocalFragmentTop != ctxt->
localRVT)
2608 ctxt->
insert = oldInsert;
2614 if (tmpvar != ctxt->
vars) {
2623 }
else if (
info->type == XSLT_FUNC_MESSAGE) {
2630 "Unexpected XSLT element '%s'.\n",
cur->name);
2659#ifdef WITH_XSLT_DEBUG_PROCESS
2662 "xsltApplySequenceConstructor: unknown extension %s\n",
2668 "Unknown extension instruction '{%s}%s'.\n",
2669 cur->ns->href,
cur->name);
2671 ctxt->
insert = oldInsert;
2676#ifdef WITH_XSLT_DEBUG_PROCESS
2678 "xsltApplySequenceConstructor: extension construct %s\n",
2700 if (oldLocalFragmentTop != ctxt->
localRVT)
2703 ctxt->
insert = oldInsert;
2713#ifdef WITH_XSLT_DEBUG_PROCESS
2717 "xsltApplySequenceConstructor: copy unescaped text '%s'\n",
2722 "xsltApplySequenceConstructor: copy text '%s'\n",
2748 "xsltApplySequenceConstructor: %s was not compiled\n",
2751 ctxt->
insert = oldInsert;
2757 oldCurInst = ctxt->
inst;
2766 if (oldLocalFragmentTop != ctxt->
localRVT)
2769 ctxt->
insert = oldInsert;
2770 ctxt->
inst = oldCurInst;
2777 oldCurInst = ctxt->
inst;
2782 ctxt->
inst = oldCurInst;
2784 if (tmpvar != ctxt->
vars) {
2797 "Unexpected XSLT element '%s'.\n",
cur->name);
2800 }
else if ((
cur->type == XML_TEXT_NODE) ||
2801 (
cur->type == XML_CDATA_SECTION_NODE)) {
2808#ifdef WITH_XSLT_DEBUG_PROCESS
2809 if (
cur->type == XML_CDATA_SECTION_NODE) {
2811 "xsltApplySequenceConstructor: copy CDATA text %s\n",
2815 "xsltApplySequenceConstructor: copy unescaped text %s\n",
2819 "xsltApplySequenceConstructor: copy text %s\n",
2825 }
else if ((
cur->type == XML_ELEMENT_NODE) &&
2829 oldCurInst = ctxt->
inst;
2840 if (function ==
NULL) {
2844#ifdef WITH_XSLT_DEBUG_PROCESS
2846 "xsltApplySequenceConstructor: unknown extension %s\n",
2864 ctxt->
insert = oldInsert;
2868 "xsltApplySequenceConstructor: failed to find extension %s\n",
2872#ifdef WITH_XSLT_DEBUG_PROCESS
2874 "xsltApplySequenceConstructor: extension construct %s\n",
2892 function(ctxt, contextNode,
cur,
cur->psvi);
2896 if (oldLocalFragmentTop != ctxt->
localRVT)
2899 ctxt->
insert = oldInsert;
2902 ctxt->
inst = oldCurInst;
2904 }
else if (
cur->type == XML_ELEMENT_NODE) {
2905#ifdef WITH_XSLT_DEBUG_PROCESS
2907 "xsltApplySequenceConstructor: copy node %s\n",
2910 oldCurInst = ctxt->
inst;
2920 if ((templ !=
NULL) && (oldInsert == insert) &&
2971 if (
cur->properties !=
NULL) {
2974 ctxt->
inst = oldCurInst;
2982 if (
cur->children->type != XML_ENTITY_DECL) {
3015 insert = insert->parent;
3033 if (ctxt->
varsNr > oldVarsNr)
3036 ctxt->
node = oldContextNode;
3037 ctxt->
inst = oldInst;
3038 ctxt->
insert = oldInsert;
3067 xmlNodePtr contextNode,
3072 int oldVarsBase = 0;
3075 xmlDocPtr oldUserFragmentTop;
3080#ifdef XSLT_REFACTORED
3081 xsltStyleItemParamPtr iparam;
3087 int addCallResult = 0;
3092 if (templ ==
NULL) {
3094 "xsltApplyXSLTTemplate: Bad arguments; @templ is mandatory.\n");
3100 if (xsltDebuggerStartSequenceConstructor(ctxt, contextNode,
3101 list, templ, &addCallResult) ==
NULL)
3113 "xsltApplyXSLTTemplate: A potential infinite template recursion "
3115 "You can adjust maxTemplateVars (--maxvars) in order to "
3116 "raise the maximum number of variables/params (currently set to %d).\n",
3123 oldUserFragmentTop = ctxt->
tmpRVT;
3132 ctxt->
node = contextNode;
3137 start = xsltTimestamp();
3139 profCallgraphAdd(templ, ctxt->
templ);
3148#ifdef WITH_XSLT_DEBUG_PROCESS
3151 "applying xsl:template '%s'\n", templ->
name));
3159 if (
cur->type == XML_TEXT_NODE) {
3163 if ((
cur->type != XML_ELEMENT_NODE) ||
3164 (
cur->name[0] !=
'p') ||
3174#ifdef XSLT_REFACTORED
3175 iparam = (xsltStyleItemParamPtr)
cur->psvi;
3190 tmpParam = withParams;
3192 if ((tmpParam->
name == (iparam->name)) &&
3193 (tmpParam->
nameURI == (iparam->ns)))
3201 tmpParam = tmpParam->
next;
3202 }
while (tmpParam !=
NULL);
3207 if (tmpParam ==
NULL) {
3236 xmlDocPtr curdoc = ctxt->
tmpRVT, tmp;
3238 while (curdoc !=
NULL) {
3240 curdoc = (xmlDocPtr) curdoc->next;
3244 ctxt->
tmpRVT = oldUserFragmentTop;
3255 end = xsltTimestamp();
3256 child = profPop(ctxt);
3264 xsltCalibrateAdjust(spent);
3268 templ->
time += spent;
3314 xmlNodePtr contextNode,
3329 int oldVarsNr = ctxt->
varsNr;
3366#ifdef XSLT_REFACTORED
3367 xsltStyleItemDocumentPtr comp = (xsltStyleItemDocumentPtr) castedComp;
3376 xmlDocPtr oldOutput;
3377 xmlNodePtr oldInsert,
root;
3378 const char *oldOutputFile;
3386 int redirect_write_append = 0;
3391 if (comp->filename ==
NULL) {
3399#ifdef WITH_XSLT_DEBUG_EXTRA
3401 "Found saxon:output extension\n");
3412#ifdef WITH_XSLT_DEBUG_EXTRA
3414 "Found xalan:write extension\n");
3421 xmlXPathCompExprPtr
cmp;
3432 xmlXPathFreeCompExpr(
cmp);
3458 "xsltDocumentElem: href/URI-Reference not found\n");
3470 if (escURL !=
NULL) {
3478 "xsltDocumentElem: URL computation failed for %s\n",
3492 "xsltDocumentElem: write rights for %s denied\n",
3501 oldOutput = ctxt->
output;
3502 oldInsert = ctxt->
insert;
3503 oldType = ctxt->
type;
3509 "xsltDocumentElem: out of memory\n");
3523 style->version = prop;
3531 style->encoding = prop;
3549 }
else if (URI ==
NULL) {
3553 style->method = prop;
3556 "invalid value for method: %s\n", prop);
3560 style->method = prop;
3566 "doctype-system",
NULL);
3570 style->doctypeSystem = prop;
3574 "doctype-public",
NULL);
3578 style->doctypePublic = prop;
3581 (
const xmlChar *)
"standalone",
3585 style->standalone = 1;
3587 style->standalone = 0;
3590 "invalid value for standalone: %s\n",
3607 "invalid value for indent: %s\n", prop);
3615 "omit-xml-declaration",
3619 style->omitXmlDeclaration = 1;
3621 style->omitXmlDeclaration = 0;
3624 "invalid value for omit-xml-declaration: %s\n",
3633 "cdata-section-elements",
3635 if (elements !=
NULL) {
3656#ifdef WITH_XSLT_DEBUG_PARSING
3658 "add cdata section output element %s\n",
3685 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL)))
3686 res = htmlNewDoc(doctypeSystem, doctypePublic);
3689#ifdef XSLT_GENERATE_HTML_DOCTYPE
3693 res = htmlNewDocNoDtD(doctypeSystem, doctypePublic);
3701 "xsltDocumentElem: unsupported method xhtml\n");
3703 res = htmlNewDocNoDtD(doctypeSystem, doctypePublic);
3715#ifdef WITH_XSLT_DEBUG
3717 "reusing transformation dict for output\n");
3721 "xsltDocumentElem: unsupported method (%s)\n",
3732#ifdef WITH_XSLT_DEBUG
3734 "reusing transformation dict for output\n");
3738 if (encoding !=
NULL)
3747 root = xmlDocGetRootElement(
res);
3753 if (doctype ==
NULL)
3754 doctype =
root->name;
3764 tmp =
res->children;
3765 while ((tmp !=
NULL) && (tmp !=
root)) {
3766 if (tmp->type == XML_ELEMENT_NODE)
3768 if ((tmp->type == XML_TEXT_NODE) && (!xmlIsBlankNode(tmp)))
3774 res->type = XML_HTML_DOCUMENT_NODE;
3775 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL))) {
3776 res->intSubset = xmlCreateIntSubset(
res, doctype,
3779#ifdef XSLT_GENERATE_HTML_DOCTYPE
3783 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL)))
3785 xmlCreateIntSubset(
res, doctype,
3796 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL)))
3797 res->intSubset = xmlCreateIntSubset(
res, doctype,
3816 style->omitXmlDeclaration = 1;
3817 redirect_write_append = 1;
3819 style->omitXmlDeclaration = 0;
3823 if (redirect_write_append) {
3838 "xsltDocumentElem: unable to save to %s\n",
3840#ifdef WITH_XSLT_DEBUG_EXTRA
3848 ctxt->
output = oldOutput;
3849 ctxt->
insert = oldInsert;
3850 ctxt->
type = oldType;
3884 "xsl:sort : compilation failed\n");
3888 "xsl:sort : improper use this should not be reached\n");
3904#ifdef XSLT_REFACTORED
3905 xsltStyleItemCopyPtr comp = (xsltStyleItemCopyPtr) castedComp;
3909 xmlNodePtr
copy, oldInsert;
3911 oldInsert = ctxt->
insert;
3913 switch (
node->type) {
3915 case XML_CDATA_SECTION_NODE:
3921#ifdef WITH_XSLT_DEBUG_PROCESS
3922 if (
node->type == XML_CDATA_SECTION_NODE) {
3924 "xsltCopy: CDATA text %s\n",
node->content));
3927 "xsltCopy: text %s\n",
node->content));
3932 case XML_DOCUMENT_NODE:
3933 case XML_HTML_DOCUMENT_NODE:
3935 case XML_ELEMENT_NODE:
3943#ifdef WITH_XSLT_DEBUG_PROCESS
3945 "xsltCopy: node %s\n",
node->name));
3949 if (comp->use !=
NULL) {
3953 case XML_ATTRIBUTE_NODE: {
3954#ifdef WITH_XSLT_DEBUG_PROCESS
3956 "xsltCopy: attribute %s\n",
node->name));
3968#ifdef WITH_XSLT_DEBUG_PROCESS
3970 "xsltCopy: PI %s\n",
node->name));
3976 case XML_COMMENT_NODE:
3977#ifdef WITH_XSLT_DEBUG_PROCESS
3979 "xsltCopy: comment\n"));
3981 copy = xmlNewComment(
node->content);
3984 case XML_NAMESPACE_DECL:
3985#ifdef WITH_XSLT_DEBUG_PROCESS
3987 "xsltCopy: namespace declaration\n"));
3997 switch (
node->type) {
3998 case XML_DOCUMENT_NODE:
3999 case XML_HTML_DOCUMENT_NODE:
4000 case XML_ELEMENT_NODE:
4007 ctxt->
insert = oldInsert;
4022 if ((inst->children !=
NULL) && (comp !=
NULL)) {
4023 xmlNodePtr
text = inst->children;
4027 if ((
text->type != XML_TEXT_NODE) &&
4028 (
text->type != XML_CDATA_SECTION_NODE)) {
4030 "xsl:text content problem\n");
4034 if (
text->type != XML_CDATA_SECTION_NODE) {
4035#ifdef WITH_XSLT_DEBUG_PARSING
4037 "Disable escaping: %s\n",
text->content);
4059#ifdef XSLT_REFACTORED
4060 xsltStyleItemElementPtr comp = (xsltStyleItemElementPtr) castedComp;
4067 xmlNodePtr oldInsert;
4076 if (!comp->has_name)
4082 oldInsert = ctxt->
insert;
4084 if (comp->name ==
NULL) {
4090 "xsl:element: The attribute 'name' is missing.\n");
4093 if (xmlValidateQName(prop, 0)) {
4095 "xsl:element: The effective name '%s' is not a "
4096 "valid QName.\n", prop);
4105#ifdef XSLT_REFACTORED
4123 "xsl:element : creation of %s failed\n",
name);
4129 "xsl:element : xsltAddChild failed\n");
4138 if (comp->ns !=
NULL) {
4142 if (comp->ns[0] != 0)
4157 if ((tmpNsName !=
NULL) && (tmpNsName[0] != 0))
4164 "xsl:attribute: Namespace http://www.w3.org/2000/xmlns/ "
4182 ns = xmlSearchNs(inst->doc, inst,
prefix);
4190 "xsl:element: The QName '%s:%s' has no "
4191 "namespace binding in scope in the stylesheet; "
4192 "this is an error, since the namespace was not "
4193 "specified by the instruction itself.\n",
prefix,
name);
4201 if (nsName !=
NULL) {
4213 }
else if ((
copy->parent !=
NULL) &&
4214 (
copy->parent->type == XML_ELEMENT_NODE) &&
4225 if (comp->has_use) {
4226 if (comp->use !=
NULL) {
4236 if (attrSets !=
NULL) {
4245 if (inst->children !=
NULL)
4250 ctxt->
insert = oldInsert;
4268 xmlNodePtr commentNode;
4278 "xsl:comment : '--' or ending '-' not allowed in comment\n");
4282#ifdef WITH_XSLT_DEBUG_PROCESS
4285 "xsltComment: empty\n"));
4288 "xsltComment: content %s\n",
value));
4292 commentNode = xmlNewComment(
value);
4311#ifdef XSLT_REFACTORED
4312 xsltStyleItemPIPtr comp = (xsltStyleItemPIPtr) castedComp;
4323 if (comp->has_name == 0)
4325 if (comp->name ==
NULL) {
4330 "xsl:processing-instruction : name is missing\n");
4342 "xsl:processing-instruction: '?>' not allowed within PI content\n");
4345#ifdef WITH_XSLT_DEBUG_PROCESS
4348 "xsltProcessingInstruction: %s empty\n",
name));
4351 "xsltProcessingInstruction: %s content %s\n",
name,
value));
4377#ifdef XSLT_REFACTORED
4378 xsltStyleItemCopyOfPtr comp = (xsltStyleItemCopyOfPtr) castedComp;
4388 if ((comp ==
NULL) || (comp->select ==
NULL) || (comp->comp ==
NULL)) {
4390 "xsl:copy-of : compilation failed\n");
4412#ifdef WITH_XSLT_DEBUG_PROCESS
4414 "xsltCopyOf: select %s\n", comp->select));
4423 if (
res->type == XPATH_NODESET) {
4428#ifdef WITH_XSLT_DEBUG_PROCESS
4430 "xsltCopyOf: result is a node set\n"));
4439 for (
i = 0;
i <
list->nodeNr;
i++) {
4443 if ((
cur->type == XML_DOCUMENT_NODE) ||
4444 (
cur->type == XML_HTML_DOCUMENT_NODE))
4448 }
else if (
cur->type == XML_ATTRIBUTE_NODE) {
4456 }
else if (
res->type == XPATH_XSLT_TREE) {
4463#ifdef WITH_XSLT_DEBUG_PROCESS
4465 "xsltCopyOf: result is a result tree fragment\n"));
4473 list->nodeTab[0]->children, ctxt->
insert, 0, 0);
4483 "Internal error in xsltCopyOf(): "
4484 "failed to cast an XPath object to string.\n");
4487 if (
value[0] != 0) {
4495#ifdef WITH_XSLT_DEBUG_PROCESS
4497 "xsltCopyOf: result %s\n",
res->stringval));
4506 xmlXPathFreeObject(
res);
4522#ifdef XSLT_REFACTORED
4523 xsltStyleItemValueOfPtr comp = (xsltStyleItemValueOfPtr) castedComp;
4533 if ((comp ==
NULL) || (comp->select ==
NULL) || (comp->comp ==
NULL)) {
4535 "Internal error in xsltValueOf(): "
4536 "The XSLT 'value-of' instruction was not compiled.\n");
4540#ifdef WITH_XSLT_DEBUG_PROCESS
4542 "xsltValueOf: select %s\n", comp->select));
4554 "Internal error in xsltValueOf(): "
4555 "failed to cast an XPath object to string.\n");
4559 if (
value[0] != 0) {
4564 "XPath evaluation returned no result.\n");
4569#ifdef WITH_XSLT_DEBUG_PROCESS
4572 "xsltValueOf: result '%s'\n",
value));
4580 xmlXPathFreeObject(
res);
4596#ifdef XSLT_REFACTORED
4597 xsltStyleItemNumberPtr comp = (xsltStyleItemNumberPtr) castedComp;
4601 xmlXPathContextPtr xpctxt;
4602 xmlNsPtr *oldXPNamespaces;
4607 "xsl:number : compilation failed\n");
4614 comp->numdata.doc = inst->doc;
4615 comp->numdata.node = inst;
4618 oldXPNsNr = xpctxt->nsNr;
4619 oldXPNamespaces = xpctxt->namespaces;
4621#ifdef XSLT_REFACTORED
4622 if (comp->inScopeNs !=
NULL) {
4623 xpctxt->namespaces = comp->inScopeNs->list;
4624 xpctxt->nsNr = comp->inScopeNs->xpathNumber;
4626 xpctxt->namespaces =
NULL;
4630 xpctxt->namespaces = comp->nsList;
4631 xpctxt->nsNr = comp->nsNr;
4636 xpctxt->nsNr = oldXPNsNr;
4637 xpctxt->namespaces = oldXPNamespaces;
4656 if ((ctxt ==
NULL) || (inst ==
NULL))
4661 "Internal error in xsltApplyImports(): "
4662 "The XSLT 'apply-imports' instruction was not compiled.\n");
4679 "It is an error to call 'apply-imports' "
4680 "when there's no current template rule.\n");
4689 if (templ !=
NULL) {
4722#ifdef XSLT_REFACTORED
4723 xsltStyleItemCallTemplatePtr comp =
4724 (xsltStyleItemCallTemplatePtr) castedComp;
4734 "The XSLT 'call-template' instruction was not compiled.\n");
4741 if (comp->templ ==
NULL) {
4743 if (comp->templ ==
NULL) {
4744 if (comp->ns !=
NULL) {
4746 "The called template '{%s}%s' was not found.\n",
4747 comp->ns, comp->
name);
4750 "The called template '%s' was not found.\n",
4757#ifdef WITH_XSLT_DEBUG_PROCESS
4758 if ((comp !=
NULL) && (comp->name !=
NULL))
4760 "call-template: name %s\n", comp->name));
4763 if (inst->children) {
4767 cur = inst->children;
4783 param->next = withParams;
4788 "xsl:call-template: misplaced xsl:%s\n",
cur->name);
4792 "xsl:call-template: misplaced %s element\n",
cur->name);
4802 if (withParams !=
NULL)
4805#ifdef WITH_XSLT_DEBUG_PROCESS
4806 if ((comp !=
NULL) && (comp->name !=
NULL))
4808 "call-template returned: name %s\n", comp->name));
4825#ifdef XSLT_REFACTORED
4826 xsltStyleItemApplyTemplatesPtr comp =
4827 (xsltStyleItemApplyTemplatesPtr) castedComp;
4832 xmlNodePtr
cur, oldContextNode;
4833 xmlNodeSetPtr
list =
NULL, oldList;
4835 int oldXPProximityPosition, oldXPContextSize;
4836 const xmlChar *oldMode, *oldModeURI;
4839 xmlXPathContextPtr xpctxt;
4843 "xsl:apply-templates : compilation failed\n");
4849#ifdef WITH_XSLT_DEBUG_PROCESS
4852 "xsltApplyTemplates: node: '%s'\n",
node->name));
4859 oldContextNode = ctxt->
node;
4860 oldMode = ctxt->
mode;
4870 oldXPContextSize = xpctxt->contextSize;
4871 oldXPProximityPosition = xpctxt->proximityPosition;
4872 oldXPDoc = xpctxt->doc;
4877 ctxt->
mode = comp->mode;
4878 ctxt->
modeURI = comp->modeURI;
4880 if (comp->select !=
NULL) {
4883 if (comp->comp ==
NULL) {
4885 "xsl:apply-templates : compilation failed\n");
4888#ifdef WITH_XSLT_DEBUG_PROCESS
4890 "xsltApplyTemplates: select %s\n", comp->select));
4896 if (
res->type == XPATH_NODESET) {
4901 "The 'select' expression did not evaluate to a "
4904 xmlXPathFreeObject(
res);
4907 xmlXPathFreeObject(
res);
4914 "Failed to evaluate the 'select' expression.\n");
4919#ifdef WITH_XSLT_DEBUG_PROCESS
4921 "xsltApplyTemplates: select didn't evaluate to a node list\n"));
4941 if ((ctxt->
nbKeys > 0) &&
4942 (
list->nodeNr != 0) &&
4951 effectiveDocInfo =
list->nodeTab[0]->doc->_private;
4958 list = xmlXPathNodeSetCreate(
NULL);
4961 if (
node->type != XML_NAMESPACE_DECL)
4967 xmlXPathNodeSetAddUnique(
list,
cur);
4972#ifdef WITH_XSLT_DEBUG_PROCESS
4975 "xsltApplyTemplates: list of %d nodes\n",
list->nodeNr));
4993 if (inst->children) {
4996 cur = inst->children;
5005 if (
cur->type == XML_TEXT_NODE) {
5014 param->next = withParams;
5024 sorts[nbsorts++] =
cur;
5036 if (
cur->type == XML_TEXT_NODE) {
5046 param->next = withParams;
5053 "The number (%d) of xsl:sort instructions exceeds the "
5054 "maximum allowed by this processor's settings.\n",
5059 sorts[nbsorts++] =
cur;
5078 xpctxt->contextSize =
list->nodeNr;
5082 for (
i = 0;
i <
list->nodeNr;
i++) {
5092 if ((
cur->type != XML_NAMESPACE_DECL) && (
cur->doc !=
NULL))
5093 xpctxt->doc =
cur->doc;
5095 xpctxt->proximityPosition =
i + 1;
5107 if (withParams !=
NULL)
5110 xmlXPathFreeNodeSet(
list);
5114 xpctxt->doc = oldXPDoc;
5115 xpctxt->contextSize = oldXPContextSize;
5116 xpctxt->proximityPosition = oldXPProximityPosition;
5120 ctxt->
node = oldContextNode;
5121 ctxt->
mode = oldMode;
5141 if ((ctxt ==
NULL) || (contextNode ==
NULL) || (inst ==
NULL))
5148 cur = inst->children;
5151 "xsl:choose: The instruction has no content.\n");
5155#ifdef XSLT_REFACTORED
5162 "xsl:choose: xsl:when expected first\n");
5168 int testRes = 0,
res = 0;
5170#ifdef XSLT_REFACTORED
5171 xsltStyleItemWhenPtr wcomp =
NULL;
5182 if ((wcomp ==
NULL) || (wcomp->test ==
NULL) ||
5183 (wcomp->comp ==
NULL))
5186 "Internal error in xsltChoose(): "
5187 "The XSLT 'when' instruction was not compiled.\n");
5200#ifdef WITH_XSLT_DEBUG_PROCESS
5202 "xsltChoose: test %s\n", wcomp->test));
5212 testRes = (
res == 1) ? 1 : 0;
5219 if (
res->type != XPATH_BOOLEAN)
5220 res = xmlXPathConvertBoolean(
res);
5221 if (
res->type == XPATH_BOOLEAN)
5222 testRes =
res->boolval;
5224#ifdef WITH_XSLT_DEBUG_PROCESS
5226 "xsltChoose: test didn't evaluate to a boolean\n"));
5230 xmlXPathFreeObject(
res);
5239#ifdef WITH_XSLT_DEBUG_PROCESS
5241 "xsltChoose: test evaluate to %d\n", testRes));
5259#ifdef WITH_XSLT_DEBUG_PROCESS
5261 "evaluating xsl:otherwise\n"));
5269 goto process_sequence;
5300#ifdef XSLT_REFACTORED
5301 xsltStyleItemIfPtr comp = (xsltStyleItemIfPtr) castedComp;
5306 if ((ctxt ==
NULL) || (contextNode ==
NULL) || (inst ==
NULL))
5308 if ((comp ==
NULL) || (comp->test ==
NULL) || (comp->comp ==
NULL)) {
5310 "Internal error in xsltIf(): "
5311 "The XSLT 'if' instruction was not compiled.\n");
5315#ifdef WITH_XSLT_DEBUG_PROCESS
5317 "xsltIf: test %s\n", comp->test));
5322 xmlDocPtr oldLocalFragmentTop = ctxt->
localRVT;
5330 if (oldLocalFragmentTop != ctxt->
localRVT)
5334#ifdef WITH_XSLT_DEBUG_PROCESS
5336 "xsltIf: test evaluate to %d\n",
res));
5348 contextNode, inst->children,
NULL);
5357 if (xpobj !=
NULL) {
5358 if (xpobj->type != XPATH_BOOLEAN)
5359 xpobj = xmlXPathConvertBoolean(xpobj);
5360 if (xpobj->type == XPATH_BOOLEAN) {
5361 res = xpobj->boolval;
5363#ifdef WITH_XSLT_DEBUG_PROCESS
5365 "xsltIf: test evaluate to %d\n",
res));
5369 contextNode, inst->children,
NULL);
5373#ifdef WITH_XSLT_DEBUG_PROCESS
5376 "xsltIf: test didn't evaluate to a boolean\n"));
5380 xmlXPathFreeObject(xpobj);
5404#ifdef XSLT_REFACTORED
5405 xsltStyleItemForEachPtr comp = (xsltStyleItemForEachPtr) castedComp;
5411 xmlNodePtr
cur, curInst;
5413 xmlNodeSetPtr oldList;
5414 int oldXPProximityPosition, oldXPContextSize;
5415 xmlNodePtr oldContextNode;
5419 xmlXPathContextPtr xpctxt;
5421 if ((ctxt ==
NULL) || (contextNode ==
NULL) || (inst ==
NULL)) {
5423 "xsltForEach(): Bad arguments.\n");
5429 "Internal error in xsltForEach(): "
5430 "The XSLT 'for-each' instruction was not compiled.\n");
5433 if ((comp->select ==
NULL) || (comp->comp ==
NULL)) {
5435 "Internal error in xsltForEach(): "
5436 "The selecting expression of the XSLT 'for-each' "
5437 "instruction was not compiled correctly.\n");
5442#ifdef WITH_XSLT_DEBUG_PROCESS
5444 "xsltForEach: select %s\n", comp->select));
5452 oldContextNode = ctxt->
node;
5460 oldXPDoc = xpctxt->doc;
5461 oldXPProximityPosition = xpctxt->proximityPosition;
5462 oldXPContextSize = xpctxt->contextSize;
5470 if (
res->type == XPATH_NODESET)
5474 "The 'select' expression does not evaluate to a node set.\n");
5476#ifdef WITH_XSLT_DEBUG_PROCESS
5478 "xsltForEach: select didn't evaluate to a node list\n"));
5484 "Failed to evaluate the 'select' expression.\n");
5492#ifdef WITH_XSLT_DEBUG_PROCESS
5494 "xsltForEach: select evaluates to %d nodes\n",
list->nodeNr));
5506 curInst = inst->children;
5511 sorts[nbsorts++] = curInst;
5518 curInst = curInst->next;
5522 "The number of xsl:sort instructions exceeds the "
5523 "maximum (%d) allowed by this processor.\n",
5527 sorts[nbsorts++] = curInst;
5534 curInst = curInst->next;
5538 xpctxt->contextSize =
list->nodeNr;
5542 for (
i = 0;
i <
list->nodeNr;
i++) {
5552 if ((
cur->type != XML_NAMESPACE_DECL) && (
cur->doc !=
NULL))
5553 xpctxt->doc =
cur->doc;
5555 xpctxt->proximityPosition =
i + 1;
5563 xmlXPathFreeObject(
res);
5569 ctxt->
node = oldContextNode;
5572 xpctxt->doc = oldXPDoc;
5573 xpctxt->contextSize = oldXPContextSize;
5574 xpctxt->proximityPosition = oldXPProximityPosition;
5583#ifdef XSLT_GENERATE_HTML_DOCTYPE
5591 {
"5",
NULL,
"about:legacy-compat" },
5592 {
"4.01frame",
"-//W3C//DTD HTML 4.01 Frameset//EN",
5593 "http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd"},
5594 {
"4.01strict",
"-//W3C//DTD HTML 4.01//EN",
5595 "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd"},
5596 {
"4.01trans",
"-//W3C//DTD HTML 4.01 Transitional//EN",
5597 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"},
5598 {
"4.01",
"-//W3C//DTD HTML 4.01 Transitional//EN",
5599 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"},
5600 {
"4.0strict",
"-//W3C//DTD HTML 4.01//EN",
5601 "http://www.w3.org/TR/html4/strict.dtd"},
5602 {
"4.0trans",
"-//W3C//DTD HTML 4.01 Transitional//EN",
5603 "http://www.w3.org/TR/html4/loose.dtd"},
5604 {
"4.0frame",
"-//W3C//DTD HTML 4.01 Frameset//EN",
5605 "http://www.w3.org/TR/html4/frameset.dtd"},
5606 {
"4.0",
"-//W3C//DTD HTML 4.01 Transitional//EN",
5607 "http://www.w3.org/TR/html4/loose.dtd"},
5608 {
"3.2",
"-//W3C//DTD HTML 3.2//EN",
NULL }
5630 if (publicID !=
NULL)
5632 if (systemID !=
NULL)
5651#ifdef WITH_XSLT_DEBUG_PROCESS
5671 if (
delete !=
NULL) {
5672 xmlUnlinkNode(
delete);
5673 xmlFreeNode(
delete);
5675#ifdef WITH_XSLT_DEBUG_PROCESS
5685 if (
node->type == XML_ENTITY_REF_NODE) {
5690 (
current->type != XML_ENTITY_REF_NODE)) {
5710#ifdef WITH_XSLT_DEBUG_PROCESS
5712 "xsltApplyStripSpaces: removed %d ignorable blank node\n", nb));
5762 xmlNodePtr
cur = (xmlNodePtr) doc;
5771 if (
cur->type == XML_ELEMENT_NODE) {
5772 xmlAttrPtr prop =
cur->properties;
5775 prop->atype &= ~(XSLT_SOURCE_NODE_MASK << 27);
5781 if (
cur->children !=
NULL &&
cur->type != XML_ENTITY_REF_NODE) {
5784 if (
cur == (xmlNodePtr) doc)
5788 if (
cur == (xmlNodePtr) doc)
5813 const char **
params,
const char *output,
5832 if (
style->internalized == 0) {
5833#ifdef WITH_XSLT_DEBUG
5835 "Stylesheet was not fully internalized !\n");
5838 if (doc->intSubset !=
NULL) {
5843 xmlNodePtr
cur = (xmlNodePtr) doc->intSubset;
5845 cur->next->prev =
cur->prev;
5847 cur->prev->next =
cur->next;
5848 if (doc->children ==
cur)
5849 doc->children =
cur->next;
5850 if (doc->last ==
cur)
5851 doc->last =
cur->prev;
5858 root = xmlDocGetRootElement(doc);
5862 xmlXPathOrderDocElems(doc);
5865 if (userCtxt !=
NULL)
5881 "xsltApplyStylesheetInternal: "
5882 "libxslt compiled without profiler\n");
5913 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL))) {
5914 res = htmlNewDoc(doctypeSystem, doctypePublic);
5924 dtd = xmlGetIntSubset(
res);
5926 xmlUnlinkNode((xmlNodePtr) dtd);
5934#ifdef XSLT_GENERATE_HTML_DOCTYPE
5937 res = htmlNewDoc(doctypeSystem, doctypePublic);
5945#ifdef WITH_XSLT_DEBUG
5947 "reusing transformation dict for output\n");
5951 "xsltApplyStylesheetInternal: unsupported method xhtml, using html\n");
5953 res = htmlNewDoc(doctypeSystem, doctypePublic);
5959#ifdef WITH_XSLT_DEBUG
5961 "reusing transformation dict for output\n");
5971#ifdef WITH_XSLT_DEBUG
5973 "reusing transformation dict for output\n");
5977 "xsltApplyStylesheetInternal: unsupported method (%s)\n",
5988#ifdef WITH_XSLT_DEBUG
5990 "reusing transformation dict for output\n");
5994 if (encoding !=
NULL)
5996 variables =
style->variables;
5998 ctxt->
node = (xmlNodePtr) doc;
6049 if (
style->variables != variables) {
6050 vptr =
style->variables;
6051 while (vptr->
next != variables)
6055 style->variables = variables;
6057 vptr =
style->variables;
6058 while (vptr !=
NULL) {
6061 xmlXPathFreeObject(vptr->
value);
6084 root = xmlDocGetRootElement(
res);
6090 if (doctype ==
NULL)
6091 doctype =
root->name;
6101 tmp =
res->children;
6102 while ((tmp !=
NULL) && (tmp !=
root)) {
6103 if (tmp->type == XML_ELEMENT_NODE)
6105 if ((tmp->type == XML_TEXT_NODE) && (!xmlIsBlankNode(tmp)))
6115 res->type = XML_HTML_DOCUMENT_NODE;
6116 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL))) {
6117 res->intSubset = xmlCreateIntSubset(
res, doctype,
6120#ifdef XSLT_GENERATE_HTML_DOCTYPE
6124 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL)))
6126 xmlCreateIntSubset(
res, doctype,
6137 if (((doctypePublic !=
NULL) || (doctypeSystem !=
NULL))) {
6145 res->intSubset = xmlCreateIntSubset(
res, doctype,
6159 xmlXPathFreeNodeSet(ctxt->
nodeList);
6163 xsltSaveProfiling(ctxt,
profile);
6180 "xsltApplyStylesheet: forbidden to save to %s\n",
6182 }
else if (
ret < 0) {
6184 "xsltApplyStylesheet: saving to %s may not be possible\n",
6189#ifdef XSLT_DEBUG_PROFILE_CACHE
6191 printf(
"# Reused tree fragments: %d\n", ctxt->
cache->dbgReusedRVTs);
6192 printf(
"# Reused variables : %d\n", ctxt->
cache->dbgReusedVars);
6198 if ((ctxt !=
NULL) && (userCtxt ==
NULL))
6207#ifdef XSLT_DEBUG_PROFILE_CACHE
6209 printf(
"# Reused tree fragments: %d\n", ctxt->
cache->dbgReusedRVTs);
6210 printf(
"# Reused variables : %d\n", ctxt->
cache->dbgReusedVars);
6213 if ((ctxt !=
NULL) && (userCtxt ==
NULL))
6274 const char **
params,
const char *output,
6312 const char **
params,
const char *output,
6313 xmlSAXHandlerPtr SAX, xmlOutputBufferPtr IObuf,
6319 if ((output ==
NULL) && (SAX ==
NULL) && (IObuf ==
NULL))
6321 if ((SAX !=
NULL) && (IObuf !=
NULL))
6334 "xsltRunStylesheet : run failed\n");
6337 if (IObuf !=
NULL) {
6373 const char **
params,
const char *output,
6374 xmlSAXHandlerPtr SAX, xmlOutputBufferPtr IObuf)
int xsltInitCtxtExts(xsltTransformContextPtr ctxt)
int xsltRegisterExtElement(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI, xsltTransformFunction function)
void xsltFreeCtxtExts(xsltTransformContextPtr ctxt)
xsltTransformFunction xsltExtElementLookup(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI)
void xsltInitGlobals(void)
void xsltShutdownCtxtExts(xsltTransformContextPtr ctxt)
void xsltNumberFormat(xsltTransformContextPtr ctxt, xsltNumberDataPtr data, xmlNodePtr node)
const xmlChar * xsltExtMarker
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
void xsltApplyAttributeSet(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, const xmlChar *attrSets)
void xsltAttribute(xsltTransformContextPtr ctxt, xmlNodePtr contextNode, xmlNodePtr inst, xsltElemPreCompPtr castedComp)
xsltTemplatePtr xsltGetTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, xsltStylesheetPtr style)
void xsltCleanupTemplates(xsltStylesheetPtr style ATTRIBUTE_UNUSED)
int xsltCheckWrite(xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt, const xmlChar *URL)
xsltSecurityPrefsPtr xsltGetDefaultSecurityPrefs(void)
static const WCHAR version[]
int CDECL fclose(FILE *file)
FILE *CDECL fopen(const char *path, const char *mode)
_ACRTIMP int __cdecl system(const char *)
xsltDocumentPtr xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc)
void xsltFreeDocuments(xsltTransformContextPtr ctxt)
#define XSLT_REGISTER_FUNCTION_LOOKUP(ctxt)
GLdouble GLdouble GLdouble GLdouble q
GLenum const GLfloat * params
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
int xsltFindElemSpaceHandling(xsltTransformContextPtr ctxt, xmlNodePtr node)
xsltTemplatePtr xsltFindTemplate(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *nameURI)
xsltStylesheetPtr xsltNextImport(xsltStylesheetPtr cur)
int xsltNeedElemSpaceHandling(xsltTransformContextPtr ctxt)
void xsltFreeDocumentKeys(xsltDocumentPtr idoc)
#define memcpy(s1, s2, n)
struct task_struct * current
static PROCESS_INFORMATION pi
#define cmp(status, error)
xmlNsPtr xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, const xmlChar *nsName, const xmlChar *nsPrefix, xmlNodePtr target)
xmlNsPtr xsltCopyNamespaceList(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr cur)
xmlNsPtr xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNodePtr out)
#define UNDEFINED_DEFAULT_NS
#define XSLT_GET_IMPORT_PTR(res, style, name)
XMLPUBVAR const xmlChar xmlStringTextNoenc[]
XMLPUBVAR const xmlChar xmlStringText[]
void xmlDictFree(xmlDictPtr dict)
xmlDictPtr xmlDictCreateSub(xmlDictPtr sub)
int xmlDictOwns(xmlDictPtr dict, const xmlChar *str)
int xmlDictReference(xmlDictPtr dict)
const xmlChar * xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name)
const xmlChar * xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len)
void * xmlGenericErrorContext
xmlReallocFunc xmlRealloc
xmlGenericErrorFunc xmlGenericError
void * xmlHashLookup(xmlHashTablePtr hash, const xmlChar *key)
void * xmlHashLookup2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2)
xmlHashTablePtr xmlHashCreate(int size)
int xmlHashAddEntry2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2, void *payload)
struct _xsltKeyDef * next
struct _xsltStackElem * next
xmlHashTablePtr cdataSection
struct _xsltStylesheet * style
xsltTemplatePtr * templCalledTab
xsltTemplatePtr * templTab
xmlHashTablePtr globalVars
xsltTransformCachePtr cache
xmlNodePtr initialContextNode
xsltRuntimeExtraPtr extras
xsltTemplatePtr currentTemplateRule
xsltStackElemPtr * varsTab
xmlXPathContextPtr xpathCtxt
xmlDocPtr initialContextDoc
xmlChar * xsltEvalXPathString(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp)
xmlChar * xsltEvalAttrValueTemplate(xsltTransformContextPtr ctxt, xmlNodePtr inst, const xmlChar *name, const xmlChar *ns)
xmlAttrPtr xsltAttrListTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, xmlAttrPtr attrs)
xmlChar * xsltEvalTemplateString(xsltTransformContextPtr ctxt, xmlNodePtr contextNode, xmlNodePtr inst)
Character const *const prefix
XMLPUBFUN xmlChar * xmlBuildURI(const xmlChar *URI, const xmlChar *base)
XMLPUBFUN xmlChar * xmlURIEscapeStr(const xmlChar *str, const xmlChar *list)
void xsltFreeRVTs(xsltTransformContextPtr ctxt)
int xsltEvalGlobalVariables(xsltTransformContextPtr ctxt)
int xsltRegisterLocalRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
int xsltRegisterPersistRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
void xsltParseStylesheetParam(xsltTransformContextPtr ctxt, xmlNodePtr cur)
void xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
void xsltParseStylesheetVariable(xsltTransformContextPtr ctxt, xmlNodePtr inst)
void xsltFreeGlobalVariables(xsltTransformContextPtr ctxt)
xsltStackElemPtr xsltParseStylesheetCallerParam(xsltTransformContextPtr ctxt, xmlNodePtr inst)
void xsltFreeStackElemList(xsltStackElemPtr elem)
int xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params)
#define XSLT_REGISTER_VARIABLE_LOOKUP(ctxt)
#define XSLT_RVT_FUNC_RESULT
XMLPUBFUN xmlChar * xmlStrndup(const xmlChar *cur, int len)
XMLPUBFUN int xmlStrlen(const xmlChar *str)
XMLPUBFUN int xmlStrcasecmp(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN const xmlChar * xmlStrstr(const xmlChar *str, const xmlChar *val)
XMLPUBFUN int xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN xmlChar * xmlStrdup(const xmlChar *cur)
xsltTransformContext * xsltTransformContextPtr
xsltTransformCache * xsltTransformCachePtr
xsltElemPreComp * xsltElemPreCompPtr
xsltRuntimeExtra * xsltRuntimeExtraPtr
xsltTemplate * xsltTemplatePtr
#define XSLT_IS_TEXT_NODE(n)
#define XSLT_IS_RES_TREE_FRAG(n)
xsltStylePreComp * xsltStylePreCompPtr
void(* xsltTransformFunction)(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltElemPreCompPtr comp)
xsltStylesheetPtr xsltNewStylesheet(void)
void xsltFreeStylesheet(xsltStylesheetPtr style)
#define XSLT_PARSE_OPTIONS
xmlChar * xsltStrxfrm(void *vlocale, const xmlChar *string)
void * xsltNewLocale(const xmlChar *languageTag, int lowerFirst ATTRIBUTE_UNUSED)
void xsltFreeLocale(void *locale)
void xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, int nbsorts)
const xmlChar * xsltGetQNameURI(xmlNodePtr node, xmlChar **name)
void xsltTransformError(xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node, const char *msg,...)
xmlGenericErrorFunc xsltGenericError
int xsltClearSourceNodeFlags(xmlNodePtr node, int flags)
xmlGenericErrorFunc xsltGenericDebug
void ** xsltGetPSVIPtr(xmlNodePtr cur)
int xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr result, xsltStylesheetPtr style)
int xsltSaveResultToFilename(const char *URL, xmlDocPtr result, xsltStylesheetPtr style, int compression)
void * xsltGenericDebugContext
void * xsltGenericErrorContext
const xmlChar * xsltSplitQName(xmlDictPtr dict, const xmlChar *name, const xmlChar **prefix)
int xsltSaveResultToFile(FILE *file, xmlDocPtr result, xsltStylesheetPtr style)
void xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst)
#define IS_XSLT_NAME(n, val)
@ XSLT_TRACE_APPLY_TEMPLATE
@ XSLT_TRACE_PROCESS_NODE
@ XSLT_TRACE_CALL_TEMPLATE
@ XSLT_TRACE_STRIP_SPACES
@ XSLT_TRACE_APPLY_TEMPLATES
#define IS_XSLT_REAL_NODE(n)
#define XSLT_TRACE(ctxt, code, call)