/** * xsltDebug: * @ctxt: an XSLT processing context * @node: The current node * @inst: the instruction in the stylesheet * @comp: precomputed informations * * Process an debug node */ void xsltDebug(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr inst ATTRIBUTE_UNUSED, xsltStylePreCompPtr comp ATTRIBUTE_UNUSED) { int i, j; xsltGenericError(xsltGenericErrorContext, "Templates:\n"); for (i = 0, j = ctxt->templNr - 1; ((i < 15) && (j >= 0)); i++, j--) { xsltGenericError(xsltGenericErrorContext, "#%d ", i); if (ctxt->templTab[j]->name != NULL) xsltGenericError(xsltGenericErrorContext, "name %s ", ctxt->templTab[j]->name); if (ctxt->templTab[j]->match != NULL) xsltGenericError(xsltGenericErrorContext, "name %s ", ctxt->templTab[j]->match); if (ctxt->templTab[j]->mode != NULL) xsltGenericError(xsltGenericErrorContext, "name %s ", ctxt->templTab[j]->mode); xsltGenericError(xsltGenericErrorContext, "\n"); } xsltGenericError(xsltGenericErrorContext, "Variables:\n"); for (i = 0, j = ctxt->varsNr - 1; ((i < 15) && (j >= 0)); i++, j--) { xsltStackElemPtr cur; if (ctxt->varsTab[j] == NULL) continue; xsltGenericError(xsltGenericErrorContext, "#%d\n", i); cur = ctxt->varsTab[j]; while (cur != NULL) { if (cur->comp == NULL) { xsltGenericError(xsltGenericErrorContext, "corrupted !!!\n"); } else if (cur->comp->type == XSLT_FUNC_PARAM) { xsltGenericError(xsltGenericErrorContext, "param "); } else if (cur->comp->type == XSLT_FUNC_VARIABLE) { xsltGenericError(xsltGenericErrorContext, "var "); } if (cur->name != NULL) xsltGenericError(xsltGenericErrorContext, "%s ", cur->name); else xsltGenericError(xsltGenericErrorContext, "noname !!!!"); #ifdef LIBXML_DEBUG_ENABLED if (cur->value != NULL) { if ((xsltGenericDebugContext == stdout) || (xsltGenericDebugContext == stderr)) xmlXPathDebugDumpObject((FILE*)xsltGenericDebugContext, cur->value, 1); } else { xsltGenericError(xsltGenericErrorContext, "NULL !!!!"); } #endif xsltGenericError(xsltGenericErrorContext, "\n"); cur = cur->next; } } }
/* * call-seq: * nodes.debug -> (true|false) * * Dump libxml debugging information to stdout. * Requires Libxml be compiled with debugging enabled. */ static VALUE rxml_xpath_object_debug(VALUE self) { #ifdef LIBXML_DEBUG_ENABLED rxml_xpath_object *rxpop; Data_Get_Struct(self, rxml_xpath_object, rxpop); xmlXPathDebugDumpObject(stdout, rxpop->xpop, 0); return Qtrue; #else rb_warn("libxml was compiled without debugging support.") return Qfalse; #endif }
/* * call-seq: * xpath.debug => (true|false) * * Dump libxml debugging information to stdout. * Requires Libxml be compiled with debugging enabled. */ VALUE ruby_xml_xpath_debug(VALUE self) { #ifdef LIBXML_DEBUG_ENABLED ruby_xml_xpath *rxxp; Data_Get_Struct(self, ruby_xml_xpath, rxxp); if (rxxp->xpop != NULL) { xmlXPathDebugDumpObject(stdout, rxxp->xpop, 0); return(Qtrue); } else { return(Qfalse); } #else rb_warn("libxml does not have debugging turned on"); return(Qfalse); #endif }
static void testXPath(const char *str) { xmlXPathObjectPtr res; xmlXPathContextPtr ctxt; #if defined(LIBXML_XPTR_ENABLED) if (xptr) { ctxt = xmlXPtrNewContext(document, NULL, NULL); res = xmlXPtrEval(BAD_CAST str, ctxt); } else { #endif ctxt = xmlXPathNewContext(document); ctxt->node = xmlDocGetRootElement(document); if (expr) res = xmlXPathEvalExpression(BAD_CAST str, ctxt); else { /* res = xmlXPathEval(BAD_CAST str, ctxt); */ xmlXPathCompExprPtr comp; comp = xmlXPathCompile(BAD_CAST str); if (comp != NULL) { if (tree) xmlXPathDebugDumpCompExpr(stdout, comp, 0); res = xmlXPathCompiledEval(comp, ctxt); xmlXPathFreeCompExpr(comp); } else res = NULL; } #if defined(LIBXML_XPTR_ENABLED) } #endif xmlXPathDebugDumpObject(stdout, res, 0); xmlXPathFreeObject(res); xmlXPathFreeContext(ctxt); }